From ca0b74e938978fa38fad6ac98b3444e9ed5d1a4a Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 10 Aug 2017 11:27:42 +1000 Subject: [PATCH 001/132] URL for gura2004comparing --- Biblio.bib | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Biblio.bib b/Biblio.bib index f3c0ee9c..b73f0523 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -7,6 +7,7 @@ @Misc{cryptoeprint:2013:881 } @InCollection{gura2004comparing, + url = {{https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}} BookTitle = {{Cryptographic Hardware and Embedded Systems-CHES 2004}}, Publisher = {{Springer}}, author = {Gura, Nils and Patel, Arun and Wander, Arvinderpal and Eberle, Hans and Shantz, Sheueling Chang}, @@ -141,4 +142,4 @@ @article{FowlerNollVo1991FNVHash author = {Glenn Fowler, Landon Curt Noll, Phong Vo}, title = {{Fowler–Noll–Vo hash function}}, year = {{1991}}, -} \ No newline at end of file +} From 08172f4a3c9ac0ef036c2859a3b6329dfda5c601 Mon Sep 17 00:00:00 2001 From: James Ray Date: Sat, 16 Sep 2017 11:39:11 +1000 Subject: [PATCH 002/132] Footnote clarifying meaning of low-order 11 bits --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 1a6bbaa4..ee46bfe6 100644 --- a/Paper.tex +++ b/Paper.tex @@ -353,7 +353,7 @@ \subsubsection{Transaction Receipt} M(O) \equiv \bigvee_{t \in \{O_a\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big) \end{equation} -where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence. Formally: +where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence./footnote{11 bits $= 2^2048$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence."} Formally: \begin{eqnarray} M_{3:2048}(\mathbf{x}: \mathbf{x} \in \mathbb{B}) & \equiv & \mathbf{y}: \mathbf{y} \in \mathbb{B}_{256} \quad \text{where:}\\ \mathbf{y} & = & (0, 0, ..., 0) \quad \text{except:}\\ From 23c65d3b07199791a10ab59d305a3d6c16e7e32d Mon Sep 17 00:00:00 2001 From: James Ray Date: Sat, 16 Sep 2017 11:42:11 +1000 Subject: [PATCH 003/132] Rewording accumulation of nibbles keys and branches --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index ee46bfe6..89e56116 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1315,7 +1315,7 @@ \section{Modified Merkle Patricia Tree}\label{app:trie} In a manner similar to a radix tree, when the trie is traversed from root to leaf, one may build a single key-value pair. The key is accumulated through the traversal, acquiring a single nibble from each branch node (just as with a radix tree). Unlike a radix tree, in the case of multiple keys sharing the same prefix or in the case of a single key having a unique suffix, two optimising nodes are provided. Thus while traversing, one may potentially acquire multiple nibbles from each of the other two node types, extension and leaf. There are three kinds of nodes in the trie: \begin{description} \item[Leaf] A two-item structure whose first item corresponds to the nibbles in the key not already accounted for by the accumulation of keys and branches traversed from the root. The hex-prefix encoding method is used and the second parameter to the function is required to be $true$. -\item[Extension] A two-item structure whose first item corresponds to a series of nibbles of size greater than one that are shared by at least two distinct keys past the accumulation of nibbles keys and branches as traversed from the root. The hex-prefix encoding method is used and the second parameter to the function is required to be $false$. +\item[Extension] A two-item structure whose first item corresponds to a series of nibbles of size greater than one that are shared by at least two distinct keys past the accumulation of the keys of nibbles and the keys of branches as traversed from the root. The hex-prefix encoding method is used and the second parameter to the function is required to be $false$. \item[Branch] A 17-item structure whose first sixteen items correspond to each of the sixteen possible nibble values for the keys at this point in their traversal. The 17th item is used in the case of this being a terminator node and thus a key being ended at this point in its traversal. \end{description} From f8cf733b396adfa96fe3aafabd5544b10f23f0b4 Mon Sep 17 00:00:00 2001 From: James Ray Date: Sat, 16 Sep 2017 11:58:49 +1000 Subject: [PATCH 004/132] to proof [sic] that a correct DAG has been used --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 89e56116..a63def55 100644 --- a/Paper.tex +++ b/Paper.tex @@ -479,7 +479,7 @@ \subsubsection{Block Header Validity} \end{equation} with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d})$. -Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the nonce and mix-hash components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to proof that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $H_d$. +Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the nonce and mix-hash components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $H_d$. This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the nonce must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers. From 9072ca8bf5b2205b296fb6de2d04a279b48e3983 Mon Sep 17 00:00:00 2001 From: James Ray Date: Sat, 16 Sep 2017 13:27:00 +1000 Subject: [PATCH 005/132] \usepackage{hyperref} "Another way is to use special field url and make bibliography style recognise it. url = "http://www.example.com" You need to use \usepackage{url} in the first case or \usepackage{hyperref} in the second case." Source: https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management#Authors --- Paper.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/Paper.tex b/Paper.tex index a63def55..1bea401e 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,6 +1,7 @@ \documentclass[9pt,oneside]{amsart} %\usepackage{tweaklist} \usepackage{url} +\usepackage{hyperref} \usepackage{cancel} \usepackage{xspace} \usepackage{graphicx} From ac388fb24f9cb7cec838e4ffbc6252a883d04799 Mon Sep 17 00:00:00 2001 From: James Ray Date: Sat, 16 Sep 2017 13:44:39 +1000 Subject: [PATCH 006/132] Added references changed types For the added refs, see https://github.com/ethereum/yellowpaper/issues/335 For Appendix F: - ECDSAWikipedia and ECDSAcerticom for "we assert the functions ECDSASIGN, ECDSARESTORE and ECDSAPUBKEY. These are formally defined in the literature." https://github.com/ethereum/yellowpaper/issues/335#issuecomment-328754010 - secp256k1BitcoinWiki2016 and secp256k1StackExchange2014 for Secp256k1. https://github.com/ethereum/yellowpaper/issues/335#issuecomment-328743186 - npmElectrum2017 for Electrum style signatures. https://github.com/ethereum/yellowpaper/issues/335#issuecomment-328741071 --- Biblio.bib | 57 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index fcae65b8..a73822cb 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -1,9 +1,52 @@ -@Misc{cryptoeprint:2013:881, - Url = {{Cryptology ePrint Archive, Report 2013/881}}, - Note = {{http://eprint.iacr.org/}}, - author = {Sompolinsky, Yonatan and Zohar, Aviv}, - title = {{Accelerating Bitcoin{'}s Transaction Processing. Fast Money Grows on Trees, Not Chains}}, - year = {{2013}}, +@misc{ECDSAWikipedia, + url = "https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm", + note = "https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm", + title = {{Elliptic Curve Digital Signature Algorithm}}, + publisher = "Wikipedia", + date = "12 September 2017", +} + +@misc{ECDSAcerticom, + url = "http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf", + note = "https://web.archive.org/save/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf", + title = {{The Elliptic Curve Digital Signature Algorithm (ECDSA)}}, + publisher = {{Certicom Research}}, + location = "Canada", + author = "Don Johnson and Alfred Menezes and Scott Vanstone", + year = "2001", +} + +@misc{secp256k1BitcoinWiki2016, + url = "https://en.bitcoin.it/wiki/Secp256k1", + note = "https://web.archive.org/web/20170916032105/https://en.bitcoin.it/wiki/Secp256k1", + title = {{Secp256k1}}, + publisher = {{bitcoinwiki}}, + date = {{4 August 2016}}, +} + +@misc{secp256k1StackExchange2014, + url = "https://bitcoin.stackexchange.com/a/21911/48875", + note = "https://web.archive.org/web/20170916031457/https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like/21911", + author = "Pieter Wuille", + title = {{What does the curve used in Bitcoin, secp256k1, look like?}}, + year = "2014", + publisher = {{Bitcoin Stack Exchange}}, +} + +@misc{npmElectrum2017, + url = {{https://www.npmjs.com/package/electrum}}, + note = {{https://web.archive.org/save/https://www.npmjs.com/package/electrum}}, + author = {Arnaud, Pierre and Schroeter, Mathieu and Le Barbare, Sam}, + title = {{Electrum}}, + year = {{2017}}, +} + +@misc{cryptoeprint:2013:881, + author = {Sompolinsky, Yonatan and Aviv Zohar}, + title = {{Accelerating Bitcoin's Transaction Processing. Fast Money Grows on Trees, Not Chains}}, + howpublished = {Cryptology ePrint Archive, Report 2013/881}, + year = {2013}, + note = {\url{http://eprint.iacr.org/2013/881}}, } @InCollection{gura2004comparing, @@ -163,3 +206,5 @@ @article{FowlerNollVo1991FNVHash title = {{Fowler–Noll–Vo hash function}}, year = {{1991}}, } + +Style guide: https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management#Authors From 634ca40da79c5166261690d4c2a3a0145f898c93 Mon Sep 17 00:00:00 2001 From: James Ray Date: Sat, 16 Sep 2017 13:50:46 +1000 Subject: [PATCH 007/132] Order of author names --- Biblio.bib | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index a73822cb..0e66c5d5 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -54,7 +54,7 @@ @InCollection{gura2004comparing note = {{https://web.archive.org/web/20170810035057/https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}}, BookTitle = {{Cryptographic Hardware and Embedded Systems-CHES 2004}}, Publisher = {{Springer}}, - author = {Gura, Nils and Patel, Arun and Wander, Arvinderpal and Eberle, Hans and Shantz, Sheueling Chang}, + author = {Gura, Nils and Patel, Arun and Wander, Arvinderpal and Eberle, Hans and Sheueling Chang Shantz}, title = {{Comparing elliptic curve cryptography and RSA on 8-bit CPUs}}, pages = {119-132}, year = {{2004}}, @@ -70,7 +70,7 @@ @InProceedings{laurie2004proof @Misc{vishnumurthy03karma:a, url = {{https://www.cs.cornell.edu/people/egs/papers/karma.pdf}}, note = {{https://web.archive.org/web/20170810031834/https://www.cs.cornell.edu/people/egs/papers/karma.pdf}}, - author = {Vishnumurthy, Vivek; Chandrakumar, Sangeeth; and Sirer, Emin Gün}, + author = {Vishnumurthy, Vivek and Chandrakumar, Sangeeth and Gün Sirer, Emin}, title = {KARMA: A Secure Economic Framework for Peer-to-Peer Resource Sharing}, year = {2003} } @@ -118,7 +118,7 @@ @Article{aron2012bitcoin @article{mastercoin2013willett, url = {{https://github.com/mastercoin-MSC/spec}}, note = {{https://web.archive.org/web/20170810035927/https://github.com/OmniLayer/spec}}, - author = {J. R. Willett}, + author = {Willett, J. R.}, title = {{MasterCoin Complete Specification}}, year = {{2013}}, } @@ -207,4 +207,4 @@ @article{FowlerNollVo1991FNVHash year = {{1991}}, } -Style guide: https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management#Authors +Style guide: https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management From 4710b8efa9f5d6961614b63a181203e800d0a702 Mon Sep 17 00:00:00 2001 From: James Ray Date: Sat, 16 Sep 2017 15:48:02 +1000 Subject: [PATCH 008/132] %\usepackage{hyperref} This does need to be added, but commenting out for now as I'm not sure how. Will look into it later. --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 1bea401e..4d8b55d4 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,7 +1,7 @@ \documentclass[9pt,oneside]{amsart} %\usepackage{tweaklist} \usepackage{url} -\usepackage{hyperref} +%\usepackage{hyperref} \usepackage{cancel} \usepackage{xspace} \usepackage{graphicx} From 3feff95f17e7985e8c0b5c1a5dba51e80b608894 Mon Sep 17 00:00:00 2001 From: James Ray Date: Tue, 19 Sep 2017 11:11:25 +1000 Subject: [PATCH 009/132] prepend # with \ for Hyperref package --- Paper.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Paper.tex b/Paper.tex index 4d8b55d4..76a8d26e 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,7 +1,7 @@ \documentclass[9pt,oneside]{amsart} %\usepackage{tweaklist} \usepackage{url} -%\usepackage{hyperref} +\usepackage{hyperref} \usepackage{cancel} \usepackage{xspace} \usepackage{graphicx} @@ -291,7 +291,7 @@ \subsection{The Transaction} \label{ch:transaction} \subsection{The Block} \label{ch:block} -The block in Ethereum is the collection of relevant pieces of information (known as the block \textit{header}), $H$, together with information corresponding to the comprised transactions, $\mathbf{T}$, and a set of other block headers $\mathbf{U}$ that are known to have a parent equal to the present block's parent's parent (such blocks are known as \textit{ommers}\footnote{\textit{ommer} is the most prevalent (not saying much) gender-neutral term to mean ``sibling of parent''; see \url{http://nonbinary.org/wiki/Gender_neutral_language#Family_Terms}}). The block header contains several pieces of information: +The block in Ethereum is the collection of relevant pieces of information (known as the block \textit{header}), $H$, together with information corresponding to the comprised transactions, $\mathbf{T}$, and a set of other block headers $\mathbf{U}$ that are known to have a parent equal to the present block's parent's parent (such blocks are known as \textit{ommers}\footnote{\textit{ommer} is the most prevalent (not saying much) gender-neutral term to mean ``sibling of parent''; see \url{http://nonbinary.org/wiki/Gender_neutral_language\#Family_Terms}}). The block header contains several pieces of information: %\textit{TODO: Introduce logs} From 59bcf73bf3f411b1a5586d8cd93f130f9cd9b022 Mon Sep 17 00:00:00 2001 From: James Ray Date: Tue, 19 Sep 2017 17:12:24 +1000 Subject: [PATCH 010/132] Footnote to explain why a 24576 byte limit exists for contract code o --- Paper.tex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 76a8d26e..37d03848 100644 --- a/Paper.tex +++ b/Paper.tex @@ -705,8 +705,9 @@ \section{Contract Creation} \label{ch:create} \quad\boldsymbol{\sigma}'[a]_c = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise} \end{cases} \\ \nonumber \text{where} \\ -F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ g^{**} < c \ \vee\ |\mathbf{o}| > 24576\big) +F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ g^{**} < c \ \vee\ |\mathbf{o}| > 24576\big\text{\footnotemark}) \end{align} +\footnotetext{The 24576 byte limit for output contract code data $\mathbf{o}$ exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity.} The exception in the determination of $\boldsymbol{\sigma}'$ dictates that $\mathbf{o}$, the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account. From 51b0afb3393bce05c7143b60cb80218dc757f56d Mon Sep 17 00:00:00 2001 From: James Ray Date: Tue, 19 Sep 2017 17:57:12 +1000 Subject: [PATCH 011/132] Moving footnote to body text for 24576 byte limit To avoid complexity with adding a footnote in a math environment. --- Paper.tex | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Paper.tex b/Paper.tex index 37d03848..e59df82c 100644 --- a/Paper.tex +++ b/Paper.tex @@ -705,13 +705,12 @@ \section{Contract Creation} \label{ch:create} \quad\boldsymbol{\sigma}'[a]_c = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise} \end{cases} \\ \nonumber \text{where} \\ -F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ g^{**} < c \ \vee\ |\mathbf{o}| > 24576\big\text{\footnotemark}) +F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ g^{**} < c \ \vee\ |\mathbf{o}| > 24576\big \end{align} -\footnotetext{The 24576 byte limit for output contract code data $\mathbf{o}$ exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity.} -The exception in the determination of $\boldsymbol{\sigma}'$ dictates that $\mathbf{o}$, the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account. +The exception in the determination of $\boldsymbol{\sigma}'$ dictates that $\mathbf{o}$, the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account. Note that the 24576 byte limit for $\mathbf{o}$ exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity. -Note that intention is that the result is either a successfully created new contract with its endowment, or no new contract with no transfer of value. +Note that the intention is that the result is either a successfully created new contract with its endowment, or no new contract with no transfer of value. \subsection{Subtleties} Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a {\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever. From 70c15d5478a00056df3f8ae5af91701826cae212 Mon Sep 17 00:00:00 2001 From: James Ray Date: Tue, 19 Sep 2017 18:17:32 +1000 Subject: [PATCH 012/132] Grammar fixes --- Paper.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Paper.tex b/Paper.tex index e59df82c..79471249 100644 --- a/Paper.tex +++ b/Paper.tex @@ -796,7 +796,7 @@ \subsection{Fees Overview} Fees (denominated in gas) are charged under three distinct circumstances, all three as prerequisite to the execution of an operation. The first and most common is the fee intrinsic to the computation of the operation (see Appendix \ref{app:fees}). Secondly, gas may be deducted in order to form the payment for a subordinate message call or contract creation; this forms part of the payment for {\small CREATE}, {\small CALL} and {\small CALLCODE}. Finally, gas may be paid due to an increase in the usage of the memory. -Over an account's execution, the total fee for memory-usage payable is proportional to smallest multiple of 32 bytes that are required such that all memory indices (whether for read or write) are included in the range. This is paid for on a just-in-time basis; as such, referencing an area of memory at least 32 bytes greater than any previously indexed memory will certainly result in an additional memory usage fee. Due to this fee it is highly unlikely addresses will ever go above 32-bit bounds. That said, implementations must be able to manage this eventuality. +Over an account's execution, the total fee for memory-usage payable is proportional to the smallest multiple of 32 bytes that is required such that all memory indices (whether for read or write) are included in the range. This is paid for on a just-in-time basis; as such, referencing an area of memory at least 32 bytes greater than any previously indexed memory will certainly result in an additional memory usage fee. Due to this fee it is highly unlikely addresses will ever go above 32-bit bounds. That said, implementations must be able to manage this eventuality. Storage fees have a slightly nuanced behaviour---to incentivise minimisation of the use of storage (which corresponds directly to a larger state database on all nodes), the execution fee for an operation that clears an entry in the storage is not only waived, a qualified refund is given; in fact, this refund is effectively paid up-front since the initial usage of a storage location costs substantially more than normal usage. @@ -1593,7 +1593,7 @@ \subsection{Instruction Set} O(\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \equiv (\boldsymbol{\sigma}', \boldsymbol{\mu}', A', I) \quad \text{with exceptions, as noted} \end{equation} -Here given are the various exceptions to the state transition rules given in section \ref{ch:model} specified for each instruction, together with the additional instruction-specific definitions of $J$ and $C$. For each instruction, also specified is $\alpha$, the additional items placed on the stack and $\delta$, the items removed from stack, as defined in section \ref{ch:model}. +Here given are the various exceptions to the state transition rules given in section \ref{ch:model} specified for each instruction, together with the additional instruction-specific definitions of $J$ and $C$. For each instruction, also specified is $\alpha$, the additional items placed on the stack and $\delta$, the items removed from the stack, as defined in section \ref{ch:model}. \begin{tabular*}{\columnwidth}[h]{rlrrl} \toprule From b2f76053e2175d851b55313f57be06a5ac5edf66 Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 21 Sep 2017 13:26:01 +1000 Subject: [PATCH 013/132] Accidentally omitted ) after \big, readded --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 79471249..bd3754d4 100644 --- a/Paper.tex +++ b/Paper.tex @@ -705,7 +705,7 @@ \section{Contract Creation} \label{ch:create} \quad\boldsymbol{\sigma}'[a]_c = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise} \end{cases} \\ \nonumber \text{where} \\ -F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ g^{**} < c \ \vee\ |\mathbf{o}| > 24576\big +F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ g^{**} < c \ \vee\ |\mathbf{o}| > 24576\big) \end{align} The exception in the determination of $\boldsymbol{\sigma}'$ dictates that $\mathbf{o}$, the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account. Note that the 24576 byte limit for $\mathbf{o}$ exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity. From 60ea6865340e20b68cd648f941d4e9941886d0fc Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 21 Sep 2017 13:56:54 +1000 Subject: [PATCH 014/132] Changed ECDSARESTORE to ECDSARECOVER Formula 210 has ECDSARECOVER. For consistency, I think ECDSARESTORE should be changed to ECDSARECOVER. CTRL+F ECDSARECOVER returns 5 results, while ECDSARESTORE only returns one, where it is mentioned that it is asserted with "We assert the functions ECDSASIGN, ECDSARESTORE and ECDSAPUBKEY", but then ECDSASIGN, ECDSARECOVER and ECDSAPUBKEY are asserted. --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index bd3754d4..654ee025 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1398,7 +1398,7 @@ \section{Signing Transactions}\label{app:signing} It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}. -We assert the functions $\mathtt{\small ECDSASIGN}$, $\mathtt{\small ECDSARESTORE}$ and $\mathtt{\small ECDSAPUBKEY}$. These are formally defined in the literature. +We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature. \begin{eqnarray} \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\ \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\ From 9f03f5896ba66c4cf27658cf4545988a020fdc53 Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 21 Sep 2017 14:27:17 +1000 Subject: [PATCH 015/132] l. 1769, reworded for clarification --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 654ee025..c6331d2a 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1766,7 +1766,7 @@ \subsection{Instruction Set} &&&& 0 is left on the stack if the looked for block number is greater than the current block number \\ &&&& or more than 256 blocks behind the current block. \\ &&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > H_i \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = H_i \\ P(H_p, n, a + 1) & \text{otherwise} \end{cases}$ \\ -&&&& and we assert the header $H$ can be determined as its hash is the parent hash \\ +&&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash \\ &&&& in the block following it. \\ \midrule 0x41 & {\small COINBASE} & 0 & 1 & Get the block's beneficiary address. \\ From 8183130b49b7599ff97ebfba3599f2703ae28822 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 14:02:51 +1000 Subject: [PATCH 016/132] Opcode 0x00 cross-refs --- Paper.tex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Paper.tex b/Paper.tex index c6331d2a..c48b4239 100644 --- a/Paper.tex +++ b/Paper.tex @@ -52,7 +52,7 @@ %\pagecolor{lightpink} \begin{abstract} -The blockchain paradigm when coupled with cryptographically-secured transactions has demonstrated its utility through a number of projects, not least Bitcoin. Each such project can be seen as a simple application on a decentralised, but singleton, compute resource. We can call this paradigm a transactional singleton machine with shared-state. +The blockchain paradigm when coupled with cryptographically-secured transactions has demonstrated its utility through a number of projects, not the least being Bitcoin. Each such project can be seen as a simple application on a decentralised, but singleton, compute resource. We can call this paradigm a transactional singleton machine with shared-state. Ethereum implements this paradigm in a generalised manner. Furthermore it provides a plurality of such resources, each with a distinct state and operating code but able to interact through a message-passing framework with others. We discuss its design, implementation issues, the opportunities it provides and the future hurdles we envisage. \end{abstract} @@ -82,7 +82,7 @@ \subsection{Previous Work} \label{ch:previous} \cite{dwork92pricingvia} provided the first work into the usage of a cryptographic proof of computational expenditure (``proof-of-work'') as a means of transmitting a value signal over the Internet. The value-signal was utilised here as a spam deterrence mechanism rather than any kind of currency, but critically demonstrated the potential for a basic data channel to carry a \textit{strong economic signal}, allowing a receiver to make a physical assertion without having to rely upon \textit{trust}. \cite{back2002hashcash} later produced a system in a similar vein. -The first example of utilising the proof-of-work as a strong economic signal to secure a currency was by \cite{vishnumurthy03karma:a}. In this instance, the token was used to keep peer-to-peer file trading in check, ensuring ``consumers'' be able to make micro-payments to ``suppliers'' for their services. The security model afforded by the proof-of-work was augmented with digital signatures and a ledger in order to ensure that the historical record couldn't be corrupted and that malicious actors could not spoof payment or unjustly complain about service delivery. Five years later, \cite{nakamoto2008bitcoin} introduced another such proof-of-work-secured value token, somewhat wider in scope. The fruits of this project, Bitcoin, became the first widely adopted global decentralised transaction ledger. +The first example of utilising the proof-of-work as a strong economic signal to secure a currency was by \cite{vishnumurthy03karma:a}. In this instance, the token was used to keep peer-to-peer file trading in check, providing ``consumers'' with the ability to make micro-payments to ``suppliers'' for their services. The security model afforded by the proof-of-work was augmented with digital signatures and a ledger in order to ensure that the historical record couldn't be corrupted and that malicious actors could not spoof payment or unjustly complain about service delivery. Five years later, \cite{nakamoto2008bitcoin} introduced another such proof-of-work-secured value token, somewhat wider in scope. The fruits of this project, Bitcoin, became the first widely adopted global decentralised transaction ledger. Other projects built on Bitcoin's success; the alt-coins introduced numerous other currencies through alteration to the protocol. Some of the best known are Litecoin and Primecoin, discussed by \cite{sprankel2013technical}. Other projects sought to take the core value content mechanism of the protocol and repurpose it; \cite{aron2012bitcoin} discusses, for example, the Namecoin project which aims to provide a decentralised name-resolution system. @@ -92,7 +92,7 @@ \subsection{Previous Work} \label{ch:previous} Early work on smart contracts has been done by \cite{szabo1997formalizing} and \cite{miller1997future}. Around the 1990s it became clear that algorithmic enforcement of agreements could become a significant force in human cooperation. Though no specific system was proposed to implement such a system, it was proposed that the future of law would be heavily affected by such systems. In this light, Ethereum may be seen as a general implementation of such a \textit{crypto-law} system. -%E language? +%E language/glossary? \section{The Blockchain Paradigm} \label{ch:overview} @@ -103,7 +103,7 @@ \section{The Blockchain Paradigm} \label{ch:overview} where $\Upsilon$ is the Ethereum state transition function. In Ethereum, $\Upsilon$, together with $\boldsymbol{\sigma}$ are considerably more powerful then any existing comparable system; $\Upsilon$ allows components to carry out arbitrary computation, while $\boldsymbol{\sigma}$ allows components to store arbitrary state between transactions. -Transactions are collated into blocks; blocks are chained together using a cryptographic hash as a means of reference. Blocks function as a journal, recording a series of transactions together with the previous block and an identifier for the final state (though do not store the final state itself---that would be far too big). They also punctuate the transaction series with incentives for nodes to \textit{mine}. This incentivisation takes place as a state-transition function, adding value to a nominated account. +Transactions are collated into blocks; blocks are chained together using a cryptographic hash as a means of reference. Blocks function as a journal or ledger, recording a series of transactions together with the previous block and an identifier for the final state (though blocks do not store the final state itself---that would be far too big). They also punctuate the transaction series with incentives for nodes to \textit{mine}. This incentivisation takes place as a state-transition function, adding value to a nominated account. Mining is the process of dedicating effort (working) to bolster one series of transactions (a block) over any other potential competitor block. It is achieved thanks to a cryptographically secure proof. This scheme is known as a proof-of-work and is discussed in detail in section \ref{ch:pow}. @@ -833,7 +833,7 @@ \subsection{Execution Overview} We must now define the $\Xi$ function. In most practical implementations this will be modelled as an iterative progression of the pair comprising the full system state, $\boldsymbol{\sigma}$ and the machine state, $\boldsymbol{\mu}$. Formally, we define it recursively with a function $X$. This uses an iterator function $O$ (which defines the result of a single cycle of the state machine) together with functions $Z$ which determines if the present state is an exceptional halting state of the machine and $H$, specifying the output data of the instruction if and only if the present state is a normal halting state of the machine. -The empty sequence, denoted $()$, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. +The empty sequence, denoted ,\hyperref[emptySequence]{''$()$''}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. \begin{eqnarray} \Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_g, A, \mathbf{o}) \\ (\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\ @@ -924,7 +924,7 @@ \subsubsection{Normal Halting} \begin{equation} H(\boldsymbol{\mu}, I) \equiv \begin{cases} H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small RETURN} \\ -() & \text{if} \quad w \in \{ \text{\small STOP}, \text{\small SELFDESTRUCT} \} \\ +() & \text{if} \quad w \in \{ \text{\hyperref[STOP]{''\small STOP''}}, \text{\small SELFDESTRUCT} \} \\ \varnothing & \text{otherwise} \end{cases} \end{equation} @@ -1132,7 +1132,7 @@ \subsection{Scalability} Scalability remains an eternal concern. With a generalised state transition function, it becomes difficult to partition and parallelise transactions to apply the divide-and-conquer strategy. Unaddressed, the dynamic value-range of the system remains essentially fixed and as the average transaction value increases, the less valuable of them become ignored, being economically pointless to include in the main ledger. However, several strategies exist that may potentially be exploited to provide a considerably more scalable protocol. -Some form of hierarchical structure, achieved by either consolidating smaller lighter-weight chains into the main block or building the main block through the incremental combination and adhesion (through proof-of-work) of smaller transaction sets may allow parallelisation of transaction combination and block-building. Parallelism could also come from a prioritised set of parallel blockchains, consolidated each block and with duplicate or invalid transactions thrown out accordingly. +Some form of hierarchical structure, achieved by either consolidating smaller lighter-weight chains into the main block or building the main block through the incremental combination and adhesion (through proof-of-work) of smaller transaction sets may allow parallelisation of transaction combination and block-building. Parallelism could also come from a prioritised set of parallel blockchains, consolidating each block and with duplicate or invalid transactions thrown out accordingly. Finally, verifiable computation, if made generally available and efficient enough, may provide a route to allow the proof-of-work to be the verification of final state. @@ -1600,7 +1600,7 @@ \subsection{Instruction Set} \multicolumn{5}{c}{\textbf{0s: Stop and Arithmetic Operations}} \\ \multicolumn{5}{l}{All arithmetic is modulo $2^{256}$ unless otherwise noted. The zero-th power of zero $0^0$ is defined to be one.} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x00 & {\small STOP} & 0 & 0 & Halts execution. \\ +0x00 & {\small STOP} & 0 & 0 & Halts execution, see \label{STOP} and \label{emptySequence}. \\ \midrule 0x01 & {\small ADD} & 2 & 1 & Addition operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]$ \\ From ac5990dd2f4ec4c5694f4a130a52d4429f3828e8 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 14:21:21 +1000 Subject: [PATCH 017/132] Merging changes from #327 --- Biblio.bib | 90 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 78 insertions(+), 12 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index f3c0ee9c..0e66c5d5 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -1,15 +1,60 @@ -@Misc{cryptoeprint:2013:881, - Note = {{http://eprint.iacr.org/}}, - Url = {{Cryptology ePrint Archive, Report 2013/881}}, - author = {Sompolinsky, Yonatan and Zohar, Aviv}, - title = {{Accelerating Bitcoin{'}s Transaction Processing. Fast Money Grows on Trees, Not Chains}}, - year = {{2013}}, +@misc{ECDSAWikipedia, + url = "https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm", + note = "https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm", + title = {{Elliptic Curve Digital Signature Algorithm}}, + publisher = "Wikipedia", + date = "12 September 2017", +} + +@misc{ECDSAcerticom, + url = "http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf", + note = "https://web.archive.org/save/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf", + title = {{The Elliptic Curve Digital Signature Algorithm (ECDSA)}}, + publisher = {{Certicom Research}}, + location = "Canada", + author = "Don Johnson and Alfred Menezes and Scott Vanstone", + year = "2001", +} + +@misc{secp256k1BitcoinWiki2016, + url = "https://en.bitcoin.it/wiki/Secp256k1", + note = "https://web.archive.org/web/20170916032105/https://en.bitcoin.it/wiki/Secp256k1", + title = {{Secp256k1}}, + publisher = {{bitcoinwiki}}, + date = {{4 August 2016}}, +} + +@misc{secp256k1StackExchange2014, + url = "https://bitcoin.stackexchange.com/a/21911/48875", + note = "https://web.archive.org/web/20170916031457/https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like/21911", + author = "Pieter Wuille", + title = {{What does the curve used in Bitcoin, secp256k1, look like?}}, + year = "2014", + publisher = {{Bitcoin Stack Exchange}}, +} + +@misc{npmElectrum2017, + url = {{https://www.npmjs.com/package/electrum}}, + note = {{https://web.archive.org/save/https://www.npmjs.com/package/electrum}}, + author = {Arnaud, Pierre and Schroeter, Mathieu and Le Barbare, Sam}, + title = {{Electrum}}, + year = {{2017}}, +} + +@misc{cryptoeprint:2013:881, + author = {Sompolinsky, Yonatan and Aviv Zohar}, + title = {{Accelerating Bitcoin's Transaction Processing. Fast Money Grows on Trees, Not Chains}}, + howpublished = {Cryptology ePrint Archive, Report 2013/881}, + year = {2013}, + note = {\url{http://eprint.iacr.org/2013/881}}, } @InCollection{gura2004comparing, + url = {{https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}}, + note = {{https://web.archive.org/web/20170810035057/https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}}, BookTitle = {{Cryptographic Hardware and Embedded Systems-CHES 2004}}, Publisher = {{Springer}}, - author = {Gura, Nils and Patel, Arun and Wander, Arvinderpal and Eberle, Hans and Shantz, Sheueling Chang}, + author = {Gura, Nils and Patel, Arun and Wander, Arvinderpal and Eberle, Hans and Sheueling Chang Shantz}, title = {{Comparing elliptic curve cryptography and RSA on 8-bit CPUs}}, pages = {119-132}, year = {{2004}}, @@ -23,12 +68,16 @@ @InProceedings{laurie2004proof } @Misc{vishnumurthy03karma:a, - author = {Vivek Vishnumurthy and Sangeeth Chandrakumar and Emin Gün Sirer}, + url = {{https://www.cs.cornell.edu/people/egs/papers/karma.pdf}}, + note = {{https://web.archive.org/web/20170810031834/https://www.cs.cornell.edu/people/egs/papers/karma.pdf}}, + author = {Vishnumurthy, Vivek and Chandrakumar, Sangeeth and Gün Sirer, Emin}, title = {KARMA: A Secure Economic Framework for Peer-to-Peer Resource Sharing}, year = {2003} } @InProceedings{dwork92pricingvia, + note = {{https://web.archive.org/web/20170810035254/http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}}, + url = {{http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}}, author = {Cynthia Dwork and Moni Naor}, title = {Pricing via processing or combatting junk mail}, booktitle = {In 12th Annual International Cryptology Conference}, @@ -37,6 +86,7 @@ @InProceedings{dwork92pricingvia } @Article{nakamoto2008bitcoin, + url = {{http://nakamotoinstitute.org/bitcoin/}}, author = {Nakamoto, Satoshi}, title = {{Bitcoin: A peer-to-peer electronic cash system}}, journal = {{Consulted}}, @@ -46,12 +96,15 @@ @Article{nakamoto2008bitcoin } @Misc{sprankel2013technical, + url = {{http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}}, + note = {{https://web.archive.org/web/20170810025028/http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}}, author = {Sprankel, Simon}, title = {{Technical Basis of Digital Currencies}}, year = {{2013}}, } @Article{aron2012bitcoin, + url = {{http://www.sciencedirect.com/science/article/pii/S0262407912601055}}, Publisher = {{Elsevier}}, author = {Aron, Jacob}, title = {{BitCoin software finds new life}}, @@ -64,19 +117,23 @@ @Article{aron2012bitcoin @article{mastercoin2013willett, url = {{https://github.com/mastercoin-MSC/spec}}, - author = {J. R. Willett}, + note = {{https://web.archive.org/web/20170810035927/https://github.com/OmniLayer/spec}}, + author = {Willett, J. R.}, title = {{MasterCoin Complete Specification}}, year = {{2013}}, } @article{colouredcoins2012rosenfeld, url = {{https://bitcoil.co.il/BitcoinX.pdf}}, + note = {{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}}, author = {Meni Rosenfeld}, title = {{Overview of Colored Coins}}, year = {{2012}}, } @incollection{boutellier2014pirates, + url = {{https://www.springer.com/gb/book/9783319040158}}, + note = {{URL available at http://wiki.erights.org/wiki/Documentation. https://web.archive.org/web/20170810040208/https://www.springer.com/gb/book/9783319040158}}, booktitle = {{Growth Through Innovation}}, publisher = {{Springer}}, author = {Boutellier, Roman and Heinzen, Mareike}, @@ -86,6 +143,8 @@ @incollection{boutellier2014pirates } @Article{szabo1997formalizing, + url = {{http://firstmonday.org/ojs/index.php/fm/article/view/548}}, + note = {{https://web.archive.org/web/20170810042659/http://firstmonday.org/ojs/index.php/fm/article/view/548}}, author = {Szabo, Nick}, title = {{Formalizing and securing relationships on public networks}}, journal = {{First Monday}}, @@ -95,6 +154,7 @@ @Article{szabo1997formalizing } @InProceedings{miller1997future, + url = {{https://drive.google.com/file/d/0Bw0VXJKBgYPMS0J2VGIyWWlocms/edit?usp=sharing}}, BookTitle = {{paper delivered at the Extro 3 Conference (August 9)}}, author = {Miller, Mark}, title = {{The Future of Law}}, @@ -110,20 +170,23 @@ @article{buterin2013ethereum @article{back2002hashcash, url = {{http://www.hashcash.org/papers/amortizable.pdf}}, + note = {{https://web.archive.org/web/20170810043047/http://www.hashcash.org/papers/amortizable.pdf}}, author = {Adam Back}, title = {{Hashcash - Amortizable Publicly Auditable Cost-Functions}}, year = {{2002}}, } @article{hashimoto, - url = {{https://mirrorx.com/files/hashimoto.pdf}}, + url = {{https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf}}, + note = {{https://web.archive.org/web/20170810043640/https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf. Dead original link as of 10 August 2017: https://mirrorx.com/files/hashimoto.pdf}}, author = {Thaddeus Dryja}, title = {{Hashimoto: I/O bound proof of work}}, year = {{2014}}, } @article{dagger, - url = {{http://vitalik.ca/ethereum/dagger.html}}, + url = {{http://www.hashcash.org/papers/dagger.html}}, + note = {{https://web.archive.org/web/20170810043955/http://www.hashcash.org/papers/dagger.html. Dead original link as of 10 August 2017: http://vitalik.ca/ethereum/dagger.html}}, author = {Vitalik Buterin}, title = {{Dagger: A Memory-Hard to Compute, Memory-Easy to Verify Scrypt Alternative}}, year = {{2013}}, @@ -131,6 +194,7 @@ @article{dagger @article{lerner2014randmemohash, url = {{http://www.hashcash.org/papers/memohash.pdf}}, + note = {{https://web.archive.org/web/20170810044110/http://www.hashcash.org/papers/memohash.pdf}}, author = {Sergio Demian Lerner}, title = {{Strict Memory Hard Hashing Functions}}, year = {{2014}}, @@ -141,4 +205,6 @@ @article{FowlerNollVo1991FNVHash author = {Glenn Fowler, Landon Curt Noll, Phong Vo}, title = {{Fowler–Noll–Vo hash function}}, year = {{1991}}, -} \ No newline at end of file +} + +Style guide: https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management From 1e7849255f97ad45b8f5249399cb95f84f782301 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 14:42:03 +1000 Subject: [PATCH 018/132] Moved \usepackage{hyperref} to last in loaded packages As per (here)[https://mirror.aarnet.edu.au/pub/CTAN/macros/latex/contrib/hyperref/doc/manual.html#TBL-24], section 2. --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index c48b4239..ac866a19 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,7 +1,6 @@ \documentclass[9pt,oneside]{amsart} %\usepackage{tweaklist} \usepackage{url} -\usepackage{hyperref} \usepackage{cancel} \usepackage{xspace} \usepackage{graphicx} @@ -21,6 +20,7 @@ \usepackage[usenames,dvipsnames]{xcolor} \usepackage{afterpage} \usepackage{tikz} +\usepackage{hyperref} \input{Version.tex} From 4e10ea60a1d3ae85f8cb1d65c77b143a600e55dd Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 15:07:05 +1000 Subject: [PATCH 019/132] Signing transactions para. 1 citations --- Paper.tex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Paper.tex b/Paper.tex index ac866a19..d142b2be 100644 --- a/Paper.tex +++ b/Paper.tex @@ -261,7 +261,6 @@ \subsection{The Transaction} \label{ch:transaction} \item[data] An unlimited size byte array specifying the input data of the message call, formally $T_\mathbf{d}$. \end{description} -Appendix \ref{app:signing} specifies the function, $S$, which maps transactions to the sender, and happens through the ECDSA of the SECP-256k1 curve, using the hash of the transaction (excepting the latter three signature fields) as the datum to sign. For the present we simply assert that the sender of a given transaction $T$ can be represented with $S(T)$. \begin{equation} L_T(T) \equiv \begin{cases} @@ -1394,7 +1393,7 @@ \section{Precompiled Contracts}\label{app:precompiled} \section{Signing Transactions}\label{app:signing} -The method of signing transactions is similar to the `Electrum style signatures'; it utilises the SECP-256k1 curve as described by \cite{gura2004comparing}. +The method of signing transactions is similar to the `Electrum style signatures' as defined by \cite{npmElectrum2017}, heading "Managing styles with Radium" in the bullet point list. This method utilises the SECP-256k1 curve as described by \cite{secp256k1BitcoinWiki2016} and \cite{secp256k1StackExchange2014}, and is implemented similarly to as described by \cite{gura2004comparing} on p. 9 of 15, para. 3. It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}. From 098adb85a75d563ba5f7bda4775da3fbdd737865 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 15:29:06 +1000 Subject: [PATCH 020/132] ECDSA function citations --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index d142b2be..0667dd55 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1397,7 +1397,7 @@ \section{Signing Transactions}\label{app:signing} It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}. -We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature. +We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \begin{eqnarray} \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\ \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\ From 5f7f93b048dedacc8673463c92002c20ae7a5260 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 15:46:12 +1000 Subject: [PATCH 021/132] Added footnote for ECDSAcerticom --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 0667dd55..6dd9583b 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1397,7 +1397,7 @@ \section{Signing Transactions}\label{app:signing} It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}. -We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. +We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \footnote{For the former citation, refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER (assuming that the former is for signature generation and the latter is for signature verification).} \begin{eqnarray} \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\ \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\ From 746e756b12ebb5ac3a87fa00e660a2bc47cdce99 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 16:33:26 +1000 Subject: [PATCH 022/132] Instruction set: Grammar; 50s: the first word/byte Prepended 'the' before countable definite articles, 'an' before indefinite articles, rewording to avoid stringing too many nouns in succession, etc. Added the top/first word/byte, e.g. instead of "Save word to memory", changed to "Save the first word to memory" (implying the first word of the stack as per the following formula. --- Paper.tex | 68 +++++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/Paper.tex b/Paper.tex index 6dd9583b..6265c55a 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1636,7 +1636,7 @@ \subsection{Instruction Set} 0x0a & {\small EXP} & 2 & 1 & Exponential operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] ^ {\boldsymbol{\mu}_\mathbf{s}[1] }$ \\ \midrule -0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend length of two's complement signed integer. \\ +0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\ &&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_t &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathbf{s}[0] + 1) \\ \boldsymbol{\mu}_\mathbf{s}[1]_i &\text{otherwise} \end{cases}$ \\ \multicolumn{5}{l}{$\boldsymbol{\mu}_\mathbf{s}[x]_i$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathbf{s}[x]$} \vspace{5pt} \\ \end{tabular*} @@ -1662,7 +1662,7 @@ \subsection{Instruction Set} 0x14 & {\small EQ} & 2 & 1 & Equality comparison. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule -0x15 & {\small ISZERO} & 1 & 1 & Simple not operator. \\ +0x15 & {\small ISZERO} & 1 & 1 & This is the logical negation operation, also called the logical complement or the NOT operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule 0x16 & {\small AND} & 2 & 1 & Bitwise AND operation. \\ @@ -1677,9 +1677,9 @@ \subsection{Instruction Set} 0x19 & {\small NOT} & 1 & 1 & Bitwise NOT operation. \\ &&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0]_i = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule -0x1a & {\small BYTE} & 2 & 1 & Retrieve single byte from word. \\ +0x1a & {\small BYTE} & 2 & 1 & Retrieve a single byte from a word. \\ &&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_{(i + 8\boldsymbol{\mu}_\mathbf{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathbf{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\ -&&&& For Nth byte, we count from the left (i.e. N=0 would be the most significant in big endian). \\ +&&&& For the Nth byte, we count from the left (i.e. $N=0$ would be the most significant in big endian). \\ \bottomrule \end{tabular*} @@ -1687,7 +1687,7 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{20s: SHA3}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x20 & {\small SHA3} & 2 & 1 & Compute Keccak-256 hash. \\ +0x20 & {\small SHA3} & 2 & 1 & Compute a Keccak-256 hash. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$ \\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ \bottomrule @@ -1697,53 +1697,53 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{30s: Environmental Information}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x30 & {\small ADDRESS} & 0 & 1 & Get address of currently executing account. \\ +0x30 & {\small ADDRESS} & 0 & 1 & Get the address of the currently executing account. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_a$ \\ \midrule -0x31 & {\small BALANCE} & 1 & 1 & Get balance of the given account. \\ +0x31 & {\small BALANCE} & 1 & 1 & Get the balance of the given account. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0]]_b& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\ \midrule -0x32 & {\small ORIGIN} & 0 & 1 & Get execution origination address. \\ +0x32 & {\small ORIGIN} & 0 & 1 & Get the address that the execution originated from. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_o$ \\ -&&&& This is the sender of original transaction; it is never an account with non-empty \\ +&&&& This is the sender of the original transaction; it is never an account with non-empty \\ &&&& associated code. \\ \midrule -0x33 & {\small CALLER} & 0 & 1 & Get caller address. \\ +0x33 & {\small CALLER} & 0 & 1 & Get the caller address. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_s$ \\ &&&& This is the address of the account that is directly responsible for this execution. \\ \midrule -0x34 & {\small CALLVALUE} & 0 & 1 & Get deposited value by the instruction/transaction responsible for this execution. \\ +0x34 & {\small CALLVALUE} & 0 & 1 & Get the deposited value by the instruction/transaction responsible for this execution. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_v$ \\ \midrule -0x35 & {\small CALLDATALOAD} & 1 & 1 & Get input data of current environment. \\ +0x35 & {\small CALLDATALOAD} & 1 & 1 & Get the input data of the current environment. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{d}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \quad \text{with} \quad I_\mathbf{d}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_\mathbf{d} \rVert$ \\ &&&& This pertains to the input data passed with the message call instruction or transaction. \\ \midrule -0x36 & {\small CALLDATASIZE} & 0 & 1 & Get size of input data in current environment. \\ +0x36 & {\small CALLDATASIZE} & 0 & 1 & Get the size of the input data in the current environment. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{d} \rVert$ \\ &&&& This pertains to the input data passed with the message call instruction or transaction. \\ \midrule -0x37 & {\small CALLDATACOPY} & 3 & 0 & Copy input data in current environment to memory. \\ +0x37 & {\small CALLDATACOPY} & 3 & 0 & Copy the input data in the current environment to memory. \\ &&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv \begin{cases} I_\mathbf{d}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{d} \rVert \\ 0 & \text{otherwise} \end{cases}$\\ &&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ &&&& This pertains to the input data passed with the message call instruction or transaction. \\ \midrule -0x38 & {\small CODESIZE} & 0 & 1 & Get size of code running in current environment. \\ +0x38 & {\small CODESIZE} & 0 & 1 & Get the size of code running in the current environment. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{b} \rVert$ \\ \midrule -0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in current environment to memory. \\ +0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in the current environment to memory. \\ &&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{b} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ &&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ \midrule -0x3a & {\small GASPRICE} & 0 & 1 & Get price of gas in current environment. \\ +0x3a & {\small GASPRICE} & 0 & 1 & Get the price of gas in the current environment. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_p$ \\ -&&&& This is gas price specified by the originating transaction.\\ +&&&& This is the gas price specified by the originating transaction.\\ \midrule -0x3b & {\small EXTCODESIZE} & 1 & 1 & Get size of an account's code. \\ +0x3b & {\small EXTCODESIZE} & 1 & 1 & Get the size of an account's code. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_c \rVert$ \\ \midrule 0x3c & {\small EXTCODECOPY} & 4 & 0 & Copy an account's code to memory. \\ @@ -1789,27 +1789,27 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{50s: Stack, Memory, Storage and Flow Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x50 & {\small POP} & 1 & 0 & Remove item from stack. \\ +0x50 & {\small POP} & 1 & 0 & Remove the top, first item from the stack. \\ \midrule -0x51 & {\small MLOAD} & 1 & 1 & Load word from memory. \\ +0x51 & {\small MLOAD} & 1 & 1 & Load the first word from memory. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ]$ \\ &&&& $\boldsymbol{\mu}'_i \equiv \max(\boldsymbol{\mu}_i, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ &&&& The addition in the calculation of $\boldsymbol{\mu}'_i$ is not subject to the $2^{256}$ modulo. \\ \midrule -0x52 & {\small MSTORE} & 2 & 0 & Save word to memory. \\ +0x52 & {\small MSTORE} & 2 & 0 & Save the first word (which is the first item in the stack) to memory. \\ &&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ &&&& $\boldsymbol{\mu}'_i \equiv \max(\boldsymbol{\mu}_i, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ &&&& The addition in the calculation of $\boldsymbol{\mu}'_i$ is not subject to the $2^{256}$ modulo. \\ \midrule -0x53 & {\small MSTORE8} & 2 & 0 & Save byte to memory. \\ +0x53 & {\small MSTORE8} & 2 & 0 & Save the first byte to memory. \\ &&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv (\boldsymbol{\mu}_\mathbf{s}[1] \bmod 256) $ \\ &&&& $\boldsymbol{\mu}'_i \equiv \max(\boldsymbol{\mu}_i, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 1) \div 32 })$ \\ &&&& The addition in the calculation of $\boldsymbol{\mu}'_i$ is not subject to the $2^{256}$ modulo. \\ \midrule -0x54 & {\small SLOAD} & 1 & 1 & Load word from storage. \\ +0x54 & {\small SLOAD} & 1 & 1 & Load the first word from storage. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_a]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \\ \midrule -0x55 & {\small SSTORE} & 2 & 0 & Save word to storage. \\ +0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\ &&&& $\boldsymbol{\sigma}'[I_a]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \\ &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} G_{sset} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_a]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ @@ -1840,7 +1840,7 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{g}$ \\ \midrule 0x5b & {\small JUMPDEST} & 0 & 0 & Mark a valid destination for jumps. \\ -&&&& This operation has no effect on machine state during execution. \\ +&&&& This operation has no effect on the machine state during execution. \\ \bottomrule \end{tabular*} @@ -1848,24 +1848,24 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{60s \& 70s: Push Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x60 & {\small PUSH1} & 0 & 1 & Place 1 byte item on stack. \\ +0x60 & {\small PUSH1} & 0 & 1 & Place a 1 byte item on the stack. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv c(\boldsymbol{\mu}_{pc} + 1)$ \\ &&&& $\text{where} \quad c(x) \equiv \begin{cases} I_\mathbf{b}[x] & \text{if} \quad x < \lVert I_\mathbf{b} \rVert \\ 0 & \text{otherwise} \end{cases}$ \\ &&&& The bytes are read in line from the program code's bytes array. \\ &&&& The function $c$ ensures the bytes default to zero if they extend past the limits.\\ -&&&& The byte is right-aligned (takes the lowest significant place in big endian). \\ +&&&& The byte is right-aligned (\ie it takes the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ \midrule -0x61 & {\small PUSH2} & 0 & 1 & Place 2-byte item on stack. \\ +0x61 & {\small PUSH2} & 0 & 1 & Place a 2-byte item on the stack. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big( (\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 2) \big)$ \\ &&&& with $\boldsymbol{c}(\boldsymbol{x}) \equiv (c(\boldsymbol{x}_0), ..., c(\boldsymbol{x}_{\lVert x \rVert -1})) $ with $c$ as defined as above. \\ -&&&& The bytes are right-aligned (takes the lowest significant place in big endian). \\ +&&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ \midrule \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ \midrule 0x7f & {\small PUSH32} & 0 & 1 & Place 32-byte (full word) item on stack. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big((\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 32) \big)$ \\ &&&& where $\boldsymbol{c}$ is defined as above. \\ -&&&& The bytes are right-aligned (takes the lowest significant place in big endian). \\ +&&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ \bottomrule \end{tabular*} @@ -1873,15 +1873,15 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{80s: Duplication Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x80 & {\small DUP1} & 1 & 2 & Duplicate 1st stack item. \\ +0x80 & {\small DUP1} & 1 & 2 & Duplicate the 1st stack item. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ \midrule -0x81 & {\small DUP2} & 2 & 3 & Duplicate 2nd stack item. \\ +0x81 & {\small DUP2} & 2 & 3 & Duplicate the 2nd stack item. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ \midrule \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ \midrule -0x8f & {\small DUP16} & 16 & 17 & Duplicate 16th stack item. \\ +0x8f & {\small DUP16} & 16 & 17 & Duplicate the 16th stack item. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[15]$ \\ \bottomrule \end{tabular*} From 8f5178fc49931687e970869ee60416d7e4a7d8f2 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 22 Sep 2017 17:39:25 +1000 Subject: [PATCH 023/132] Instruction set grammar Complete sentences, NOT operation --- Paper.tex | 60 +++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/Paper.tex b/Paper.tex index 6265c55a..532dc754 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1599,41 +1599,41 @@ \subsection{Instruction Set} \multicolumn{5}{c}{\textbf{0s: Stop and Arithmetic Operations}} \\ \multicolumn{5}{l}{All arithmetic is modulo $2^{256}$ unless otherwise noted. The zero-th power of zero $0^0$ is defined to be one.} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x00 & {\small STOP} & 0 & 0 & Halts execution, see \label{STOP} and \label{emptySequence}. \\ +0x00 & {\small STOP} & 0 & 0 & This operation halts execution, see \label{STOP} and \label{emptySequence} for further information. \\ \midrule -0x01 & {\small ADD} & 2 & 1 & Addition operation. \\ +0x01 & {\small ADD} & 2 & 1 & This is the addition operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]$ \\ \midrule -0x02 & {\small MUL} & 2 & 1 & Multiplication operation. \\ +0x02 & {\small MUL} & 2 & 1 & This is the multiplication operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]$ \\ \midrule -0x03 & {\small SUB} & 2 & 1 & Subtraction operation. \\ +0x03 & {\small SUB} & 2 & 1 & This is the subtraction operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] - \boldsymbol{\mu}_\mathbf{s}[1]$ \\ \midrule -0x04 & {\small DIV} & 2 & 1 & Integer division operation. \\ +0x04 & {\small DIV} & 2 & 1 & This is the integer division operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \lfloor\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]\rfloor & \text{otherwise}\end{cases}$ \\ \midrule -0x05 & {\small SDIV} & 2 & 1 & Signed integer division operation (truncated). \\ +0x05 & {\small SDIV} & 2 & 1 & This is the signed integer division operation (truncated). \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ -2^{255} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = -2^{255} \wedge \quad \boldsymbol{\mu}_\mathbf{s}[1] = -1\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]) \lfloor |\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]| \rfloor & \text{otherwise}\end{cases}$ \\ &&&& Where all values are treated as two's complement signed 256-bit integers. \\ &&&& Note the overflow semantic when $-2^{255}$ is negated.\\ \midrule -0x06 & {\small MOD} & 2 & 1 & Modulo remainder operation. \\ +0x06 & {\small MOD} & 2 & 1 & This is the modulo remainder operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \boldsymbol{\mu}_\mathbf{s}[0] \bmod \boldsymbol{\mu}_\mathbf{s}[1] & \text{otherwise}\end{cases}$ \\ \midrule -0x07 & {\small SMOD} & 2 & 1 & Signed modulo remainder operation. \\ +0x07 & {\small SMOD} & 2 & 1 & This is the signed modulo remainder operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0]) (|\boldsymbol{\mu}_\mathbf{s}[0]| \bmod |\boldsymbol{\mu}_\mathbf{s}[1]|) & \text{otherwise}\end{cases}$ \\ &&&& Where all values are treated as two's complement signed 256-bit integers. \\ \midrule -0x08 & {\small ADDMOD} & 3 & 1 & Modulo addition operation. \\ +0x08 & {\small ADDMOD} & 3 & 1 & This is the modulo addition operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$ \\ &&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\ \midrule -0x09 & {\small MULMOD} & 3 & 1 & Modulo multiplication operation. \\ +0x09 & {\small MULMOD} & 3 & 1 & This is the modulo multiplication operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$ \\ &&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\ \midrule -0x0a & {\small EXP} & 2 & 1 & Exponential operation. \\ +0x0a & {\small EXP} & 2 & 1 & This is the exponential operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] ^ {\boldsymbol{\mu}_\mathbf{s}[1] }$ \\ \midrule 0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\ @@ -1645,36 +1645,36 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{10s: Comparison \& Bitwise Logic Operations}} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x10 & {\small LT} & 2 & 1 & Less-than comparison. \\ +0x10 & {\small LT} & 2 & 1 & This is the less-than comparison. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule -0x11 & {\small GT} & 2 & 1 & Greater-than comparison. \\ +0x11 & {\small GT} & 2 & 1 & This is the greater-than comparison. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule -0x12 & {\small SLT} & 2 & 1 & Signed less-than comparison. \\ +0x12 & {\small SLT} & 2 & 1 & This is the signed less-than comparison. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ &&&& Where all values are treated as two's complement signed 256-bit integers. \\ \midrule -0x13 & {\small SGT} & 2 & 1 & Signed greater-than comparison. \\ +0x13 & {\small SGT} & 2 & 1 & This is the signed greater-than comparison. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ &&&& Where all values are treated as two's complement signed 256-bit integers. \\ \midrule -0x14 & {\small EQ} & 2 & 1 & Equality comparison. \\ +0x14 & {\small EQ} & 2 & 1 & This is the equality comparison. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule 0x15 & {\small ISZERO} & 1 & 1 & This is the logical negation operation, also called the logical complement or the NOT operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule -0x16 & {\small AND} & 2 & 1 & Bitwise AND operation. \\ +0x16 & {\small AND} & 2 & 1 & This is the bitwise AND operation. \\ &&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \boldsymbol{\mu}_\mathbf{s}[0]_i \wedge \boldsymbol{\mu}_\mathbf{s}[1]_i$ \\ \midrule -0x17 & {\small OR} & 2 & 1 & Bitwise OR operation. \\ +0x17 & {\small OR} & 2 & 1 & This is the bitwise OR operation. \\ &&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \boldsymbol{\mu}_\mathbf{s}[0]_i \vee \boldsymbol{\mu}_\mathbf{s}[1]_i$ \\ \midrule -0x18 & {\small XOR} & 2 & 1 & Bitwise XOR operation. \\ +0x18 & {\small XOR} & 2 & 1 & This is the bitwise XOR operation. \\ &&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \boldsymbol{\mu}_\mathbf{s}[0]_i \oplus \boldsymbol{\mu}_\mathbf{s}[1]_i$ \\ \midrule -0x19 & {\small NOT} & 1 & 1 & Bitwise NOT operation. \\ +0x19 & {\small NOT} & 1 & 1 & This is the bitwise NOT operation. \\ &&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0]_i = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule 0x1a & {\small BYTE} & 2 & 1 & Retrieve a single byte from a word. \\ @@ -1890,17 +1890,17 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{90s: Exchange Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x90 & {\small SWAP1} & 2 & 2 & Exchange 1st and 2nd stack items. \\ +0x90 & {\small SWAP1} & 2 & 2 & Exchange the 1st and the 2nd stack items. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[1] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ \midrule -0x91 & {\small SWAP2} & 3 & 3 & Exchange 1st and 3rd stack items. \\ +0x91 & {\small SWAP2} & 3 & 3 & Exchange the 1st and the 3rd stack items. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[2]$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[2] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ \midrule \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ \midrule -0x9f & {\small SWAP16} & 17 & 17 & Exchange 1st and 17th stack items. \\ +0x9f & {\small SWAP16} & 17 & 17 & Exchange the 1st and the 17th stack items. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[16]$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[16] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ \bottomrule @@ -1915,15 +1915,15 @@ \subsection{Instruction Set} \multicolumn{5}{l}{$\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$}\\ \multicolumn{5}{l}{The entry's topic series, $\mathbf{t}$, differs accordingly:}\vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0xa0 & {\small LOG0} & 2 & 0 & Append log record with no topics. \\ +0xa0 & {\small LOG0} & 2 & 0 & Append the log record with no topics. \\ &&&& $\mathbf{t} \equiv ()$ \\ \midrule -0xa1 & {\small LOG1} & 3 & 0 & Append log record with one topic. \\ +0xa1 & {\small LOG1} & 3 & 0 & Append the log record with one topic. \\ &&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2])$ \\ \midrule \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ \midrule -0xa4 & {\small LOG4} & 6 & 0 & Append log record with four topics. \\ +0xa4 & {\small LOG4} & 6 & 0 & Append the log record with four topics. \\ &&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4], \boldsymbol{\mu}_\mathbf{s}[5])$ \\ \bottomrule \end{tabular*} @@ -1938,11 +1938,11 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_a]_n = \boldsymbol{\sigma}[I_a]_n + 1$ \\ &&&& $A' \equiv A \Cup A^+$ which implies: $A'_\mathbf{s} \equiv A_\mathbf{s} \cup A^+_\mathbf{s} \quad \wedge \quad A'_\mathbf{l} \equiv A_\mathbf{l} \cdot A^+_\mathbf{l} \quad \wedge \quad A'_\mathbf{r} \equiv A_\mathbf{r} + A^+_\mathbf{r}$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ -&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting \\ +&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\ &&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_e = 1024$ \\ -&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_a]_b$ (balance of the caller is too \\ -&&&& low to fulfil the value transfer); and otherwise $x=A(I_a, \boldsymbol{\sigma}[I_a]_n)$, the address of the newly \\ -&&&& created account, otherwise. \\ +&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_a]_b$ (the balance of the caller is \\ +&&&& too low to fulfil the value transfer); and otherwise $x=A(I_a, \boldsymbol{\sigma}[I_a]_n)$, the address of the \\ +&&&& newly created account. \\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ &&&& Thus the operand order is: value, input offset, input size. \\ \midrule From 434a426a9cca3ba7f77ecc5a170781e32d712f18 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 23 Sep 2017 14:47:51 +1000 Subject: [PATCH 024/132] Prepended \ before _ in the ECDSAWikipedia link For "Missing $ inserted" in the failed Travis build starting from 098adb8 (where the citation to the URL was introduced), I found this. --- Biblio.bib | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index 0e66c5d5..42325e09 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -1,6 +1,6 @@ @misc{ECDSAWikipedia, - url = "https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm", - note = "https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm", + url = "https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm", + note = "https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm", title = {{Elliptic Curve Digital Signature Algorithm}}, publisher = "Wikipedia", date = "12 September 2017", From 0d44c8f0da4f57b250b63d0a95faae553d39b6c9 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 23 Sep 2017 14:53:42 +1000 Subject: [PATCH 025/132] Add \usepackage{underscore} To prevent builds failing that have underscores in URLs. --- Paper.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/Paper.tex b/Paper.tex index 532dc754..e8305e01 100644 --- a/Paper.tex +++ b/Paper.tex @@ -20,6 +20,7 @@ \usepackage[usenames,dvipsnames]{xcolor} \usepackage{afterpage} \usepackage{tikz} +\usepackage{underscore} \usepackage{hyperref} \input{Version.tex} From a1444ab03d2f5c66d38e0840cc0bdda066d6c79f Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 23 Sep 2017 16:21:28 +1000 Subject: [PATCH 026/132] Fee Schedule grammar --- Paper.tex | 70 +++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/Paper.tex b/Paper.tex index e8305e01..7b33cc3d 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1459,41 +1459,41 @@ \section{Fee Schedule}\label{app:fees} \toprule Name & Value & Description* \\ \midrule -$G_{zero}$ & 0 & Nothing paid for operations of the set {\small $W_{zero}$}. \\ -$G_{base}$ & 2 & Amount of gas to pay for operations of the set {\small $W_{base}$}. \\ -$G_{verylow}$ & 3 & Amount of gas to pay for operations of the set {\small $W_{verylow}$}. \\ -$G_{low}$ & 5 & Amount of gas to pay for operations of the set {\small $W_{low}$}. \\ -$G_{mid}$ & 8 & Amount of gas to pay for operations of the set {\small $W_{mid}$}. \\ -$G_{high}$ & 10 & Amount of gas to pay for operations of the set {\small $W_{high}$}. \\ -$G_{extcode}$ & 700 & Amount of gas to pay for operations of the set {\small $W_{extcode}$}. \\ -$G_{balance}$ & 400 & Amount of gas to pay for a {\small BALANCE} operation. \\ -$G_{sload}$ & 200 & Paid for a {\small SLOAD} operation. \\ -$G_{jumpdest}$ & 1 & Paid for a {\small JUMPDEST} operation. \\ -$G_{sset}$ & 20000 & Paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\ -$G_{sreset}$ & 5000 & Paid for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\ -$R_{sclear}$ & 15000 & Refund given (added into refund counter) when the storage value is set to zero from non-zero. \\ -$R_{selfdestruct}$ & 24000 & Refund given (added into refund counter) for self-destructing an account. \\ -$G_{selfdestruct}$ & 5000 & Amount of gas to pay for a {\small SELFDESTRUCT} operation. \\ -$G_{create}$ & 32000 & Paid for a {\small CREATE} operation. \\ -$G_{codedeposit}$ & 200 & Paid per byte for a {\small CREATE} operation to succeed in placing code into state. \\ -$G_{call}$ & 700 & Paid for a {\small CALL} operation. \\ -$G_{callvalue}$ & 9000 & Paid for a non-zero value transfer as part of the {\small CALL} operation. \\ -$G_{callstipend}$ & 2300 & A stipend for the called contract subtracted from $G_{callvalue}$ for a non-zero value transfer. \\ -$G_{newaccount}$ & 25000 & Paid for a {\small CALL} or {\small SELFDESTRUCT} operation which creates an account. \\ -$G_{exp}$ & 10 & Partial payment for an {\small EXP} operation. \\ -$G_{expbyte}$ & 50 & Partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ -$G_{memory}$ & 3 & Paid for every additional word when expanding memory. \\ -$G_\text{txcreate}$ & 32000 & Paid by all contract-creating transactions after the {\it Homestead transition}.\\ -$G_{txdatazero}$ & 4 & Paid for every zero byte of data or code for a transaction. \\ -$G_{txdatanonzero}$ & 68 & Paid for every non-zero byte of data or code for a transaction. \\ -$G_{transaction}$ & 21000 & Paid for every transaction. \\ -$G_{log}$ & 375 & Partial payment for a {\small LOG} operation. \\ -$G_{logdata}$ & 8 & Paid for each byte in a {\small LOG} operation's data. \\ -$G_{logtopic}$ & 375 & Paid for each topic of a {\small LOG} operation. \\ -$G_{sha3}$ & 30 & Paid for each {\small SHA3} operation. \\ -$G_{sha3word}$ & 6 & Paid for each word (rounded up) for input data to a {\small SHA3} operation. \\ -$G_{copy}$ & 3 & Partial payment for {\small *COPY} operations, multiplied by words copied, rounded up. \\ -$G_{blockhash}$ & 20 & Payment for {\small BLOCKHASH} operation. \\ +$G_{zero}$ & 0 & Nothing is paid for operations of the set {\small $W_{zero}$}. \\ +$G_{base}$ & 2 & This is the amount of gas to pay for operations of the set {\small $W_{base}$}. \\ +$G_{verylow}$ & 3 & This is the amount of gas to pay for operations of the set {\small $W_{verylow}$}. \\ +$G_{low}$ & 5 & This is the amount of gas to pay for operations of the set {\small $W_{low}$}. \\ +$G_{mid}$ & 8 & This is the amount of gas to pay for operations of the set {\small $W_{mid}$}. \\ +$G_{high}$ & 10 & This is the amount of gas to pay for operations of the set {\small $W_{high}$}. \\ +$G_{extcode}$ & 700 & This is the amount of gas to pay for operations of the set {\small $W_{extcode}$}. \\ +$G_{balance}$ & 400 & This is the amount of gas to pay for a {\small BALANCE} operation. \\ +$G_{sload}$ & 200 & This is paid for an {\small SLOAD} operation. \\ +$G_{jumpdest}$ & 1 & This is paid for a {\small JUMPDEST} operation. \\ +$G_{sset}$ & 20000 & This is paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\ +$G_{sreset}$ & 5000 & This is the amount for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\ +$R_{sclear}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \\ +$R_{selfdestruct}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \\ +$G_{selfdestruct}$ & 5000 & This is the amount of gas to pay for a {\small SELFDESTRUCT} operation. \\ +$G_{create}$ & 32000 & This is paid for a {\small CREATE} operation. \\ +$G_{codedeposit}$ & 200 & This is paid per byte for a {\small CREATE} operation to succeed in placing code into the state. \\ +$G_{call}$ & 700 & This is paid for a {\small CALL} operation. \\ +$G_{callvalue}$ & 9000 & This is paid for a non-zero value transfer as part of the {\small CALL} operation. \\ +$G_{callstipend}$ & 2300 & This is a stipend for the called contract subtracted from $G_{callvalue}$ for a non-zero value transfer. \\ +$G_{newaccount}$ & 25000 & This is paid for a {\small CALL} or for a {\small SELFDESTRUCT} operation which creates an account. \\ +$G_{exp}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ +$G_{expbyte}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ +$G_{memory}$ & 3 & This is paid for every additional word when expanding memory. \\ +$G_\text{txcreate}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.\\ +$G_{txdatazero}$ & 4 & This is paid for every zero byte of data or code for a transaction. \\ +$G_{txdatanonzero}$ & 68 & This is paid for every non-zero byte of data or code for a transaction. \\ +$G_{transaction}$ & 21000 & This is paid for every transaction. \\ +$G_{log}$ & 375 & This is a partial payment for a {\small LOG} operation. \\ +$G_{logdata}$ & 8 & This is paid for each byte in a {\small LOG} operation's data. \\ +$G_{logtopic}$ & 375 & This is paid for each topic of a {\small LOG} operation. \\ +$G_{sha3}$ & 30 & This is paid for each {\small SHA3} operation. \\ +$G_{sha3word}$ & 6 & This is paid for each word (rounded up) for input data to a {\small SHA3} operation. \\ +$G_{copy}$ & 3 & This is a partial payment for {\small *COPY} operations, multiplied by the number of words copied, rounded up. \\ +$G_{blockhash}$ & 20 & This is a payment for a {\small BLOCKHASH} operation. \\ %extern u256 const c_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. \bottomrule From 9227ecf59751f684614352aec8e146fe39da2675 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 23 Sep 2017 16:44:12 +1000 Subject: [PATCH 027/132] Ref to terminology --- Paper.tex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index 7b33cc3d..41da2225 100644 --- a/Paper.tex +++ b/Paper.tex @@ -95,6 +95,8 @@ \subsection{Previous Work} \label{ch:previous} %E language/glossary? +For a list of terms used in this paper, refer to \ref{ch:Terminology}. + \section{The Blockchain Paradigm} \label{ch:overview} Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally: @@ -1155,7 +1157,7 @@ \section{Availability} \appendix -\section{Terminology} +\section{Terminology} \label{ch:Terminology} \begin{description} \item[External Actor] A person or other entity able to interface to an Ethereum node, but external to the world of Ethereum. It can interact with Ethereum through depositing signed Transactions and inspecting the blockchain and associated state. Has one (or more) intrinsic Accounts. From cee8b4586ae28ecd3ade48cd191ff00eb3f5e580 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 23 Sep 2017 17:09:20 +1000 Subject: [PATCH 028/132] \usepackage[hyphens]{url} To get URLs to break at the end of a column. --- Paper.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/Paper.tex b/Paper.tex index 41da2225..e50b55e5 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,6 +1,7 @@ \documentclass[9pt,oneside]{amsart} %\usepackage{tweaklist} \usepackage{url} +\usepackage[hyphens]{url} \usepackage{cancel} \usepackage{xspace} \usepackage{graphicx} From 7d7d358340cc6fe22e430bcfd3d5f49423523e1d Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 23 Sep 2017 17:17:51 +1000 Subject: [PATCH 029/132] Appendix A ref. --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index e50b55e5..f1b7b979 100644 --- a/Paper.tex +++ b/Paper.tex @@ -96,7 +96,7 @@ \subsection{Previous Work} \label{ch:previous} %E language/glossary? -For a list of terms used in this paper, refer to \ref{ch:Terminology}. +For a list of terms used in this paper, refer to Appendix \ref{ch:Terminology}. \section{The Blockchain Paradigm} \label{ch:overview} From bbd98c29e6099781a29e7a1597711e634312e3dd Mon Sep 17 00:00:00 2001 From: jamesray1 Date: Sat, 23 Sep 2017 20:41:56 +1000 Subject: [PATCH 030/132] Adding cross-refs --- Biblio.bib | 44 ++++++++++++++++++++--------------------- Paper.out | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Paper.tex | 41 +++++++++++++++++++++++++++------------ 3 files changed, 108 insertions(+), 34 deletions(-) create mode 100644 Paper.out diff --git a/Biblio.bib b/Biblio.bib index 42325e09..c4ccfbee 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -1,6 +1,6 @@ @misc{ECDSAWikipedia, url = "https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm", - note = "https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm", + note = "\url{https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm}.", title = {{Elliptic Curve Digital Signature Algorithm}}, publisher = "Wikipedia", date = "12 September 2017", @@ -8,7 +8,7 @@ @misc{ECDSAWikipedia @misc{ECDSAcerticom, url = "http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf", - note = "https://web.archive.org/save/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf", + note = "\url{https://web.archive.org/save/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf}.", title = {{The Elliptic Curve Digital Signature Algorithm (ECDSA)}}, publisher = {{Certicom Research}}, location = "Canada", @@ -18,7 +18,7 @@ @misc{ECDSAcerticom @misc{secp256k1BitcoinWiki2016, url = "https://en.bitcoin.it/wiki/Secp256k1", - note = "https://web.archive.org/web/20170916032105/https://en.bitcoin.it/wiki/Secp256k1", + note = "\url{https://web.archive.org/web/20170916032105/https://en.bitcoin.it/wiki/Secp256k1}.", title = {{Secp256k1}}, publisher = {{bitcoinwiki}}, date = {{4 August 2016}}, @@ -26,7 +26,7 @@ @misc{secp256k1BitcoinWiki2016 @misc{secp256k1StackExchange2014, url = "https://bitcoin.stackexchange.com/a/21911/48875", - note = "https://web.archive.org/web/20170916031457/https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like/21911", + note = "\url{https://web.archive.org/web/20170916031457/https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like/21911}.", author = "Pieter Wuille", title = {{What does the curve used in Bitcoin, secp256k1, look like?}}, year = "2014", @@ -35,7 +35,7 @@ @misc{secp256k1StackExchange2014 @misc{npmElectrum2017, url = {{https://www.npmjs.com/package/electrum}}, - note = {{https://web.archive.org/save/https://www.npmjs.com/package/electrum}}, + note = {{\url{https://web.archive.org/save/https://www.npmjs.com/package/electrum}.}}, author = {Arnaud, Pierre and Schroeter, Mathieu and Le Barbare, Sam}, title = {{Electrum}}, year = {{2017}}, @@ -51,7 +51,7 @@ @misc{cryptoeprint:2013:881 @InCollection{gura2004comparing, url = {{https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}}, - note = {{https://web.archive.org/web/20170810035057/https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}}, + note = {{\url{https://web.archive.org/web/20170810035057/https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}.}}, BookTitle = {{Cryptographic Hardware and Embedded Systems-CHES 2004}}, Publisher = {{Springer}}, author = {Gura, Nils and Patel, Arun and Wander, Arvinderpal and Eberle, Hans and Sheueling Chang Shantz}, @@ -69,15 +69,15 @@ @InProceedings{laurie2004proof @Misc{vishnumurthy03karma:a, url = {{https://www.cs.cornell.edu/people/egs/papers/karma.pdf}}, - note = {{https://web.archive.org/web/20170810031834/https://www.cs.cornell.edu/people/egs/papers/karma.pdf}}, + note = {{\url{https://web.archive.org/web/20170810031834/https://www.cs.cornell.edu/people/egs/papers/karma.pdf}.}}, author = {Vishnumurthy, Vivek and Chandrakumar, Sangeeth and Gün Sirer, Emin}, title = {KARMA: A Secure Economic Framework for Peer-to-Peer Resource Sharing}, year = {2003} } @InProceedings{dwork92pricingvia, - note = {{https://web.archive.org/web/20170810035254/http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}}, url = {{http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}}, + note = {{\url{https://web.archive.org/web/20170810035254/http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}.}}, author = {Cynthia Dwork and Moni Naor}, title = {Pricing via processing or combatting junk mail}, booktitle = {In 12th Annual International Cryptology Conference}, @@ -97,7 +97,7 @@ @Article{nakamoto2008bitcoin @Misc{sprankel2013technical, url = {{http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}}, - note = {{https://web.archive.org/web/20170810025028/http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}}, + note = {{\url{https://web.archive.org/web/20170810025028/http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}.}}, author = {Sprankel, Simon}, title = {{Technical Basis of Digital Currencies}}, year = {{2013}}, @@ -117,7 +117,7 @@ @Article{aron2012bitcoin @article{mastercoin2013willett, url = {{https://github.com/mastercoin-MSC/spec}}, - note = {{https://web.archive.org/web/20170810035927/https://github.com/OmniLayer/spec}}, + note = {{\url{https://web.archive.org/web/20170810035927/https://github.com/OmniLayer/spec}.}}, author = {Willett, J. R.}, title = {{MasterCoin Complete Specification}}, year = {{2013}}, @@ -125,7 +125,7 @@ @article{mastercoin2013willett @article{colouredcoins2012rosenfeld, url = {{https://bitcoil.co.il/BitcoinX.pdf}}, - note = {{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}}, + note = {{\url{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}.}}, author = {Meni Rosenfeld}, title = {{Overview of Colored Coins}}, year = {{2012}}, @@ -133,7 +133,7 @@ @article{colouredcoins2012rosenfeld @incollection{boutellier2014pirates, url = {{https://www.springer.com/gb/book/9783319040158}}, - note = {{URL available at http://wiki.erights.org/wiki/Documentation. https://web.archive.org/web/20170810040208/https://www.springer.com/gb/book/9783319040158}}, + note = {{URL available at \url{http://wiki.erights.org/wiki/Documentation}. \url{https://web.archive.org/web/20170810040208/https://www.springer.com/gb/book/9783319040158}.}}, booktitle = {{Growth Through Innovation}}, publisher = {{Springer}}, author = {Boutellier, Roman and Heinzen, Mareike}, @@ -144,7 +144,7 @@ @incollection{boutellier2014pirates @Article{szabo1997formalizing, url = {{http://firstmonday.org/ojs/index.php/fm/article/view/548}}, - note = {{https://web.archive.org/web/20170810042659/http://firstmonday.org/ojs/index.php/fm/article/view/548}}, + note = {{\url{https://web.archive.org/web/20170810042659/http://firstmonday.org/ojs/index.php/fm/article/view/548}.}}, author = {Szabo, Nick}, title = {{Formalizing and securing relationships on public networks}}, journal = {{First Monday}}, @@ -169,32 +169,32 @@ @article{buterin2013ethereum } @article{back2002hashcash, - url = {{http://www.hashcash.org/papers/amortizable.pdf}}, - note = {{https://web.archive.org/web/20170810043047/http://www.hashcash.org/papers/amortizable.pdf}}, + url = "http://www.hashcash.org/papers/amortizable.pdf", + note = "\url{https://web.archive.org/web/20170810043047/http://www.hashcash.org/papers/amortizable.pdf}.", author = {Adam Back}, title = {{Hashcash - Amortizable Publicly Auditable Cost-Functions}}, year = {{2002}}, } @article{hashimoto, - url = {{https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf}}, - note = {{https://web.archive.org/web/20170810043640/https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf. Dead original link as of 10 August 2017: https://mirrorx.com/files/hashimoto.pdf}}, + url = "https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf", + note = {{\url{https://web.archive.org/web/20170810043640/https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf}. Dead original link as of 10 August 2017: \url{https://mirrorx.com/files/hashimoto.pdf}.}}, author = {Thaddeus Dryja}, title = {{Hashimoto: I/O bound proof of work}}, year = {{2014}}, } @article{dagger, - url = {{http://www.hashcash.org/papers/dagger.html}}, - note = {{https://web.archive.org/web/20170810043955/http://www.hashcash.org/papers/dagger.html. Dead original link as of 10 August 2017: http://vitalik.ca/ethereum/dagger.html}}, + url = "http://www.hashcash.org/papers/dagger.html", + note = {{\url{https://web.archive.org/web/20170810043955/http://www.hashcash.org/papers/dagger.html}. Dead original link as of 10 August 2017: \url{http://vitalik.ca/ethereum/dagger.html}.}}, author = {Vitalik Buterin}, title = {{Dagger: A Memory-Hard to Compute, Memory-Easy to Verify Scrypt Alternative}}, year = {{2013}}, } @article{lerner2014randmemohash, - url = {{http://www.hashcash.org/papers/memohash.pdf}}, - note = {{https://web.archive.org/web/20170810044110/http://www.hashcash.org/papers/memohash.pdf}}, + url = "http://www.hashcash.org/papers/memohash.pdf", + note = {{\url{https://web.archive.org/web/20170810044110/http://www.hashcash.org/papers/memohash.pdf}.}}, author = {Sergio Demian Lerner}, title = {{Strict Memory Hard Hashing Functions}}, year = {{2014}}, @@ -207,4 +207,4 @@ @article{FowlerNollVo1991FNVHash year = {{1991}}, } -Style guide: https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management +% Style guide: \url{https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management} diff --git a/Paper.out b/Paper.out new file mode 100644 index 00000000..ddfe5ecc --- /dev/null +++ b/Paper.out @@ -0,0 +1,57 @@ +\BOOKMARK [1][-]{section.1}{1. Introduction}{}% 1 +\BOOKMARK [2][-]{subsection.1.1}{1.1. Driving Factors}{section.1}% 2 +\BOOKMARK [2][-]{subsection.1.2}{1.2. Previous Work}{section.1}% 3 +\BOOKMARK [1][-]{section.2}{2. The Blockchain Paradigm}{}% 4 +\BOOKMARK [2][-]{subsection.2.1}{2.1. Value}{section.2}% 5 +\BOOKMARK [2][-]{subsection.2.2}{2.2. Which History?}{section.2}% 6 +\BOOKMARK [1][-]{section.3}{3. Conventions}{}% 7 +\BOOKMARK [1][-]{section.4}{4. Blocks, State and Transactions}{}% 8 +\BOOKMARK [2][-]{subsection.4.1}{4.1. World State}{section.4}% 9 +\BOOKMARK [2][-]{subsection.4.2}{4.2. The Transaction}{section.4}% 10 +\BOOKMARK [2][-]{subsection.4.3}{4.3. The Block}{section.4}% 11 +\BOOKMARK [1][-]{section.5}{5. Gas and Payment}{}% 12 +\BOOKMARK [1][-]{section.6}{6. Transaction Execution}{}% 13 +\BOOKMARK [2][-]{subsection.6.1}{6.1. Substate}{section.6}% 14 +\BOOKMARK [2][-]{subsection.6.2}{6.2. Execution}{section.6}% 15 +\BOOKMARK [1][-]{section.7}{7. Contract Creation}{}% 16 +\BOOKMARK [2][-]{subsection.7.1}{7.1. Subtleties}{section.7}% 17 +\BOOKMARK [1][-]{section.8}{8. Message Call}{}% 18 +\BOOKMARK [1][-]{section.9}{9. Execution Model}{}% 19 +\BOOKMARK [2][-]{subsection.9.1}{9.1. Basics}{section.9}% 20 +\BOOKMARK [2][-]{subsection.9.2}{9.2. Fees Overview}{section.9}% 21 +\BOOKMARK [2][-]{subsection.9.3}{9.3. Execution Environment}{section.9}% 22 +\BOOKMARK [2][-]{subsection.9.4}{9.4. Execution Overview}{section.9}% 23 +\BOOKMARK [2][-]{subsection.9.5}{9.5. The Execution Cycle}{section.9}% 24 +\BOOKMARK [1][-]{section.10}{10. Blocktree to Blockchain}{}% 25 +\BOOKMARK [1][-]{section.11}{11. Block Finalisation}{}% 26 +\BOOKMARK [2][-]{subsection.11.1}{11.1. Ommer Validation}{section.11}% 27 +\BOOKMARK [2][-]{subsection.11.2}{11.2. Transaction Validation}{section.11}% 28 +\BOOKMARK [2][-]{subsection.11.3}{11.3. Reward Application}{section.11}% 29 +\BOOKMARK [2][-]{subsection.11.4}{11.4. State \046 Nonce Validation}{section.11}% 30 +\BOOKMARK [2][-]{subsection.11.5}{11.5. Mining Proof-of-Work}{section.11}% 31 +\BOOKMARK [1][-]{section.12}{12. Implementing Contracts}{}% 32 +\BOOKMARK [2][-]{subsection.12.1}{12.1. Data Feeds}{section.12}% 33 +\BOOKMARK [2][-]{subsection.12.2}{12.2. Random Numbers}{section.12}% 34 +\BOOKMARK [1][-]{section.13}{13. Future Directions}{}% 35 +\BOOKMARK [2][-]{subsection.13.1}{13.1. Scalability}{section.13}% 36 +\BOOKMARK [1][-]{section.14}{14. Conclusion}{}% 37 +\BOOKMARK [1][-]{section.15}{15. Acknowledgements}{}% 38 +\BOOKMARK [1][-]{section.16}{16. Availability}{}% 39 +\BOOKMARK [1][-]{section*.1}{References}{}% 40 +\BOOKMARK [1][-]{appendix.A}{Appendix A. Terminology}{}% 41 +\BOOKMARK [1][-]{appendix.B}{Appendix B. Recursive Length Prefix}{}% 42 +\BOOKMARK [1][-]{appendix.C}{Appendix C. Hex-Prefix Encoding}{}% 43 +\BOOKMARK [1][-]{appendix.D}{Appendix D. Modified Merkle Patricia Tree}{}% 44 +\BOOKMARK [2][-]{subsection.D.1}{D.1. Trie Database}{appendix.D}% 45 +\BOOKMARK [1][-]{appendix.E}{Appendix E. Precompiled Contracts}{}% 46 +\BOOKMARK [1][-]{appendix.F}{Appendix F. Signing Transactions}{}% 47 +\BOOKMARK [1][-]{appendix.G}{Appendix G. Fee Schedule}{}% 48 +\BOOKMARK [1][-]{appendix.H}{Appendix H. Virtual Machine Specification}{}% 49 +\BOOKMARK [2][-]{subsection.H.1}{H.1. Gas Cost}{appendix.H}% 50 +\BOOKMARK [2][-]{subsection.H.2}{H.2. Instruction Set}{appendix.H}% 51 +\BOOKMARK [1][-]{appendix.I}{Appendix I. Genesis Block}{}% 52 +\BOOKMARK [1][-]{appendix.J}{Appendix J. Ethash}{}% 53 +\BOOKMARK [2][-]{subsection.J.1}{J.1. Definitions}{appendix.J}% 54 +\BOOKMARK [2][-]{subsection.J.2}{J.2. Size of dataset and cache}{appendix.J}% 55 +\BOOKMARK [2][-]{subsection.J.3}{J.3. Dataset generation}{appendix.J}% 56 +\BOOKMARK [2][-]{subsection.J.4}{J.4. Proof-of-work function}{appendix.J}% 57 diff --git a/Paper.tex b/Paper.tex index f1b7b979..0aeca782 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,7 +1,4 @@ \documentclass[9pt,oneside]{amsart} -%\usepackage{tweaklist} -\usepackage{url} -\usepackage[hyphens]{url} \usepackage{cancel} \usepackage{xspace} \usepackage{graphicx} @@ -23,6 +20,24 @@ \usepackage{tikz} \usepackage{underscore} \usepackage{hyperref} +\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} +% "hyperref loads the url package internally. Use \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} to pass the option to the url package when it is loaded by hyperref. This avoids any package option clashes." Source: https://tex.stackexchange.com/questions/3033/forcing-linebreaks-in-url/3034#comment44478_3034. +% Note also this: "If the \PassOptionsToPackage{hyphens}{url} approach does not work, maybe it's "because you're trying to load the url package with a specific option, but it's being loaded by one of your packages before that with a different set of options. Try loading the url package earlier than the package that requires it. If it's loaded by the document class, try using \RequirePackage[hyphens]{url} before the document class." Source: https://tex.stackexchange.com/questions/3033/forcing-linebreaks-in-url/3034#comment555944_3034 +% \usepackage{tweaklist} + +\makeatletter +\g@addto@macro{\UrlBreaks}{\UrlOrds} +\makeatother +%\PassOptionsToPackage{url}\g@addto@macro{\UrlBreaks}{\UrlOrds} +% info on the above command: https://tex.stackexchange.com/posts/10419/revisions + +\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one + \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j% + \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t% + \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D% + \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N% + \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X% + \do\Y\do\Z} \input{Version.tex} @@ -162,7 +177,7 @@ \section{Conventions}\label{ch:conventions} For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg $C_\text{\tiny SSTORE}$, the cost function for the {\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. -Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_n$, denotes the nonce of said transaction. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. +Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_n$, denotes the \hyperref[itm:nonce]{nonce} of said transaction. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a transaction nonce. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation. @@ -238,12 +253,12 @@ \subsection{World State} \label{ch:state} \quad v(x) \equiv x_n \in \mathbb{P}_{256} \wedge x_b \in \mathbb{P}_{256} \wedge x_s \in \mathbb{B}_{32} \wedge x_c \in \mathbb{B}_{32} \end{equation} -\subsection{The Transaction} \label{ch:transaction} +\subsection{The Transaction} \label{subsec:transaction} A transaction (formally, $T$) is a single cryptographically-signed instruction constructed by an actor externally to the scope of Ethereum. While it is assumed that the ultimate external actor will be human in nature, software tools will be used in its construction and dissemination\footnote{Notably, such `tools' could ultimately become so causally removed from their human-based initiation---or humans may become so causally-neutral---that there could be a point at which they rightly be considered autonomous agents. \eg contracts may offer bounties to humans for being sent transactions to initiate their execution.}. There are two types of transactions: those which result in message calls and those which result in the creation of new accounts with associated code (known informally as `contract creation'). Both types specify a number of common fields: \begin{description} -\item[nonce] A scalar value equal to the number of transactions sent by the sender; formally $T_n$. +\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_n$. \item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_p$. \item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_g$. \item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_t$. @@ -836,7 +851,8 @@ \subsection{Execution Overview} We must now define the $\Xi$ function. In most practical implementations this will be modelled as an iterative progression of the pair comprising the full system state, $\boldsymbol{\sigma}$ and the machine state, $\boldsymbol{\mu}$. Formally, we define it recursively with a function $X$. This uses an iterator function $O$ (which defines the result of a single cycle of the state machine) together with functions $Z$ which determines if the present state is an exceptional halting state of the machine and $H$, specifying the output data of the instruction if and only if the present state is a normal halting state of the machine. -The empty sequence, denoted ,\hyperref[emptySequence]{''$()$''}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. +\hypertarget{emptySequence} +The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. \begin{eqnarray} \Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_g, A, \mathbf{o}) \\ (\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\ @@ -921,18 +937,18 @@ \subsubsection{Jump Destination Validity} i + 1 & \text{otherwise} \end{cases} \end{equation} -\subsubsection{Normal Halting} +\subsubsection{Normal Halting} \label{subsec:Normal Halting} The normal halting function $H$ is defined: -\begin{equation} +\begin{equation} \label{eq:Normal Halting} H(\boldsymbol{\mu}, I) \equiv \begin{cases} H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small RETURN} \\ -() & \text{if} \quad w \in \{ \text{\hyperref[STOP]{''\small STOP''}}, \text{\small SELFDESTRUCT} \} \\ +() & \text{if} \quad w \in \text{\small STOP}, \text{\small SELFDESTRUCT} \} \\ \varnothing & \text{otherwise} \end{cases} \end{equation} -The data-returning halt operation, \text{\small RETURN}, has a special function $H_{\text{\tiny RETURN}}$, defined in Appendix \ref{app:vm}. +The data-returning halt operation, \text{\small RETURN}, has a special function $H_{\text{\tiny RETURN}}$, defined in Appendix \ref{app:vm}. Note also the difference between the empty sequence and the empty set as discussed \hyperlink{emptySequence}{here}. \subsection{The Execution Cycle} @@ -1603,7 +1619,8 @@ \subsection{Instruction Set} \multicolumn{5}{c}{\textbf{0s: Stop and Arithmetic Operations}} \\ \multicolumn{5}{l}{All arithmetic is modulo $2^{256}$ unless otherwise noted. The zero-th power of zero $0^0$ is defined to be one.} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x00 & {\small STOP} & 0 & 0 & This operation halts execution, see \label{STOP} and \label{emptySequence} for further information. \\ +0x00 & {\small STOP} & 0 & 0 & This operation halts execution, outputting the empty sequence as per equation \ref{eq:Normal Halting}. +\\ \midrule 0x01 & {\small ADD} & 2 & 1 & This is the addition operation. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]$ \\ From 9a4d05052e6c281525743e6c34f6c75f5b8004a5 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sun, 24 Sep 2017 16:37:02 +1000 Subject: [PATCH 031/132] nonce hyperlinks (block, account, transaction) --- Paper.tex | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/Paper.tex b/Paper.tex index 0aeca782..0fcefd45 100644 --- a/Paper.tex +++ b/Paper.tex @@ -177,9 +177,9 @@ \section{Conventions}\label{ch:conventions} For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg $C_\text{\tiny SSTORE}$, the cost function for the {\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. -Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_n$, denotes the \hyperref[itm:nonce]{nonce} of said transaction. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. +Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_n$, denotes the \hyperlink{transaction nonce}{nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. -Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a transaction nonce. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation. +Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a \hyperlink{transaction nonce}{transaction nonce}. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation. Arbitrary-length sequences are typically denoted as a bold lower-case letter, \eg $\mathbf{o}$ is used to denote the byte sequence given as the output data of a message call. For particularly important values, a bold uppercase letter may be used. @@ -210,6 +210,7 @@ \subsection{World State} \label{ch:state} The account state comprises the following four fields: \begin{description} +\hypertarget{account nonce}{} \item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_n$. \item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_b$. \item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the 256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_s$. @@ -258,6 +259,7 @@ \subsection{The Transaction} \label{subsec:transaction} A transaction (formally, $T$) is a single cryptographically-signed instruction constructed by an actor externally to the scope of Ethereum. While it is assumed that the ultimate external actor will be human in nature, software tools will be used in its construction and dissemination\footnote{Notably, such `tools' could ultimately become so causally removed from their human-based initiation---or humans may become so causally-neutral---that there could be a point at which they rightly be considered autonomous agents. \eg contracts may offer bounties to humans for being sent transactions to initiate their execution.}. There are two types of transactions: those which result in message calls and those which result in the creation of new accounts with associated code (known informally as `contract creation'). Both types specify a number of common fields: \begin{description} +\hypertarget{transaction nonce}{} \item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_n$. \item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_p$. \item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_g$. @@ -328,6 +330,7 @@ \subsection{The Block} \label{ch:block} \item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally $H_s$. \item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_x$. \item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_m$. +\hypertarget{block nonce}{} \item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_n$. \end{description} @@ -492,15 +495,15 @@ \subsubsection{Block Header Validity} This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced. -The nonce, $H_n$, must satisfy the relations: +The \hyperlink{block nonce}{nonce of a block}, $H_n$, must satisfy the relations: \begin{equation} n \leqslant \frac{2^{256}}{H_d} \quad \wedge \quad m = H_m \end{equation} with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d})$. -Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the nonce and mix-hash components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $H_d$. +Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $H_d$. -This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the nonce must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers. +This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the \hyperlink{block nonce}{block nonce} must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers. Thus we are able to define the block header validity function $V(H)$: \begin{eqnarray} @@ -535,7 +538,7 @@ \section{Transaction Execution} \label{ch:transactions} \begin{enumerate} \item The transaction is well-formed RLP, with no additional trailing bytes; \item the transaction signature is valid; -\item the transaction nonce is valid (equivalent to the sender account's current nonce); +\item the \hyperlink{transaction nonce}{transaction nonce} is valid (equivalent to the \hyperlink{account nonce}{sender account's current nonce}); \item the gas limit is no smaller than the intrinsic gas, $g_0$, used by the transaction; \item the sender account balance contains at least the cost, $v_0$, required in up-front payment. \end{enumerate} @@ -591,7 +594,7 @@ \subsection{Execution} Note the final condition; the sum of the transaction's gas limit, $T_g$, and the gas utilised in this block prior, given by $\ell(B_\mathbf{R})_u$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_l$. -The execution of a valid transaction begins with an irrevocable change made to the state: the nonce of the account of the sender, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_gT_p$. The gas available for the proceeding computation, $g$, is defined as $T_g - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point. +The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_gT_p$. The gas available for the proceeding computation, $g$, is defined as $T_g - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point. We define the checkpoint state $\boldsymbol{\sigma}_0$: \begin{eqnarray} @@ -654,12 +657,12 @@ \section{Contract Creation} \label{ch:create} (\boldsymbol{\sigma}', g', A) \equiv \Lambda(\boldsymbol{\sigma}, s, o, g, p, v, \mathbf{i}, e) \end{equation} -The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the nonce. Thus we define the resultant address for the new account $a$: +The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$: \begin{equation} a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_n - 1)\;\big)\Big)\Big) \end{equation} -where $\mathtt{\tiny KEC}$ is the Keccak 256-bit hash function, $\mathtt{\tiny RLP}$ is the RLP encoding function, $\mathcal{B}_{a..b}(X)$ evaluates to binary value containing the bits of indices in the range $[a, b]$ of the binary data $X$ and $\boldsymbol{\sigma}[x]$ is the address state of $x$ or $\varnothing$ if none exists. Note we use one fewer than the sender's nonce value; we assert that we have incremented the sender account's nonce prior to this call, and so the value used is the sender's nonce at the beginning of the responsible transaction or VM operation. +where $\mathtt{\tiny KEC}$ is the Keccak 256-bit hash function, $\mathtt{\tiny RLP}$ is the RLP encoding function, $\mathcal{B}_{a..b}(X)$ evaluates to binary value containing the bits of indices in the range $[a, b]$ of the binary data $X$ and $\boldsymbol{\sigma}[x]$ is the address state of $x$ or $\varnothing$ if none exists. Note we use one fewer than the \hyperlink{account nonce}{sender's nonce value}; we assert that we have incremented the sender account's nonce prior to this call, and so the value used is the sender's nonce at the beginning of the responsible transaction or VM operation. The account's nonce is initially defined as zero, the balance as the value passed, the storage as empty and the code hash as the Keccak 256-bit hash of the empty string; the sender's balance is also reduced by the value passed. Thus the mutated state becomes $\boldsymbol{\sigma}^*$: \begin{equation} @@ -748,7 +751,7 @@ \section{Message Call} \label{ch:call} \end{equation} unless $s = r$. -Throughout the present work, it is assumed that if $\boldsymbol{\sigma}_1[r]$ was originally undefined, it will be created as an account with no code or state and zero balance and nonce. Thus the previous equation should be taken to mean: +Throughout the present work, it is assumed that if $\boldsymbol{\sigma}_1[r]$ was originally undefined, it will be created as an account with no code or state and zero balance and \hyperlink{account nonce}{nonce}. Thus the previous equation should be taken to mean: \begin{equation} \boldsymbol{\sigma}_1 \equiv \boldsymbol{\sigma}_1' \quad \text{except:} \\ \end{equation} @@ -851,7 +854,7 @@ \subsection{Execution Overview} We must now define the $\Xi$ function. In most practical implementations this will be modelled as an iterative progression of the pair comprising the full system state, $\boldsymbol{\sigma}$ and the machine state, $\boldsymbol{\mu}$. Formally, we define it recursively with a function $X$. This uses an iterator function $O$ (which defines the result of a single cycle of the state machine) together with functions $Z$ which determines if the present state is an exceptional halting state of the machine and $H$, specifying the output data of the instruction if and only if the present state is a normal halting state of the machine. -\hypertarget{emptySequence} +\hypertarget{emptySequence}{} The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. \begin{eqnarray} \Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_g, A, \mathbf{o}) \\ @@ -1002,7 +1005,7 @@ \section{Block Finalisation} \label{ch:finalisation} \item Validate (or, if mining, determine) ommers; \item validate (or, if mining, determine) transactions; \item apply rewards; -\item verify (or, if mining, compute a valid) state and nonce. +\item verify (or, if mining, compute a valid) state and \hyperlink{block nonce}{nonce}. \end{enumerate} \subsection{Ommer Validation} @@ -1112,14 +1115,14 @@ \subsection{Mining Proof-of-Work} \label{ch:pow} One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task. In Bitcoin's case the task is the SHA256 hash function. While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet. -Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the nonce requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware'' for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum 1.0 we have chosen the first path. +Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the \hyperlink{block nonce}{nonce} requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware'' for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum 1.0 we have chosen the first path. More formally, the proof-of-work function takes the form of $\mathtt{PoW}$: \begin{equation} m = H_m \quad \wedge \quad n \leqslant \frac{2^{256}}{H_d} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d}) \end{equation} -Where $H_{\hcancel{n}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $H_n$ is the nonce of the header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $H_d$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. +Where $H_{\hcancel{n}}$ is the new block's header but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash components; $H_n$ is the \hyperlink{block nonce}{nonce} of the header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $H_d$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. \subsubsection{Ethash} Ethash is the PoW algorithm for Ethereum 1.0. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms have been drastically changed in the last month of research and development. The general route that the algorithm takes is as follows: @@ -2056,7 +2059,7 @@ \section{Genesis Block}\label{app:genesis} \big( \big( 0_{256}, \mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big), 0_{160}, stateRoot, 0, 0, 0_{2048}, 2^{17}, 0, 0, 3141592, time, 0, 0_{256}, \mathtt{\tiny KEC}\big( (42) \big) \big), (), () \big) \end{equation} -Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the beneficiary address, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the log bloom, 2048-bit of all zeros; $2^{17}$ refers to the difficulty; the transaction trie root, receipt trie root, gas used, block number and extradata are both $0$, being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the nonce. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in RLP, both empty lists. +Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the beneficiary address, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the log bloom, 2048-bit of all zeros; $2^{17}$ refers to the difficulty; the transaction trie root, receipt trie root, gas used, block number and extradata are both $0$, being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the \hyperlink{block nonce}{nonce}. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in RLP, both empty lists. The proof-of-concept series include a development premine, making the state root hash some value $stateRoot$. Also $time$ will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values. @@ -2183,13 +2186,13 @@ \subsubsection{Full dataset calculation} \label{dataset} \subsection{Proof-of-work function} Essentially, we maintain a "mix" $J_{mixbytes}$ bytes wide, and repeatedly sequentially fetch $J_{mixbytes}$ bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. $J_{mixbytes}$ bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. -If the output of this algorithm is below the desired target, then the nonce is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. +If the output of this algorithm is below the desired target, then the \hyperlink{block nonce}{nonce} is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. The PoW-function returns an array with the compressed mix as its first item and the Keccak-256 hash of the concatenation of the compressed mix with the seed hash as the second item: \begin{equation} \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d}) = \lbrace \mathbf{m}_c(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), H_n, \mathbf{d}), \texttt{KEC}(\mathbf{s}_h(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), H_n) + \mathbf{m}_c(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), H_n, \mathbf{d})) \rbrace \end{equation} -With $H_{\hcancel{n}}$ being the hash of the header without the nonce. The compressed mix $\mathbf{m}_c$ is obtained as follows: +With $H_{\hcancel{n}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_c$ is obtained as follows: \begin{equation} \mathbf{m}_c(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{accesses}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_h(\mathbf{h}, \mathbf{n}), \mathbf{s}_h(\mathbf{h}, \mathbf{n}), -1), -4) \end{equation} @@ -2198,7 +2201,7 @@ \subsection{Proof-of-work function} \begin{equation} \mathbf{s}_h(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{revert}(\mathbf{n})) \end{equation} -$E_{revert}(\mathbf{n})$ returns the reverted bytes sequence of the nonce $\mathbf{n}$: +$E_{revert}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$: \begin{equation} E_{revert}(\mathbf{n})[i] = \mathbf{n}[\lVert \mathbf{n} \rVert -i] \end{equation} From 18f211d2abf9751df5ad13545f68672946adf9c5 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sun, 24 Sep 2017 21:38:48 +1000 Subject: [PATCH 032/132] Fixed overfull lines in tables with tabularx. --- Biblio.bib | 2 +- Paper.tex | 114 +++++++++++++++++++++++++++-------------------------- 2 files changed, 60 insertions(+), 56 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index c4ccfbee..cb8177be 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -125,7 +125,7 @@ @article{mastercoin2013willett @article{colouredcoins2012rosenfeld, url = {{https://bitcoil.co.il/BitcoinX.pdf}}, - note = {{\url{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}.}}, + note = {{Test: \url{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}.}}, author = {Meni Rosenfeld}, title = {{Overview of Colored Coins}}, year = {{2012}}, diff --git a/Paper.tex b/Paper.tex index 0fcefd45..13a74efb 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,5 +1,6 @@ \documentclass[9pt,oneside]{amsart} \usepackage{cancel} +%\usepackage{tweaklist} \usepackage{xspace} \usepackage{graphicx} \usepackage{multicol} @@ -19,17 +20,25 @@ \usepackage{afterpage} \usepackage{tikz} \usepackage{underscore} +%\usepackage{lipsum} % to generate filler text for testing of document rendering \usepackage{hyperref} + +%\usepackage{longtable} +% https://stackoverflow.com/a/1918465/7438857 +%tabularx seems better + +\usepackage{tabularx} +%https://stackoverflow.com/a/1919447/7438857 + \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} -% "hyperref loads the url package internally. Use \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} to pass the option to the url package when it is loaded by hyperref. This avoids any package option clashes." Source: https://tex.stackexchange.com/questions/3033/forcing-linebreaks-in-url/3034#comment44478_3034. -% Note also this: "If the \PassOptionsToPackage{hyphens}{url} approach does not work, maybe it's "because you're trying to load the url package with a specific option, but it's being loaded by one of your packages before that with a different set of options. Try loading the url package earlier than the package that requires it. If it's loaded by the document class, try using \RequirePackage[hyphens]{url} before the document class." Source: https://tex.stackexchange.com/questions/3033/forcing-linebreaks-in-url/3034#comment555944_3034 -% \usepackage{tweaklist} +% "hyperref loads the url package internally. Use \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} to pass the option to the url package when it is loaded by hyperref. This avoids any package option clashes." Source: . +% Note also this: "If the \PassOptionsToPackage{hyphens}{url} approach does not work, maybe it's "because you're trying to load the url package with a specific option, but it's being loaded by one of your packages before that with a different set of options. Try loading the url package earlier than the package that requires it. If it's loaded by the document class, try using \RequirePackage[hyphens]{url} before the document class." Source: . \makeatletter \g@addto@macro{\UrlBreaks}{\UrlOrds} \makeatother %\PassOptionsToPackage{url}\g@addto@macro{\UrlBreaks}{\UrlOrds} -% info on the above command: https://tex.stackexchange.com/posts/10419/revisions +% info on the above command: . Note that the three preceding lines, as well as \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} did not fix the error where if a URL breaks over a page, it shows a snippet in the header as shown here: . The following command did fix this error. \expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j% @@ -39,6 +48,14 @@ \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X% \do\Y\do\Z} +%\sloppy +%\setlength{\emergencystretch}{2pt} +% These don't appear to make a difference with the preceding use of the \hypens package and \expandafter. +% https://tex.stackexchange.com/a/59131/143781 +% + + + \input{Version.tex} \newcommand{\hcancel}[1]{% @@ -1473,11 +1490,12 @@ \section{Signing Transactions}\label{app:signing} \forall T: \forall p_r: S(G(T, p_r)) \equiv A(p_r) \end{equation} +\newpage \section{Fee Schedule}\label{app:fees} The fee schedule $G$ is a tuple of 31 scalar values corresponding to the relative costs, in gas, of a number of abstract operations that a transaction may effect. -\begin{tabular*}{\columnwidth}[h]{lrl} +\begin{tabularx}{\textwidth}{lrX} \toprule Name & Value & Description* \\ \midrule @@ -1519,7 +1537,7 @@ \section{Fee Schedule}\label{app:fees} %extern u256 const c_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. \bottomrule -\end{tabular*} +\end{tabularx} \section{Virtual Machine Specification}\label{app:vm} @@ -1617,7 +1635,8 @@ \subsection{Instruction Set} Here given are the various exceptions to the state transition rules given in section \ref{ch:model} specified for each instruction, together with the additional instruction-specific definitions of $J$ and $C$. For each instruction, also specified is $\alpha$, the additional items placed on the stack and $\delta$, the items removed from the stack, as defined in section \ref{ch:model}. -\begin{tabular*}{\columnwidth}[h]{rlrrl} +%\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{0s: Stop and Arithmetic Operations}} \\ \multicolumn{5}{l}{All arithmetic is modulo $2^{256}$ unless otherwise noted. The zero-th power of zero $0^0$ is defined to be one.} \vspace{5pt} \\ @@ -1663,9 +1682,9 @@ \subsection{Instruction Set} 0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\ &&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_t &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathbf{s}[0] + 1) \\ \boldsymbol{\mu}_\mathbf{s}[1]_i &\text{otherwise} \end{cases}$ \\ \multicolumn{5}{l}{$\boldsymbol{\mu}_\mathbf{s}[x]_i$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathbf{s}[x]$} \vspace{5pt} \\ -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{10s: Comparison \& Bitwise Logic Operations}} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1705,9 +1724,9 @@ \subsection{Instruction Set} &&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_{(i + 8\boldsymbol{\mu}_\mathbf{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathbf{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\ &&&& For the Nth byte, we count from the left (i.e. $N=0$ would be the most significant in big endian). \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{20s: SHA3}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1715,9 +1734,9 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$ \\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{30s: Environmental Information}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1729,8 +1748,7 @@ \subsection{Instruction Set} \midrule 0x32 & {\small ORIGIN} & 0 & 1 & Get the address that the execution originated from. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_o$ \\ -&&&& This is the sender of the original transaction; it is never an account with non-empty \\ -&&&& associated code. \\ +&&&& This is the sender of the original transaction; it is never an account with non-empty associated code. \\ \midrule 0x33 & {\small CALLER} & 0 & 1 & Get the caller address. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_s$ \\ @@ -1777,20 +1795,17 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[3])$ \\ &&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[2] + i$ are not subject to the $2^{256}$ modulo. \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{40s: Block Information}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ 0x40 & {\small BLOCKHASH} & 1 & 1 & Get the hash of one of the 256 most recent complete blocks. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv P(I_{H_p}, \boldsymbol{\mu}_\mathbf{s}[0], 0)$ \\ -&&&& where $P$ is the hash of a block of a particular number, up to a maximum age.\\ -&&&& 0 is left on the stack if the looked for block number is greater than the current block number \\ -&&&& or more than 256 blocks behind the current block. \\ +&&&& where $P$ is the hash of a block of a particular number, up to a maximum age. 0 is left on the stack if the looked for block number is greater than the current block number or more than 256 blocks behind the current block. \\ &&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > H_i \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = H_i \\ P(H_p, n, a + 1) & \text{otherwise} \end{cases}$ \\ -&&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash \\ -&&&& in the block following it. \\ +&&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash in the block following it. \\ \midrule 0x41 & {\small COINBASE} & 0 & 1 & Get the block's beneficiary address. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_c$ \\ @@ -1807,9 +1822,9 @@ \subsection{Instruction Set} 0x45 & {\small GASLIMIT} & 0 & 1 & Get the block's gas limit. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_l$ \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{50s: Stack, Memory, Storage and Flow Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1852,23 +1867,21 @@ \subsection{Instruction Set} &&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[0] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \\ \boldsymbol{\mu}_{pc} + 1 & \text{otherwise} \end{cases} $ \\ &&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \ref{ch:model}. \\ \midrule -0x58 & {\small PC} & 0 & 1 & Get the value of the program counter \textit{prior} to the increment \\ -&&&& corresponding to this instruction. \\ +0x58 & {\small PC} & 0 & 1 & Get the value of the program counter \textit{prior} to the increment corresponding to this instruction. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{pc}$ \\ \midrule 0x59 & {\small MSIZE} & 0 & 1 & Get the size of active memory in bytes. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv 32\boldsymbol{\mu}_{i}$ \\ \midrule -0x5a & {\small GAS} & 0 & 1 & Get the amount of available gas, including the corresponding reduction \\ -&&&& for the cost of this instruction. \\ +0x5a & {\small GAS} & 0 & 1 & Get the amount of available gas, including the corresponding reduction for the cost of this instruction. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{g}$ \\ \midrule 0x5b & {\small JUMPDEST} & 0 & 0 & Mark a valid destination for jumps. \\ &&&& This operation has no effect on the machine state during execution. \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{60s \& 70s: Push Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1891,9 +1904,9 @@ \subsection{Instruction Set} &&&& where $\boldsymbol{c}$ is defined as above. \\ &&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{80s: Duplication Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1908,9 +1921,9 @@ \subsection{Instruction Set} 0x8f & {\small DUP16} & 16 & 17 & Duplicate the 16th stack item. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[15]$ \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{90s: Exchange Operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1928,9 +1941,9 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[16]$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[16] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{a0s: Logging Operations}} \vspace{5pt} \\ \multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\\ @@ -1950,9 +1963,9 @@ \subsection{Instruction Set} 0xa4 & {\small LOG4} & 6 & 0 & Append the log record with four topics. \\ &&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4], \boldsymbol{\mu}_\mathbf{s}[5])$ \\ \bottomrule -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule \multicolumn{5}{c}{\textbf{f0s: System operations}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ @@ -1964,8 +1977,7 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ &&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\ &&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_e = 1024$ \\ -&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_a]_b$ (the balance of the caller is \\ -&&&& too low to fulfil the value transfer); and otherwise $x=A(I_a, \boldsymbol{\sigma}[I_a]_n)$, the address of the \\ +&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_a]_b$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_a, \boldsymbol{\sigma}[I_a]_n)$, the address of the \\ &&&& newly created account. \\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ &&&& Thus the operand order is: value, input offset, input size. \\ @@ -2016,21 +2028,13 @@ \subsection{Instruction Set} &&&& This has the effect of halting the execution at this point with output defined.\\ &&&& See section \ref{ch:model}. \\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ -\end{tabular*} +\end{tabularx} -\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} \midrule -0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting\\ -&&&& the current values for {\it sender} and {\it value}. \\ -&&&& Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted\\ -&&&& argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} \\ -&&&& should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. \\ -&&&& Otherwise exactly equivalent to {\small CALL} except: \\ +0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persistingthe current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ &&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_s, I_o, I_a, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_p, 0, I_v, \mathbf{i}, I_e + 1)\end{array} & \text{if} \quad I_v \leqslant \boldsymbol{\sigma}[I_a]_b \;\wedge\; I_e < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ -&&&& Note the changes (in addition to that of the fourth parameter) to the second \\ -&&&& and ninth parameters to the call $\Theta$.\\ -&&&& This means that the recipient is in fact the same account as at present, simply\\ -&&&& that the code is overwritten {\it and} the context is almost entirely identical.\\ +&&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simplythat the code is overwritten {\it and} the context is almost entirely identical.\\ \midrule 0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \\ \midrule @@ -2047,7 +2051,7 @@ \subsection{Instruction Set} 0 & \text{otherwise} \end{cases}$ \\ \bottomrule -\end{tabular*} +\end{tabularx} %\section{Low-level Lisp-like Language}\label{app:lll} %The Low-level Lisp-like Language is a language created in order to efficiently author low-level programs (contracts) without having to resort to EVM-Assembly. @@ -2067,7 +2071,7 @@ \section{Ethash}\label{app:ethash} \subsection{Definitions} We employ the following definitions: -\begin{tabular*}{\columnwidth}[h]{lrl} +\begin{tabularx}{\textwidth}{rlrrX} \toprule Name & Value & Description \\ \midrule @@ -2083,7 +2087,7 @@ \subsection{Definitions} $J_{cacherounds}$ & 3 & Number of rounds in cache production. \\ $J_{accesses}$ & 64 & Number of accesses in hashimoto loop. \\ \bottomrule -\end{tabular*} +\end{tabularx} \subsection{Size of dataset and cache} The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. From be87f83eb8eff418ffe6dbe953c2e3d21534bc0e Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 24 Sep 2017 23:55:04 +1000 Subject: [PATCH 033/132] Added instructions for building --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fabebcb8..918d3a30 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,6 @@ The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf or just [yellowpaper.io](http://yellowpaper.io/) . -In order to build, use the supplied build script (``build.sh``). Following the first time, you can use the standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. It can be viewed in ``PDF`` format after building. +How to build +=== +In order to build, use the supplied build script (``build.sh``. You can clone the directory with `git clone https://github.com/ethereum/yellowpaper.git` or use the URL of your forked clone, then `cd yellowpaper` and run `./build.sh`. Then open the produced PDF. If running `./build.sh` again, you can leave the PDF open; you don't need to close and reopen it for it to update). Following the first time, you can use the standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. It can be viewed in ``PDF`` format after building. From 23f7cb113e692308ad12aa556df1584c8d7b18aa Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 24 Sep 2017 23:55:30 +1000 Subject: [PATCH 034/132] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 918d3a30..a016b5e1 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,5 @@ The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf or just [yellowpaper.io](http://yellowpaper.io/) . How to build -=== +--- In order to build, use the supplied build script (``build.sh``. You can clone the directory with `git clone https://github.com/ethereum/yellowpaper.git` or use the URL of your forked clone, then `cd yellowpaper` and run `./build.sh`. Then open the produced PDF. If running `./build.sh` again, you can leave the PDF open; you don't need to close and reopen it for it to update). Following the first time, you can use the standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. It can be viewed in ``PDF`` format after building. From 792fe9c3aafd75b34d862b1782801eed45edcaab Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Tue, 26 Sep 2017 17:36:07 +1000 Subject: [PATCH 035/132] Adding anchors and links plus minor edits --- Paper.brf | 0 Paper.out | 114 +++++++++++++++++++++--------------------- Paper.tex | 146 +++++++++++++++++++++++++++--------------------------- 3 files changed, 130 insertions(+), 130 deletions(-) create mode 100644 Paper.brf diff --git a/Paper.brf b/Paper.brf new file mode 100644 index 00000000..e69de29b diff --git a/Paper.out b/Paper.out index ddfe5ecc..2d247c37 100644 --- a/Paper.out +++ b/Paper.out @@ -1,57 +1,57 @@ -\BOOKMARK [1][-]{section.1}{1. Introduction}{}% 1 -\BOOKMARK [2][-]{subsection.1.1}{1.1. Driving Factors}{section.1}% 2 -\BOOKMARK [2][-]{subsection.1.2}{1.2. Previous Work}{section.1}% 3 -\BOOKMARK [1][-]{section.2}{2. The Blockchain Paradigm}{}% 4 -\BOOKMARK [2][-]{subsection.2.1}{2.1. Value}{section.2}% 5 -\BOOKMARK [2][-]{subsection.2.2}{2.2. Which History?}{section.2}% 6 -\BOOKMARK [1][-]{section.3}{3. Conventions}{}% 7 -\BOOKMARK [1][-]{section.4}{4. Blocks, State and Transactions}{}% 8 -\BOOKMARK [2][-]{subsection.4.1}{4.1. World State}{section.4}% 9 -\BOOKMARK [2][-]{subsection.4.2}{4.2. The Transaction}{section.4}% 10 -\BOOKMARK [2][-]{subsection.4.3}{4.3. The Block}{section.4}% 11 -\BOOKMARK [1][-]{section.5}{5. Gas and Payment}{}% 12 -\BOOKMARK [1][-]{section.6}{6. Transaction Execution}{}% 13 -\BOOKMARK [2][-]{subsection.6.1}{6.1. Substate}{section.6}% 14 -\BOOKMARK [2][-]{subsection.6.2}{6.2. Execution}{section.6}% 15 -\BOOKMARK [1][-]{section.7}{7. Contract Creation}{}% 16 -\BOOKMARK [2][-]{subsection.7.1}{7.1. Subtleties}{section.7}% 17 -\BOOKMARK [1][-]{section.8}{8. Message Call}{}% 18 -\BOOKMARK [1][-]{section.9}{9. Execution Model}{}% 19 -\BOOKMARK [2][-]{subsection.9.1}{9.1. Basics}{section.9}% 20 -\BOOKMARK [2][-]{subsection.9.2}{9.2. Fees Overview}{section.9}% 21 -\BOOKMARK [2][-]{subsection.9.3}{9.3. Execution Environment}{section.9}% 22 -\BOOKMARK [2][-]{subsection.9.4}{9.4. Execution Overview}{section.9}% 23 -\BOOKMARK [2][-]{subsection.9.5}{9.5. The Execution Cycle}{section.9}% 24 -\BOOKMARK [1][-]{section.10}{10. Blocktree to Blockchain}{}% 25 -\BOOKMARK [1][-]{section.11}{11. Block Finalisation}{}% 26 -\BOOKMARK [2][-]{subsection.11.1}{11.1. Ommer Validation}{section.11}% 27 -\BOOKMARK [2][-]{subsection.11.2}{11.2. Transaction Validation}{section.11}% 28 -\BOOKMARK [2][-]{subsection.11.3}{11.3. Reward Application}{section.11}% 29 -\BOOKMARK [2][-]{subsection.11.4}{11.4. State \046 Nonce Validation}{section.11}% 30 -\BOOKMARK [2][-]{subsection.11.5}{11.5. Mining Proof-of-Work}{section.11}% 31 -\BOOKMARK [1][-]{section.12}{12. Implementing Contracts}{}% 32 -\BOOKMARK [2][-]{subsection.12.1}{12.1. Data Feeds}{section.12}% 33 -\BOOKMARK [2][-]{subsection.12.2}{12.2. Random Numbers}{section.12}% 34 -\BOOKMARK [1][-]{section.13}{13. Future Directions}{}% 35 -\BOOKMARK [2][-]{subsection.13.1}{13.1. Scalability}{section.13}% 36 -\BOOKMARK [1][-]{section.14}{14. Conclusion}{}% 37 -\BOOKMARK [1][-]{section.15}{15. Acknowledgements}{}% 38 -\BOOKMARK [1][-]{section.16}{16. Availability}{}% 39 -\BOOKMARK [1][-]{section*.1}{References}{}% 40 -\BOOKMARK [1][-]{appendix.A}{Appendix A. Terminology}{}% 41 -\BOOKMARK [1][-]{appendix.B}{Appendix B. Recursive Length Prefix}{}% 42 -\BOOKMARK [1][-]{appendix.C}{Appendix C. Hex-Prefix Encoding}{}% 43 -\BOOKMARK [1][-]{appendix.D}{Appendix D. Modified Merkle Patricia Tree}{}% 44 -\BOOKMARK [2][-]{subsection.D.1}{D.1. Trie Database}{appendix.D}% 45 -\BOOKMARK [1][-]{appendix.E}{Appendix E. Precompiled Contracts}{}% 46 -\BOOKMARK [1][-]{appendix.F}{Appendix F. Signing Transactions}{}% 47 -\BOOKMARK [1][-]{appendix.G}{Appendix G. Fee Schedule}{}% 48 -\BOOKMARK [1][-]{appendix.H}{Appendix H. Virtual Machine Specification}{}% 49 -\BOOKMARK [2][-]{subsection.H.1}{H.1. Gas Cost}{appendix.H}% 50 -\BOOKMARK [2][-]{subsection.H.2}{H.2. Instruction Set}{appendix.H}% 51 -\BOOKMARK [1][-]{appendix.I}{Appendix I. Genesis Block}{}% 52 -\BOOKMARK [1][-]{appendix.J}{Appendix J. Ethash}{}% 53 -\BOOKMARK [2][-]{subsection.J.1}{J.1. Definitions}{appendix.J}% 54 -\BOOKMARK [2][-]{subsection.J.2}{J.2. Size of dataset and cache}{appendix.J}% 55 -\BOOKMARK [2][-]{subsection.J.3}{J.3. Dataset generation}{appendix.J}% 56 -\BOOKMARK [2][-]{subsection.J.4}{J.4. Proof-of-work function}{appendix.J}% 57 +\BOOKMARK [1][-]{section.1}{\376\377\0001\000.\000\040\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n}{}% 1 +\BOOKMARK [2][-]{subsection.1.1}{\376\377\0001\000.\0001\000.\000\040\000D\000r\000i\000v\000i\000n\000g\000\040\000F\000a\000c\000t\000o\000r\000s}{section.1}% 2 +\BOOKMARK [2][-]{subsection.1.2}{\376\377\0001\000.\0002\000.\000\040\000P\000r\000e\000v\000i\000o\000u\000s\000\040\000W\000o\000r\000k}{section.1}% 3 +\BOOKMARK [1][-]{section.2}{\376\377\0002\000.\000\040\000T\000h\000e\000\040\000B\000l\000o\000c\000k\000c\000h\000a\000i\000n\000\040\000P\000a\000r\000a\000d\000i\000g\000m}{}% 4 +\BOOKMARK [2][-]{subsection.2.1}{\376\377\0002\000.\0001\000.\000\040\000V\000a\000l\000u\000e}{section.2}% 5 +\BOOKMARK [2][-]{subsection.2.2}{\376\377\0002\000.\0002\000.\000\040\000W\000h\000i\000c\000h\000\040\000H\000i\000s\000t\000o\000r\000y\000?}{section.2}% 6 +\BOOKMARK [1][-]{section.3}{\376\377\0003\000.\000\040\000C\000o\000n\000v\000e\000n\000t\000i\000o\000n\000s}{}% 7 +\BOOKMARK [1][-]{section.4}{\376\377\0004\000.\000\040\000B\000l\000o\000c\000k\000s\000,\000\040\000S\000t\000a\000t\000e\000\040\000a\000n\000d\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000s}{}% 8 +\BOOKMARK [2][-]{subsection.4.1}{\376\377\0004\000.\0001\000.\000\040\000W\000o\000r\000l\000d\000\040\000S\000t\000a\000t\000e}{section.4}% 9 +\BOOKMARK [2][-]{subsection.4.2}{\376\377\0004\000.\0002\000.\000\040\000T\000h\000e\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n}{section.4}% 10 +\BOOKMARK [2][-]{subsection.4.3}{\376\377\0004\000.\0003\000.\000\040\000T\000h\000e\000\040\000B\000l\000o\000c\000k}{section.4}% 11 +\BOOKMARK [1][-]{section.5}{\376\377\0005\000.\000\040\000G\000a\000s\000\040\000a\000n\000d\000\040\000P\000a\000y\000m\000e\000n\000t}{}% 12 +\BOOKMARK [1][-]{section.6}{\376\377\0006\000.\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n}{}% 13 +\BOOKMARK [2][-]{subsection.6.1}{\376\377\0006\000.\0001\000.\000\040\000S\000u\000b\000s\000t\000a\000t\000e}{section.6}% 14 +\BOOKMARK [2][-]{subsection.6.2}{\376\377\0006\000.\0002\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n}{section.6}% 15 +\BOOKMARK [1][-]{section.7}{\376\377\0007\000.\000\040\000C\000o\000n\000t\000r\000a\000c\000t\000\040\000C\000r\000e\000a\000t\000i\000o\000n}{}% 16 +\BOOKMARK [2][-]{subsection.7.1}{\376\377\0007\000.\0001\000.\000\040\000S\000u\000b\000t\000l\000e\000t\000i\000e\000s}{section.7}% 17 +\BOOKMARK [1][-]{section.8}{\376\377\0008\000.\000\040\000M\000e\000s\000s\000a\000g\000e\000\040\000C\000a\000l\000l}{}% 18 +\BOOKMARK [1][-]{section.9}{\376\377\0009\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000M\000o\000d\000e\000l}{}% 19 +\BOOKMARK [2][-]{subsection.9.1}{\376\377\0009\000.\0001\000.\000\040\000B\000a\000s\000i\000c\000s}{section.9}% 20 +\BOOKMARK [2][-]{subsection.9.2}{\376\377\0009\000.\0002\000.\000\040\000F\000e\000e\000s\000\040\000O\000v\000e\000r\000v\000i\000e\000w}{section.9}% 21 +\BOOKMARK [2][-]{subsection.9.3}{\376\377\0009\000.\0003\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000E\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t}{section.9}% 22 +\BOOKMARK [2][-]{subsection.9.4}{\376\377\0009\000.\0004\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000O\000v\000e\000r\000v\000i\000e\000w}{section.9}% 23 +\BOOKMARK [2][-]{subsection.9.5}{\376\377\0009\000.\0005\000.\000\040\000T\000h\000e\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000C\000y\000c\000l\000e}{section.9}% 24 +\BOOKMARK [1][-]{section.10}{\376\377\0001\0000\000.\000\040\000B\000l\000o\000c\000k\000t\000r\000e\000e\000\040\000t\000o\000\040\000B\000l\000o\000c\000k\000c\000h\000a\000i\000n}{}% 25 +\BOOKMARK [1][-]{section.11}{\376\377\0001\0001\000.\000\040\000B\000l\000o\000c\000k\000\040\000F\000i\000n\000a\000l\000i\000s\000a\000t\000i\000o\000n}{}% 26 +\BOOKMARK [2][-]{subsection.11.1}{\376\377\0001\0001\000.\0001\000.\000\040\000O\000m\000m\000e\000r\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.11}% 27 +\BOOKMARK [2][-]{subsection.11.2}{\376\377\0001\0001\000.\0002\000.\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.11}% 28 +\BOOKMARK [2][-]{subsection.11.3}{\376\377\0001\0001\000.\0003\000.\000\040\000R\000e\000w\000a\000r\000d\000\040\000A\000p\000p\000l\000i\000c\000a\000t\000i\000o\000n}{section.11}% 29 +\BOOKMARK [2][-]{subsection.11.4}{\376\377\0001\0001\000.\0004\000.\000\040\000S\000t\000a\000t\000e\000\040\000\046\000\040\000N\000o\000n\000c\000e\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.11}% 30 +\BOOKMARK [2][-]{subsection.11.5}{\376\377\0001\0001\000.\0005\000.\000\040\000M\000i\000n\000i\000n\000g\000\040\000P\000r\000o\000o\000f\000-\000o\000f\000-\000W\000o\000r\000k}{section.11}% 31 +\BOOKMARK [1][-]{section.12}{\376\377\0001\0002\000.\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000i\000n\000g\000\040\000C\000o\000n\000t\000r\000a\000c\000t\000s}{}% 32 +\BOOKMARK [2][-]{subsection.12.1}{\376\377\0001\0002\000.\0001\000.\000\040\000D\000a\000t\000a\000\040\000F\000e\000e\000d\000s}{section.12}% 33 +\BOOKMARK [2][-]{subsection.12.2}{\376\377\0001\0002\000.\0002\000.\000\040\000R\000a\000n\000d\000o\000m\000\040\000N\000u\000m\000b\000e\000r\000s}{section.12}% 34 +\BOOKMARK [1][-]{section.13}{\376\377\0001\0003\000.\000\040\000F\000u\000t\000u\000r\000e\000\040\000D\000i\000r\000e\000c\000t\000i\000o\000n\000s}{}% 35 +\BOOKMARK [2][-]{subsection.13.1}{\376\377\0001\0003\000.\0001\000.\000\040\000S\000c\000a\000l\000a\000b\000i\000l\000i\000t\000y}{section.13}% 36 +\BOOKMARK [1][-]{section.14}{\376\377\0001\0004\000.\000\040\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 37 +\BOOKMARK [1][-]{section.15}{\376\377\0001\0005\000.\000\040\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000e\000m\000e\000n\000t\000s}{}% 38 +\BOOKMARK [1][-]{section.16}{\376\377\0001\0006\000.\000\040\000A\000v\000a\000i\000l\000a\000b\000i\000l\000i\000t\000y}{}% 39 +\BOOKMARK [1][-]{section*.1}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 40 +\BOOKMARK [1][-]{appendix.A}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000A\000.\000\040\000T\000e\000r\000m\000i\000n\000o\000l\000o\000g\000y}{}% 41 +\BOOKMARK [1][-]{appendix.B}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000B\000.\000\040\000R\000e\000c\000u\000r\000s\000i\000v\000e\000\040\000L\000e\000n\000g\000t\000h\000\040\000P\000r\000e\000f\000i\000x}{}% 42 +\BOOKMARK [1][-]{appendix.C}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000C\000.\000\040\000H\000e\000x\000-\000P\000r\000e\000f\000i\000x\000\040\000E\000n\000c\000o\000d\000i\000n\000g}{}% 43 +\BOOKMARK [1][-]{appendix.D}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000D\000.\000\040\000M\000o\000d\000i\000f\000i\000e\000d\000\040\000M\000e\000r\000k\000l\000e\000\040\000P\000a\000t\000r\000i\000c\000i\000a\000\040\000T\000r\000e\000e}{}% 44 +\BOOKMARK [2][-]{subsection.D.1}{\376\377\000D\000.\0001\000.\000\040\000T\000r\000i\000e\000\040\000D\000a\000t\000a\000b\000a\000s\000e}{appendix.D}% 45 +\BOOKMARK [1][-]{appendix.E}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000E\000.\000\040\000P\000r\000e\000c\000o\000m\000p\000i\000l\000e\000d\000\040\000C\000o\000n\000t\000r\000a\000c\000t\000s}{}% 46 +\BOOKMARK [1][-]{appendix.F}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000F\000.\000\040\000S\000i\000g\000n\000i\000n\000g\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000s}{}% 47 +\BOOKMARK [1][-]{appendix.G}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000G\000.\000\040\000F\000e\000e\000\040\000S\000c\000h\000e\000d\000u\000l\000e}{}% 48 +\BOOKMARK [1][-]{appendix.H}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000H\000.\000\040\000V\000i\000r\000t\000u\000a\000l\000\040\000M\000a\000c\000h\000i\000n\000e\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n}{}% 49 +\BOOKMARK [2][-]{subsection.H.1}{\376\377\000H\000.\0001\000.\000\040\000G\000a\000s\000\040\000C\000o\000s\000t}{appendix.H}% 50 +\BOOKMARK [2][-]{subsection.H.2}{\376\377\000H\000.\0002\000.\000\040\000I\000n\000s\000t\000r\000u\000c\000t\000i\000o\000n\000\040\000S\000e\000t}{appendix.H}% 51 +\BOOKMARK [1][-]{appendix.I}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000I\000.\000\040\000G\000e\000n\000e\000s\000i\000s\000\040\000B\000l\000o\000c\000k}{}% 52 +\BOOKMARK [1][-]{appendix.J}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000J\000.\000\040\000E\000t\000h\000a\000s\000h}{}% 53 +\BOOKMARK [2][-]{subsection.J.1}{\376\377\000J\000.\0001\000.\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000s}{appendix.J}% 54 +\BOOKMARK [2][-]{subsection.J.2}{\376\377\000J\000.\0002\000.\000\040\000S\000i\000z\000e\000\040\000o\000f\000\040\000d\000a\000t\000a\000s\000e\000t\000\040\000a\000n\000d\000\040\000c\000a\000c\000h\000e}{appendix.J}% 55 +\BOOKMARK [2][-]{subsection.J.3}{\376\377\000J\000.\0003\000.\000\040\000D\000a\000t\000a\000s\000e\000t\000\040\000g\000e\000n\000e\000r\000a\000t\000i\000o\000n}{appendix.J}% 56 +\BOOKMARK [2][-]{subsection.J.4}{\376\377\000J\000.\0004\000.\000\040\000P\000r\000o\000o\000f\000-\000o\000f\000-\000w\000o\000r\000k\000\040\000f\000u\000n\000c\000t\000i\000o\000n}{appendix.J}% 57 diff --git a/Paper.tex b/Paper.tex index 13a74efb..002da464 100644 --- a/Paper.tex +++ b/Paper.tex @@ -21,7 +21,8 @@ \usepackage{tikz} \usepackage{underscore} %\usepackage{lipsum} % to generate filler text for testing of document rendering -\usepackage{hyperref} +\usepackage[bookmarks=true, unicode=true, pdftitle={Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain}, pdfauthor={Gavin Wood and others as per https://github.com/ethereum/yellowpaper/commits/master},pdfkeywords={Ethereum, Yellow Paper, blockchain, virtual machine, cryptography, decentralised, singleton, transaction, generalised},pdfborder={0 0 0.5 [3 3]}]{hyperref} +%,pagebackref=true %\usepackage{longtable} % https://stackoverflow.com/a/1918465/7438857 @@ -38,7 +39,7 @@ \g@addto@macro{\UrlBreaks}{\UrlOrds} \makeatother %\PassOptionsToPackage{url}\g@addto@macro{\UrlBreaks}{\UrlOrds} -% info on the above command: . Note that the three preceding lines, as well as \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} did not fix the error where if a URL breaks over a page, it shows a snippet in the header as shown here: . The following command did fix this error. +% info on the above command: . Note that the three preceding lines, as well as \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} did not fix the error where if a URL breaks over a page, it shows a snippet in the header as shown here: . The following command did fix this error, however only because it happened to compact the text, preventing a URL from breaking over a page. If you force a URL to break over a page, the error still occurs. \expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j% @@ -47,7 +48,7 @@ \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N% \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X% \do\Y\do\Z} - +% More info: . %\sloppy %\setlength{\emergencystretch}{2pt} % These don't appear to make a difference with the preceding use of the \hypens package and \expandafter. @@ -55,7 +56,6 @@ % - \input{Version.tex} \newcommand{\hcancel}[1]{% @@ -132,7 +132,7 @@ \subsection{Previous Work} \label{ch:previous} \section{The Blockchain Paradigm} \label{ch:overview} -Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally: +Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally:\hypertarget{Upsilon}{} \begin{equation} \boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_t, T) \end{equation} @@ -147,10 +147,10 @@ \section{The Blockchain Paradigm} \label{ch:overview} \begin{eqnarray} \boldsymbol{\sigma}_{t+1} & \equiv & \Pi(\boldsymbol{\sigma}_t, B) \\ B & \equiv & (..., (T_0, T_1, ...) ) \\ -\Pi(\boldsymbol{\sigma}, B) & \equiv & \Omega(B, \Upsilon(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...) +\Pi(\boldsymbol{\sigma}, B) & \equiv & \hyperlink{Omega}{\Omega}(B, \hyperlink{Upsilon}{\Upsilon}(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...) \end{eqnarray} -Where $\Omega$ is the block-finalisation state transition function (a function that rewards a nominated party); $B$ is this block, which includes a series of transactions amongst some other components; and $\Pi$ is the block-level state-transition function. +Where \hyperlink{Omega}{$\Omega$} is the block-finalisation state transition function (a function that rewards a nominated party); $B$ is this block, which includes a series of transactions amongst some other components; and $\Pi$ is the block-level state-transition function. This is the basis of the blockchain paradigm, a model that forms the backbone of not only Ethereum, but all decentralised consensus-based transaction systems to date. @@ -190,7 +190,7 @@ \section{Conventions}\label{ch:conventions} The two sets of highly structured, `top-level', state values, are denoted with bold lowercase Greek letters. They fall into those of world-state, which are denoted $\boldsymbol{\sigma}$ (or a variant thereupon) and those of machine-state, $\boldsymbol{\mu}$. -Functions operating on highly structured values are denoted with an upper-case greek letter, \eg $\Upsilon$, the Ethereum state transition function. +Functions operating on highly structured values are denoted with an upper-case greek letter, \eg \hyperlink{Upsilon}{$\Upsilon$}, the Ethereum state transition function. For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg $C_\text{\tiny SSTORE}$, the cost function for the {\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. @@ -210,7 +210,7 @@ \section{Conventions}\label{ch:conventions} When considering the use of existing functions, given a function $f$, the function $f^*$ denotes a similar, element-wise version of the function mapping instead between sequences. It is formally defined in section \ref{ch:block}. -I define a number of useful functions throughout. One of the more common is $\ell$, which evaluates to the last item in the given sequence: +I define a number of useful functions throughout. \hypertarget{ell}{}One of the more common is $\ell$, which evaluates to the last item in the given sequence: \begin{equation} \ell(\mathbf{x}) \equiv \mathbf{x}[\lVert \mathbf{x} \rVert - 1] @@ -328,7 +328,7 @@ \subsection{The Transaction} \label{subsec:transaction} \subsection{The Block} \label{ch:block} -The block in Ethereum is the collection of relevant pieces of information (known as the block \textit{header}), $H$, together with information corresponding to the comprised transactions, $\mathbf{T}$, and a set of other block headers $\mathbf{U}$ that are known to have a parent equal to the present block's parent's parent (such blocks are known as \textit{ommers}\footnote{\textit{ommer} is the most prevalent (not saying much) gender-neutral term to mean ``sibling of parent''; see \url{http://nonbinary.org/wiki/Gender_neutral_language\#Family_Terms}}). The block header contains several pieces of information: +The block in Ethereum is the collection of relevant pieces of information (known as the block \textit{header}), $H$, together with information corresponding to the comprised transactions, $\mathbf{T}$, and a set of other \hypertarget{ommerheaders}{block headers $\mathbf{U}$} that are known to have a parent equal to the present block's parent's parent (such blocks are known as \textit{ommers}\footnote{\textit{ommer} is the most prevalent (which is not saying much, as it is not a well-known word) gender-neutral term to mean ``sibling of parent''; see \url{http://nonbinary.org/wiki/Gender_neutral_language\#Family_Terms}}). The block header contains several pieces of information: %\textit{TODO: Introduce logs} @@ -337,7 +337,7 @@ \subsection{The Block} \label{ch:block} \item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $H_o$. \item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block be transferred; formally $H_c$. \item[stateRoot] The Keccak 256-bit hash of the root node of the state trie, after all transactions are executed and finalisations applied; formally $H_r$. -\item[transactionsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with each transaction in the transactions list portion of the block; formally $H_t$. +\item[transactionsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with each transaction in the transactions list portion of the block; formally $H_t$.\hypertarget{H e}{} \item[receiptsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with the receipts of each transaction in the transactions list portion of the block; formally $H_e$. \item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally $H_b$. \item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_d$. @@ -356,25 +356,25 @@ \subsection{The Block} \label{ch:block} B \equiv (B_H, B_\mathbf{T}, B_\mathbf{U}) \end{equation} -\subsubsection{Transaction Receipt} +\hypertarget{Transaction Receipt}{\subsubsection{Transaction Receipt}} In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution. -Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed trie and the root recorded in the header as $H_e$. +Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed trie and the root recorded in the header as \hyperlink{H e}{$H_e$}. -The transaction receipt is a tuple of four items comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$, the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_u$, the set of logs created through execution of the transaction, $R_\mathbf{l}$ and the Bloom filter composed from information in those logs, $R_b$: +The transaction receipt is a tuple of four items \hypertarget{Rsigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{Ru}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_u$}, the set of logs created through execution of the transaction, $R_\mathbf{l}$ and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_b$}: \begin{equation} -R \equiv (R_{\boldsymbol{\sigma}}, R_u, R_b, R_\mathbf{l}) +R \equiv (R_{\boldsymbol{\sigma}}, R_u, \hyperlink{R b}{R_b}, R_\mathbf{l}) \end{equation} The function $L_R$ trivially prepares a transaction receipt for being transformed into an RLP-serialised byte array: \begin{equation} -L_R(R) \equiv (\mathtt{\small TRIE}(L_S(R_{\boldsymbol{\sigma}})), R_u, R_b, R_\mathbf{l}) +L_R(R) \equiv (\mathtt{\small TRIE}(L_S(R_{\boldsymbol{\sigma}})), R_u, \hyperlink{R b}{R_b}, R_\mathbf{l}) \end{equation} thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a trie structure, the root of which forms the first item. -We assert $R_u$, the cumulative gas used is a positive integer and that the logs Bloom, $R_b$, is a hash of size 2048 bits (256 bytes): +We assert $R_u$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_b$}, is a hash of size 2048 bits (256 bytes): \begin{equation} -R_u \in \mathbb{P} \quad \wedge \quad R_b \in \mathbb{B}_{256} +R_u \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_b} \in \mathbb{B}_{256} \end{equation} %Notably $B_\mathbf{T}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence. @@ -522,7 +522,7 @@ \subsubsection{Block Header Validity} This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the \hyperlink{block nonce}{block nonce} must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers. -Thus we are able to define the block header validity function $V(H)$: +Thus we are able to define the \hypertarget{BlockHeaderValidityFunction}{block header validity function $V(H)$}:\label{eq:BlockHeaderValidityFunction} \begin{eqnarray} V(H) & \equiv & n \leqslant \frac{2^{256}}{H_d} \wedge m = H_m \quad \wedge \\ & & H_d = D(H) \quad \wedge \\ @@ -550,7 +550,7 @@ \section{Gas and Payment} \label{ch:payment} \section{Transaction Execution} \label{ch:transactions} -The execution of a transaction is the most complex part of the Ethereum protocol: it defines the state transition function $\Upsilon$. It is assumed that any transactions executed first pass the initial tests of intrinsic validity. These include: +The execution of a transaction is the most complex part of the Ethereum protocol: it defines the state transition function \hyperlink{Upsilon}{$\Upsilon$}. It is assumed that any transactions executed first pass the initial tests of intrinsic validity. These include: \begin{enumerate} \item The transaction is well-formed RLP, with no additional trailing bytes; @@ -560,12 +560,12 @@ \section{Transaction Execution} \label{ch:transactions} \item the sender account balance contains at least the cost, $v_0$, required in up-front payment. \end{enumerate} -Formally, we consider the function $\Upsilon$, with $T$ being a transaction and $\boldsymbol{\sigma}$ the state: +Formally, we consider the function \hyperlink{Upsilon}{$\Upsilon$}, with $T$ being a transaction and $\boldsymbol{\sigma}$ the state: \begin{equation} \boldsymbol{\sigma}' = \Upsilon(\boldsymbol{\sigma}, T) \end{equation} -Thus $\boldsymbol{\sigma}'$ is the post-transactional state. We also define $\Upsilon^g$ to evaluate to the amount of gas used in the execution of a transaction and $\Upsilon^\mathbf{l}$ to evaluate to the transaction's accrued log items, both to be formally defined later. +Thus $\boldsymbol{\sigma}'$ is the post-transactional state. We also define \hyperlink{Upsilong}{$\Upsilon^g$} to evaluate to the amount of gas used in the execution of a transaction and \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} to evaluate to the transaction's accrued log items, both to be formally defined later. \subsection{Substate} Throughout transaction execution, we accrue certain information that is acted upon immediately following the transaction. We call this \textit{transaction substate}, and represent it as $A$, which is a tuple: @@ -605,11 +605,11 @@ \subsection{Execution} T_n & = & \boldsymbol{\sigma}[S(T)]_n \quad \wedge \\ g_0 & \leqslant & T_g \quad \wedge \\ v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_b \quad \wedge \\ -T_g & \leqslant & {B_H}_l - \ell(B_\mathbf{R})_u +T_g & \leqslant & {B_H}_l - \hyperlink{ell}{\ell}\hyperlink{Ru}{(\mathbf{R})_u} \end{array} \end{equation} -Note the final condition; the sum of the transaction's gas limit, $T_g$, and the gas utilised in this block prior, given by $\ell(B_\mathbf{R})_u$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_l$. +Note the final condition; the sum of the transaction's gas limit, $T_g$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathbf{R})_u$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_l$. The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_gT_p$. The gas available for the proceeding computation, $g$, is defined as $T_g - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point. @@ -657,13 +657,13 @@ \subsection{Execution} \forall i \in A_\mathbf{s}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing \end{eqnarray} -And finally, we specify $\Upsilon^g$, the total gas used in this transaction and $\Upsilon^\mathbf{l}$, the logs created by this transaction: +\hypertarget{Upsilong}{And finally, we specify $\Upsilon^g$, the total gas used in this transaction}\hypertarget{Upsilonl}{ and $\Upsilon^\mathbf{l}$, the logs created by this transaction:} \begin{eqnarray} \Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_g - g' \\ \Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_\mathbf{l} \end{eqnarray} -These are used to help define the transaction receipt, discussed later. +These are used to help define the \hyperlink{Transaction Receipt}{transaction receipt}. \section{Contract Creation} \label{ch:create} @@ -751,7 +751,7 @@ \section{Contract Creation} \label{ch:create} Note that the intention is that the result is either a successfully created new contract with its endowment, or no new contract with no transfer of value. \subsection{Subtleties} -Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a {\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever. +Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever. \section{Message Call} \label{ch:call} In the case of executing a message call, several parameters are required: sender ($s$), transaction originator ($o$), recipient ($r$), the account whose code is to be executed ($c$, usually the same as recipient), available gas ($g$), value ($v$) and gas price ($p$) together with an arbitrary length byte array, $\mathbf{d}$, the input data of the call and finally the present depth of the message-call/contract-creation stack ($e$). @@ -963,12 +963,12 @@ \subsubsection{Normal Halting} \label{subsec:Normal Halting} \begin{equation} \label{eq:Normal Halting} H(\boldsymbol{\mu}, I) \equiv \begin{cases} H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small RETURN} \\ -() & \text{if} \quad w \in \text{\small STOP}, \text{\small SELFDESTRUCT} \} \\ +() & \text{if} \quad w \in \text{\small STOP}, \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ \varnothing & \text{otherwise} \end{cases} \end{equation} -The data-returning halt operation, \text{\small RETURN}, has a special function $H_{\text{\tiny RETURN}}$, defined in Appendix \ref{app:vm}. Note also the difference between the empty sequence and the empty set as discussed \hyperlink{emptySequence}{here}. +The data-returning halt operation, \hyperlink{RETURN}{\text{\small RETURN}}, has a special function $H_{\text{\tiny RETURN}}$. Note also the difference between the empty sequence and the empty set as discussed \hyperlink{emptySequence}{here}. \subsection{The Execution Cycle} @@ -982,8 +982,8 @@ \subsection{The Execution Cycle} The gas is reduced by the instruction's gas cost and for most instructions, the program counter increments on each cycle, for the three exceptions, we assume a function $J$, subscripted by one of two instructions, which evaluates to the according value: \begin{eqnarray} -\quad \boldsymbol{\mu}'_{g} & \equiv & \boldsymbol{\mu}_{g} - C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \\ -\quad \boldsymbol{\mu}'_{pc} & \equiv & \begin{cases} +\quad \boldsymbol{\mu}'_{g} & \equiv & \boldsymbol{\mu}_{g} - C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \\ +\hypertarget{JUMP}{} \hypertarget{JUMPI}{} \label{eq:JUMP} \quad \boldsymbol{\mu}'_{pc} & \equiv & \begin{cases} J_{\text{JUMP}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMP} \\ J_{\text{JUMPI}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMPI} \\ N(\boldsymbol{\mu}_{pc}, w) & \text{otherwise} @@ -1027,9 +1027,9 @@ \section{Block Finalisation} \label{ch:finalisation} \subsection{Ommer Validation} -The validation of ommer headers means nothing more than verifying that each ommer header is both a valid header and satisfies the relation of $N$th-generation ommer to the present block where $N \leq 6$. The maximum of ommer headers is two. Formally: +The validation of \hyperlink{ommerheaders}{ommer headers} means nothing more than verifying that each ommer header is both a valid header and satisfies the relation of $N$th-generation ommer to the present block where $N \leq 6$. The maximum of ommer headers is two. Formally: \begin{equation} -\lVert B_\mathbf{U} \rVert \leqslant 2 \bigwedge_{U \in B_\mathbf{U}} V(U) \; \wedge \; k(U, P(B_H)_H, 6) +\lVert B_\mathbf{U} \rVert \leqslant 2 \bigwedge_{U \in B_\mathbf{U}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6) \end{equation} where $k$ denotes the ``is-kin'' property: @@ -1052,24 +1052,24 @@ \subsection{Transaction Validation} The given \textbf{gasUsed} must correspond faithfully to the transactions listed: ${B_H}_g$, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction: \begin{equation} -{B_H}_g = \ell(\mathbf{R})_u +{B_H}_g = \hyperlink{ell}{\ell}\hyperlink{Ru}{(\mathbf{R})_u} \end{equation} \subsection{Reward Application} -The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by $R_b$; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. Formally we define the function $\Omega$: +The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{R b}{$R_b$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):} \begin{eqnarray} \Omega(B, \boldsymbol{\sigma}) & \equiv & \boldsymbol{\sigma}': \boldsymbol{\sigma}' = \boldsymbol{\sigma} \quad \text{except:} \\ -\boldsymbol{\sigma}'[{B_H}_c]_b & = & \boldsymbol{\sigma}[{B_H}_c]_b + (1 + \frac{\lVert B_\mathbf{U}\rVert}{32})R_b \\ +\boldsymbol{\sigma}'[{B_H}_c]_b & = & \boldsymbol{\sigma}[{B_H}_c]_b + (1 + \frac{\lVert B_\mathbf{U}\rVert}{32})\hyperlink{R b}{R_b} \\ \forall_{U \in B_\mathbf{U}}: \\ \nonumber - \boldsymbol{\sigma}'[U_c]_b & = & \boldsymbol{\sigma}[U_c]_b + (1 + \frac{1}{8} (U_i - {B_H}_i)) R_b + \boldsymbol{\sigma}'[U_c]_b & = & \boldsymbol{\sigma}[U_c]_b + (1 + \frac{1}{8} (U_i - {B_H}_i)) \hyperlink{R b}{R_b} \end{eqnarray} If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively. We define the block reward as 5 Ether: \begin{equation} -\text{Let} \quad R_b = 5 \times 10^{18} +\text{Let} \quad \hyperlink{R b}{R_b} = 5 \times 10^{18} \end{equation} \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} @@ -1084,7 +1084,7 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_i))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_i$; it is assumed that implementations will store this in the state database, trivial and efficient since the trie is by nature an immutable data structure. -And finally define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$: +And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$: \begin{eqnarray} \Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\ B'_n & = & n: \quad x \leqslant \frac{2^{256}}{H_d} \\ @@ -1093,34 +1093,34 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} \end{eqnarray} With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}. -As specified at the beginning of the present work, $\Pi$ is the state-transition function, which is defined in terms of $\Omega$, the block finalisation function and $\Upsilon$, the transaction-evaluation function, both now well-defined. +As specified at the beginning of the present work, $\Pi$ is the state-transition function, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined. -As previously detailed, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_u$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_b$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction): +\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_u$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_b$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction): \begin{equation} -\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \Upsilon(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) & \text{otherwise} \end{cases} +\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) & \text{otherwise} \end{cases} \end{equation} In the case of $B_\mathbf{R}[n]_u$, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total: \begin{equation} \mathbf{R}[n]_u = \begin{cases} 0 & \text{if} \quad n < 0 \\ \begin{array}[b]{l} -\Upsilon^g(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])\\ \quad + \mathbf{R}[n-1]_u +\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])\\ \quad + \mathbf{R}[n-1]_u \end{array} & \text{otherwise} \end{cases} \end{equation} -For $\mathbf{R}[n]_\mathbf{l}$, we utilise the $\Upsilon^\mathbf{l}$ function that we conveniently defined in the transaction execution function. +For $\mathbf{R}[n]_\mathbf{l}$, we utilise the \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} function that we conveniently defined in the transaction execution function. \begin{equation} \mathbf{R}[n]_\mathbf{l} = -\Upsilon^\mathbf{l}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) +\hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) \end{equation} -Finally, we define $\Pi$ as the new state given the block reward function $\Omega$ applied to the final transaction's resultant state, $\ell(B_\mathbf{R})_{\boldsymbol{\sigma}}$: +Finally, we define $\Pi$ as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$: \begin{equation} -\Pi(\boldsymbol{\sigma}, B) \equiv \Omega(B, \ell(\mathbf{R})_{\boldsymbol{\sigma}}) +\Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{Rsigma}{\mathbf{R})_{\boldsymbol{\sigma}}}) \end{equation} -Thus the complete block-transition mechanism, less $\mathtt{PoW}$, the proof-of-work function is defined. +Thus the complete block-transition mechanism is defined, except for $\mathtt{PoW}$, the proof-of-work function. \subsection{Mining Proof-of-Work} \label{ch:pow} @@ -1249,7 +1249,7 @@ \section{Recursive Length Prefix}\label{app:rlp} We define the RLP function as $\mathtt{\tiny RLP}$ through two sub-functions, the first handling the instance when the value is a byte array, the second when it is a sequence of further values: \begin{equation} -\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} R_b(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ R_l(\mathbf{x}) & \text{otherwise} \end{cases} +\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_b}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ R_l(\mathbf{x}) & \text{otherwise} \end{cases} \end{equation} If the value to be serialised is a byte-array, the RLP serialisation takes one of three forms: @@ -1259,8 +1259,8 @@ \section{Recursive Length Prefix}\label{app:rlp} \item If the byte-array contains fewer than 56 bytes, then the output is equal to the input prefixed by the byte equal to the length of the byte array plus 128. \item Otherwise, the output is equal to the input prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the input byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 183. \end{itemize} - -Formally, we define $R_b$: +\hypertarget{R b}{ +Formally, we define $R_b$:} \begin{eqnarray} R_b(\mathbf{x}) & \equiv & \begin{cases} \mathbf{x} & \text{if} \quad \lVert \mathbf{x} \rVert = 1 \wedge \mathbf{x}[0] < 128 \\ @@ -1437,7 +1437,7 @@ \section{Signing Transactions}\label{app:signing} It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}. -We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \footnote{For the former citation, refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER (assuming that the former is for signature generation and the latter is for signature verification).} +We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \footnote{For the former citation, refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.} %(assuming that the former is for signature generation and the latter is for signature verification) \begin{eqnarray} \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\ \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\ @@ -1511,15 +1511,15 @@ \section{Fee Schedule}\label{app:fees} $G_{jumpdest}$ & 1 & This is paid for a {\small JUMPDEST} operation. \\ $G_{sset}$ & 20000 & This is paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\ $G_{sreset}$ & 5000 & This is the amount for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\ -$R_{sclear}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \\ -$R_{selfdestruct}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \\ -$G_{selfdestruct}$ & 5000 & This is the amount of gas to pay for a {\small SELFDESTRUCT} operation. \\ +$R_{sclear}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \hypertarget{Rselfdestruct}{}\\ +$R_{selfdestruct}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \hypertarget{Gselfdestruct}{}\\ +$G_{selfdestruct}$ & 5000 & This is the amount of gas to pay for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation. \\ $G_{create}$ & 32000 & This is paid for a {\small CREATE} operation. \\ $G_{codedeposit}$ & 200 & This is paid per byte for a {\small CREATE} operation to succeed in placing code into the state. \\ $G_{call}$ & 700 & This is paid for a {\small CALL} operation. \\ $G_{callvalue}$ & 9000 & This is paid for a non-zero value transfer as part of the {\small CALL} operation. \\ -$G_{callstipend}$ & 2300 & This is a stipend for the called contract subtracted from $G_{callvalue}$ for a non-zero value transfer. \\ -$G_{newaccount}$ & 25000 & This is paid for a {\small CALL} or for a {\small SELFDESTRUCT} operation which creates an account. \\ +$G_{callstipend}$ & 2300 & This is a stipend for the called contract subtracted from $G_{callvalue}$ for a non-zero value transfer. \hypertarget{Gnewaccount}{}\\ +$G_{newaccount}$ & 25000 & This is paid for a {\small CALL} or for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation which creates an account. \\ $G_{exp}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ $G_{expbyte}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ $G_{memory}$ & 3 & This is paid for every additional word when expanding memory. \\ @@ -1562,7 +1562,7 @@ \subsection{Gas Cost} G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+3G_{logtopic} & \text{if} \quad w = \text{\small LOG3} \\ G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+4G_{logtopic} & \text{if} \quad w = \text{\small LOG4} \\ C_\text{\tiny CALL}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small CALL} \lor \text{\small CALLCODE} \lor \text{\small DELEGATECALL} \\ -C_\text{\tiny SELFDESTRUCT}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SELFDESTRUCT} \\ +\hyperlink{C tiny SELFDESTRUCT}{C_\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ G_{create} & \text{if} \quad w = \text{\small CREATE}\\ G_{sha3}+G_{sha3word} \lceil \mathbf{s}[1] \div 32 \rceil & \text{if} \quad w = \text{\small SHA3}\\ G_{jumpdest} & \text{if} \quad w = \text{\small JUMPDEST}\\ @@ -1589,7 +1589,7 @@ \subsection{Gas Cost} C_{mem}(a) \equiv G_{memory} \cdot a + \Big\lfloor \dfrac{a^2}{512} \Big\rfloor \end{equation} -with $C_\text{\tiny CALL}$, $C_\text{\tiny SELFDESTRUCT}$ and $C_\text{\tiny SSTORE}$ as specified in the appropriate section below. We define the following subsets of instructions: +with \hyperlink{tiny CALL}{$C_\text{\tiny CALL}$}, \hyperlink{C tiny SELFDESTRUCT}{$C_\text{\tiny SELFDESTRUCT}$} and \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$} as specified in the appropriate section below. We define the following subsets of instructions: $W_{zero}$ = \{{\small STOP}, {\small RETURN}\} @@ -1849,7 +1849,7 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_a]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \\ \midrule 0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\ -&&&& $\boldsymbol{\sigma}'[I_a]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \\ +&&&& $\boldsymbol{\sigma}'[I_a]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{}\\ &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} G_{sset} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_a]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ G_{sreset} & \text{otherwise} @@ -1861,11 +1861,11 @@ \subsection{Instruction Set} \midrule 0x56 & {\small JUMP} & 1 & 0 & Alter the program counter. \\ &&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{s}[0] $ \\ -&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \ref{ch:model}. \\ +&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See equation \hyperlink{JUMP}{\ref{eq:JUMP}}. \\ \midrule 0x57 & {\small JUMPI} & 2 & 0 & Conditionally alter the program counter. \\ &&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[0] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \\ \boldsymbol{\mu}_{pc} + 1 & \text{otherwise} \end{cases} $ \\ -&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \ref{ch:model}. \\ +&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \hyperlink{JUMPI}{\ref{eq:JUMP}}. \\ \midrule 0x58 & {\small PC} & 0 & 1 & Get the value of the program counter \textit{prior} to the increment corresponding to this instruction. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{pc}$ \\ @@ -1996,7 +1996,7 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}_\mathbf{s}[2] > \boldsymbol{\sigma}[I_a]_b$ (not enough funds) or $I_e = 1024$ (call depth limit reached); $x=1$ \\ &&&& otherwise. \\ &&&& $\boldsymbol{\mu}'_i \equiv M(M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4]), \boldsymbol{\mu}_\mathbf{s}[5], \boldsymbol{\mu}_\mathbf{s}[6])$ \\ -&&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \\ +&&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \hypertarget{tiny CALL}{}\\ &&&& $C_{\text{\tiny CALL}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$ \\ &&&& $C_{\text{\tiny CALLGAS}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{callstipend} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ @@ -2021,33 +2021,33 @@ \subsection{Instruction Set} &&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_a, I_o, I_a, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_p, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_e + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_a]_b \;\wedge\\ \quad\quad{}I_e < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_\mathbf{s}[1]$\\ &&&& (as in {\small CALL}) to the present address $I_a$. This means that the recipient is in fact the\\ -&&&& same account as at present, simply that the code is overwritten.\\ +&&&& same account as at present, simply that the code is overwritten.\hypertarget{RETURN}{}\\ \midrule 0xf3 & {\small RETURN} & 2 & 0 & Halt execution returning output data. \\ &&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots ( \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1 ) ]$ \\ &&&& This has the effect of halting the execution at this point with output defined.\\ -&&&& See section \ref{ch:model}. \\ +&&&& See equation \ref{eq:Normal Halting}. \\ &&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ \end{tabularx} \begin{tabularx}{\textwidth}{rlrrX} \midrule -0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persistingthe current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ +0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ &&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_s, I_o, I_a, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_p, 0, I_v, \mathbf{i}, I_e + 1)\end{array} & \text{if} \quad I_v \leqslant \boldsymbol{\sigma}[I_a]_b \;\wedge\; I_e < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ -&&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simplythat the code is overwritten {\it and} the context is almost entirely identical.\\ +&&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ \midrule -0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \\ +0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{SELFDESTRUCT}{}\\ \midrule 0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. \\ &&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_a \}$ \\ &&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_b \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_b + \boldsymbol{\sigma}[I_a]_b$ \\ &&&& $\boldsymbol{\sigma}'[I_a]_b \equiv 0$ \\ &&&& $A'_{r} \equiv A_{r} + \begin{cases} -R_{selfdestruct} & \text{if} \quad I_a \notin A_\mathbf{s} \\ -0 & \text{otherwise} -\end{cases}$ \\ -&&&& $C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{selfdestruct} + \begin{cases} -G_{newaccount} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] = \varnothing \\ +\hyperlink{Rselfdestruct}{R_{selfdestruct}} & \text{if} \quad I_a \notin A_\mathbf{s} \\ +0 & \text{otherwise} +\end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\ +&&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{selfdestruct}} + \begin{cases} +\hyperlink{Gnewaccount}{G_{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] = \varnothing \\ 0 & \text{otherwise} \end{cases}$ \\ \bottomrule From e39fbc88a1ee2458ba7a56f852bba79b4196c25a Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Tue, 26 Sep 2017 23:03:36 +1000 Subject: [PATCH 036/132] Fixing subscripts to /mathbf, cross-referencing. --- Paper.tex | 563 +++++++++++++++++++++++++++--------------------------- 1 file changed, 283 insertions(+), 280 deletions(-) diff --git a/Paper.tex b/Paper.tex index 002da464..f3695bc1 100644 --- a/Paper.tex +++ b/Paper.tex @@ -134,7 +134,7 @@ \section{The Blockchain Paradigm} \label{ch:overview} Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally:\hypertarget{Upsilon}{} \begin{equation} -\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_t, T) +\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_\mathbf{t}, T) \end{equation} where $\Upsilon$ is the Ethereum state transition function. In Ethereum, $\Upsilon$, together with $\boldsymbol{\sigma}$ are considerably more powerful then any existing comparable system; $\Upsilon$ allows components to carry out arbitrary computation, while $\boldsymbol{\sigma}$ allows components to store arbitrary state between transactions. @@ -145,7 +145,7 @@ \section{The Blockchain Paradigm} \label{ch:overview} Formally, we expand to: \begin{eqnarray} -\boldsymbol{\sigma}_{t+1} & \equiv & \Pi(\boldsymbol{\sigma}_t, B) \\ +\boldsymbol{\sigma}_{t+1} & \equiv & \Pi(\boldsymbol{\sigma}_\mathbf{t}, B) \\ B & \equiv & (..., (T_0, T_1, ...) ) \\ \Pi(\boldsymbol{\sigma}, B) & \equiv & \hyperlink{Omega}{\Omega}(B, \hyperlink{Upsilon}{\Upsilon}(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...) \end{eqnarray} @@ -194,7 +194,7 @@ \section{Conventions}\label{ch:conventions} For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg $C_\text{\tiny SSTORE}$, the cost function for the {\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. -Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_n$, denotes the \hyperlink{transaction nonce}{nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. +Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_\mathbf{n}$, denotes the \hyperlink{transaction nonce}{nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a \hyperlink{transaction nonce}{transaction nonce}. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation. @@ -228,15 +228,15 @@ \subsection{World State} \label{ch:state} \begin{description} \hypertarget{account nonce}{} -\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_n$. -\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_b$. -\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the 256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_s$. -\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_c$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_c$. +\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_\mathbf{n}$. +\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_\mathbf{b}$. +\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the 256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{s}$. +\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{c}$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_\mathbf{c}$. \end{description} Since I typically wish to refer not to the trie's root hash but to the underlying set of key/value pairs stored within, I define a convenient equivalence: \begin{equation} -\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathbf{s})\big) \equiv \boldsymbol{\sigma}[a]_s +\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathbf{s})\big) \equiv \boldsymbol{\sigma}[a]_\mathbf{s} \end{equation} The collapse function for the set of key/value pairs in the trie, $L_I^*$, is defined as the element-wise transformation of the base function $L_I$, given as: @@ -251,7 +251,7 @@ \subsection{World State} \label{ch:state} It shall be understood that $\boldsymbol{\sigma}[a]_\mathbf{s}$ is not a `physical' member of the account and does not contribute to its later serialisation. -If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_c = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account. +If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_\mathbf{c} = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account. Thus we may define a world-state collapse function $L_S$: \begin{equation} @@ -259,16 +259,17 @@ \subsection{World State} \label{ch:state} \end{equation} where \begin{equation} -p(a) \equiv \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_n, \boldsymbol{\sigma}[a]_b, \boldsymbol{\sigma}[a]_s, \boldsymbol{\sigma}[a]_c) \big) \big) +p(a) \equiv \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_\mathbf{n}, \boldsymbol{\sigma}[a]_\mathbf{b}, \boldsymbol{\sigma}[a]_\mathbf{s}, \boldsymbol{\sigma}[a]_\mathbf{c}) \big) \big) \end{equation} This function, $L_S$, is used alongside the trie function to provide a short identity (hash) of the world state. We assume: \begin{equation} \forall a: \boldsymbol{\sigma}[a] = \varnothing \; \vee \; (a \in \mathbb{B}_{20} \; \wedge \; v(\boldsymbol{\sigma}[a])) \end{equation} -where $v$ is the account validity function: +\hypertarget{v x}{where $v$ is the account validity function: \begin{equation} -\quad v(x) \equiv x_n \in \mathbb{P}_{256} \wedge x_b \in \mathbb{P}_{256} \wedge x_s \in \mathbb{B}_{32} \wedge x_c \in \mathbb{B}_{32} +\quad v(x) \equiv x_\mathbf{n} \in \mathbb{P}_{256} \wedge x_\mathbf{b} \in \mathbb{P}_{256} \wedge x_\mathbf{s} \in \mathbb{B}_{32} \wedge x_\mathbf{c} \in \mathbb{B}_{32} +} \end{equation} \subsection{The Transaction} \label{subsec:transaction} @@ -276,13 +277,13 @@ \subsection{The Transaction} \label{subsec:transaction} A transaction (formally, $T$) is a single cryptographically-signed instruction constructed by an actor externally to the scope of Ethereum. While it is assumed that the ultimate external actor will be human in nature, software tools will be used in its construction and dissemination\footnote{Notably, such `tools' could ultimately become so causally removed from their human-based initiation---or humans may become so causally-neutral---that there could be a point at which they rightly be considered autonomous agents. \eg contracts may offer bounties to humans for being sent transactions to initiate their execution.}. There are two types of transactions: those which result in message calls and those which result in the creation of new accounts with associated code (known informally as `contract creation'). Both types specify a number of common fields: \begin{description} -\hypertarget{transaction nonce}{} -\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_n$. -\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_p$. -\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_g$. -\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_t$. -\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_v$. -\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally $T_w$, $T_r$ and $T_s$. This is expanded in Appendix \ref{app:signing}. +\hypertarget{T n}{ +\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_\mathbf{n}$.}\hypertarget{T p}{ +\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_\mathbf{p}$.}\hypertarget{T g}{ +\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathbf{g}$.}\hypertarget{T t}{ +\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathbf{t}$.}\hypertarget{T v}{ +\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathbf{v}$.} +\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally \hyperlink{T w}{$T_\mathbf{w}$}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}. This is expanded in Appendix \ref{app:signing}. \end{description} Additionally, a contract creation transaction contains: @@ -301,28 +302,28 @@ \subsection{The Transaction} \label{subsec:transaction} \begin{equation} -L_T(T) \equiv \begin{cases} -(T_n, T_p, T_g, T_t, T_v, T_\mathbf{i}, T_w, T_r, T_s) & \text{if} \; T_t = \varnothing\\ -(T_n, T_p, T_g, T_t, T_v, T_\mathbf{d}, T_w, T_r, T_s) & \text{otherwise} +L_\mathbf{T}(T) \equiv \begin{cases} +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{if} \; T_\mathbf{t} = \varnothing\\ +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{otherwise} \end{cases} \end{equation} Here, we assume all components are interpreted by the RLP as integer values, with the exception of the arbitrary length byte arrays $T_\mathbf{i}$ and $T_\mathbf{d}$. \begin{equation} \begin{array}[t]{lclclc} -T_n \in \mathbb{P}_{256} & \wedge & T_v \in \mathbb{P}_{256} & \wedge & T_p \in \mathbb{P}_{256} & \wedge \\ -T_g \in \mathbb{P}_{256} & \wedge & T_w \in \mathbb{P}_5 & \wedge & T_r \in \mathbb{P}_{256} & \wedge \\ -T_s \in \mathbb{P}_{256} & \wedge & T_\mathbf{d} \in \mathbb{B} & \wedge & T_\mathbf{i} \in \mathbb{B} +T_\mathbf{n} \in \mathbb{P}_{256} & \wedge & \hyperlink{T v}{T_\mathbf{v}} \in \mathbb{P}_{256} & \wedge & T_\mathbf{p} \in \mathbb{P}_{256} & \wedge \\ +T_\mathbf{g} \in \mathbb{P}_{256} & \wedge & \hyperlink{T w}{T_\mathbf{w}} \in \mathbb{P}_5 & \wedge & T_\mathbf{r} \in \mathbb{P}_{256} & \wedge \\ +T_\mathbf{s} \in \mathbb{P}_{256} & \wedge & T_\mathbf{d} \in \mathbb{B} & \wedge & T_\mathbf{i} \in \mathbb{B} \end{array} \end{equation} where \begin{equation} -\mathbb{P}_n = \{ P: P \in \mathbb{P} \wedge P < 2^n \} +\mathbb{P}_\mathbf{n} = \{ P: P \in \mathbb{P} \wedge P < 2^n \} \end{equation} The address hash $T_\mathbf{t}$ is slightly different: it is either a 20-byte address hash or, in the case of being a contract-creation transaction (and thus formally equal to $\varnothing$), it is the RLP empty byte sequence and thus the member of $\mathbb{B}_0$: \begin{equation} -T_\mathbf{t} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_t \neq \varnothing \\ +T_\mathbf{t} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_\mathbf{t} \neq \varnothing \\ \mathbb{B}_{0} & \text{otherwise}\end{cases} \end{equation} @@ -332,23 +333,23 @@ \subsection{The Block} \label{ch:block} %\textit{TODO: Introduce logs} -\begin{description} -\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_p$. -\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $H_o$. -\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block be transferred; formally $H_c$. -\item[stateRoot] The Keccak 256-bit hash of the root node of the state trie, after all transactions are executed and finalisations applied; formally $H_r$. -\item[transactionsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with each transaction in the transactions list portion of the block; formally $H_t$.\hypertarget{H e}{} -\item[receiptsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with the receipts of each transaction in the transactions list portion of the block; formally $H_e$. -\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally $H_b$. -\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_d$. -\item[number] A scalar value equal to the number of ancestor blocks. The genesis block has a number of zero; formally $H_i$. -\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_l$. -\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_g$. -\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally $H_s$. -\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_x$. -\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_m$. -\hypertarget{block nonce}{} -\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_n$. +\begin{description}\hypertarget{H p}{ +\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_\mathbf{p}$.} +\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_\mathbf{o}}$.\hypertarget{H c}{ +\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block be transferred; formally $H_\mathbf{c}$.} +\item[stateRoot] The Keccak 256-bit hash of the root node of the state trie, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}. +\item[transactionsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}. +\item[receiptsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}. +\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarget{H d}{ +\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{ +\item[number] A scalar value equal to the number of ancestor blocks. The genesis block has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{ +\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathbf{l}$.}\hypertarget{H g}{ +\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathbf{g}$.} +\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally \hyperlink{H s}{$H_\mathbf{s}$}.\hypertarget{H x}{ +\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_\mathbf{x}$.}\hypertarget{H m}{ +\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{m}$.} +\hypertarget{block nonce}{\hypertarget{H n}{ +\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{n}$.}} \end{description} The other two components in the block are simply a list of ommer block headers (of the same format as above) and a series of the transactions. Formally, we can refer to a block $B$: @@ -359,37 +360,37 @@ \subsection{The Block} \label{ch:block} \hypertarget{Transaction Receipt}{\subsubsection{Transaction Receipt}} In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution. -Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed trie and the root recorded in the header as \hyperlink{H e}{$H_e$}. +Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed trie and the root recorded in the header as \hyperlink{H e}{$H_\mathbf{e}$}. -The transaction receipt is a tuple of four items \hypertarget{Rsigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{Ru}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_u$}, the set of logs created through execution of the transaction, $R_\mathbf{l}$ and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_b$}: +The transaction receipt is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathbf{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathbf{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathbf{b}$}: \begin{equation} -R \equiv (R_{\boldsymbol{\sigma}}, R_u, \hyperlink{R b}{R_b}, R_\mathbf{l}) +R \equiv (R_{\boldsymbol{\sigma}}, R_\mathbf{u}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) \end{equation} The function $L_R$ trivially prepares a transaction receipt for being transformed into an RLP-serialised byte array: \begin{equation} -L_R(R) \equiv (\mathtt{\small TRIE}(L_S(R_{\boldsymbol{\sigma}})), R_u, \hyperlink{R b}{R_b}, R_\mathbf{l}) +L_R(R) \equiv (\mathtt{\small TRIE}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathbf{u}}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) \end{equation} thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a trie structure, the root of which forms the first item. -We assert $R_u$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_b$}, is a hash of size 2048 bits (256 bytes): +We assert $\hyperlink{R u}{R_\mathbf{u}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_\mathbf{b}$}, is a hash of size 2048 bits (256 bytes): \begin{equation} -R_u \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_b} \in \mathbb{B}_{256} +\hyperlink{R u}{R_\mathbf{u}} \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_\mathbf{b}} \in \mathbb{B}_{256} \end{equation} %Notably $B_\mathbf{T}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence. -The log entries, $R_\mathbf{l}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_a$, a series of 32-bytes log topics, $O_\mathbf{t}$ and some number of bytes of data, $O_\mathbf{d}$: +The log entries, $\hyperlink{R l}{R_\mathbf{l}}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_\mathbf{a}$, a series of 32-bytes log topics, $O_\mathbf{t}$ and some number of bytes of data, $O_\mathbf{d}$: \begin{equation} -O \equiv (O_a, ({O_\mathbf{t}}_0, {O_\mathbf{t}}_1, ...), O_\mathbf{d}) +O \equiv (O_\mathbf{a}, ({O_\mathbf{t}}_0, {O_\mathbf{t}}_1, ...), O_\mathbf{d}) \end{equation} \begin{equation} -O_a \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_\mathbf{t}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_\mathbf{d} \in \mathbb{B} +O_\mathbf{a} \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_\mathbf{t}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_\mathbf{d} \in \mathbb{B} \end{equation} We define the Bloom filter function, $M$, to reduce a log entry into a single 256-byte hash: \begin{equation} -M(O) \equiv \bigvee_{t \in \{O_a\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big) +M(O) \equiv \bigvee_{t \in \{O_\mathbf{a}\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big) \end{equation} where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence./footnote{11 bits $= 2^2048$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence."} Formally: @@ -404,14 +405,14 @@ \subsection{The Block} \label{ch:block} \subsubsection{Holistic Validity} -We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathbf{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_r$: +We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathbf{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_\mathbf{r}$: \begin{equation} -\begin{array}[t]{lclc} -H_r &\equiv& \mathtt{\small TRIE}(L_S(\Pi(\boldsymbol{\sigma}, B))) & \wedge \\ -H_o &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(B_\mathbf{U}))) & \wedge \\ -H_t &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{T} \rVert, i \in \mathbb{P}: p(i, L_T(B_\mathbf{T}[i]))\}) & \wedge \\ -H_e &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{R} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\}) & \wedge \\ -H_b &\equiv& \bigvee_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_b \big) +\begin{array}[t]{lclc}\hypertarget{H r}{ +H_\mathbf{r} &\equiv& \mathtt{\small TRIE}(L_S(\Pi(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\ +H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(B_\mathbf{U})))} & \wedge \hypertarget{H t}{\\ +H_\mathbf{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{T} \rVert, i \in \mathbb{P}: p(i, L_\mathbf{T}(B_\mathbf{T}[i]))\}) }& \wedge \hypertarget{H e}{\\ +H_\mathbf{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{R} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\})} & \wedge \hypertarget{H b}{\\ +H_\mathbf{b} &\equiv& \bigvee_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_\mathbf{b} \big)} \end{array} \end{equation} @@ -422,7 +423,7 @@ \subsubsection{Holistic Validity} Furthermore: \begin{equation} -\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_r +\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_\mathbf{r} \end{equation} Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly. @@ -433,11 +434,11 @@ \subsubsection{Serialisation} The function $L_B$ and $L_H$ are the preparation functions for a block and block header respectively. Much like the transaction receipt preparation function $L_R$, we assert the types and order of the structure for when the RLP transformation is required: \begin{eqnarray} -\quad L_H(H) & \equiv & (\begin{array}[t]{l}H_p, H_o, H_c, H_r, H_t, H_e, H_b, H_d,\\ H_i, H_l, H_g, H_s, H_x, H_m, H_n \; )\end{array} \\ -\quad L_B(B) & \equiv & \big( L_H(B_H), L_T^*(B_\mathbf{T}), L_H^*(B_\mathbf{U}) \big) +\quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_\mathbf{p}}, \hyperlink{H o}{H_\mathbf{o}}, \hyperlink{H c}{H_\mathbf{c}}, \hyperlink{H r}{H_\mathbf{r}}, \hyperlink{H t}{H_\mathbf{t}}, \hyperlink{H e}{H_\mathbf{e}}, \hyperlink{H b}{H_\mathbf{b}}, \hyperlink{H d}{H_\mathbf{d}},\\ \hyperlink{H i}{H_\mathbf{i}}, \hyperlink{H l}{H_\mathbf{l}}, \hyperlink{H g}{H_\mathbf{g}}, \hyperlink{H s}{H_\mathbf{s}}, \hyperlink{H x}{H_\mathbf{x}}, \hyperlink{H m}{H_\mathbf{m}}, \hyperlink{H n}{H_\mathbf{n}} \; )\end{array} \\ +\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathbf{T}^*(B_\mathbf{T}), L_H^*(B_\mathbf{U}) \big) \end{eqnarray} -With $L_T^*$ and $L_H^*$ being element-wise sequence transformations, thus: +With $L_\mathbf{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus: \begin{equation} f^*\big( (x_0, x_1, ...) \big) \equiv \big( f(x_0), f(x_1), ... \big) \quad \text{for any function} \; f \end{equation} @@ -445,17 +446,17 @@ \subsubsection{Serialisation} The component types are defined thus: \begin{equation} \begin{array}[t]{lclclcl} -H_p \in \mathbb{B}_{32} & \wedge & H_o \in \mathbb{B}_{32} & \wedge & H_c \in \mathbb{B}_{20} & \wedge \\ -H_r \in \mathbb{B}_{32} & \wedge & H_t \in \mathbb{B}_{32} & \wedge & H_e \in \mathbb{B}_{32} & \wedge \\ -H_b \in \mathbb{B}_{256} & \wedge & H_d \in \mathbb{P} & \wedge & H_i \in \mathbb{P} & \wedge \\ -H_l \in \mathbb{P} & \wedge & H_g \in \mathbb{P} & \wedge & H_s \in \mathbb{P}_{256} & \wedge \\ -H_x \in \mathbb{B} & \wedge & H_m \in \mathbb{B}_{32} & \wedge & H_n \in \mathbb{B}_{8} +\hyperlink{H p}{H_\mathbf{p}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H o}{H_\mathbf{o}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H c}{H_\mathbf{c}} \in \mathbb{B}_{20} & \wedge \\ +\hyperlink{H r}{H_\mathbf{r}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H t}{H_\mathbf{t}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H e}{H_\mathbf{e}} \in \mathbb{B}_{32} & \wedge \\ +H_\mathbf{b} \in \mathbb{B}_{256} & \wedge & \hyperlink{H d}{H_\mathbf{d}} \in \mathbb{P} & \wedge & \hyperlink{H i}{H_\mathbf{i}} \in \mathbb{P} & \wedge \\ +\hyperlink{H l}{H_\mathbf{l}} \in \mathbb{P} & \wedge & \hyperlink{H g}{H_\mathbf{g}} \in \mathbb{P} & \wedge & \hyperlink{H s}{H_\mathbf{s}} \in \mathbb{P}_{256} & \wedge \\ +\hyperlink{H x}{H_\mathbf{x}} \in \mathbb{B} & \wedge & \hyperlink{H m}{H_\mathbf{m}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H n}{H_\mathbf{n}} \in \mathbb{B}_{8} \end{array} \end{equation} where \begin{equation} -\mathbb{B}_n = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \} +\mathbb{B}_\mathbf{n} = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \} \end{equation} We now have a rigorous specification for the construction of a formal block structure. The RLP function $\texttt{\small RLP}$ (see Appendix \ref{app:rlp}) provides the canonical method for transforming this structure into a sequence of bytes ready for transmission over the wire or storage locally. @@ -464,12 +465,12 @@ \subsubsection{Block Header Validity} We define $P(B_H)$ to be the parent block of $B$, formally: \begin{equation} -P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = H_p +P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = \hyperlink{H p}{H_\mathbf{p}} \end{equation} The block number is the parent's block number incremented by one: \begin{equation} -H_i \equiv {{P(H)_H}_i} + 1 +\hyperlink{H i}{H_\mathbf{i}} \equiv {{P(H)_H}_\mathbf{i}} + 1 \end{equation} \newcommand{\mindifficulty}{D_0} @@ -480,8 +481,8 @@ \subsubsection{Block Header Validity} The canonical difficulty of a block of header $H$ is defined as $D(H)$: \begin{equation} D(H) \equiv \begin{dcases} -\mindifficulty & \text{if} \quad H_i = 0\\ -\text{max}\!\left(\mindifficulty, {P(H)_H}_d + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\ +\mindifficulty & \text{if} \quad \hyperlink{H i}{H_\mathbf{i}} = 0\\ +\text{max}\!\left(\mindifficulty, {P(H)_H}_\mathbf{d} + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\ \end{dcases} \end{equation} where: @@ -489,52 +490,53 @@ \subsubsection{Block Header Validity} \mindifficulty \equiv 131072 \end{equation} \begin{equation} -\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_d}{2048}\right\rfloor +\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_\mathbf{d}}{2048}\right\rfloor \end{equation} \begin{equation} -\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{H_s - {P(H)_H}_s}{10}\right\rfloor, -99 \right) +\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{\hyperlink{H s}{H_\mathbf{s}} - {P(H)_H}_\mathbf{s}}{10}\right\rfloor, -99 \right) \end{equation} \begin{equation} -\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor H_i \div 100000 \right\rfloor - 2 } \right\rfloor +\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor \end{equation} -The canonical gas limit $H_l$ of a block of header $H$ must fulfil the relation: +The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation: \begin{eqnarray} -& & H_l < {P(H)_H}_l + \left\lfloor\frac{{P(H)_H}_l}{1024}\right\rfloor \quad \wedge \\ -& & H_l > {P(H)_H}_l - \left\lfloor\frac{{P(H)_H}_l}{1024}\right\rfloor \quad \wedge \\ -& & H_l \geqslant 125000 +& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000 \end{eqnarray} -$H_s$ is the timestamp of block $H$ and must fulfil the relation: +\hyperlink{H s}{$H_\mathbf{s}$} is the timestamp of block $H$ and must fulfil the relation: \begin{equation} -H_s > {P(H)_H}_s +\hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s} \end{equation} This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced. -The \hyperlink{block nonce}{nonce of a block}, $H_n$, must satisfy the relations: +The nonce of a block, $\hyperlink{H n}{H_\mathbf{n}}$, must satisfy the relations: \begin{equation} -n \leqslant \frac{2^{256}}{H_d} \quad \wedge \quad m = H_m +n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \wedge \quad \mathbf{m} = \hyperlink{H m}{H_\mathbf{m}} \end{equation} -with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d})$. +with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$. -Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $H_d$. +\hypertarget{h cancel n}{} +Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $\hyperlink{H d}{H_\mathbf{d}}$. This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the \hyperlink{block nonce}{block nonce} must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers. Thus we are able to define the \hypertarget{BlockHeaderValidityFunction}{block header validity function $V(H)$}:\label{eq:BlockHeaderValidityFunction} \begin{eqnarray} -V(H) & \equiv & n \leqslant \frac{2^{256}}{H_d} \wedge m = H_m \quad \wedge \\ -& & H_d = D(H) \quad \wedge \\ -& & H_g \le H_l \quad \wedge \\ -& & H_l < {P(H)_H}_l + \left\lfloor\frac{{P(H)_H}_l}{1024}\right\rfloor \quad \wedge \\ -& & H_l > {P(H)_H}_l - \left\lfloor\frac{{P(H)_H}_l}{1024}\right\rfloor \quad \wedge \\ -& & H_l \geqslant 125000 \quad \wedge \\ -& & H_s > {P(H)_H}_s \quad \wedge \\ -& & H_i = {P(H)_H}_i +1 \quad \wedge \\ -& & \lVert H_x \rVert \le 32 +V(H) & \equiv & n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \wedge m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \\ +& & \hyperlink{H d}{H_\mathbf{d}} = D(H) \quad \wedge \\ +& & \hyperlink{H g}{H_\mathbf{g}} \le \hyperlink{H l}{H_\mathbf{l}} \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000 \quad \wedge \\ +& & \hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s} \quad \wedge \\ +& & \hyperlink{H i}{H_\mathbf{i}} = {P(H)_H}_\mathbf{i} +1 \quad \wedge \\ +& & \lVert \hyperlink{H x}{H_\mathbf{x}} \rVert \le 32 \end{eqnarray} -where $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d})$ +where $(\mathbf{n}, \mathbf{m}) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$ Noting additionally that \textbf{extraData} must be at most 32 bytes. @@ -570,10 +572,10 @@ \section{Transaction Execution} \label{ch:transactions} \subsection{Substate} Throughout transaction execution, we accrue certain information that is acted upon immediately following the transaction. We call this \textit{transaction substate}, and represent it as $A$, which is a tuple: \begin{equation} -A \equiv (A_\mathbf{s}, A_\mathbf{l}, A_r) +A \equiv (A_\mathbf{s}, A_\mathbf{l}, A_\mathbf{r}) \end{equation} -The tuple contents include $A_\mathbf{s}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_\mathbf{l}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_r$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs. +The tuple contents include $A_\mathbf{s}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_\mathbf{l}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_\mathbf{r}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs. For brevity, we define the empty substate $A^0$ to have no self-destructs, no logs and a zero refund balance: \begin{equation} @@ -584,7 +586,7 @@ \subsection{Execution} We define intrinsic gas $g_0$, the amount of gas this transaction requires to be paid prior to execution, as follows: \begin{align} g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} G_{txdatazero} & \text{if} \quad i = 0 \\ G_{txdatanonzero} & \text{otherwise} \end{cases} \\ -{} & + \begin{cases} G_\text{txcreate} & \text{if} \quad T_t = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ +{} & + \begin{cases} G_\text{txcreate} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ {} & + G_{transaction} \end{align} @@ -594,7 +596,7 @@ \subsection{Execution} The up-front cost $v_0$ is calculated as: \begin{equation} -v_0 \equiv T_g T_p + T_v +v_0 \equiv T_\mathbf{g} T_\mathbf{p} + \hyperlink{T v}{T_\mathbf{v}} \end{equation} The validity is determined as: @@ -602,53 +604,53 @@ \subsection{Execution} \begin{array}[t]{rcl} S(T) & \neq & \varnothing \quad \wedge \\ \boldsymbol{\sigma}[S(T)] & \neq & \varnothing \quad \wedge \\ -T_n & = & \boldsymbol{\sigma}[S(T)]_n \quad \wedge \\ -g_0 & \leqslant & T_g \quad \wedge \\ -v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_b \quad \wedge \\ -T_g & \leqslant & {B_H}_l - \hyperlink{ell}{\ell}\hyperlink{Ru}{(\mathbf{R})_u} +T_\mathbf{n} & = & \boldsymbol{\sigma}[S(T)]_\mathbf{n} \quad \wedge \\ +g_0 & \leqslant & T_\mathbf{g} \quad \wedge \\ +v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_\mathbf{b} \quad \wedge \\ +T_\mathbf{g} & \leqslant & {B_H}_\mathbf{l} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_\mathbf{R})_\mathbf{u}} \end{array} \end{equation} -Note the final condition; the sum of the transaction's gas limit, $T_g$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathbf{R})_u$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_l$. +Note the final condition; the sum of the transaction's gas limit, $T_\mathbf{g}$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathbf{R})_\mathbf{u}$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_\mathbf{l}$. -The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_gT_p$. The gas available for the proceeding computation, $g$, is defined as $T_g - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point. +The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_\mathbf{g}T_\mathbf{p}$. The gas available for the proceeding computation, $g$, is defined as $T_\mathbf{g} - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point. We define the checkpoint state $\boldsymbol{\sigma}_0$: \begin{eqnarray} \boldsymbol{\sigma}_0 & \equiv & \boldsymbol{\sigma} \quad \text{except:} \\ -\boldsymbol{\sigma}_0[S(T)]_b & \equiv & \boldsymbol{\sigma}[S(T)]_b - T_g T_p \\ -\boldsymbol{\sigma}_0[S(T)]_n & \equiv & \boldsymbol{\sigma}[S(T)]_n + 1 +\boldsymbol{\sigma}_0[S(T)]_b & \equiv & \boldsymbol{\sigma}[S(T)]_b - T_g T_p \\% +\boldsymbol{\sigma}_0[S(T)]_\mathbf{n} & \equiv & \boldsymbol{\sigma}[S(T)]_\mathbf{n} + 1 \end{eqnarray} Evaluating $\boldsymbol{\sigma}_P$ from $\boldsymbol{\sigma}_0$ depends on the transaction type; either contract creation or message call; we define the tuple of post-execution provisional state $\boldsymbol{\sigma}_P$, remaining gas $g'$ and substate $A$: \begin{equation} (\boldsymbol{\sigma}_P, g', A) \equiv \begin{cases} -\Lambda(\boldsymbol{\sigma}_0, S(T), T_o, &\\ \quad\quad g, T_p, T_v, T_\mathbf{i}, 0) & \text{if} \quad T_t = \varnothing \\ -\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_o, &\\ \quad\quad T_t, T_t, g, T_p, T_v, T_v, T_\mathbf{d}, 0) & \text{otherwise} +\Lambda(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, 0) & \text{if} \quad T_\mathbf{t} = \varnothing \\ +\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad T_\mathbf{t}, T_\mathbf{t}, g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, 0) & \text{otherwise} \end{cases} \end{equation} where $g$ is the amount of gas remaining after deducting the basic amount required to pay for the existence of the transaction: \begin{equation} -g \equiv T_g - g_0 +g \equiv T_\mathbf{g} - g_0 \end{equation} -and $T_o$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code. +and $T_\mathbf{o}$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code. Note we use $\Theta_{3}$ to denote the fact that only the first three components of the function's value are taken; the final represents the message-call's output value (a byte array) and is unused in the context of transaction evaluation. After the message call or contract creation is processed, the state is finalised by determining the amount to be refunded, $g^*$ from the remaining gas, $g'$, plus some allowance from the refund counter, to the sender at the original rate. \begin{equation} -g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_g - g'}{2} \Big\rfloor, A_r \} +g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_\mathbf{g} - g'}{2} \Big\rfloor, A_\mathbf{r} \} \end{equation} -The total refundable amount is the legitimately remaining gas $g'$, added to $A_r$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_g - g'$. +The total refundable amount is the legitimately remaining gas $g'$, added to $A_\mathbf{r}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_\mathbf{g} - g'$. The Ether for the gas is given to the miner, whose address is specified as the beneficiary of the present block $B$. So we define the pre-final state $\boldsymbol{\sigma}^*$ in terms of the provisional state $\boldsymbol{\sigma}_P$: \begin{eqnarray} \boldsymbol{\sigma}^* & \equiv & \boldsymbol{\sigma}_P \quad \text{except} \\ -\boldsymbol{\sigma}^*[S(T)]_b & \equiv & \boldsymbol{\sigma}_P[S(T)]_b + g^* T_p \\ -\boldsymbol{\sigma}^*[m]_b & \equiv & \boldsymbol{\sigma}_P[m]_b + (T_g - g^*) T_p \\ -m & \equiv & {B_H}_c +\boldsymbol{\sigma}^*[S(T)]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[S(T)]_\mathbf{b} + g^* T_\mathbf{p} \\ +\boldsymbol{\sigma}^*[m]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[m]_\mathbf{b} + (T_\mathbf{g} - g^*) T_\mathbf{p} \\ +m & \equiv & {B_H}_\mathbf{c} \end{eqnarray} The final state, $\boldsymbol{\sigma}'$, is reached after deleting all accounts that appear in the self-destruct set: @@ -659,7 +661,7 @@ \subsection{Execution} \hypertarget{Upsilong}{And finally, we specify $\Upsilon^g$, the total gas used in this transaction}\hypertarget{Upsilonl}{ and $\Upsilon^\mathbf{l}$, the logs created by this transaction:} \begin{eqnarray} -\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_g - g' \\ +\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_\mathbf{g} - \mathbf{g}' \\ \Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_\mathbf{l} \end{eqnarray} @@ -676,7 +678,7 @@ \section{Contract Creation} \label{ch:create} The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$: \begin{equation} -a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_n - 1)\;\big)\Big)\Big) +a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_\mathbf{n} - 1)\;\big)\Big)\Big) \end{equation} where $\mathtt{\tiny KEC}$ is the Keccak 256-bit hash function, $\mathtt{\tiny RLP}$ is the RLP encoding function, $\mathcal{B}_{a..b}(X)$ evaluates to binary value containing the bits of indices in the range $[a, b]$ of the binary data $X$ and $\boldsymbol{\sigma}[x]$ is the address state of $x$ or $\varnothing$ if none exists. Note we use one fewer than the \hyperlink{account nonce}{sender's nonce value}; we assert that we have incremented the sender account's nonce prior to this call, and so the value used is the sender's nonce at the beginning of the responsible transaction or VM operation. @@ -687,14 +689,14 @@ \section{Contract Creation} \label{ch:create} \end{equation} \begin{eqnarray} \boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny TRIE}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\ -\boldsymbol{\sigma}^*[s]_b &\equiv& \boldsymbol{\sigma}[s]_b - v +\boldsymbol{\sigma}^*[s]_\mathbf{b} &\equiv& \boldsymbol{\sigma}[s]_\mathbf{b} - v \end{eqnarray} where $v'$ is the account's pre-existing value, in the event it was previously in existence: \begin{equation} v' \equiv \begin{cases} 0 & \text{if} \quad \boldsymbol{\sigma}[a] = \varnothing\\ -\boldsymbol{\sigma}[a]_b & \text{otherwise} +\boldsymbol{\sigma}[a]_\mathbf{b} & \text{otherwise} \end{cases} \end{equation} @@ -707,14 +709,14 @@ \section{Contract Creation} \label{ch:create} \end{equation} where $I$ contains the parameters of the execution environment as defined in section \ref{ch:model}, that is: \begin{eqnarray} -I_a & \equiv & a \\ -I_o & \equiv & o \\ -I_p & \equiv & p \\ +I_\mathbf{a} & \equiv & a \\ +I_\mathbf{o} & \equiv & o \\ +I_\mathbf{p} & \equiv & p \\ I_\mathbf{d} & \equiv & () \\ -I_s & \equiv & s \\ -I_v & \equiv & v \\ +I_\mathbf{s} & \equiv & s \\ +\hyperlink{I v}{I_\mathbf{v}} & \equiv & v \\ I_\mathbf{b} & \equiv & \mathbf{i} \\ -I_e & \equiv & e +I_\mathbf{e} & \equiv & e \end{eqnarray} $I_\mathbf{d}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain. @@ -735,15 +737,15 @@ \section{Contract Creation} \label{ch:create} \begin{align} \quad g' &\equiv \begin{cases} 0 & \text{if} \quad F \\ -g^{**} - c & \text{otherwise} \\ +g^{**} - \mathbf{c} & \text{otherwise} \\ \end{cases} \\ \quad \boldsymbol{\sigma}' &\equiv \begin{cases} \boldsymbol{\sigma} & \text{if} \quad F \\ \boldsymbol{\sigma}^{**} \quad \text{except:} & \\ -\quad\boldsymbol{\sigma}'[a]_c = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise} +\quad\boldsymbol{\sigma}'[a]_\mathbf{c} = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise} \end{cases} \\ \nonumber \text{where} \\ -F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ g^{**} < c \ \vee\ |\mathbf{o}| > 24576\big) +F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ \mathbf{g}^{**} < \mathbf{c} \ \vee\ |\mathbf{o}| > 24576\big) \end{align} The exception in the determination of $\boldsymbol{\sigma}'$ dictates that $\mathbf{o}$, the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account. Note that the 24576 byte limit for $\mathbf{o}$ exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity. @@ -764,7 +766,7 @@ \section{Message Call} \label{ch:call} We define $\boldsymbol{\sigma}_1$, the first transitional state as the original state but with the value transferred from sender to recipient: \begin{equation} -\boldsymbol{\sigma}_1[r]_b \equiv \boldsymbol{\sigma}[r]_b + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_b \equiv \boldsymbol{\sigma}[s]_b - v +\boldsymbol{\sigma}_1[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}[s]_\mathbf{b} - v \end{equation} unless $s = r$. @@ -773,7 +775,7 @@ \section{Message Call} \label{ch:call} \boldsymbol{\sigma}_1 \equiv \boldsymbol{\sigma}_1' \quad \text{except:} \\ \end{equation} \begin{equation} -\boldsymbol{\sigma}_1[s]_b \equiv \boldsymbol{\sigma}_1'[s]_b - v +\boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}_1'[s]_\mathbf{b} - v \end{equation} \begin{equation} \text{and}\quad \boldsymbol{\sigma}_1' \equiv \boldsymbol{\sigma} \quad \text{except:} \\ @@ -781,11 +783,11 @@ \section{Message Call} \label{ch:call} \begin{equation} \begin{cases} \boldsymbol{\sigma}_1'[r] \equiv (v, 0, \mathtt{\tiny KEC}(()), \mathtt{\tiny TRIE}(\varnothing)) & \text{if} \quad \boldsymbol{\sigma}[r] = \varnothing \\ -\boldsymbol{\sigma}_1'[r]_b \equiv \boldsymbol{\sigma}[r]_b + v & \text{otherwise} +\boldsymbol{\sigma}_1'[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v & \text{otherwise} \end{cases} \end{equation} -The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_c$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$). +The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_\mathbf{c}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$). \begin{eqnarray} \boldsymbol{\sigma}' & \equiv & \begin{cases} @@ -802,14 +804,14 @@ \section{Message Call} \label{ch:call} \Xi_{\mathtt{RIP160}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 3 \\ \Xi_{\mathtt{ID}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 4 \\ \Xi(\boldsymbol{\sigma}_1, g, I) & \text{otherwise} \end{cases} \\ -I_a & \equiv & r \\ -I_o & \equiv & o \\ -I_p & \equiv & p \\ +I_\mathbf{a} & \equiv & r \\ +I_\mathbf{o} & \equiv & o \\ +I_\mathbf{p} & \equiv & p \\ I_\mathbf{d} & \equiv & \mathbf{d} \\ -I_s & \equiv & s \\ -I_v & \equiv & \tilde{v} \\ -I_e & \equiv & e \\ -\text{Let} \; \mathtt{\tiny KEC}(I_\mathbf{b}) & = & \boldsymbol{\sigma}[c]_c +I_\mathbf{s} & \equiv & s \\ +\hyperlink{I v}{I_\mathbf{v}} & \equiv & \tilde{v} \\ +I_\mathbf{e} & \equiv & e \\ +\text{Let} \; \mathtt{\tiny KEC}(I_\mathbf{b}) & = & \boldsymbol{\sigma}[c]_\mathbf{c} \end{eqnarray} It is assumed that the client will have stored the pair $(\mathtt{\tiny KEC}(I_\mathbf{b}), I_\mathbf{b})$ at some point prior in order to make the determination of $I_\mathbf{b}$ feasible. @@ -844,16 +846,16 @@ \subsection{Execution Environment} In addition to the system state $\boldsymbol{\sigma}$, and the remaining gas for computation $g$, there are several pieces of important information used in the execution environment that the execution agent must provide; these are contained in the tuple $I$: -\begin{itemize} -\item $I_a$, the address of the account which owns the code that is executing. -\item $I_o$, the sender address of the transaction that originated this execution. -\item $I_p$, the price of gas in the transaction that originated this execution. -\item $I_\mathbf{d}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data. -\item $I_s$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender. -\item $I_v$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value. +\begin{itemize}\hypertarget{I a}{ +\item $I_\mathbf{a}$, the address of the account which owns the code that is executing.}\hypertarget{I o}{ +\item $I_\mathbf{o}$, the sender address of the transaction that originated this execution.}\hypertarget{I p}{ +\item $I_\mathbf{p}$, the price of gas in the transaction that originated this execution.}\hypertarget{I d}{ +\item $I_\mathbf{d}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data.}\hypertarget{I s}{ +\item $I_\mathbf{s}$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender.}\hypertarget{I v}{ +\item $I_\mathbf{v}$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value.}\hypertarget{I b}{ \item $I_\mathbf{b}$, the byte array that is the machine code to be executed. -\item $I_H$, the block header of the present block. -\item $I_e$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present). +\item $I_H$, the block header of the present block.}\hypertarget{I e}{ +\item $I_\mathbf{e}$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present).} \end{itemize} The execution model defines the function $\Xi$, which can compute the resultant state $\boldsymbol{\sigma}'$, the remaining gas $g'$, the accrued substate $A$ and the resultant output, $\mathbf{o}$, given these definitions. For the present context, we will defined it as: @@ -874,12 +876,12 @@ \subsection{Execution Overview} \hypertarget{emptySequence}{} The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. \begin{eqnarray} -\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_g, A, \mathbf{o}) \\ +\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_\mathbf{g}, A, \mathbf{o}) \\ (\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\ -\boldsymbol{\mu}_g & \equiv & g \\ +\boldsymbol{\mu}_\mathbf{g} & \equiv & \mathbf{g} \\ \boldsymbol{\mu}_{pc} & \equiv & 0 \\ \boldsymbol{\mu}_\mathbf{m} & \equiv & (0, 0, ...) \\ -\boldsymbol{\mu}_i & \equiv & 0 \\ +\boldsymbol{\mu}_\mathbf{i} & \equiv & 0 \\ \boldsymbol{\mu}_\mathbf{s} & \equiv & () \end{eqnarray} \begin{equation} @@ -896,7 +898,7 @@ \subsection{Execution Overview} (a, b, c, d) \cdot e & \equiv & (a, b, c, d, e) \end{eqnarray} -Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_g$ from the resultant machine state $\boldsymbol{\mu}'$. +Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_\mathbf{g}$ from the resultant machine state $\boldsymbol{\mu}'$. $X$ is thus cycled (recursively here, but implementations are generally expected to use a simple iterative loop) until either $Z$ becomes true indicating that the present state is exceptional and that the machine must be halted and any changes discarded or until $H$ becomes a series (rather than the empty set) indicating that the machine has reached a controlled halt. @@ -920,7 +922,7 @@ \subsubsection{Exceptional Halting} \begin{equation} Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv \begin{array}[t]{l} -\boldsymbol{\mu}_g < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\ +\boldsymbol{\mu}_\mathbf{g} < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\ \mathbf{\delta}_w = \varnothing \quad \vee \\ \lVert\boldsymbol{\mu}_\mathbf{s}\rVert < \mathbf{\delta}_w \quad \vee \\ ( w \in \{ \text{\small JUMP}, \text{\small JUMPI} \} \quad \wedge \\ \quad \boldsymbol{\mu}_\mathbf{s}[0] \notin D(I_\mathbf{b}) ) \quad \vee \\ @@ -993,7 +995,7 @@ \subsection{The Execution Cycle} In general, we assume the memory, self-destruct set and system state don't change: \begin{eqnarray} \boldsymbol{\mu}'_\mathbf{m} & \equiv & \boldsymbol{\mu}_\mathbf{m} \\ -\boldsymbol{\mu}'_i & \equiv & \boldsymbol{\mu}_i \\ +\boldsymbol{\mu}'_\mathbf{i} & \equiv & \boldsymbol{\mu}_\mathbf{i} \\ A' & \equiv & A \\ \boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma} \end{eqnarray} @@ -1008,11 +1010,11 @@ \section{Blocktree to Blockchain} \label{ch:ghost} Thus we define the total difficulty of block $B$ recursively as: \begin{eqnarray} -B_t & \equiv & B'_t + B_d \\ +B_\mathbf{t} & \equiv & B'_\mathbf{t} + B_\mathbf{d} \\ B' & \equiv & P(B_H) \end{eqnarray} -As such given a block $B$, $B_t$ is its total difficulty, $B'$ is its parent block and $B_d$ is its difficulty. +As such given a block $B$, $B_\mathbf{t}$ is its total difficulty, $B'$ is its parent block and $B_\mathbf{d}$ is its difficulty. \section{Block Finalisation} \label{ch:finalisation} @@ -1050,26 +1052,26 @@ \subsection{Transaction Validation} %where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_\mathbf{T}[i]$, and $g[i]$ the total gas used immediately after said transaction. -The given \textbf{gasUsed} must correspond faithfully to the transactions listed: ${B_H}_g$, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction: +The given \textbf{gasUsed} must correspond faithfully to the transactions listed: ${B_H}_\mathbf{g}$, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction: \begin{equation} -{B_H}_g = \hyperlink{ell}{\ell}\hyperlink{Ru}{(\mathbf{R})_u} +{B_H}_\mathbf{g} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathbf{u}} \end{equation} \subsection{Reward Application} -The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{R b}{$R_b$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):} +The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{R b}{$R_\mathbf{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):} \begin{eqnarray} \Omega(B, \boldsymbol{\sigma}) & \equiv & \boldsymbol{\sigma}': \boldsymbol{\sigma}' = \boldsymbol{\sigma} \quad \text{except:} \\ -\boldsymbol{\sigma}'[{B_H}_c]_b & = & \boldsymbol{\sigma}[{B_H}_c]_b + (1 + \frac{\lVert B_\mathbf{U}\rVert}{32})\hyperlink{R b}{R_b} \\ +\boldsymbol{\sigma}'[{B_H}_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[{B_H}_\mathbf{c}]_\mathbf{b} + (1 + \frac{\lVert B_\mathbf{U}\rVert}{32})\hyperlink{R b}{R_\mathbf{b}} \\ \forall_{U \in B_\mathbf{U}}: \\ \nonumber - \boldsymbol{\sigma}'[U_c]_b & = & \boldsymbol{\sigma}[U_c]_b + (1 + \frac{1}{8} (U_i - {B_H}_i)) \hyperlink{R b}{R_b} + \boldsymbol{\sigma}'[U_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[U_\mathbf{c}]_\mathbf{b} + (1 + \frac{1}{8} (U_\mathbf{i} - {B_H}_\mathbf{i})) \hyperlink{R b}{R_\mathbf{b}} \end{eqnarray} If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively. We define the block reward as 5 Ether: \begin{equation} -\text{Let} \quad \hyperlink{R b}{R_b} = 5 \times 10^{18} +\text{Let} \quad \hyperlink{R b}{R_\mathbf{b}} = 5 \times 10^{18} \end{equation} \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} @@ -1078,33 +1080,33 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} \begin{equation} \Gamma(B) \equiv \begin{cases} \boldsymbol{\sigma}_0 & \text{if} \quad P(B_H) = \varnothing \\ -\boldsymbol{\sigma}_i: \mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_i)) = {P(B_H)_H}_r & \text{otherwise} +\boldsymbol{\sigma}_\mathbf{i}: \mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i})) = {P(B_H)_H}_\mathbf{r} & \text{otherwise} \end{cases} \end{equation} -Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_i))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_i$; it is assumed that implementations will store this in the state database, trivial and efficient since the trie is by nature an immutable data structure. - -And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$: +Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathbf{i}$; it is assumed that implementations will store this in the state database, trivial and efficient since the trie is by nature an immutable data structure. +\hypertarget{Phi}{ +And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$:} \begin{eqnarray} \Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\ -B'_n & = & n: \quad x \leqslant \frac{2^{256}}{H_d} \\ -B'_m & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hcancel{n}}, n, \mathbf{d}) \\ -B^* & \equiv & B \quad \text{except:} \quad B^*_r = r(\Pi(\Gamma(B), B)) +B'\mathbf{n} & = & \mathbf{n}: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \\ +B'_\mathbf{m} & = & \mathbf{m} \quad \text{with } (\mathbf{x}, \mathbf{m}) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, \mathbf{n}, \mathbf{d}) \\ +B^* & \equiv & B \quad \text{except:} \quad B^*_\mathbf{r} = r(\Pi(\Gamma(B), B)) \end{eqnarray} With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}. As specified at the beginning of the present work, $\Pi$ is the state-transition function, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined. -\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_u$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_b$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction): +\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_\mathbf{u}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_\mathbf{b}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction): \begin{equation} \mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) & \text{otherwise} \end{cases} \end{equation} -In the case of $B_\mathbf{R}[n]_u$, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total: +In the case of $B_\mathbf{R}[n]_\mathbf{u}$, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total: \begin{equation} -\mathbf{R}[n]_u = \begin{cases} 0 & \text{if} \quad n < 0 \\ +\mathbf{R}[n]_\mathbf{u} = \begin{cases} 0 & \text{if} \quad n < 0 \\ \begin{array}[b]{l} -\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])\\ \quad + \mathbf{R}[n-1]_u +\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])\\ \quad + \mathbf{R}[n-1]_\mathbf{u} \end{array} & \text{otherwise} \end{cases} \end{equation} @@ -1117,7 +1119,7 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} Finally, we define $\Pi$ as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$: \begin{equation} -\Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{Rsigma}{\mathbf{R})_{\boldsymbol{\sigma}}}) +\Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{R sigma}{\mathbf{R})_{\boldsymbol{\sigma}}}) \end{equation} Thus the complete block-transition mechanism is defined, except for $\mathtt{PoW}$, the proof-of-work function. @@ -1136,10 +1138,11 @@ \subsection{Mining Proof-of-Work} \label{ch:pow} More formally, the proof-of-work function takes the form of $\mathtt{PoW}$: \begin{equation} +m = H_\mathbf{m} \quad \wedge \quad \mathbf{n} \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \text{with} \quad (\mathbf{m}, \mathbf{n}) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathbf{n}, \mathbf{d}) m = H_m \quad \wedge \quad n \leqslant \frac{2^{256}}{H_d} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d}) \end{equation} -Where $H_{\hcancel{n}}$ is the new block's header but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash components; $H_n$ is the \hyperlink{block nonce}{nonce} of the header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $H_d$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. +Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathbf{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathbf{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. \subsubsection{Ethash} Ethash is the PoW algorithm for Ethereum 1.0. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms have been drastically changed in the last month of research and development. The general route that the algorithm takes is as follows: @@ -1249,7 +1252,7 @@ \section{Recursive Length Prefix}\label{app:rlp} We define the RLP function as $\mathtt{\tiny RLP}$ through two sub-functions, the first handling the instance when the value is a byte array, the second when it is a sequence of further values: \begin{equation} -\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_b}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ R_l(\mathbf{x}) & \text{otherwise} \end{cases} +\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_\mathbf{b}}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ \hyperlink{R l}{R_\mathbf{l}}(\mathbf{x}) & \text{otherwise} \end{cases} \end{equation} If the value to be serialised is a byte-array, the RLP serialisation takes one of three forms: @@ -1260,9 +1263,9 @@ \section{Recursive Length Prefix}\label{app:rlp} \item Otherwise, the output is equal to the input prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the input byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 183. \end{itemize} \hypertarget{R b}{ -Formally, we define $R_b$:} +Formally, we define $R_\mathbf{b}$:} \begin{eqnarray} -R_b(\mathbf{x}) & \equiv & \begin{cases} +R_\mathbf{b}(\mathbf{x}) & \equiv & \begin{cases} \mathbf{x} & \text{if} \quad \lVert \mathbf{x} \rVert = 1 \wedge \mathbf{x}[0] < 128 \\ (128 + \lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{else if} \quad \lVert \mathbf{x} \rVert < 56 \\ \big(183 + \big\lVert \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{otherwise} @@ -1279,16 +1282,16 @@ \section{Recursive Length Prefix}\label{app:rlp} \item If the concatenated serialisations of each contained item is less than 56 bytes in length, then the output is equal to that concatenation prefixed by the byte equal to the length of this byte array plus 192. \item Otherwise, the output is equal to the concatenated serialisations prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the concatenated serialisations byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 247. \end{itemize} - -Thus we finish by formally defining $R_l$: +\hypertarget{R l}{ +Thus we finish by formally defining $R_\mathbf{l}$: \begin{eqnarray} -R_l(\mathbf{x}) & \equiv & \begin{cases} +R_\mathbf{l}(\mathbf{x}) & \equiv & \begin{cases} (192 + \lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{if} \quad \lVert s(\mathbf{x}) \rVert < 56 \\ \big(247 + \big\lVert \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{otherwise} \end{cases} \\ s(\mathbf{x}) & \equiv & \mathtt{\tiny RLP}(\mathbf{x}_0) \cdot \mathtt{\tiny RLP}(\mathbf{x}_1) ... \end{eqnarray} - +} If RLP is used to encode a scalar, defined only as a positive integer ($\mathbb{P}$ or any $x$ for $\mathbb{P}_x$), it must be specified as the shortest byte array such that the big-endian interpretation of it is equal. Thus the RLP of some positive integer $i$ is defined as: \begin{equation} \mathtt{\tiny RLP}(i : i \in \mathbb{P}) \equiv \mathtt{\tiny RLP}(\mathtt{\tiny BE}(i)) @@ -1320,7 +1323,7 @@ \section{Modified Merkle Patricia Tree}\label{app:trie} Formally, we assume the input value $\mathfrak{I}$, a set containing pairs of byte sequences: \begin{equation} -\mathfrak{I} = \{ (\mathbf{k}_0 \in \mathbb{B}, \mathbf{v}_0 \in \mathbb{B}), (\mathbf{k}_1 \in \mathbb{B}, \mathbf{v}_1 \in \mathbb{B}), ... \} +\mathfrak{I} = \{ (k_0 \in \mathbb{B}, v_0 \in \mathbb{B}), k_1 \in \mathbb{B}, v_1 \in \mathbb{B}), ... \} \end{equation} When considering such a sequence, we use the common numeric subscript notation to refer to a tuple's key or value, thus: @@ -1330,11 +1333,11 @@ \section{Modified Merkle Patricia Tree}\label{app:trie} Any series of bytes may also trivially be viewed as a series of nibbles, given an endian-specific notation; here we assume big-endian. Thus: \begin{eqnarray} -y(\mathfrak{I}) & = & \{ (\mathbf{k}_0' \in \mathbb{Y}, \mathbf{v}_0 \in \mathbb{B}), (\mathbf{k}_1' \in \mathbb{Y}, \mathbf{v}_1 \in \mathbb{B}), ... \} \\ -\forall_n \quad \forall_{i: i < 2\lVert\mathbf{k}_n\rVert} \quad \mathbf{k}_n'[i] & \equiv & +y(\mathfrak{I}) & = & \{ (k_0' \in \mathbb{Y}, v_0 \in \mathbb{B}), (k_1' \in \mathbb{Y}, v_1 \in \mathbb{B}), ... \} \\ +\forall_n \quad \forall_{i: i < 2\lVert\ k_n\rVert} \quad k_n'[i] & \equiv & \begin{cases} -\lfloor \mathbf{k}_n[i \div 2] \div 16 \rfloor & \text{if} \; i \; \text{is even} \\ -\mathbf{k}_n[\lfloor i \div 2 \rfloor] \bmod 16 & \text{otherwise} +\lfloor k_n[i \div 2] \div 16 \rfloor & \text{if} \; i \; \text{is even} \\ +k_n[\lfloor i \div 2 \rfloor] \bmod 16 & \text{otherwise} \end{cases} \end{eqnarray} @@ -1384,16 +1387,16 @@ \section{Precompiled Contracts}\label{app:precompiled} For each precompiled contract, we make use of a template function, $\Xi_{\mathtt{PRE}}$, which implements the out-of-gas checking. \begin{equation} \Xi_{\mathtt{PRE}}(\boldsymbol{\sigma}, g, I) \equiv \begin{cases} -(\varnothing, 0, A^0, ()) & \text{if} \quad g < g_r \\ -(\boldsymbol\sigma, g - g_r, A^0, \mathbf{o}) & \text{otherwise}\end{cases} +(\varnothing, 0, A^0, ()) & \text{if} \quad \mathbf{g} < \mathbf{g}_\mathbf{r} \\ +(\boldsymbol\sigma, \mathbf{g} - \mathbf{g}_\mathbf{r}, A^0, \mathbf{o}) & \text{otherwise}\end{cases} \end{equation} -The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $g_r$, the gas requirements. +The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $\mathbf{g}_\mathbf{r}$, the gas requirements. For the elliptic curve DSA recover VM execution function, we also define $\mathbf{d}$ to be the input data, well-defined for an infinite length by appending zeroes as required. Importantly in the case of an invalid signature ($\mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing$), then we have no output. \begin{eqnarray} \Xi_{\mathtt{ECREC}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -g_r &=& 3000\\ +\mathbf{g}_\mathbf{r} &=& 3000\\ |\mathbf{o}| &=& \begin{cases} 0 & \text{if} \quad \mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing\\ 32 & \text{otherwise} \end{cases}\\ \text{if} \quad |\mathbf{o}| = 32: &&\\ \mathbf{o}[0..11] &=& 0 \\ @@ -1409,10 +1412,10 @@ \section{Precompiled Contracts}\label{app:precompiled} The two hash functions, RIPEMD-160 and SHA2-256 are more trivially defined as an almost pass-through operation. Their gas usage is dependent on the input data size, a factor rounded up to the nearest number of words. \begin{eqnarray} \Xi_{\mathtt{SHA256}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -g_r &=& 60 + 12\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ +\mathbf{g}_\mathbf{r} &=& 60 + 12\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ \mathbf{o}[0..31] &=& \mathtt{\tiny SHA256}(I_\mathbf{d})\\ \Xi_{\mathtt{RIP160}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -g_r &=& 600 + 120\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ +\mathbf{g}_\mathbf{r} &=& 600 + 120\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ \mathbf{o}[0..11] &=& 0 \\ \mathbf{o}[12..31] &=& \mathtt{\tiny RIPEMD160}(I_\mathbf{d})\\ \end{eqnarray} @@ -1426,7 +1429,7 @@ \section{Precompiled Contracts}\label{app:precompiled} Finally, the fourth contract, the identity function $\Xi_{\mathtt{ID}}$ simply defines the output as the input: \begin{eqnarray} \Xi_{\mathtt{ID}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -g_r &=& 15 + 3\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ +\mathbf{g}_\mathbf{r} &=& 15 + 3\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ \mathbf{o} &=& I_\mathbf{d} \end{eqnarray} @@ -1444,7 +1447,7 @@ \section{Signing Transactions}\label{app:signing} \mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \end{eqnarray} -Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid. +Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range)\hypertarget{v}{. It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} \newcommand{\slimit}{\ensuremath{\text{s-limit}}} @@ -1452,7 +1455,7 @@ \section{Signing Transactions}\label{app:signing} \begin{align} 0 < r &< \mathtt{\tiny secp256k1n} \\ 0 < s &< \mathtt{\tiny secp256k1n} \div 2 + 1 \\ -v &\in \{27,28\} +\hyperlink{v}{v} &\in \{27,28\} \end{align} where: \begin{align} @@ -1465,24 +1468,24 @@ \section{Signing Transactions}\label{app:signing} A(p_r) = \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSAPUBKEY}(p_r) \big) \big) \end{equation} -The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_r$, $T_s$ and $T_w$: +The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_\mathbf{r}$, $T_\mathbf{s}$ and $\hyperlink{T w}{T_\mathbf{w}}$: \begin{eqnarray} L_S(T) & \equiv & \begin{cases} -(T_n, T_p, T_g, T_t, T_v, T_\mathbf{i}) & \text{if} \; T_t = 0\\ -(T_n, T_p, T_g, T_t, T_v, T_\mathbf{d}) & \text{otherwise} +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}) & \text{if} \; T_\mathbf{t} = 0\\ +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}) & \text{otherwise} \end{cases} \\ h(T) & \equiv & \mathtt{\small KEC}( L_S(T) ) \end{eqnarray} -The signed transaction $G(T, p_r)$ is defined as: +\hypertarget{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as: \begin{eqnarray} G(T, p_r) \equiv T \quad \text{except:} \\ -(T_w, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r) -\end{eqnarray} +(\hyperlink{T w}{T_\mathbf{w}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r) +\end{eqnarray}} We may then define the sender function $S$ of the transaction as: \begin{equation} -S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), T_w, T_r, T_s) \big) \big) +S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) \big) \big) \end{equation} The assertion that the sender of a signed transaction equals the address of the signer should be self-evident: @@ -1535,7 +1538,7 @@ \section{Fee Schedule}\label{app:fees} $G_{copy}$ & 3 & This is a partial payment for {\small *COPY} operations, multiplied by the number of words copied, rounded up. \\ $G_{blockhash}$ & 20 & This is a payment for a {\small BLOCKHASH} operation. \\ -%extern u256 const c_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. +%extern u256 const \mathbf{c}_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. \bottomrule \end{tabularx} @@ -1550,7 +1553,7 @@ \subsection{Gas Cost} The general gas cost function, $C$, is defined as: \begin{equation} -C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_i)-C_{mem}(\boldsymbol{\mu}_i) + \begin{cases} +C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_\mathbf{i})-C_{mem}(\boldsymbol{\mu}_\mathbf{i}) + \begin{cases} C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SSTORE} \\ G_{exp} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] = 0 \\ G_{exp} + G_{expbyte}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathbf{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] > 0 \\ @@ -1605,9 +1608,9 @@ \subsection{Gas Cost} $W_{extcode}$ = \{{\small EXTCODESIZE}\} -Note the memory cost component, given as the product of $G_{memory}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_i$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes. +Note the memory cost component, given as the product of $G_{memory}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathbf{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes. -Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_i$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal. +Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_\mathbf{i}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal. Note also that $C_{mem}$ is the memory cost function (the expansion function being the difference between the cost before and after). It is a polynomial, with the higher-order coefficient divided and floored, and thus linear up to 724B of memory used, after which it costs substantially more. @@ -1680,8 +1683,8 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] ^ {\boldsymbol{\mu}_\mathbf{s}[1] }$ \\ \midrule 0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\ -&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_t &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathbf{s}[0] + 1) \\ \boldsymbol{\mu}_\mathbf{s}[1]_i &\text{otherwise} \end{cases}$ \\ -\multicolumn{5}{l}{$\boldsymbol{\mu}_\mathbf{s}[x]_i$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathbf{s}[x]$} \vspace{5pt} \\ +&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{t} &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathbf{s}[0] + 1) \\ \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i} &\text{otherwise} \end{cases}$ \\ +\multicolumn{5}{l}{$\boldsymbol{\mu}_\mathbf{s}[x]_\mathbf{i}$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathbf{s}[x]$} \vspace{5pt} \\ \end{tabularx} \begin{tabularx}{\textwidth}{rlrrX} @@ -1709,19 +1712,19 @@ \subsection{Instruction Set} &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule 0x16 & {\small AND} & 2 & 1 & This is the bitwise AND operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \boldsymbol{\mu}_\mathbf{s}[0]_i \wedge \boldsymbol{\mu}_\mathbf{s}[1]_i$ \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \wedge \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ \midrule 0x17 & {\small OR} & 2 & 1 & This is the bitwise OR operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \boldsymbol{\mu}_\mathbf{s}[0]_i \vee \boldsymbol{\mu}_\mathbf{s}[1]_i$ \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \vee \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ \midrule 0x18 & {\small XOR} & 2 & 1 & This is the bitwise XOR operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \boldsymbol{\mu}_\mathbf{s}[0]_i \oplus \boldsymbol{\mu}_\mathbf{s}[1]_i$ \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \oplus \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ \midrule 0x19 & {\small NOT} & 1 & 1 & This is the bitwise NOT operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0]_i = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule 0x1a & {\small BYTE} & 2 & 1 & Retrieve a single byte from a word. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_i \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_{(i + 8\boldsymbol{\mu}_\mathbf{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathbf{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_{(i + 8\boldsymbol{\mu}_\mathbf{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathbf{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\ &&&& For the Nth byte, we count from the left (i.e. $N=0$ would be the most significant in big endian). \\ \bottomrule \end{tabularx} @@ -1732,7 +1735,7 @@ \subsection{Instruction Set} \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ 0x20 & {\small SHA3} & 2 & 1 & Compute a Keccak-256 hash. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$ \\ -&&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ \bottomrule \end{tabularx} @@ -1741,21 +1744,21 @@ \subsection{Instruction Set} \multicolumn{5}{c}{\textbf{30s: Environmental Information}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ 0x30 & {\small ADDRESS} & 0 & 1 & Get the address of the currently executing account. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_a$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{a}$ \\ \midrule 0x31 & {\small BALANCE} & 1 & 1 & Get the balance of the given account. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0]]_b& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0]]_\mathbf{b}& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\ \midrule 0x32 & {\small ORIGIN} & 0 & 1 & Get the address that the execution originated from. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_o$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{o}$ \\ &&&& This is the sender of the original transaction; it is never an account with non-empty associated code. \\ \midrule 0x33 & {\small CALLER} & 0 & 1 & Get the caller address. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_s$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{s}$ \\ &&&& This is the address of the account that is directly responsible for this execution. \\ \midrule 0x34 & {\small CALLVALUE} & 0 & 1 & Get the deposited value by the instruction/transaction responsible for this execution. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_v$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \hyperlink{I v}{I_\mathbf{v}}$ \\ \midrule 0x35 & {\small CALLDATALOAD} & 1 & 1 & Get the input data of the current environment. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{d}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \quad \text{with} \quad I_\mathbf{d}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_\mathbf{d} \rVert$ \\ @@ -1769,7 +1772,7 @@ \subsection{Instruction Set} &&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv \begin{cases} I_\mathbf{d}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{d} \rVert \\ 0 & \text{otherwise} \end{cases}$\\ &&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ -&&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ &&&& This pertains to the input data passed with the message call instruction or transaction. \\ \midrule 0x38 & {\small CODESIZE} & 0 & 1 & Get the size of code running in the current environment. \\ @@ -1778,21 +1781,21 @@ \subsection{Instruction Set} 0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in the current environment to memory. \\ &&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{b} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\ -&&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ &&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ \midrule 0x3a & {\small GASPRICE} & 0 & 1 & Get the price of gas in the current environment. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_p$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{p}$ \\ &&&& This is the gas price specified by the originating transaction.\\ \midrule 0x3b & {\small EXTCODESIZE} & 1 & 1 & Get the size of an account's code. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_c \rVert$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c} \rVert$ \\ \midrule 0x3c & {\small EXTCODECOPY} & 4 & 0 & Copy an account's code to memory. \\ &&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[3] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[1] + i ] \equiv \begin{cases} \mathbf{c}[\boldsymbol{\mu}_\mathbf{s}[2] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\ -&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_c$ \\ -&&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[3])$ \\ +&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c}$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[3])$ \\ &&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[2] + i$ are not subject to the $2^{256}$ modulo. \\ \bottomrule \end{tabularx} @@ -1802,25 +1805,25 @@ \subsection{Instruction Set} \multicolumn{5}{c}{\textbf{40s: Block Information}} \vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ 0x40 & {\small BLOCKHASH} & 1 & 1 & Get the hash of one of the 256 most recent complete blocks. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv P(I_{H_p}, \boldsymbol{\mu}_\mathbf{s}[0], 0)$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv P(I_{\hyperlink{H p}{H_\mathbf{p}}}, \boldsymbol{\mu}_\mathbf{s}[0], 0)$ \\ &&&& where $P$ is the hash of a block of a particular number, up to a maximum age. 0 is left on the stack if the looked for block number is greater than the current block number or more than 256 blocks behind the current block. \\ -&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > H_i \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = H_i \\ P(H_p, n, a + 1) & \text{otherwise} \end{cases}$ \\ +&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > \hyperlink{H i}{H_\mathbf{i}} \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = \hyperlink{H i}{H_\mathbf{i}} \\ P(\hyperlink{H p}{H_\mathbf{p}}, n, a + 1) & \text{otherwise} \end{cases}$ \\ &&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash in the block following it. \\ \midrule 0x41 & {\small COINBASE} & 0 & 1 & Get the block's beneficiary address. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_c$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{c}$ \\ \midrule 0x42 & {\small TIMESTAMP} & 0 & 1 & Get the block's timestamp. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_s$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{s}$ \\ \midrule 0x43 & {\small NUMBER} & 0 & 1 & Get the block's number. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_i$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{i}$ \\ \midrule 0x44 & {\small DIFFICULTY} & 0 & 1 & Get the block's difficulty. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_d$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{d}$ \\ \midrule 0x45 & {\small GASLIMIT} & 0 & 1 & Get the block's gas limit. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_l$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{l}$ \\ \bottomrule \end{tabularx} @@ -1832,30 +1835,30 @@ \subsection{Instruction Set} \midrule 0x51 & {\small MLOAD} & 1 & 1 & Load the first word from memory. \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ]$ \\ -&&&& $\boldsymbol{\mu}'_i \equiv \max(\boldsymbol{\mu}_i, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ -&&&& The addition in the calculation of $\boldsymbol{\mu}'_i$ is not subject to the $2^{256}$ modulo. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ +&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ \midrule 0x52 & {\small MSTORE} & 2 & 0 & Save the first word (which is the first item in the stack) to memory. \\ &&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ -&&&& $\boldsymbol{\mu}'_i \equiv \max(\boldsymbol{\mu}_i, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ -&&&& The addition in the calculation of $\boldsymbol{\mu}'_i$ is not subject to the $2^{256}$ modulo. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ +&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ \midrule 0x53 & {\small MSTORE8} & 2 & 0 & Save the first byte to memory. \\ &&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv (\boldsymbol{\mu}_\mathbf{s}[1] \bmod 256) $ \\ -&&&& $\boldsymbol{\mu}'_i \equiv \max(\boldsymbol{\mu}_i, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 1) \div 32 })$ \\ -&&&& The addition in the calculation of $\boldsymbol{\mu}'_i$ is not subject to the $2^{256}$ modulo. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 1) \div 32 })$ \\ +&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ \midrule 0x54 & {\small SLOAD} & 1 & 1 & Load the first word from storage. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_a]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \\ \midrule 0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\ -&&&& $\boldsymbol{\sigma}'[I_a]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{}\\ +&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{}\\ &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -G_{sset} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_a]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ +G_{sset} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ G_{sreset} & \text{otherwise} \end{cases}$ \\ &&&& $A'_{r} \equiv A_{r} + \begin{cases} -R_{sclear} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_a]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\ +R_{sclear} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule @@ -1947,9 +1950,9 @@ \subsection{Instruction Set} \toprule \multicolumn{5}{c}{\textbf{a0s: Logging Operations}} \vspace{5pt} \\ \multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\\ -\multicolumn{5}{l}{$A'_\mathbf{l} \equiv A_\mathbf{l} \cdot (I_a, \mathbf{t}, \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$}\\ +\multicolumn{5}{l}{$A'_\mathbf{l} \equiv A_\mathbf{l} \cdot (I_\mathbf{a}, \mathbf{t}, \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$}\\ \multicolumn{5}{l}{and to update the memory consumption counter:}\\ -\multicolumn{5}{l}{$\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$}\\ +\multicolumn{5}{l}{$\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$}\\ \multicolumn{5}{l}{The entry's topic series, $\mathbf{t}$, differs accordingly:}\vspace{5pt} \\ \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ 0xa0 & {\small LOG0} & 2 & 0 & Append the log record with no topics. \\ @@ -1971,31 +1974,31 @@ \subsection{Instruction Set} \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ 0xf0 & {\small CREATE} & 3 & 1 & Create a new account with associated code. \\ &&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[1] \dots (\boldsymbol{\mu}_\mathbf{s}[1] + \boldsymbol{\mu}_\mathbf{s}[2] - 1) ]$ \\ -&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_g, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_a, I_o, L(\boldsymbol{\mu}_g), I_p, \boldsymbol{\mu}_\mathbf{s}[0], \mathbf{i}, I_e + 1) & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] \leqslant \boldsymbol{\sigma}[I_a]_b \;\wedge\; I_e < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_g, \varnothing\big) & \text{otherwise} \end{cases}$ \\ -&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_a]_n = \boldsymbol{\sigma}[I_a]_n + 1$ \\ +&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_\mathbf{g}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, L(\boldsymbol{\mu}_\mathbf{g}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[0], \mathbf{i}, I_\mathbf{e} + 1) & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_\mathbf{g}, \varnothing\big) & \text{otherwise} \end{cases}$ \\ +&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_\mathbf{a}]_\mathbf{n} = \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n} + 1$ \\ &&&& $A' \equiv A \Cup A^+$ which implies: $A'_\mathbf{s} \equiv A_\mathbf{s} \cup A^+_\mathbf{s} \quad \wedge \quad A'_\mathbf{l} \equiv A_\mathbf{l} \cdot A^+_\mathbf{l} \quad \wedge \quad A'_\mathbf{r} \equiv A_\mathbf{r} + A^+_\mathbf{r}$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ &&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\ -&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_e = 1024$ \\ -&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_a]_b$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_a, \boldsymbol{\sigma}[I_a]_n)$, the address of the \\ +&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_\mathbf{e} = 1024$ \\ +&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_\mathbf{a}, \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n})$, the address of the \\ &&&& newly created account. \\ -&&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ &&&& Thus the operand order is: value, input offset, input size. \\ \midrule 0xf1 & {\small CALL} & 7 & 1 & Message-call into an account. \\ &&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[3] \dots (\boldsymbol{\mu}_\mathbf{s}[3] + \boldsymbol{\mu}_\mathbf{s}[4] - 1) ]$ \\ -&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_a, I_o, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_p, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_e + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_a]_b \;\wedge \\ \quad\quad I_e < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ +&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_\mathbf{a}, I_\mathbf{o}, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge \\ \quad\quad I_\mathbf{e} < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& $n \equiv \min(\{ \boldsymbol{\mu}_\mathbf{s}[6], |\mathbf{o}|\})$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[5] \dots (\boldsymbol{\mu}_\mathbf{s}[5] + n - 1) ] = \mathbf{o}[0 \dots (n - 1)]$ \\ -&&&& $\boldsymbol{\mu}'_g \equiv \boldsymbol{\mu}_g + g'$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{g} \equiv \boldsymbol{\mu}_\mathbf{g} + g'$ \\ &&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ &&&& $A' \equiv A \Cup A^+$ \\ &&&& $t \equiv \boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}$ \\ &&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting \\ &&&& $Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) = \top$ or if \\ -&&&& $\boldsymbol{\mu}_\mathbf{s}[2] > \boldsymbol{\sigma}[I_a]_b$ (not enough funds) or $I_e = 1024$ (call depth limit reached); $x=1$ \\ +&&&& $\boldsymbol{\mu}_\mathbf{s}[2] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (not enough funds) or $I_\mathbf{e} = 1024$ (call depth limit reached); $x=1$ \\ &&&& otherwise. \\ -&&&& $\boldsymbol{\mu}'_i \equiv M(M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4]), \boldsymbol{\mu}_\mathbf{s}[5], \boldsymbol{\mu}_\mathbf{s}[6])$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4]), \boldsymbol{\mu}_\mathbf{s}[5], \boldsymbol{\mu}_\mathbf{s}[6])$ \\ &&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \hypertarget{tiny CALL}{}\\ &&&& $C_{\text{\tiny CALL}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$ \\ &&&& $C_{\text{\tiny CALLGAS}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} @@ -2003,8 +2006,8 @@ \subsection{Instruction Set} C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{otherwise} \end{cases}$ \\ &&&& $C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -\min\{ L(\boldsymbol{\mu}_g - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_{\mathbf{s}}[0] \} & \text{if} \quad \boldsymbol{\mu}_g \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\ -\boldsymbol{\mu}_{\mathbf{s}}[0] & \text{otherwise} +\min\{ L(\boldsymbol{\mu}_\mathbf{g} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_\mathbf{s}[0] \} & \text{if} \quad \boldsymbol{\mu}_\mathbf{g} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\ +\boldsymbol{\mu}_\mathbf{s}[0] & \text{otherwise} \end{cases}$\\ &&&& $C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{call} + C_{\text{\tiny XFER}}(\boldsymbol{\mu}) + C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$\\ &&&& $C_{\text{\tiny XFER}}(\boldsymbol{\mu}) \equiv \begin{cases} @@ -2018,32 +2021,32 @@ \subsection{Instruction Set} \midrule 0xf2 & {\small CALLCODE} & 7 & 1 & Message-call into this account with an alternative account's code. \\ &&&& Exactly equivalent to {\small CALL} except: \\ -&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_a, I_o, I_a, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_p, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_e + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_a]_b \;\wedge\\ \quad\quad{}I_e < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ +&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\\ \quad\quad{}I_\mathbf{e} < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_\mathbf{s}[1]$\\ -&&&& (as in {\small CALL}) to the present address $I_a$. This means that the recipient is in fact the\\ +&&&& (as in {\small CALL}) to the present address $I_\mathbf{a}$. This means that the recipient is in fact the\\ &&&& same account as at present, simply that the code is overwritten.\hypertarget{RETURN}{}\\ \midrule 0xf3 & {\small RETURN} & 2 & 0 & Halt execution returning output data. \\ &&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots ( \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1 ) ]$ \\ &&&& This has the effect of halting the execution at this point with output defined.\\ &&&& See equation \ref{eq:Normal Halting}. \\ -&&&& $\boldsymbol{\mu}'_i \equiv M(\boldsymbol{\mu}_i, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ \end{tabularx} \begin{tabularx}{\textwidth}{rlrrX} \midrule 0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ -&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_s, I_o, I_a, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_p, 0, I_v, \mathbf{i}, I_e + 1)\end{array} & \text{if} \quad I_v \leqslant \boldsymbol{\sigma}[I_a]_b \;\wedge\; I_e < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ +&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ \midrule 0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{SELFDESTRUCT}{}\\ \midrule 0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. \\ -&&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_a \}$ \\ -&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_b \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_b + \boldsymbol{\sigma}[I_a]_b$ \\ -&&&& $\boldsymbol{\sigma}'[I_a]_b \equiv 0$ \\ +&&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_\mathbf{a} \}$ \\ +&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} + \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ \\ +&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{b} \equiv 0$ \\ &&&& $A'_{r} \equiv A_{r} + \begin{cases} -\hyperlink{Rselfdestruct}{R_{selfdestruct}} & \text{if} \quad I_a \notin A_\mathbf{s} \\ +\hyperlink{Rselfdestruct}{R_{selfdestruct}} & \text{if} \quad I_\mathbf{a} \notin A_\mathbf{s} \\ 0 & \text{otherwise} \end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\ &&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{selfdestruct}} + \begin{cases} @@ -2092,7 +2095,7 @@ \subsection{Definitions} \subsection{Size of dataset and cache} The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. \begin{equation} - E_{epoch}(H_i) = \left\lfloor\frac{H_i}{J_{epoch}}\right\rfloor + E_{epoch}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{J_{epoch}}\right\rfloor \end{equation} The size of the dataset growth by $J_{datasetgrowth}$ bytes, and the size of the cache by $J_{cachegrowth}$ bytes, every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of $J_{mixbytes}$, for the dataset, and $J_{hashbytes}$ for the cache. Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using @@ -2101,7 +2104,7 @@ \subsection{Size of dataset and cache} \end{equation} The size of the cache, $c_{size}$, is calculated using \begin{equation} - c_{size} = E_{prime}(J_{cacheinit} + J_{cachegrowth} \cdot E_{epoch} - J_{hashbytes}, J_{hashbytes}) + \mathbf{c}_{size} = E_{prime}(J_{cacheinit} + J_{cachegrowth} \cdot E_{epoch} - J_{hashbytes}, J_{hashbytes}) \end{equation} \begin{equation} E_{prime}(x, y) = \begin{cases} @@ -2114,12 +2117,12 @@ \subsection{Dataset generation} \subsubsection{Seed hash} The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash: \begin{equation} - \mathbf{s} = C_{seedhash}(H_i) + \mathbf{s} = C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) \end{equation} \begin{equation} - C_{seedhash}(H_i) = \begin{cases} -\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{epoch}(H_i) = 0 \quad \\ -\texttt{KEC}(C_{seedhash}(H_i - J_{epoch})) & \text{otherwise} + C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} +\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{epoch}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ +\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - J_{epoch})) & \text{otherwise} \end{cases} \end{equation} With $\mathbf{0}_{32}$ being 32 bytes of zeros. @@ -2182,8 +2185,8 @@ \subsubsection{Full dataset calculation} \label{dataset} \end{equation} \begin{equation} E_{mix}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} -\texttt{KEC512}(\mathbf{c}[i \mod c_{size}] \oplus i) & \text{if} \quad p = 0 \\ -E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor J_{hashbytes} / J_{wordbytes} \rfloor]) \mod c_{size}] \big) & \text{otherwise} +\texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{size}] \oplus i) & \text{if} \quad p = 0 \\ +E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor J_{hashbytes} / J_{wordbytes} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} \end{cases} \end{equation} @@ -2194,16 +2197,16 @@ \subsection{Proof-of-work function} The PoW-function returns an array with the compressed mix as its first item and the Keccak-256 hash of the concatenation of the compressed mix with the seed hash as the second item: \begin{equation} - \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d}) = \lbrace \mathbf{m}_c(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), H_n, \mathbf{d}), \texttt{KEC}(\mathbf{s}_h(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), H_n) + \mathbf{m}_c(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), H_n, \mathbf{d})) \rbrace + \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}) = \lbrace \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}), \texttt{KEC}(\mathbf{s}_\mathbf{h}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}) + \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})) \rbrace \end{equation} -With $H_{\hcancel{n}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_c$ is obtained as follows: +With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathbf{c}$ is obtained as follows: \begin{equation} - \mathbf{m}_c(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{accesses}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_h(\mathbf{h}, \mathbf{n}), \mathbf{s}_h(\mathbf{h}, \mathbf{n}), -1), -4) + \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{accesses}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) \end{equation} The seed hash being: \begin{equation} - \mathbf{s}_h(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{revert}(\mathbf{n})) + \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{revert}(\mathbf{n})) \end{equation} $E_{revert}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$: \begin{equation} From b24d119638493dcd870b3fa782d02fd874b9c581 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Thu, 28 Sep 2017 18:51:00 +1000 Subject: [PATCH 037/132] 11.3 and 11.4 cross refs --- Paper.tex | 72 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/Paper.tex b/Paper.tex index f3695bc1..6e17e2d7 100644 --- a/Paper.tex +++ b/Paper.tex @@ -21,7 +21,7 @@ \usepackage{tikz} \usepackage{underscore} %\usepackage{lipsum} % to generate filler text for testing of document rendering -\usepackage[bookmarks=true, unicode=true, pdftitle={Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain}, pdfauthor={Gavin Wood and others as per https://github.com/ethereum/yellowpaper/commits/master},pdfkeywords={Ethereum, Yellow Paper, blockchain, virtual machine, cryptography, decentralised, singleton, transaction, generalised},pdfborder={0 0 0.5 [3 3]}]{hyperref} +\usepackage[bookmarks=true, unicode=true, pdftitle={Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain}, pdfauthor={Gavin Wood and others as per https://github.com/ethereum/yellowpaper/commits/master},pdfkeywords={Ethereum, Yellow Paper, blockchain, virtual machine, cryptography, decentralised, singleton, transaction, generalised},pdfborder={0 0 0.5 [1 3]}]{hyperref} %,pagebackref=true %\usepackage{longtable} @@ -143,6 +143,7 @@ \section{The Blockchain Paradigm} \label{ch:overview} Mining is the process of dedicating effort (working) to bolster one series of transactions (a block) over any other potential competitor block. It is achieved thanks to a cryptographically secure proof. This scheme is known as a proof-of-work and is discussed in detail in section \ref{ch:pow}. +\hypertarget{Pi}{} Formally, we expand to: \begin{eqnarray} \boldsymbol{\sigma}_{t+1} & \equiv & \Pi(\boldsymbol{\sigma}_\mathbf{t}, B) \\ @@ -336,10 +337,10 @@ \subsection{The Block} \label{ch:block} \begin{description}\hypertarget{H p}{ \item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_\mathbf{p}$.} \item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_\mathbf{o}}$.\hypertarget{H c}{ -\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block be transferred; formally $H_\mathbf{c}$.} -\item[stateRoot] The Keccak 256-bit hash of the root node of the state trie, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}. -\item[transactionsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}. -\item[receiptsRoot] The Keccak 256-bit hash of the root node of the trie structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}. +\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block shall be transferred; formally $H_\mathbf{c}$.} +\item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}. +\item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}. +\item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}. \item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarget{H d}{ \item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{ \item[number] A scalar value equal to the number of ancestor blocks. The genesis block has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{ @@ -351,16 +352,16 @@ \subsection{The Block} \label{ch:block} \hypertarget{block nonce}{\hypertarget{H n}{ \item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{n}$.}} \end{description} - -The other two components in the block are simply a list of ommer block headers (of the same format as above) and a series of the transactions. Formally, we can refer to a block $B$: +\hypertarget{B U}{ +The other two components in the block are simply a list of ommer block headers (of the same format as above), $B_\mathbf{U}$, and a series of the transactions, $B_\mathbf{T}$. Formally, we can refer to a block $B$: \begin{equation} B \equiv (B_H, B_\mathbf{T}, B_\mathbf{U}) -\end{equation} +\end{equation}} \hypertarget{Transaction Receipt}{\subsubsection{Transaction Receipt}} In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution. -Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed trie and the root recorded in the header as \hyperlink{H e}{$H_\mathbf{e}$}. +Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_\mathbf{e}$}. The transaction receipt is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathbf{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathbf{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathbf{b}$}: \begin{equation} @@ -369,9 +370,9 @@ \subsection{The Block} \label{ch:block} The function $L_R$ trivially prepares a transaction receipt for being transformed into an RLP-serialised byte array: \begin{equation} -L_R(R) \equiv (\mathtt{\small TRIE}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathbf{u}}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) +L_R(R) \equiv (\mathtt{\small \hyperlink{trie}{TRIE}}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathbf{u}}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) \end{equation} -thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a trie structure, the root of which forms the first item. +thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a \hyperlink{trie}{trie} structure, the root of which forms the first item. We assert $\hyperlink{R u}{R_\mathbf{u}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_\mathbf{b}$}, is a hash of size 2048 bits (256 bytes): \begin{equation} @@ -408,8 +409,8 @@ \subsubsection{Holistic Validity} We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathbf{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_\mathbf{r}$: \begin{equation} \begin{array}[t]{lclc}\hypertarget{H r}{ -H_\mathbf{r} &\equiv& \mathtt{\small TRIE}(L_S(\Pi(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\ -H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(B_\mathbf{U})))} & \wedge \hypertarget{H t}{\\ +H_\mathbf{r} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\ +H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathbf{U}})))} & \wedge \hypertarget{H t}{\\ H_\mathbf{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{T} \rVert, i \in \mathbb{P}: p(i, L_\mathbf{T}(B_\mathbf{T}[i]))\}) }& \wedge \hypertarget{H e}{\\ H_\mathbf{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{R} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\})} & \wedge \hypertarget{H b}{\\ H_\mathbf{b} &\equiv& \bigvee_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_\mathbf{b} \big)} @@ -428,14 +429,14 @@ \subsubsection{Holistic Validity} Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly. -The values stemming from the computation of transactions, specifically the transaction receipts, $B_\mathbf{R}$, and that defined through the transactions state-accumulation function, $\Pi$, are formalised later in section \ref{sec:statenoncevalidation}. +The values stemming from the computation of transactions, specifically the transaction receipts, $B_\mathbf{R}$, and that defined through the transaction's \hyperlink{Pi}{state-accumulation function, $\Pi$,} are formalised later in section \ref{sec:statenoncevalidation}. \subsubsection{Serialisation} The function $L_B$ and $L_H$ are the preparation functions for a block and block header respectively. Much like the transaction receipt preparation function $L_R$, we assert the types and order of the structure for when the RLP transformation is required: \begin{eqnarray} \quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_\mathbf{p}}, \hyperlink{H o}{H_\mathbf{o}}, \hyperlink{H c}{H_\mathbf{c}}, \hyperlink{H r}{H_\mathbf{r}}, \hyperlink{H t}{H_\mathbf{t}}, \hyperlink{H e}{H_\mathbf{e}}, \hyperlink{H b}{H_\mathbf{b}}, \hyperlink{H d}{H_\mathbf{d}},\\ \hyperlink{H i}{H_\mathbf{i}}, \hyperlink{H l}{H_\mathbf{l}}, \hyperlink{H g}{H_\mathbf{g}}, \hyperlink{H s}{H_\mathbf{s}}, \hyperlink{H x}{H_\mathbf{x}}, \hyperlink{H m}{H_\mathbf{m}}, \hyperlink{H n}{H_\mathbf{n}} \; )\end{array} \\ -\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathbf{T}^*(B_\mathbf{T}), L_H^*(B_\mathbf{U}) \big) +\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathbf{T}^*(B_\mathbf{T}), L_H^*(\hyperlink{B U}{B_\mathbf{U}}) \big) \end{eqnarray} With $L_\mathbf{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus: @@ -688,7 +689,7 @@ \section{Contract Creation} \label{ch:create} \boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except:} \end{equation} \begin{eqnarray} -\boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny TRIE}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\ +\boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\ \boldsymbol{\sigma}^*[s]_\mathbf{b} &\equiv& \boldsymbol{\sigma}[s]_\mathbf{b} - v \end{eqnarray} @@ -782,7 +783,7 @@ \section{Message Call} \label{ch:call} \end{equation} \begin{equation} \begin{cases} -\boldsymbol{\sigma}_1'[r] \equiv (v, 0, \mathtt{\tiny KEC}(()), \mathtt{\tiny TRIE}(\varnothing)) & \text{if} \quad \boldsymbol{\sigma}[r] = \varnothing \\ +\boldsymbol{\sigma}_1'[r] \equiv (v, 0, \mathtt{\tiny KEC}(()), \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing)) & \text{if} \quad \boldsymbol{\sigma}[r] = \varnothing \\ \boldsymbol{\sigma}_1'[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v & \text{otherwise} \end{cases} \end{equation} @@ -1031,7 +1032,7 @@ \subsection{Ommer Validation} The validation of \hyperlink{ommerheaders}{ommer headers} means nothing more than verifying that each ommer header is both a valid header and satisfies the relation of $N$th-generation ommer to the present block where $N \leq 6$. The maximum of ommer headers is two. Formally: \begin{equation} -\lVert B_\mathbf{U} \rVert \leqslant 2 \bigwedge_{U \in B_\mathbf{U}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6) +\lVert \hyperlink{B U}{B_\mathbf{U}} \rVert \leqslant 2 \bigwedge_{U \in \hyperlink{B U}{B_\mathbf{U}}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6) \end{equation} where $k$ denotes the ``is-kin'' property: @@ -1052,50 +1053,51 @@ \subsection{Transaction Validation} %where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_\mathbf{T}[i]$, and $g[i]$ the total gas used immediately after said transaction. -The given \textbf{gasUsed} must correspond faithfully to the transactions listed: ${B_H}_\mathbf{g}$, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction: +The given \textbf{gasUsed} must correspond faithfully to the transactions listed: \hyperlink{H g}{${B_H}_\mathbf{g}$}, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction: \begin{equation} -{B_H}_\mathbf{g} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathbf{u}} +\hyperlink{H g}{{B_H}_\mathbf{g}} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathbf{u}} \end{equation} \subsection{Reward Application} -The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{R b}{$R_\mathbf{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):} +The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{block reward R b}{$R_\mathbf{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):} \begin{eqnarray} \Omega(B, \boldsymbol{\sigma}) & \equiv & \boldsymbol{\sigma}': \boldsymbol{\sigma}' = \boldsymbol{\sigma} \quad \text{except:} \\ -\boldsymbol{\sigma}'[{B_H}_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[{B_H}_\mathbf{c}]_\mathbf{b} + (1 + \frac{\lVert B_\mathbf{U}\rVert}{32})\hyperlink{R b}{R_\mathbf{b}} \\ +\boldsymbol{\sigma}'[\hyperlink{H c}{{B_H}_\mathbf{c}}]_\mathbf{b} & = & \boldsymbol{\sigma}[{B_H}_\mathbf{c}]_\mathbf{b} + (1 + \frac{\lVert \hyperlink{B U}{B_\mathbf{U}}\rVert}{32})\hyperlink{block reward R b}{R_\mathbf{b}} \\ \forall_{U \in B_\mathbf{U}}: \\ \nonumber - \boldsymbol{\sigma}'[U_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[U_\mathbf{c}]_\mathbf{b} + (1 + \frac{1}{8} (U_\mathbf{i} - {B_H}_\mathbf{i})) \hyperlink{R b}{R_\mathbf{b}} + \boldsymbol{\sigma}'[U_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[U_\mathbf{c}]_\mathbf{b} + (1 + \frac{1}{8} (U_\mathbf{i} - \hyperlink{H i}{{B_H}_\mathbf{i}})) \hyperlink{block reward R b}{R_\mathbf{b}} \end{eqnarray} -If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively. +If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively.\hypertarget{block reward R b}{} We define the block reward as 5 Ether: \begin{equation} -\text{Let} \quad \hyperlink{R b}{R_\mathbf{b}} = 5 \times 10^{18} +\text{Let} \quad R_\mathbf{b} = 5 \times 10^{18} \end{equation} \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} +\hypertarget{Gamma}{ We may now define the function, $\Gamma$, that maps a block $B$ to its initiation state: \begin{equation} \Gamma(B) \equiv \begin{cases} \boldsymbol{\sigma}_0 & \text{if} \quad P(B_H) = \varnothing \\ -\boldsymbol{\sigma}_\mathbf{i}: \mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i})) = {P(B_H)_H}_\mathbf{r} & \text{otherwise} +\boldsymbol{\sigma}_\mathbf{i}: \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\boldsymbol{\sigma}_\mathbf{i})) = {P(B_H)_H}_\mathbf{r} & \text{otherwise} \end{cases} \end{equation} - -Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathbf{i}$; it is assumed that implementations will store this in the state database, trivial and efficient since the trie is by nature an immutable data structure. +} +Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathbf{i}$; it is assumed that implementations will store this in the state database, which is trivial and efficient since the trie is by nature an immutable data structure. \hypertarget{Phi}{ And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$:} \begin{eqnarray} \Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\ -B'\mathbf{n} & = & \mathbf{n}: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \\ -B'_\mathbf{m} & = & \mathbf{m} \quad \text{with } (\mathbf{x}, \mathbf{m}) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, \mathbf{n}, \mathbf{d}) \\ -B^* & \equiv & B \quad \text{except:} \quad B^*_\mathbf{r} = r(\Pi(\Gamma(B), B)) +B'_\mathbf{n} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \\ +B'_\mathbf{m} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\ +B^* & \equiv & B \quad \text{except:} \quad B^*_\mathbf{r} = r(\hyperlink{Pi}{\Pi}(\Gamma(B), B)) \end{eqnarray} With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}. -As specified at the beginning of the present work, $\Pi$ is the state-transition function, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined. +As specified at the beginning of the present work, \hyperlink{Pi}{$\Pi$ is the state-transition function}, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined. \hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_\mathbf{u}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_\mathbf{b}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction): \begin{equation} @@ -1117,7 +1119,7 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} \hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) \end{equation} -Finally, we define $\Pi$ as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$: +Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$: \begin{equation} \Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{R sigma}{\mathbf{R})_{\boldsymbol{\sigma}}}) \end{equation} @@ -1139,7 +1141,6 @@ \subsection{Mining Proof-of-Work} \label{ch:pow} More formally, the proof-of-work function takes the form of $\mathtt{PoW}$: \begin{equation} m = H_\mathbf{m} \quad \wedge \quad \mathbf{n} \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \text{with} \quad (\mathbf{m}, \mathbf{n}) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathbf{n}, \mathbf{d}) -m = H_m \quad \wedge \quad n \leqslant \frac{2^{256}}{H_d} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hcancel{n}}, H_n, \mathbf{d}) \end{equation} Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathbf{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathbf{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. @@ -1164,7 +1165,7 @@ \subsection{Random Numbers} \section{Future Directions} \label{ch:future} -The state database won't be forced to maintain all past state trie structures into the future. It should maintain an age for each node and eventually discard nodes that are neither recent enough nor checkpoints; checkpoints, or a set of nodes in the database that allow a particular block's state trie to be traversed, could be used to place a maximum limit on the amount of computation needed in order to retrieve any state throughout the blockchain. +The state database won't be forced to maintain all past state \hyperlink{trie}{trie} structures into the future. It should maintain an age for each node and eventually discard nodes that are neither recent enough nor checkpoints; checkpoints, or a set of nodes in the database that allow a particular block's state trie to be traversed, could be used to place a maximum limit on the amount of computation needed in order to retrieve any state throughout the blockchain. Blockchain consolidation could be used in order to reduce the amount of blocks a client would need to download to act as a full, mining, node. A compressed archive of the trie structure at given points in time (perhaps one in every 10,000th block) could be maintained by the peer network, effectively recasting the genesis block. This would reduce the amount to be downloaded to a single archive plus a hard maximum limit of blocks. @@ -1318,6 +1319,7 @@ \section{Hex-Prefix Encoding}\label{app:hexprefix} Thus the high nibble of the first byte contains two flags; the lowest bit encoding the oddness of the length and the second-lowest encoding the flag $t$. The low nibble of the first byte is zero in the case of an even number of nibbles and the first nibble in the case of an odd number. All remaining nibbles (now an even number) fit properly into the remaining bytes. +\hypertarget{trie}{} \section{Modified Merkle Patricia Tree}\label{app:trie} The modified Merkle Patricia tree (trie) provides a persistent data structure to map between arbitrary-length binary data (byte arrays). It is defined in terms of a mutable data structure to map between 256-bit binary fragments and arbitrary-length binary data, typically implemented as a database. The core of the trie, and its sole requirement in terms of the protocol specification is to provide a single value that identifies a given set of key-value pairs, which may be either a 32 byte sequence or the empty byte sequence. It is left as an implementation consideration to store and maintain the structure of the trie in a manner that allows effective and efficient realisation of the protocol. From 9b296effe9f998ac060a6537e33f5a7b6f18e0d4 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Fri, 29 Sep 2017 17:30:13 +1000 Subject: [PATCH 038/132] Cross references, grammar, maths in Appendix I and J, and section 11 --- Biblio.bib | 42 ++++++++++++++++ Paper.out | 1 + Paper.tex | 141 ++++++++++++++++++++++++++++++----------------------- 3 files changed, 123 insertions(+), 61 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index cb8177be..78d529ba 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -1,3 +1,45 @@ +@misc{commitdateforEthash, + url = "https://github.com/ethereum/yellowpaper/commit/77a8cf2428ce245bf6e2c39c5e652ba58a278666#commitcomment-24644869", + note = "Not able to be archived by the Wayback Machine, the saved page doesn't load showing the cited change and comment.", + author = {{Christoph Jentzsch}}, + date = "4 May 2015", + publisher = "Github", +} + +@misc{ASICbitcoinwiki, + url = {{https://en.bitcoin.it/wiki/ASIC}.}, + note = "\url{https://web.archive.org/web/20170929042224/https://en.bitcoin.it/wiki/ASIC}.", + title = {{ASIC}}, + publisher = {{bitcoinwiki}}, + date = "29 May 2015", +} + +@book{ASICSmithMJS, + title = {{Application-Specific Integrated Circuits}}, + author = "Smith, Michael John Sebastian", + publisher = "Addison-Wesley", + year = "1997", + ISBN = "0201500221", + note = "Available here: \url{https://www.slideshare.net/nhKhanhNguyn/michael-john-sebastian-smith-applicationspecific-integrated-circuitsaddisonwesley-professional-1997-1} with the archive: \url{https://web.archive.org/save/https://www.slideshare.net/nhKhanhNguyn/michael-john-sebastian-smith-applicationspecific-integrated-circuitsaddisonwesley-professional-1997-1}. A preview is available at \url{https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}, with the archive: +\url{https://web.archive.org/web/20170929041938/https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}.", +} + +@misc{ASICWiki, + url = "https://en.wikipedia.org/wiki/Application-specific_integrated_circuit", + note = "\url{https://web.archive.org/web/20170929032958/https://en.wikipedia.org/wiki/Application-specific_integrated_circuit}.", + title = "Application-specific integrated circuit", + publisher = "Wikipedia", + date = "3 July 2017", +} + +@misc{LatticeOrder, + url = "https://en.wikipedia.org/wiki/Lattice_(order)", + note = "\url{https://web.archive.org/save/https://en.wikipedia.org/wiki/Lattice_(order)}.", + title = {{Lattice (order)}}, + publisher = "Wikipedia", + date = "1 August 2017", +} + @misc{ECDSAWikipedia, url = "https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm", note = "\url{https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm}.", diff --git a/Paper.out b/Paper.out index 2d247c37..ffc08095 100644 --- a/Paper.out +++ b/Paper.out @@ -55,3 +55,4 @@ \BOOKMARK [2][-]{subsection.J.2}{\376\377\000J\000.\0002\000.\000\040\000S\000i\000z\000e\000\040\000o\000f\000\040\000d\000a\000t\000a\000s\000e\000t\000\040\000a\000n\000d\000\040\000c\000a\000c\000h\000e}{appendix.J}% 55 \BOOKMARK [2][-]{subsection.J.3}{\376\377\000J\000.\0003\000.\000\040\000D\000a\000t\000a\000s\000e\000t\000\040\000g\000e\000n\000e\000r\000a\000t\000i\000o\000n}{appendix.J}% 56 \BOOKMARK [2][-]{subsection.J.4}{\376\377\000J\000.\0004\000.\000\040\000P\000r\000o\000o\000f\000-\000o\000f\000-\000w\000o\000r\000k\000\040\000f\000u\000n\000c\000t\000i\000o\000n}{appendix.J}% 57 +\BOOKMARK [1][-]{appendix.K}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000K\000.\000\040\000L\000i\000s\000t\000\040\000o\000f\000\040\000m\000a\000t\000h\000e\000m\000a\000t\000i\000c\000a\000l\000\040\000s\000y\000m\000b\000o\000l\000s}{}% 58 diff --git a/Paper.tex b/Paper.tex index 6e17e2d7..14f0a7c6 100644 --- a/Paper.tex +++ b/Paper.tex @@ -21,6 +21,9 @@ \usepackage{tikz} \usepackage{underscore} %\usepackage{lipsum} % to generate filler text for testing of document rendering +\usepackage[english]{babel} +\usepackage [autostyle]{csquotes} +\MakeOuterQuote{"} \usepackage[bookmarks=true, unicode=true, pdftitle={Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain}, pdfauthor={Gavin Wood and others as per https://github.com/ethereum/yellowpaper/commits/master},pdfkeywords={Ethereum, Yellow Paper, blockchain, virtual machine, cryptography, decentralised, singleton, transaction, generalised},pdfborder={0 0 0.5 [1 3]}]{hyperref} %,pagebackref=true @@ -28,6 +31,7 @@ % https://stackoverflow.com/a/1918465/7438857 %tabularx seems better + \usepackage{tabularx} %https://stackoverflow.com/a/1919447/7438857 @@ -55,6 +59,7 @@ % https://tex.stackexchange.com/a/59131/143781 % +%\usepackage{glossaries} \input{Version.tex} @@ -143,15 +148,14 @@ \section{The Blockchain Paradigm} \label{ch:overview} Mining is the process of dedicating effort (working) to bolster one series of transactions (a block) over any other potential competitor block. It is achieved thanks to a cryptographically secure proof. This scheme is known as a proof-of-work and is discussed in detail in section \ref{ch:pow}. -\hypertarget{Pi}{} Formally, we expand to: \begin{eqnarray} -\boldsymbol{\sigma}_{t+1} & \equiv & \Pi(\boldsymbol{\sigma}_\mathbf{t}, B) \\ +\boldsymbol{\sigma}_{t+1} & \equiv & \hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}_\mathbf{t}, B) \\ B & \equiv & (..., (T_0, T_1, ...) ) \\ \Pi(\boldsymbol{\sigma}, B) & \equiv & \hyperlink{Omega}{\Omega}(B, \hyperlink{Upsilon}{\Upsilon}(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...) \end{eqnarray} -Where \hyperlink{Omega}{$\Omega$} is the block-finalisation state transition function (a function that rewards a nominated party); $B$ is this block, which includes a series of transactions amongst some other components; and $\Pi$ is the block-level state-transition function. +Where \hyperlink{Omega}{$\Omega$} is the block-finalisation state transition function (a function that rewards a nominated party); $B$ is this block, which includes a series of transactions amongst some other components; and $\hyperlink{Pi}{\Pi}$ is the block-level state-transition function. This is the basis of the blockchain paradigm, a model that forms the backbone of not only Ethereum, but all decentralised consensus-based transaction systems to date. @@ -177,7 +181,7 @@ \subsection{Value} \subsection{Which History?} -Since the system is decentralised and all parties have an opportunity to create a new block on some older pre-existing block, the resultant structure is necessarily a tree of blocks. In order to form a consensus as to which path, from root (the genesis block) to leaf (the block containing the most recent transactions) through this tree structure, known as the blockchain, there must be an agreed-upon scheme. If there is ever a disagreement between nodes as to which root-to-leaf path down the block tree is the `best' blockchain, then a \textit{fork} occurs. +Since the system is decentralised and all parties have an opportunity to create a new block on some older pre-existing block, the resultant structure is necessarily a tree of blocks. In order to form a consensus as to which path, from root (the \hyperlink{GenesisBlock}{genesis block}) to leaf (the block containing the most recent transactions) through this tree structure, known as the blockchain, there must be an agreed-upon scheme. If there is ever a disagreement between nodes as to which root-to-leaf path down the block tree is the `best' blockchain, then a \textit{fork} occurs. This would mean that past a given point in time (block), multiple states of the system may coexist: some nodes believing one block to contain the canonical transactions, other nodes believing some other block to be canonical, potentially containing radically different or incompatible transactions. This is to be avoided at all costs as the uncertainty that would ensue would likely kill all confidence in the entire system. @@ -343,10 +347,10 @@ \subsection{The Block} \label{ch:block} \item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}. \item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarget{H d}{ \item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{ -\item[number] A scalar value equal to the number of ancestor blocks. The genesis block has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{ +\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{ \item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathbf{l}$.}\hypertarget{H g}{ -\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathbf{g}$.} -\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally \hyperlink{H s}{$H_\mathbf{s}$}.\hypertarget{H x}{ +\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathbf{g}$.}\hypertarget{H s}{ +\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_\mathbf{s}$}.}\hypertarget{H x}{ \item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_\mathbf{x}$.}\hypertarget{H m}{ \item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{m}$.} \hypertarget{block nonce}{\hypertarget{H n}{ @@ -363,7 +367,8 @@ \subsection{The Block} \label{ch:block} In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution. Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_\mathbf{e}$}. -The transaction receipt is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathbf{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathbf{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathbf{b}$}: +\hypertarget{R}{} +The transaction receipt, $R$, is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathbf{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathbf{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathbf{b}$}: \begin{equation} R \equiv (R_{\boldsymbol{\sigma}}, R_\mathbf{u}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) \end{equation} @@ -391,10 +396,10 @@ \subsection{The Block} \label{ch:block} We define the Bloom filter function, $M$, to reduce a log entry into a single 256-byte hash: \begin{equation} -M(O) \equiv \bigvee_{t \in \{O_\mathbf{a}\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big) +M(O) \equiv \hyperlink{bigvee}{\bigvee}_{t \in \{O_\mathbf{a}\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big) \end{equation} -where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence./footnote{11 bits $= 2^2048$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence."} Formally: +where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence.\footnote{11 bits $= 2^{2048}$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence".} Formally: \begin{eqnarray} M_{3:2048}(\mathbf{x}: \mathbf{x} \in \mathbb{B}) & \equiv & \mathbf{y}: \mathbf{y} \in \mathbb{B}_{256} \quad \text{where:}\\ \mathbf{y} & = & (0, 0, ..., 0) \quad \text{except:}\\ @@ -410,10 +415,10 @@ \subsubsection{Holistic Validity} \begin{equation} \begin{array}[t]{lclc}\hypertarget{H r}{ H_\mathbf{r} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\ -H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathbf{U}})))} & \wedge \hypertarget{H t}{\\ +H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathbf{U}}))) & \wedge }\hypertarget{H t}{\\ H_\mathbf{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{T} \rVert, i \in \mathbb{P}: p(i, L_\mathbf{T}(B_\mathbf{T}[i]))\}) }& \wedge \hypertarget{H e}{\\ -H_\mathbf{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{R} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\})} & \wedge \hypertarget{H b}{\\ -H_\mathbf{b} &\equiv& \bigvee_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_\mathbf{b} \big)} +H_\mathbf{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert \hyperlink{Transaction Receipt}{B_\mathbf{R}} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\}) & \wedge }\hypertarget{H b}{\hypertarget{r}{\\ +H_\mathbf{b} &\equiv& \hyperlink{bigvee}{\bigvee}_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_\mathbf{b} \big)}} \end{array} \end{equation} @@ -429,7 +434,7 @@ \subsubsection{Holistic Validity} Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly. -The values stemming from the computation of transactions, specifically the transaction receipts, $B_\mathbf{R}$, and that defined through the transaction's \hyperlink{Pi}{state-accumulation function, $\Pi$,} are formalised later in section \ref{sec:statenoncevalidation}. +The values stemming from the computation of transactions, specifically the \hyperlink{transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{stateR-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}. \subsubsection{Serialisation} @@ -516,7 +521,7 @@ \subsubsection{Block Header Validity} The nonce of a block, $\hyperlink{H n}{H_\mathbf{n}}$, must satisfy the relations: \begin{equation} -n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \wedge \quad \mathbf{m} = \hyperlink{H m}{H_\mathbf{m}} +n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \wedge \quad m = \hyperlink{H m}{H_\mathbf{m}} \end{equation} with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$. @@ -537,7 +542,7 @@ \subsubsection{Block Header Validity} & & \hyperlink{H i}{H_\mathbf{i}} = {P(H)_H}_\mathbf{i} +1 \quad \wedge \\ & & \lVert \hyperlink{H x}{H_\mathbf{x}} \rVert \le 32 \end{eqnarray} -where $(\mathbf{n}, \mathbf{m}) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$ +where $(n, m) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$ Noting additionally that \textbf{extraData} must be at most 32 bytes. @@ -1005,7 +1010,7 @@ \subsection{The Execution Cycle} \section{Blocktree to Blockchain} \label{ch:ghost} -The canonical blockchain is a path from root to leaf through the entire block tree. In order to have consensus over which path it is, conceptually we identify the path that has had the most computation done upon it, or, the \textit{heaviest} path. Clearly one factor that helps determine the heaviest path is the block number of the leaf, equivalent to the number of blocks, not counting the unmined genesis block, in the path. The longer the path, the greater the total mining effort that must have been done in order to arrive at the leaf. This is akin to existing schemes, such as that employed in Bitcoin-derived protocols. +The canonical blockchain is a path from root to leaf through the entire block tree. In order to have consensus over which path it is, conceptually we identify the path that has had the most computation done upon it, or, the \textit{heaviest} path. Clearly one factor that helps determine the heaviest path is the block number of the leaf, equivalent to the number of blocks, not counting the unmined \hyperlink{GenesisBlock}{genesis block}, in the path. The longer the path, the greater the total mining effort that must have been done in order to arrive at the leaf. This is akin to existing schemes, such as that employed in Bitcoin-derived protocols. Since a block header includes the difficulty, the header alone is enough to validate the computation done. Any block contributes toward the total computation or \textit{total difficulty} of a chain. @@ -1093,7 +1098,7 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} \Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\ B'_\mathbf{n} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \\ B'_\mathbf{m} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\ -B^* & \equiv & B \quad \text{except:} \quad B^*_\mathbf{r} = r(\hyperlink{Pi}{\Pi}(\Gamma(B), B)) +B^* & \equiv & B \quad \text{except:} \quad {\hyperlink{Transaction Receipt}{B^*_\mathbf{r}}} = \hyperlink{r}{r}(\hyperlink{Pi}{\Pi}(\Gamma(B), B)) \end{eqnarray} With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}. @@ -1104,7 +1109,7 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} \mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) & \text{otherwise} \end{cases} \end{equation} -In the case of $B_\mathbf{R}[n]_\mathbf{u}$, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total: +In the case of \hyperlink{Transaction Receipt}{${B_\mathbf{R}}[n]_\mathbf{u}$}, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total: \begin{equation} \mathbf{R}[n]_\mathbf{u} = \begin{cases} 0 & \text{if} \quad n < 0 \\ \begin{array}[b]{l} @@ -1119,10 +1124,11 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} \hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) \end{equation} +\hypertarget{Pi}{ Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$: \begin{equation} \Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{R sigma}{\mathbf{R})_{\boldsymbol{\sigma}}}) -\end{equation} +\end{equation}} Thus the complete block-transition mechanism is defined, except for $\mathtt{PoW}$, the proof-of-work function. @@ -1134,22 +1140,22 @@ \subsection{Mining Proof-of-Work} \label{ch:pow} Secondly, it should not be possible to make super-linear profits, and especially not so with a high initial barrier. Such a mechanism allows a well-funded adversary to gain a troublesome amount of the network's total mining power and as such gives them a super-linear reward (thus skewing distribution in their favour) as well as reducing the network security. -One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task. In Bitcoin's case the task is the SHA256 hash function. While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet. +One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task (\cite{ASICSmithMJS}, \cite{ASICWiki}). In Bitcoin's case the task is the SHA256 hash function (\cite{ASICbitcoinwiki}). While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet. -Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the \hyperlink{block nonce}{nonce} requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware'' for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum 1.0 we have chosen the first path. +Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the \hyperlink{block nonce}{nonce} requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware'' for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum \textit{Frontier} and \textit{Homestead} we have chosen the first path. More formally, the proof-of-work function takes the form of $\mathtt{PoW}$: \begin{equation} -m = H_\mathbf{m} \quad \wedge \quad \mathbf{n} \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \text{with} \quad (\mathbf{m}, \mathbf{n}) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathbf{n}, \mathbf{d}) +m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \quad n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathbf{n}, \mathbf{d}) \end{equation} -Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathbf{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathbf{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. +Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathbf{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathbf{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being the \hyperlink{block nonce}{block nonce}, a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. \subsubsection{Ethash} -Ethash is the PoW algorithm for Ethereum 1.0. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms have been drastically changed in the last month of research and development. The general route that the algorithm takes is as follows: +Ethash is the PoW algorithm for Ethereum \textit{Frontier} and \textit{Homestead}. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms were drastically changed with R\&D from February 2015 until May 4 2015 (\cite{commitdateforEthash}). The general route that the algorithm takes is as follows: -There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, $J_{cacheinit}$ bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, $J_{datasetinit}$ bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. +There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, \hyperlink{Jcacheinit}{$J_{cacheinit}$} bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, \hyperlink{Jdatasetinit}{$J_{datasetinit}$} bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. -Mining involves grabbing random slices of the dataset and hashing them together. Verification can be done with low memory by using the cache to regenerate the specific pieces of the dataset that you need, so you only need to store the cache. The large dataset is updated once every $J_{epoch}$ blocks, so the vast majority of a miner's effort will be reading the dataset, not making changes to it. The mentioned parameters as well as the algorithm is explained in detail in appendix \ref{app:ethash}. +Mining involves grabbing random slices of the dataset and hashing them together. Verification can be done with low memory by using the cache to regenerate the specific pieces of the dataset that you need, so you only need to store the cache. The large dataset is updated once every \hyperlink{Jepoch}{$J_{epoch}$} blocks, so the vast majority of a miner's effort will be reading the dataset, not making changes to it. The mentioned parameters as well as the algorithm is explained in detail in appendix \ref{app:ethash}. \section{Implementing Contracts} @@ -1167,7 +1173,7 @@ \section{Future Directions} \label{ch:future} The state database won't be forced to maintain all past state \hyperlink{trie}{trie} structures into the future. It should maintain an age for each node and eventually discard nodes that are neither recent enough nor checkpoints; checkpoints, or a set of nodes in the database that allow a particular block's state trie to be traversed, could be used to place a maximum limit on the amount of computation needed in order to retrieve any state throughout the blockchain. -Blockchain consolidation could be used in order to reduce the amount of blocks a client would need to download to act as a full, mining, node. A compressed archive of the trie structure at given points in time (perhaps one in every 10,000th block) could be maintained by the peer network, effectively recasting the genesis block. This would reduce the amount to be downloaded to a single archive plus a hard maximum limit of blocks. +Blockchain consolidation could be used in order to reduce the amount of blocks a client would need to download to act as a full, mining, node. A compressed archive of the trie structure at given points in time (perhaps one in every 10,000th block) could be maintained by the peer network, effectively recasting the \hyperlink{GenesisBlock}{genesis block}. This would reduce the amount to be downloaded to a single archive plus a hard maximum limit of blocks. Finally, blockchain compression could perhaps be conducted: nodes in state trie that haven't sent/received a transaction in some constant amount of blocks could be thrown out, reducing both Ether-leakage and the growth of the state database. @@ -1239,6 +1245,7 @@ \section{Terminology} \label{ch:Terminology} \end{description} +\hypertarget{rlp}{} \section{Recursive Length Prefix}\label{app:rlp} This is a serialisation method for encoding arbitrarily structured binary data (byte arrays). @@ -2061,6 +2068,7 @@ \subsection{Instruction Set} %\section{Low-level Lisp-like Language}\label{app:lll} %The Low-level Lisp-like Language is a language created in order to efficiently author low-level programs (contracts) without having to resort to EVM-Assembly. +\hypertarget{GenesisBlock}{} \section{Genesis Block}\label{app:genesis} The genesis block is 15 items, and is specified thus: @@ -2068,54 +2076,55 @@ \section{Genesis Block}\label{app:genesis} \big( \big( 0_{256}, \mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big), 0_{160}, stateRoot, 0, 0, 0_{2048}, 2^{17}, 0, 0, 3141592, time, 0, 0_{256}, \mathtt{\tiny KEC}\big( (42) \big) \big), (), () \big) \end{equation} -Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the beneficiary address, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the log bloom, 2048-bit of all zeros; $2^{17}$ refers to the difficulty; the transaction trie root, receipt trie root, gas used, block number and extradata are both $0$, being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the \hyperlink{block nonce}{nonce}. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in RLP, both empty lists. +Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the \hyperlink{H c}{beneficiary address}, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the \hyperlink{H b}{log bloom}, a 2048-bit sequence of all zeros; $2^{17}$ refers to the \hyperlink{H d}{difficulty}; the \hyperlink{H t}{transaction trie root}, \hyperlink{H e}{receipt trie root}, \hyperlink{H g}{gas used}, \hyperlink{H i}{block number} and \hyperlink{H x}{extradata} are all $0$ (listed in the order of decimal zeros in the above sequence), being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the \hyperlink{block nonce}{nonce}. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in \hyperlink{rlp}{RLP}, both empty lists. -The proof-of-concept series include a development premine, making the state root hash some value $stateRoot$. Also $time$ will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values. +The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values. \section{Ethash}\label{app:ethash} \subsection{Definitions} We employ the following definitions: -\begin{tabularx}{\textwidth}{rlrrX} +\begin{tabularx}{\textwidth}{rlX} \toprule Name & Value & Description \\ -\midrule -$J_{wordbytes}$ & 4 & Bytes in word. \\ -$J_{datasetinit}$ & $2^{30}$ & Bytes in dataset at genesis. \\ -$J_{datasetgrowth}$ & $2^{23}$ & Dataset growth per epoch. \\ -$J_{cacheinit}$ & $2^{24}$ & Bytes in cache at genesis. \\ -$J_{cachegrowth}$ & $2^{17}$ & Cache growth per epoch. \\ -$J_{epoch}$ & 30000 & Blocks per epoch. \\ -$J_{mixbytes}$ & 128 & mix length in bytes. \\ -$J_{hashbytes}$ & 64 & Hash length in bytes. \\ -$J_{parents}$ & 256 & Number of parents of each dataset element. \\ -$J_{cacherounds}$ & 3 & Number of rounds in cache production. \\ -$J_{accesses}$ & 64 & Number of accesses in hashimoto loop. \\ +\midrule +\hypertarget{Jwordbytes}{ +$J_{wordbytes}$ & 4 & This is the bytes in a word. }\hypertarget{Jdatasetinit}{\\ +$J_{datasetinit}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{\\ +$J_{datasetgrowth}$ & $2^{23}$ & This is the dataset growth per epoch. }\hypertarget{Jcacheinit}{\\ +$J_{cacheinit}$ & $2^{24}$ & This is the bytes in the cache at genesis. }\hypertarget{Jcachegrowth}{\\ +$J_{cachegrowth}$ & $2^{17}$ & This is the cache growth per epoch. }\hypertarget{Jepoch}{\\ +$J_{epoch}$ & 30000 & This is the blocks per epoch. }\hypertarget{Jmixbytes}{\\ +$J_{mixbytes}$ & 128 & This is the mix length in bytes. }\hypertarget{Jhashbytes}{\\ +$J_{hashbytes}$ & 64 & This is the hash length in bytes. }\hypertarget{Jparents}{\\ +$J_{parents}$ & 256 & This is the number of parents of each dataset element. }\hypertarget{Jcacherounds}{\\ +$J_{cacherounds}$ & 3 & This is the number of rounds in cache production. }\hypertarget{Jaccesses}{\\ +$J_{accesses}$ & 64 & This is the number of accesses in a hashimoto loop. }\\ \bottomrule \end{tabularx} \subsection{Size of dataset and cache} The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. \begin{equation} - E_{epoch}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{J_{epoch}}\right\rfloor + E_{epoch}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{epoch}}}\right\rfloor \end{equation} -The size of the dataset growth by $J_{datasetgrowth}$ bytes, and the size of the cache by $J_{cachegrowth}$ bytes, every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of $J_{mixbytes}$, for the dataset, and $J_{hashbytes}$ for the cache. +The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{cachegrowth}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{mixbytes}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{hashbytes}$} for the cache. Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using \begin{equation} - d_{size} = E_{prime}(J_{datasetinit} + J_{datasetgrowth} \cdot E_{epoch} - J_{mixbytes}, J_{mixbytes}) + d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{datasetinit}}} + \hyperlink{Jdatasetgrowth}{J_{datasetgrowth}} \cdot E_{epoch} - \hyperlink{Jmixbytes}{J_{mixbytes}}, J_{mixbytes}) \end{equation} The size of the cache, $c_{size}$, is calculated using \begin{equation} - \mathbf{c}_{size} = E_{prime}(J_{cacheinit} + J_{cachegrowth} \cdot E_{epoch} - J_{hashbytes}, J_{hashbytes}) + c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{cacheinit}} + \hyperlink{cachegrowth}{J_{cachegrowth}} \cdot E_{epoch} - \hyperlink{Jhashbytes}{J_{hashbytes}}, J_{hashbytes}) \end{equation} \begin{equation} E_{prime}(x, y) = \begin{cases} x & \text{if} \quad x / y \in \mathbb{P} \\ -E_{prime}(x - 1 \cdot y, y) & \text{otherwise} +E_{prime}((x - 1) \cdot y, y) & \text{otherwise} \end{cases} \end{equation} \subsection{Dataset generation} -In order the generate the dataset we need the cache $\mathbf{c}$, which is an array of bytes. It depends on the cache size $c_{size}$ and the seed hash $\mathbf{s} \in \mathbb{B}_{32}$. +In order the generate the dataset we need the cache $c$, which is an array of bytes. It depends on the cache size $c_{size}$ and the seed hash $s \in \mathbb{B}_{32}$. \subsubsection{Seed hash} The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash: \begin{equation} @@ -2124,13 +2133,13 @@ \subsubsection{Seed hash} \begin{equation} C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} \texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{epoch}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ -\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - J_{epoch})) & \text{otherwise} +\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{epoch}})) & \text{otherwise} \end{cases} \end{equation} With $\mathbf{0}_{32}$ being 32 bytes of zeros. \subsubsection{Cache} -The cache production process involves using the seed hash to first sequentially filling up $c_{size}$ bytes of memory, then performing $J_{cacherounds}$ passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. +The cache production process involves using the seed hash to first sequentially fil up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{cacherounds}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. We define the array $\mathbf{c}_{i}$, consisting of 64 single bytes, as the $i$th element of the initial cache: \begin{equation} @@ -2144,11 +2153,11 @@ \subsubsection{Cache} \mathbf{c'}[i] = \mathbf{c}_{i} \quad \forall \quad i < n \end{equation} \begin{equation} - n = \left\lfloor\frac{c_{size}}{J_{hashbytes}}\right\rfloor + n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_{hashbytes}}}\right\rfloor \end{equation} -The cache is calculated by performing $J_{cacherounds}$ rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: +The cache is calculated by performing \hyperlink{Jcacherounds}{$J_{cacherounds}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: \begin{equation} - \mathbf{c} = E_{cacherounds}(\mathbf{c'}, J_{cacherounds}) + \mathbf{c} = E_{cacherounds}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_{cacherounds}}) \end{equation} \begin{equation} E_{cacherounds}(\mathbf{x}, y) = \begin{cases} @@ -2167,9 +2176,9 @@ \subsubsection{Cache} \end{multline} \subsubsection{Full dataset calculation} \label{dataset} -Essentially, we combine data from $J_{parents}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each $J_{hashbytes}$ bytes in size: +Essentially, we combine data from $J_{parents}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_{hashbytes}$} bytes in size: \begin{equation} - \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{d_{size}}{J_{hashbytes}}\right\rfloor + \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{d_{size}}{\hyperlink{Jhashbytes}{J_{hashbytes}}}\right\rfloor \end{equation} In order to calculate the single item we use an algorithm inspired by the FNV hash (\cite{FowlerNollVo1991FNVHash}) in some cases as a non-associative substitute for XOR. \begin{equation} @@ -2188,12 +2197,12 @@ \subsubsection{Full dataset calculation} \label{dataset} \begin{equation} E_{mix}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} \texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{size}] \oplus i) & \text{if} \quad p = 0 \\ -E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor J_{hashbytes} / J_{wordbytes} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} +E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_{hashbytes}} / \hyperlink{Jwordbytes}{J_{wordbytes}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} \end{cases} \end{equation} \subsection{Proof-of-work function} -Essentially, we maintain a "mix" $J_{mixbytes}$ bytes wide, and repeatedly sequentially fetch $J_{mixbytes}$ bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. $J_{mixbytes}$ bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. +Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_{mixbytes}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_{mixbytes}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_{mixbytes}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. If the output of this algorithm is below the desired target, then the \hyperlink{block nonce}{nonce} is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. @@ -2220,12 +2229,12 @@ \subsection{Proof-of-work function} The number of replicated sequences in the mix is: \begin{equation} - n_{mix} = \left\lfloor\frac{J_{mixbytes}}{J_{hashbytes}}\right\rfloor + n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{mixbytes}}}{\hyperlink{Jhashbytes}{J_{hashbytes}}}\right\rfloor \end{equation} In order to add random dataset nodes to the mix, the $E_{accesses}$ function is used: \begin{equation} E_{accesses}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} -E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = J_{accesses} -2 \\ +E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_{accesses}} -2 \\ E_{accesses}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} \end{cases} \end{equation} @@ -2234,7 +2243,7 @@ \subsection{Proof-of-work function} \end{equation} $E_{newdata}$ returns an array with $n_{mix}$ elements: \begin{equation} - E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{J_{mixbytes}}{J_{wordbytes}}\right\rfloor]) \mod \left\lfloor\frac{d_{size} / J_{hashbytes}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} + E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{mixbytes}}}{\hyperlink{Jwordbytes}{J_{wordbytes}}}\right\rfloor]) \mod \left\lfloor\frac{d_{size} / \hyperlink{Jhashbytes}{J_{hashbytes}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} \end{equation} The mix is compressed as follows: \begin{equation} @@ -2244,4 +2253,14 @@ \subsection{Proof-of-work function} \end{cases} \end{equation} +\section{List of mathematical symbols}\label{app:symbols} +\begin{tabularx}{\textwidth}{lcX} +\toprule +Symbol & Latex Command & Description \\ +\midrule +\hypertarget{bigvee}{ +$\bigvee$ & \verb|\bigvee| & This is the least upper bound, supremum, or join of all elements operated on. Thus it is the greatest element of such elements. More information is here: \cite{LatticeOrder}.}\\ +\bottomrule +\end{tabularx} + \end{document} From 98f5b242a489607e2f88ba4e53de1436a883ae3b Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Fri, 29 Sep 2017 20:53:37 +1000 Subject: [PATCH 039/132] Made changes but now it fails building at the Ethash table, and I can't figure out why. --- Paper.out | 7 ---- Paper.tex | 98 +++++++++++++++++++++++++++++-------------------------- 2 files changed, 52 insertions(+), 53 deletions(-) diff --git a/Paper.out b/Paper.out index ffc08095..f4b77e3c 100644 --- a/Paper.out +++ b/Paper.out @@ -49,10 +49,3 @@ \BOOKMARK [1][-]{appendix.H}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000H\000.\000\040\000V\000i\000r\000t\000u\000a\000l\000\040\000M\000a\000c\000h\000i\000n\000e\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n}{}% 49 \BOOKMARK [2][-]{subsection.H.1}{\376\377\000H\000.\0001\000.\000\040\000G\000a\000s\000\040\000C\000o\000s\000t}{appendix.H}% 50 \BOOKMARK [2][-]{subsection.H.2}{\376\377\000H\000.\0002\000.\000\040\000I\000n\000s\000t\000r\000u\000c\000t\000i\000o\000n\000\040\000S\000e\000t}{appendix.H}% 51 -\BOOKMARK [1][-]{appendix.I}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000I\000.\000\040\000G\000e\000n\000e\000s\000i\000s\000\040\000B\000l\000o\000c\000k}{}% 52 -\BOOKMARK [1][-]{appendix.J}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000J\000.\000\040\000E\000t\000h\000a\000s\000h}{}% 53 -\BOOKMARK [2][-]{subsection.J.1}{\376\377\000J\000.\0001\000.\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000s}{appendix.J}% 54 -\BOOKMARK [2][-]{subsection.J.2}{\376\377\000J\000.\0002\000.\000\040\000S\000i\000z\000e\000\040\000o\000f\000\040\000d\000a\000t\000a\000s\000e\000t\000\040\000a\000n\000d\000\040\000c\000a\000c\000h\000e}{appendix.J}% 55 -\BOOKMARK [2][-]{subsection.J.3}{\376\377\000J\000.\0003\000.\000\040\000D\000a\000t\000a\000s\000e\000t\000\040\000g\000e\000n\000e\000r\000a\000t\000i\000o\000n}{appendix.J}% 56 -\BOOKMARK [2][-]{subsection.J.4}{\376\377\000J\000.\0004\000.\000\040\000P\000r\000o\000o\000f\000-\000o\000f\000-\000w\000o\000r\000k\000\040\000f\000u\000n\000c\000t\000i\000o\000n}{appendix.J}% 57 -\BOOKMARK [1][-]{appendix.K}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000K\000.\000\040\000L\000i\000s\000t\000\040\000o\000f\000\040\000m\000a\000t\000h\000e\000m\000a\000t\000i\000c\000a\000l\000\040\000s\000y\000m\000b\000o\000l\000s}{}% 58 diff --git a/Paper.tex b/Paper.tex index 14f0a7c6..f4bef8bf 100644 --- a/Paper.tex +++ b/Paper.tex @@ -29,12 +29,14 @@ %\usepackage{longtable} % https://stackoverflow.com/a/1918465/7438857 -%tabularx seems better +%tabularx seems better, but we can include this if we need tables to break, as well as tabu and longtabu \usepackage{tabularx} %https://stackoverflow.com/a/1919447/7438857 +\usepackage{tabu} + \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} % "hyperref loads the url package internally. Use \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} to pass the option to the url package when it is loaded by hyperref. This avoids any package option clashes." Source: . % Note also this: "If the \PassOptionsToPackage{hyphens}{url} approach does not work, maybe it's "because you're trying to load the url package with a specific option, but it's being loaded by one of your packages before that with a different set of options. Try loading the url package earlier than the package that requires it. If it's loaded by the document class, try using \RequirePackage[hyphens]{url} before the document class." Source: . @@ -1153,9 +1155,9 @@ \subsection{Mining Proof-of-Work} \label{ch:pow} \subsubsection{Ethash} Ethash is the PoW algorithm for Ethereum \textit{Frontier} and \textit{Homestead}. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms were drastically changed with R\&D from February 2015 until May 4 2015 (\cite{commitdateforEthash}). The general route that the algorithm takes is as follows: -There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, \hyperlink{Jcacheinit}{$J_{cacheinit}$} bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, \hyperlink{Jdatasetinit}{$J_{datasetinit}$} bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. +There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, \hyperlink{Jcacheinit}{$J_{\rm{cacheinit}}$} bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, \hyperlink{Jdatasetinit}{$J_{\rm{datasetinit}}$} bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. -Mining involves grabbing random slices of the dataset and hashing them together. Verification can be done with low memory by using the cache to regenerate the specific pieces of the dataset that you need, so you only need to store the cache. The large dataset is updated once every \hyperlink{Jepoch}{$J_{epoch}$} blocks, so the vast majority of a miner's effort will be reading the dataset, not making changes to it. The mentioned parameters as well as the algorithm is explained in detail in appendix \ref{app:ethash}. +Mining involves grabbing random slices of the dataset and hashing them together. Verification can be done with low memory by using the cache to regenerate the specific pieces of the dataset that you need, so you only need to store the cache. The large dataset is updated once every \hyperlink{Jepoch}{$J_{\rm{epoch}}$} blocks, so the vast majority of a miner's effort will be reading the dataset, not making changes to it. The mentioned parameters as well as the algorithm is explained in detail in appendix \ref{app:ethash}. \section{Implementing Contracts} @@ -2043,7 +2045,7 @@ \subsection{Instruction Set} \end{tabularx} \begin{tabularx}{\textwidth}{rlrrX} -\midrule +\toprule 0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ &&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ @@ -2082,40 +2084,43 @@ \section{Genesis Block}\label{app:genesis} \section{Ethash}\label{app:ethash} \subsection{Definitions} + We employ the following definitions: -\begin{tabularx}{\textwidth}{rlX} +%\begin{tabularx}{\textwidth}{lrX} +\begin{tabu}{X[,l]X[-r]X[-l]} \toprule Name & Value & Description \\ \midrule -\hypertarget{Jwordbytes}{ -$J_{wordbytes}$ & 4 & This is the bytes in a word. }\hypertarget{Jdatasetinit}{\\ -$J_{datasetinit}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{\\ -$J_{datasetgrowth}$ & $2^{23}$ & This is the dataset growth per epoch. }\hypertarget{Jcacheinit}{\\ -$J_{cacheinit}$ & $2^{24}$ & This is the bytes in the cache at genesis. }\hypertarget{Jcachegrowth}{\\ -$J_{cachegrowth}$ & $2^{17}$ & This is the cache growth per epoch. }\hypertarget{Jepoch}{\\ -$J_{epoch}$ & 30000 & This is the blocks per epoch. }\hypertarget{Jmixbytes}{\\ -$J_{mixbytes}$ & 128 & This is the mix length in bytes. }\hypertarget{Jhashbytes}{\\ -$J_{hashbytes}$ & 64 & This is the hash length in bytes. }\hypertarget{Jparents}{\\ -$J_{parents}$ & 256 & This is the number of parents of each dataset element. }\hypertarget{Jcacherounds}{\\ -$J_{cacherounds}$ & 3 & This is the number of rounds in cache production. }\hypertarget{Jaccesses}{\\ -$J_{accesses}$ & 64 & This is the number of accesses in a hashimoto loop. }\\ +\hypertarget{Jwordbytes}{} +$J_{\rm{wordbytes}}$ & 4 & This is the bytes in a word. \hypertarget{Jdatasetinit}{ \\ +$J_{\rm{{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{\\ +$J_{\rm{{datasetgrowth}$ & $2^{23}$ & This is the dataset growth per epoch. }\hypertarget{Jcacheinit}{\\ +$J_{\rm{{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis. }\hypertarget{Jcachegrowth}{\\ +$J_{\rm{{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch. }\hypertarget{Jepoch}{\\ +$J_{\rm{{epoch}}$ & 30000 & This is the blocks per epoch. }\hypertarget{Jmixbytes}{\\ +$J_{\rm{{mixbytes}}$ & 128 & This is the mix length in bytes. }\hypertarget{Jhashbytes}{\\ +$J_{\rm{{hashbytes}}$ & 64 & This is the hash length in bytes. }\hypertarget{Jparents}{\\ +$J_{\rm{\rm{{parents}}}$ & 256 & This is the number of parents of each dataset element. }\hypertarget{Jcacherounds}{\\ +$J_{\rm{{cacherounds}}$ & 3 & This is the number of rounds in cache production. }\hypertarget{Jaccesses}{\\ +$J_{\rm{{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop. }\\ \bottomrule -\end{tabularx} +\end{tabu} +%\end{tabularx} \subsection{Size of dataset and cache} The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. \begin{equation} - E_{epoch}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{epoch}}}\right\rfloor +E_{\rm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{\rm{epoch}}}}\right\rfloor \end{equation} -The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{cachegrowth}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{mixbytes}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{hashbytes}$} for the cache. -Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using +The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\rm{{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_\rm{{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_\rm{{hashbytes}}$} for the cache.\hypertarget{dsize}{ +Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:} \begin{equation} - d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{datasetinit}}} + \hyperlink{Jdatasetgrowth}{J_{datasetgrowth}} \cdot E_{epoch} - \hyperlink{Jmixbytes}{J_{mixbytes}}, J_{mixbytes}) + d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{\rm{{datasetinit}}}} + \hyperlink{Jdatasetgrowth}{J_{\rm{{datasetgrowth}} \cdot E_\rm{{epoch}} - \hyperlink{Jmixbytes}{J_\rm{{mixbytes}}}, J_\rm{{mixbytes}}) \end{equation} The size of the cache, $c_{size}$, is calculated using \begin{equation} - c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{cacheinit}} + \hyperlink{cachegrowth}{J_{cachegrowth}} \cdot E_{epoch} - \hyperlink{Jhashbytes}{J_{hashbytes}}, J_{hashbytes}) + c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_\rm{{cacheinit}}} + \hyperlink\rm{{cachegrowth}}{J_\rm{{cachegrowth}}} \cdot E_\rm{{epoch}} - \hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}, J_\rm{{hashbytes}}) \end{equation} \begin{equation} E_{prime}(x, y) = \begin{cases} @@ -2128,18 +2133,18 @@ \subsection{Dataset generation} \subsubsection{Seed hash} The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash: \begin{equation} - \mathbf{s} = C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) + s = C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) \end{equation} \begin{equation} C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} -\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{epoch}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ -\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{epoch}})) & \text{otherwise} +\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_\rm{{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ +\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_\rm{{epoch}}})) & \text{otherwise} \end{cases} \end{equation} With $\mathbf{0}_{32}$ being 32 bytes of zeros. \subsubsection{Cache} -The cache production process involves using the seed hash to first sequentially fil up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{cacherounds}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. +The cache production process involves using the seed hash to first sequentially fill up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_\rm{{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. We define the array $\mathbf{c}_{i}$, consisting of 64 single bytes, as the $i$th element of the initial cache: \begin{equation} @@ -2153,32 +2158,33 @@ \subsubsection{Cache} \mathbf{c'}[i] = \mathbf{c}_{i} \quad \forall \quad i < n \end{equation} \begin{equation} - n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_{hashbytes}}}\right\rfloor + n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}\right\rfloor \end{equation} -The cache is calculated by performing \hyperlink{Jcacherounds}{$J_{cacherounds}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: +The cache is calculated by performing \hyperlink{Jcacherounds}{$J_\rm{{cacherounds}}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: \begin{equation} - \mathbf{c} = E_{cacherounds}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_{cacherounds}}) + \mathbf{c} = E_\rm{{cacherounds}}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_\rm{{cacherounds}}}) \end{equation} \begin{equation} - E_{cacherounds}(\mathbf{x}, y) = \begin{cases} + E_\rm{{cacherounds}}(\mathbf{x}, y) = \begin{cases} \mathbf{x} & \text{if} \quad y = 0 \quad \\ E_\text{\tiny RMH}(\mathbf{x}) & \text{if} \quad y = 1 \quad \\ -E_{cacherounds}(E_\text{\tiny RMH}(\mathbf{x}), y -1 ) & \text{otherwise} +E_\rm{{cacherounds}}(E_\text{\tiny RMH}(\mathbf{x}), y -1 ) & \text{otherwise} \end{cases} \end{equation} Where a single round modifies each subset of the cache as follows: \begin{equation} E_\text{\tiny RMH}(\mathbf{x}) = \big( E_{rmh}(\mathbf{x}, 0), E_{rmh}(\mathbf{x}, 1), ... , E_{rmh}(\mathbf{x}, n - 1) \big) \end{equation} +\hypertarget{Ecacherounds}{} \begin{multline} E_{rmh}(\mathbf{x}, i) = \texttt{KEC512}(\mathbf{x'}[(i - 1 + n) \mod n] \oplus \mathbf{x'}[\mathbf{x'}[i][0] \mod n]) \\ \text{with} \quad \mathbf{x'} = \mathbf{x} \quad \text{except} \quad \mathbf{x'}[j] = E_{rmh}(\mathbf{x}, j) \quad \forall \quad j < i \end{multline} \subsubsection{Full dataset calculation} \label{dataset} -Essentially, we combine data from $J_{parents}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_{hashbytes}$} bytes in size: +Essentially, we combine data from $J_\rm{{parents}}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_\rm{{hashbytes}}$} bytes in size: \begin{equation} - \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{d_{size}}{\hyperlink{Jhashbytes}{J_{hashbytes}}}\right\rfloor + \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}\right\rfloor \end{equation} In order to calculate the single item we use an algorithm inspired by the FNV hash (\cite{FowlerNollVo1991FNVHash}) in some cases as a non-associative substitute for XOR. \begin{equation} @@ -2186,23 +2192,23 @@ \subsubsection{Full dataset calculation} \label{dataset} \end{equation} The single item of the dataset can now be calculated as: \begin{equation} - E_{datasetitem}(\mathbf{c}, i) = E_{parents}(\mathbf{c}, i, -1, \varnothing) + E_{datasetitem}(\mathbf{c}, i) = E_\rm{{parents}}(\mathbf{c}, i, -1, \varnothing) \end{equation} \begin{equation} - E_{parents}(\mathbf{c}, i, p, \mathbf{m}) = \begin{cases} -E_{parents}(\mathbf{c}, i, p +1, E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_{parents} -2 \\ + E_\rm{{parents}}(\mathbf{c}, i, p, \mathbf{m}) = \begin{cases} +E_\rm{{parents}}(\mathbf{c}, i, p +1, E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_\rm{{parents}} -2 \\ E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1) & \text{otherwise} \end{cases} \end{equation} \begin{equation} E_{mix}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} \texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{size}] \oplus i) & \text{if} \quad p = 0 \\ -E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_{hashbytes}} / \hyperlink{Jwordbytes}{J_{wordbytes}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} +E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_\rm{{hashbytes}}} / \hyperlink{Jwordbytes}{J_{\rm{wordbytes}}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} \end{cases} \end{equation} \subsection{Proof-of-work function} -Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_{mixbytes}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_{mixbytes}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_{mixbytes}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. +Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. If the output of this algorithm is below the desired target, then the \hyperlink{block nonce}{nonce} is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. @@ -2212,7 +2218,7 @@ \subsection{Proof-of-work function} \end{equation} With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathbf{c}$ is obtained as follows: \begin{equation} - \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{accesses}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) + \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_\rm{{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) \end{equation} The seed hash being: @@ -2229,13 +2235,13 @@ \subsection{Proof-of-work function} The number of replicated sequences in the mix is: \begin{equation} - n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{mixbytes}}}{\hyperlink{Jhashbytes}{J_{hashbytes}}}\right\rfloor + n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_\rm{{mixbytes}}}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}\right\rfloor \end{equation} -In order to add random dataset nodes to the mix, the $E_{accesses}$ function is used: +In order to add random dataset nodes to the mix, the $E_\rm{{accesses}}$ function is used: \begin{equation} - E_{accesses}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} -E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_{accesses}} -2 \\ -E_{accesses}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} + E_\rm{{accesses}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} +E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_\rm{{accesses}}} -2 \\ +E_\rm{{accesses}}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} \end{cases} \end{equation} \begin{equation} @@ -2243,7 +2249,7 @@ \subsection{Proof-of-work function} \end{equation} $E_{newdata}$ returns an array with $n_{mix}$ elements: \begin{equation} - E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{mixbytes}}}{\hyperlink{Jwordbytes}{J_{wordbytes}}}\right\rfloor]) \mod \left\lfloor\frac{d_{size} / \hyperlink{Jhashbytes}{J_{hashbytes}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} + E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_\rm{{mixbytes}}}}{\hyperlink{Jwordbytes}{J_{\rm{wordbytes}}}}\right\rfloor]) \mod \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} \end{equation} The mix is compressed as follows: \begin{equation} From e1bb670e98c3bc6383f3b7d16edd9f6161ed02fc Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Fri, 29 Sep 2017 21:47:28 +1000 Subject: [PATCH 040/132] Testing to fix passing build, for comparison --- Paper.tex | 92 +++++++++++++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/Paper.tex b/Paper.tex index f4bef8bf..822829ca 100644 --- a/Paper.tex +++ b/Paper.tex @@ -28,13 +28,14 @@ %,pagebackref=true %\usepackage{longtable} -% https://stackoverflow.com/a/1918465/7438857 -%tabularx seems better, but we can include this if we need tables to break, as well as tabu and longtabu +%https://stackoverflow.com/questions/1918366/automated-line-breaks-in-latex-tables/1918465#1918465 +%tabularx seems better, but we can include this if we need tables to break across pages automatically, as well as tabu and longtabu \usepackage{tabularx} %https://stackoverflow.com/a/1919447/7438857 +%was using tabularx, but found tabu which seems more flexible, and generally better. \usepackage{tabu} \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} @@ -2045,7 +2046,7 @@ \subsection{Instruction Set} \end{tabularx} \begin{tabularx}{\textwidth}{rlrrX} -\toprule +\midrule 0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ &&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ @@ -2084,43 +2085,42 @@ \section{Genesis Block}\label{app:genesis} \section{Ethash}\label{app:ethash} \subsection{Definitions} - We employ the following definitions: -%\begin{tabularx}{\textwidth}{lrX} -\begin{tabu}{X[,l]X[-r]X[-l]} +\begin{tabularx}{\textwidth}{lrX} +%\begin{tabu}{X[,l]X[,r]X[,l]} + \toprule -Name & Value & Description \\ +Name & Value & Description\hypertarget{Jwordbytes}{}\\ \midrule -\hypertarget{Jwordbytes}{} -$J_{\rm{wordbytes}}$ & 4 & This is the bytes in a word. \hypertarget{Jdatasetinit}{ \\ -$J_{\rm{{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{\\ -$J_{\rm{{datasetgrowth}$ & $2^{23}$ & This is the dataset growth per epoch. }\hypertarget{Jcacheinit}{\\ -$J_{\rm{{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis. }\hypertarget{Jcachegrowth}{\\ -$J_{\rm{{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch. }\hypertarget{Jepoch}{\\ -$J_{\rm{{epoch}}$ & 30000 & This is the blocks per epoch. }\hypertarget{Jmixbytes}{\\ -$J_{\rm{{mixbytes}}$ & 128 & This is the mix length in bytes. }\hypertarget{Jhashbytes}{\\ -$J_{\rm{{hashbytes}}$ & 64 & This is the hash length in bytes. }\hypertarget{Jparents}{\\ -$J_{\rm{\rm{{parents}}}$ & 256 & This is the number of parents of each dataset element. }\hypertarget{Jcacherounds}{\\ -$J_{\rm{{cacherounds}}$ & 3 & This is the number of rounds in cache production. }\hypertarget{Jaccesses}{\\ -$J_{\rm{{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop. }\\ +$J_{\rm{wordbytes}}$ & 4 & This is the bytes in a word.\hypertarget{Jdatasetinit}{\\ +$J_{\rm{datasetinit}$ & $2^{30}$ & This is the bytes in the dataset at genesis.}\hypertarget{Jdatasetgrowth}{\\ +$J_{\rm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch.}\hypertarget{Jcacheinit}{\\ +$J_{\rm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.}\hypertarget{Jcachegrowth}{\\ +$J_{\rm{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch.}\hypertarget{Jepoch}{\\ +$J_{\rm{epoch}}$ & 30000 & This is the blocks per epoch.}\hypertarget{Jmixbytes}{\\ +$J_{\rm{mixbytes}}$ & 128 & This is the mix length in bytes.}\hypertarget{Jhashbytes}{\\ +$J_{\rm{hashbytes}}$ & 64 & This is the hash length in bytes.}\hypertarget{Jparents}{\\ +$J_{\rm{parents}}$ & 256 & This is the number of parents of each dataset element.}\hypertarget{Jcacherounds}{\\ +$J_{\rm{cacherounds}}$ & 3 & This is the number of rounds in cache production.}\hypertarget{Jaccesses}{\\ +$J_{\rm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.}\\ \bottomrule -\end{tabu} -%\end{tabularx} +%\end{tabu} +\end{tabularx} \subsection{Size of dataset and cache} The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. \begin{equation} E_{\rm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{\rm{epoch}}}}\right\rfloor \end{equation} -The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\rm{{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_\rm{{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_\rm{{hashbytes}}$} for the cache.\hypertarget{dsize}{ +The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\rm{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\rm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\rm{hashbytes}}$} for the cache.\hypertarget{dsize}{ Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:} \begin{equation} - d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{\rm{{datasetinit}}}} + \hyperlink{Jdatasetgrowth}{J_{\rm{{datasetgrowth}} \cdot E_\rm{{epoch}} - \hyperlink{Jmixbytes}{J_\rm{{mixbytes}}}, J_\rm{{mixbytes}}) + d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{\rm{datasetinit}}}} + \hyperlink{Jdatasetgrowth}{J_{\rm{datasetgrowth}} \cdot E_{\rm{epoch}} - \hyperlink{Jmixbytes}{J_\{rm{mixbytes}}}, J_{\rm{mixbytes}}) \end{equation} The size of the cache, $c_{size}$, is calculated using \begin{equation} - c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_\rm{{cacheinit}}} + \hyperlink\rm{{cachegrowth}}{J_\rm{{cachegrowth}}} \cdot E_\rm{{epoch}} - \hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}, J_\rm{{hashbytes}}) + c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{\rm{cacheinit}}} + \hyperlink{\rm{cachegrowth}}{J_{\rm{cachegrowth}}} \cdot E_{\rm{epoch}} - \hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}, J_{\rm{hashbytes}}) \end{equation} \begin{equation} E_{prime}(x, y) = \begin{cases} @@ -2137,14 +2137,14 @@ \subsubsection{Seed hash} \end{equation} \begin{equation} C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} -\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_\rm{{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ -\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_\rm{{epoch}}})) & \text{otherwise} +\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\rm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ +\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{\rm{epoch}}})) & \text{otherwise} \end{cases} \end{equation} With $\mathbf{0}_{32}$ being 32 bytes of zeros. \subsubsection{Cache} -The cache production process involves using the seed hash to first sequentially fill up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_\rm{{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. +The cache production process involves using the seed hash to first sequentially fill up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{\rm{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. We define the array $\mathbf{c}_{i}$, consisting of 64 single bytes, as the $i$th element of the initial cache: \begin{equation} @@ -2158,17 +2158,17 @@ \subsubsection{Cache} \mathbf{c'}[i] = \mathbf{c}_{i} \quad \forall \quad i < n \end{equation} \begin{equation} - n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}\right\rfloor + n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}\right\rfloor \end{equation} -The cache is calculated by performing \hyperlink{Jcacherounds}{$J_\rm{{cacherounds}}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: +The cache is calculated by performing \hyperlink{Jcacherounds}{$J_{\rm{cacherounds}}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: \begin{equation} - \mathbf{c} = E_\rm{{cacherounds}}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_\rm{{cacherounds}}}) + \mathbf{c} = E_{\rm{cacherounds}}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_{\rm{cacherounds}}}) \end{equation} \begin{equation} - E_\rm{{cacherounds}}(\mathbf{x}, y) = \begin{cases} + E_{\rm{cacherounds}}(\mathbf{x}, y) = \begin{cases} \mathbf{x} & \text{if} \quad y = 0 \quad \\ E_\text{\tiny RMH}(\mathbf{x}) & \text{if} \quad y = 1 \quad \\ -E_\rm{{cacherounds}}(E_\text{\tiny RMH}(\mathbf{x}), y -1 ) & \text{otherwise} +E_{\rm{cacherounds}}(E_\text{\tiny RMH}(\mathbf{x}), y -1 ) & \text{otherwise} \end{cases} \end{equation} Where a single round modifies each subset of the cache as follows: @@ -2182,9 +2182,9 @@ \subsubsection{Cache} \end{multline} \subsubsection{Full dataset calculation} \label{dataset} -Essentially, we combine data from $J_\rm{{parents}}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_\rm{{hashbytes}}$} bytes in size: +Essentially, we combine data from $J_{\rm{parents}}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_{\rm{hashbytes}}$} bytes in size: \begin{equation} - \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}\right\rfloor + \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}\right\rfloor \end{equation} In order to calculate the single item we use an algorithm inspired by the FNV hash (\cite{FowlerNollVo1991FNVHash}) in some cases as a non-associative substitute for XOR. \begin{equation} @@ -2192,23 +2192,23 @@ \subsubsection{Full dataset calculation} \label{dataset} \end{equation} The single item of the dataset can now be calculated as: \begin{equation} - E_{datasetitem}(\mathbf{c}, i) = E_\rm{{parents}}(\mathbf{c}, i, -1, \varnothing) + E_{datasetitem}(\mathbf{c}, i) = E_{\rm{parents}}(\mathbf{c}, i, -1, \varnothing) \end{equation} \begin{equation} - E_\rm{{parents}}(\mathbf{c}, i, p, \mathbf{m}) = \begin{cases} -E_\rm{{parents}}(\mathbf{c}, i, p +1, E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_\rm{{parents}} -2 \\ + E_{\rm{parents}}(\mathbf{c}, i, p, \mathbf{m}) = \begin{cases} +E_{\rm{parents}}(\mathbf{c}, i, p +1, E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_{\rm{parents}} -2 \\ E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1) & \text{otherwise} \end{cases} \end{equation} \begin{equation} E_{mix}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} \texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{size}] \oplus i) & \text{if} \quad p = 0 \\ -E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_\rm{{hashbytes}}} / \hyperlink{Jwordbytes}{J_{\rm{wordbytes}}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} +E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_{\rm{hashbytes}}} / \hyperlink{Jwordbytes}{J_{\rm{wordbytes}}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} \end{cases} \end{equation} \subsection{Proof-of-work function} -Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_\rm{{mixbytes}}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. +Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. If the output of this algorithm is below the desired target, then the \hyperlink{block nonce}{nonce} is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. @@ -2218,7 +2218,7 @@ \subsection{Proof-of-work function} \end{equation} With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathbf{c}$ is obtained as follows: \begin{equation} - \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_\rm{{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) + \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{\rm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) \end{equation} The seed hash being: @@ -2235,13 +2235,13 @@ \subsection{Proof-of-work function} The number of replicated sequences in the mix is: \begin{equation} - n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_\rm{{mixbytes}}}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}\right\rfloor + n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\rm{mixbytes}}}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}\right\rfloor \end{equation} -In order to add random dataset nodes to the mix, the $E_\rm{{accesses}}$ function is used: +In order to add random dataset nodes to the mix, the $E_{\rm{accesses}}$ function is used: \begin{equation} - E_\rm{{accesses}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} -E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_\rm{{accesses}}} -2 \\ -E_\rm{{accesses}}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} + E_{\rm{accesses}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} +E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_{\rm{accesses}}} -2 \\ +E_{\rm{accesses}}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} \end{cases} \end{equation} \begin{equation} @@ -2249,7 +2249,7 @@ \subsection{Proof-of-work function} \end{equation} $E_{newdata}$ returns an array with $n_{mix}$ elements: \begin{equation} - E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_\rm{{mixbytes}}}}{\hyperlink{Jwordbytes}{J_{\rm{wordbytes}}}}\right\rfloor]) \mod \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_\rm{{hashbytes}}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} + E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\rm{mixbytes}}}}{\hyperlink{Jwordbytes}{J_{\rm{wordbytes}}}}\right\rfloor]) \mod \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} \end{equation} The mix is compressed as follows: \begin{equation} From 690e9e780a408d7c1d8943934b401aced63a28e2 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Fri, 29 Sep 2017 21:52:03 +1000 Subject: [PATCH 041/132] Delete Paper.out --- Paper.out | 51 --------------------------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 Paper.out diff --git a/Paper.out b/Paper.out deleted file mode 100644 index f4b77e3c..00000000 --- a/Paper.out +++ /dev/null @@ -1,51 +0,0 @@ -\BOOKMARK [1][-]{section.1}{\376\377\0001\000.\000\040\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n}{}% 1 -\BOOKMARK [2][-]{subsection.1.1}{\376\377\0001\000.\0001\000.\000\040\000D\000r\000i\000v\000i\000n\000g\000\040\000F\000a\000c\000t\000o\000r\000s}{section.1}% 2 -\BOOKMARK [2][-]{subsection.1.2}{\376\377\0001\000.\0002\000.\000\040\000P\000r\000e\000v\000i\000o\000u\000s\000\040\000W\000o\000r\000k}{section.1}% 3 -\BOOKMARK [1][-]{section.2}{\376\377\0002\000.\000\040\000T\000h\000e\000\040\000B\000l\000o\000c\000k\000c\000h\000a\000i\000n\000\040\000P\000a\000r\000a\000d\000i\000g\000m}{}% 4 -\BOOKMARK [2][-]{subsection.2.1}{\376\377\0002\000.\0001\000.\000\040\000V\000a\000l\000u\000e}{section.2}% 5 -\BOOKMARK [2][-]{subsection.2.2}{\376\377\0002\000.\0002\000.\000\040\000W\000h\000i\000c\000h\000\040\000H\000i\000s\000t\000o\000r\000y\000?}{section.2}% 6 -\BOOKMARK [1][-]{section.3}{\376\377\0003\000.\000\040\000C\000o\000n\000v\000e\000n\000t\000i\000o\000n\000s}{}% 7 -\BOOKMARK [1][-]{section.4}{\376\377\0004\000.\000\040\000B\000l\000o\000c\000k\000s\000,\000\040\000S\000t\000a\000t\000e\000\040\000a\000n\000d\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000s}{}% 8 -\BOOKMARK [2][-]{subsection.4.1}{\376\377\0004\000.\0001\000.\000\040\000W\000o\000r\000l\000d\000\040\000S\000t\000a\000t\000e}{section.4}% 9 -\BOOKMARK [2][-]{subsection.4.2}{\376\377\0004\000.\0002\000.\000\040\000T\000h\000e\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n}{section.4}% 10 -\BOOKMARK [2][-]{subsection.4.3}{\376\377\0004\000.\0003\000.\000\040\000T\000h\000e\000\040\000B\000l\000o\000c\000k}{section.4}% 11 -\BOOKMARK [1][-]{section.5}{\376\377\0005\000.\000\040\000G\000a\000s\000\040\000a\000n\000d\000\040\000P\000a\000y\000m\000e\000n\000t}{}% 12 -\BOOKMARK [1][-]{section.6}{\376\377\0006\000.\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n}{}% 13 -\BOOKMARK [2][-]{subsection.6.1}{\376\377\0006\000.\0001\000.\000\040\000S\000u\000b\000s\000t\000a\000t\000e}{section.6}% 14 -\BOOKMARK [2][-]{subsection.6.2}{\376\377\0006\000.\0002\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n}{section.6}% 15 -\BOOKMARK [1][-]{section.7}{\376\377\0007\000.\000\040\000C\000o\000n\000t\000r\000a\000c\000t\000\040\000C\000r\000e\000a\000t\000i\000o\000n}{}% 16 -\BOOKMARK [2][-]{subsection.7.1}{\376\377\0007\000.\0001\000.\000\040\000S\000u\000b\000t\000l\000e\000t\000i\000e\000s}{section.7}% 17 -\BOOKMARK [1][-]{section.8}{\376\377\0008\000.\000\040\000M\000e\000s\000s\000a\000g\000e\000\040\000C\000a\000l\000l}{}% 18 -\BOOKMARK [1][-]{section.9}{\376\377\0009\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000M\000o\000d\000e\000l}{}% 19 -\BOOKMARK [2][-]{subsection.9.1}{\376\377\0009\000.\0001\000.\000\040\000B\000a\000s\000i\000c\000s}{section.9}% 20 -\BOOKMARK [2][-]{subsection.9.2}{\376\377\0009\000.\0002\000.\000\040\000F\000e\000e\000s\000\040\000O\000v\000e\000r\000v\000i\000e\000w}{section.9}% 21 -\BOOKMARK [2][-]{subsection.9.3}{\376\377\0009\000.\0003\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000E\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t}{section.9}% 22 -\BOOKMARK [2][-]{subsection.9.4}{\376\377\0009\000.\0004\000.\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000O\000v\000e\000r\000v\000i\000e\000w}{section.9}% 23 -\BOOKMARK [2][-]{subsection.9.5}{\376\377\0009\000.\0005\000.\000\040\000T\000h\000e\000\040\000E\000x\000e\000c\000u\000t\000i\000o\000n\000\040\000C\000y\000c\000l\000e}{section.9}% 24 -\BOOKMARK [1][-]{section.10}{\376\377\0001\0000\000.\000\040\000B\000l\000o\000c\000k\000t\000r\000e\000e\000\040\000t\000o\000\040\000B\000l\000o\000c\000k\000c\000h\000a\000i\000n}{}% 25 -\BOOKMARK [1][-]{section.11}{\376\377\0001\0001\000.\000\040\000B\000l\000o\000c\000k\000\040\000F\000i\000n\000a\000l\000i\000s\000a\000t\000i\000o\000n}{}% 26 -\BOOKMARK [2][-]{subsection.11.1}{\376\377\0001\0001\000.\0001\000.\000\040\000O\000m\000m\000e\000r\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.11}% 27 -\BOOKMARK [2][-]{subsection.11.2}{\376\377\0001\0001\000.\0002\000.\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.11}% 28 -\BOOKMARK [2][-]{subsection.11.3}{\376\377\0001\0001\000.\0003\000.\000\040\000R\000e\000w\000a\000r\000d\000\040\000A\000p\000p\000l\000i\000c\000a\000t\000i\000o\000n}{section.11}% 29 -\BOOKMARK [2][-]{subsection.11.4}{\376\377\0001\0001\000.\0004\000.\000\040\000S\000t\000a\000t\000e\000\040\000\046\000\040\000N\000o\000n\000c\000e\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.11}% 30 -\BOOKMARK [2][-]{subsection.11.5}{\376\377\0001\0001\000.\0005\000.\000\040\000M\000i\000n\000i\000n\000g\000\040\000P\000r\000o\000o\000f\000-\000o\000f\000-\000W\000o\000r\000k}{section.11}% 31 -\BOOKMARK [1][-]{section.12}{\376\377\0001\0002\000.\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000i\000n\000g\000\040\000C\000o\000n\000t\000r\000a\000c\000t\000s}{}% 32 -\BOOKMARK [2][-]{subsection.12.1}{\376\377\0001\0002\000.\0001\000.\000\040\000D\000a\000t\000a\000\040\000F\000e\000e\000d\000s}{section.12}% 33 -\BOOKMARK [2][-]{subsection.12.2}{\376\377\0001\0002\000.\0002\000.\000\040\000R\000a\000n\000d\000o\000m\000\040\000N\000u\000m\000b\000e\000r\000s}{section.12}% 34 -\BOOKMARK [1][-]{section.13}{\376\377\0001\0003\000.\000\040\000F\000u\000t\000u\000r\000e\000\040\000D\000i\000r\000e\000c\000t\000i\000o\000n\000s}{}% 35 -\BOOKMARK [2][-]{subsection.13.1}{\376\377\0001\0003\000.\0001\000.\000\040\000S\000c\000a\000l\000a\000b\000i\000l\000i\000t\000y}{section.13}% 36 -\BOOKMARK [1][-]{section.14}{\376\377\0001\0004\000.\000\040\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 37 -\BOOKMARK [1][-]{section.15}{\376\377\0001\0005\000.\000\040\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000e\000m\000e\000n\000t\000s}{}% 38 -\BOOKMARK [1][-]{section.16}{\376\377\0001\0006\000.\000\040\000A\000v\000a\000i\000l\000a\000b\000i\000l\000i\000t\000y}{}% 39 -\BOOKMARK [1][-]{section*.1}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 40 -\BOOKMARK [1][-]{appendix.A}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000A\000.\000\040\000T\000e\000r\000m\000i\000n\000o\000l\000o\000g\000y}{}% 41 -\BOOKMARK [1][-]{appendix.B}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000B\000.\000\040\000R\000e\000c\000u\000r\000s\000i\000v\000e\000\040\000L\000e\000n\000g\000t\000h\000\040\000P\000r\000e\000f\000i\000x}{}% 42 -\BOOKMARK [1][-]{appendix.C}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000C\000.\000\040\000H\000e\000x\000-\000P\000r\000e\000f\000i\000x\000\040\000E\000n\000c\000o\000d\000i\000n\000g}{}% 43 -\BOOKMARK [1][-]{appendix.D}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000D\000.\000\040\000M\000o\000d\000i\000f\000i\000e\000d\000\040\000M\000e\000r\000k\000l\000e\000\040\000P\000a\000t\000r\000i\000c\000i\000a\000\040\000T\000r\000e\000e}{}% 44 -\BOOKMARK [2][-]{subsection.D.1}{\376\377\000D\000.\0001\000.\000\040\000T\000r\000i\000e\000\040\000D\000a\000t\000a\000b\000a\000s\000e}{appendix.D}% 45 -\BOOKMARK [1][-]{appendix.E}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000E\000.\000\040\000P\000r\000e\000c\000o\000m\000p\000i\000l\000e\000d\000\040\000C\000o\000n\000t\000r\000a\000c\000t\000s}{}% 46 -\BOOKMARK [1][-]{appendix.F}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000F\000.\000\040\000S\000i\000g\000n\000i\000n\000g\000\040\000T\000r\000a\000n\000s\000a\000c\000t\000i\000o\000n\000s}{}% 47 -\BOOKMARK [1][-]{appendix.G}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000G\000.\000\040\000F\000e\000e\000\040\000S\000c\000h\000e\000d\000u\000l\000e}{}% 48 -\BOOKMARK [1][-]{appendix.H}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x\000\040\000H\000.\000\040\000V\000i\000r\000t\000u\000a\000l\000\040\000M\000a\000c\000h\000i\000n\000e\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n}{}% 49 -\BOOKMARK [2][-]{subsection.H.1}{\376\377\000H\000.\0001\000.\000\040\000G\000a\000s\000\040\000C\000o\000s\000t}{appendix.H}% 50 -\BOOKMARK [2][-]{subsection.H.2}{\376\377\000H\000.\0002\000.\000\040\000I\000n\000s\000t\000r\000u\000c\000t\000i\000o\000n\000\040\000S\000e\000t}{appendix.H}% 51 From 00a9345526e85c887afd0703e02cfaf7099daea5 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sat, 30 Sep 2017 03:18:19 +1000 Subject: [PATCH 042/132] Fixed cause of error: no closing brace for hyperlinks --- Paper.tex | 2268 +---------------------------------------------------- 1 file changed, 8 insertions(+), 2260 deletions(-) diff --git a/Paper.tex b/Paper.tex index 822829ca..885dd836 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,2271 +1,19 @@ -\documentclass[9pt,oneside]{amsart} -\usepackage{cancel} -%\usepackage{tweaklist} -\usepackage{xspace} -\usepackage{graphicx} -\usepackage{multicol} -\usepackage{subfig} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage[a4paper,width=170mm,top=18mm,bottom=22mm,includeheadfoot]{geometry} -\usepackage{booktabs} -\usepackage{array} -\usepackage{verbatim} -\usepackage{caption} -\usepackage{natbib} -\usepackage{float} -\usepackage{pdflscape} -\usepackage{mathtools} -\usepackage[usenames,dvipsnames]{xcolor} -\usepackage{afterpage} -\usepackage{tikz} -\usepackage{underscore} -%\usepackage{lipsum} % to generate filler text for testing of document rendering -\usepackage[english]{babel} -\usepackage [autostyle]{csquotes} -\MakeOuterQuote{"} -\usepackage[bookmarks=true, unicode=true, pdftitle={Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain}, pdfauthor={Gavin Wood and others as per https://github.com/ethereum/yellowpaper/commits/master},pdfkeywords={Ethereum, Yellow Paper, blockchain, virtual machine, cryptography, decentralised, singleton, transaction, generalised},pdfborder={0 0 0.5 [1 3]}]{hyperref} -%,pagebackref=true - -%\usepackage{longtable} -%https://stackoverflow.com/questions/1918366/automated-line-breaks-in-latex-tables/1918465#1918465 -%tabularx seems better, but we can include this if we need tables to break across pages automatically, as well as tabu and longtabu - +\documentclass{amsart} \usepackage{tabularx} -%https://stackoverflow.com/a/1919447/7438857 - -%was using tabularx, but found tabu which seems more flexible, and generally better. -\usepackage{tabu} - -\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} -% "hyperref loads the url package internally. Use \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} to pass the option to the url package when it is loaded by hyperref. This avoids any package option clashes." Source: . -% Note also this: "If the \PassOptionsToPackage{hyphens}{url} approach does not work, maybe it's "because you're trying to load the url package with a specific option, but it's being loaded by one of your packages before that with a different set of options. Try loading the url package earlier than the package that requires it. If it's loaded by the document class, try using \RequirePackage[hyphens]{url} before the document class." Source: . - -\makeatletter -\g@addto@macro{\UrlBreaks}{\UrlOrds} -\makeatother -%\PassOptionsToPackage{url}\g@addto@macro{\UrlBreaks}{\UrlOrds} -% info on the above command: . Note that the three preceding lines, as well as \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} did not fix the error where if a URL breaks over a page, it shows a snippet in the header as shown here: . The following command did fix this error, however only because it happened to compact the text, preventing a URL from breaking over a page. If you force a URL to break over a page, the error still occurs. - -\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one - \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j% - \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t% - \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D% - \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N% - \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X% - \do\Y\do\Z} -% More info: . -%\sloppy -%\setlength{\emergencystretch}{2pt} -% These don't appear to make a difference with the preceding use of the \hypens package and \expandafter. -% https://tex.stackexchange.com/a/59131/143781 -% - -%\usepackage{glossaries} - -\input{Version.tex} - -\newcommand{\hcancel}[1]{% - \tikz[baseline=(tocancel.base)]{ - \node[inner sep=0pt,outer sep=0pt] (tocancel) {#1}; - \draw[black] (tocancel.south west) -- (tocancel.north east); - }% -}% - -\definecolor{lightyellow}{rgb}{1,0.98,0.9} -\definecolor{lightpink}{rgb}{1,0.94,0.95} - -\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil} -\newcommand*\eg{e.g.\@\xspace} -\newcommand*\Eg{e.g.\@\xspace} -\newcommand*\ie{i.e.\@\xspace} -%\renewcommand{\itemhook}{\setlength{\topsep}{0pt} \setlength{\itemsep}{0pt}\setlength{\leftmargin}{15pt}} +\usepackage{booktabs} +\usepackage{hyperref} +\usepackage{amsmath} -\title{Ethereum: A Secure Decentralised Generalised Transaction Ledger \\ {\smaller \textbf{EIP-150 revision (\YellowPaperVersionNumber{})}}} -\author{ - Dr. Gavin Wood\\ - Founder, Ethereum \& Ethcore\\ - gavin@ethcore.io -} \begin{document} -\pagecolor{lightyellow} -%\pagecolor{lightpink} - -\begin{abstract} -The blockchain paradigm when coupled with cryptographically-secured transactions has demonstrated its utility through a number of projects, not the least being Bitcoin. Each such project can be seen as a simple application on a decentralised, but singleton, compute resource. We can call this paradigm a transactional singleton machine with shared-state. - -Ethereum implements this paradigm in a generalised manner. Furthermore it provides a plurality of such resources, each with a distinct state and operating code but able to interact through a message-passing framework with others. We discuss its design, implementation issues, the opportunities it provides and the future hurdles we envisage. -\end{abstract} - -\maketitle - -\setlength{\columnsep}{20pt} -\begin{multicols}{2} - -\section{Introduction}\label{sec:introduction} - -With ubiquitous internet connections in most places of the world, global information transmission has become incredibly cheap. Technology-rooted movements like Bitcoin have demonstrated, through the power of the default, consensus mechanisms and voluntary respect of the social contract that it is possible to use the internet to make a decentralised value-transfer system, shared across the world and virtually free to use. This system can be said to be a very specialised version of a cryptographically secure, transaction-based state machine. Follow-up systems such as Namecoin adapted this original ``currency application'' of the technology into other applications albeit rather simplistic ones. - -Ethereum is a project which attempts to build the generalised technology; technology on which all transaction-based state machine concepts may be built. Moreover it aims to provide to the end-developer a tightly integrated end-to-end system for building software on a hitherto unexplored compute paradigm in the mainstream: a trustful object messaging compute framework. - -\subsection{Driving Factors} \label{ch:driving} - -There are many goals of this project; one key goal is to facilitate transactions between consenting individuals who would otherwise have no means to trust one another. This may be due to geographical separation, interfacing difficulty, or perhaps the incompatibility, incompetence, unwillingness, expense, uncertainty, inconvenience or corruption of existing legal systems. By specifying a state-change system through a rich and unambiguous language, and furthermore architecting a system such that we can reasonably expect that an agreement will be thus enforced autonomously, we can provide a means to this end. - -Dealings in this proposed system would have several attributes not often found in the real world. The incorruptibility of judgement, often difficult to find, comes naturally from a disinterested algorithmic interpreter. Transparency, or being able to see exactly how a state or judgement came about through the transaction log and rules or instructional codes, never happens perfectly in human-based systems since natural language is necessarily vague, information is often lacking, and plain old prejudices are difficult to shake. - -Overall, I wish to provide a system such that users can be guaranteed that no matter with which other individuals, systems or organisations they interact, they can do so with absolute confidence in the possible outcomes and how those outcomes might come about. - -\subsection{Previous Work} \label{ch:previous} - -\cite{buterin2013ethereum} first proposed the kernel of this work in late November, 2013. Though now evolved in many ways, the key functionality of a block-chain with a Turing-complete language and an effectively unlimited inter-transaction storage capability remains unchanged. - -\cite{dwork92pricingvia} provided the first work into the usage of a cryptographic proof of computational expenditure (``proof-of-work'') as a means of transmitting a value signal over the Internet. The value-signal was utilised here as a spam deterrence mechanism rather than any kind of currency, but critically demonstrated the potential for a basic data channel to carry a \textit{strong economic signal}, allowing a receiver to make a physical assertion without having to rely upon \textit{trust}. \cite{back2002hashcash} later produced a system in a similar vein. - -The first example of utilising the proof-of-work as a strong economic signal to secure a currency was by \cite{vishnumurthy03karma:a}. In this instance, the token was used to keep peer-to-peer file trading in check, providing ``consumers'' with the ability to make micro-payments to ``suppliers'' for their services. The security model afforded by the proof-of-work was augmented with digital signatures and a ledger in order to ensure that the historical record couldn't be corrupted and that malicious actors could not spoof payment or unjustly complain about service delivery. Five years later, \cite{nakamoto2008bitcoin} introduced another such proof-of-work-secured value token, somewhat wider in scope. The fruits of this project, Bitcoin, became the first widely adopted global decentralised transaction ledger. - -Other projects built on Bitcoin's success; the alt-coins introduced numerous other currencies through alteration to the protocol. Some of the best known are Litecoin and Primecoin, discussed by \cite{sprankel2013technical}. Other projects sought to take the core value content mechanism of the protocol and repurpose it; \cite{aron2012bitcoin} discusses, for example, the Namecoin project which aims to provide a decentralised name-resolution system. - -Other projects still aim to build upon the Bitcoin network itself, leveraging the large amount of value placed in the system and the vast amount of computation that goes into the consensus mechanism. The Mastercoin project, first proposed by \cite{mastercoin2013willett}, aims to build a richer protocol involving many additional high-level features on top of the Bitcoin protocol through utilisation of a number of auxiliary parts to the core protocol. The Coloured Coins project, proposed by \cite{colouredcoins2012rosenfeld}, takes a similar but more simplified strategy, embellishing the rules of a transaction in order to break the fungibility of Bitcoin's base currency and allow the creation and tracking of tokens through a special ``chroma-wallet''-protocol-aware piece of software. - -Additional work has been done in the area with discarding the decentralisation foundation; Ripple, discussed by \cite{boutellier2014pirates}, has sought to create a ``federated'' system for currency exchange, effectively creating a new financial clearing system. It has demonstrated that high efficiency gains can be made if the decentralisation premise is discarded. - -Early work on smart contracts has been done by \cite{szabo1997formalizing} and \cite{miller1997future}. Around the 1990s it became clear that algorithmic enforcement of agreements could become a significant force in human cooperation. Though no specific system was proposed to implement such a system, it was proposed that the future of law would be heavily affected by such systems. In this light, Ethereum may be seen as a general implementation of such a \textit{crypto-law} system. - -%E language/glossary? - -For a list of terms used in this paper, refer to Appendix \ref{ch:Terminology}. - -\section{The Blockchain Paradigm} \label{ch:overview} - -Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally:\hypertarget{Upsilon}{} -\begin{equation} -\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_\mathbf{t}, T) -\end{equation} - -where $\Upsilon$ is the Ethereum state transition function. In Ethereum, $\Upsilon$, together with $\boldsymbol{\sigma}$ are considerably more powerful then any existing comparable system; $\Upsilon$ allows components to carry out arbitrary computation, while $\boldsymbol{\sigma}$ allows components to store arbitrary state between transactions. - -Transactions are collated into blocks; blocks are chained together using a cryptographic hash as a means of reference. Blocks function as a journal or ledger, recording a series of transactions together with the previous block and an identifier for the final state (though blocks do not store the final state itself---that would be far too big). They also punctuate the transaction series with incentives for nodes to \textit{mine}. This incentivisation takes place as a state-transition function, adding value to a nominated account. - -Mining is the process of dedicating effort (working) to bolster one series of transactions (a block) over any other potential competitor block. It is achieved thanks to a cryptographically secure proof. This scheme is known as a proof-of-work and is discussed in detail in section \ref{ch:pow}. - -Formally, we expand to: -\begin{eqnarray} -\boldsymbol{\sigma}_{t+1} & \equiv & \hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}_\mathbf{t}, B) \\ -B & \equiv & (..., (T_0, T_1, ...) ) \\ -\Pi(\boldsymbol{\sigma}, B) & \equiv & \hyperlink{Omega}{\Omega}(B, \hyperlink{Upsilon}{\Upsilon}(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...) -\end{eqnarray} - -Where \hyperlink{Omega}{$\Omega$} is the block-finalisation state transition function (a function that rewards a nominated party); $B$ is this block, which includes a series of transactions amongst some other components; and $\hyperlink{Pi}{\Pi}$ is the block-level state-transition function. - -This is the basis of the blockchain paradigm, a model that forms the backbone of not only Ethereum, but all decentralised consensus-based transaction systems to date. - -\subsection{Value} - -In order to incentivise computation within the network, there needs to be an agreed method for transmitting value. To address this issue, Ethereum has an intrinsic currency, Ether, known also as {\small ETH} and sometimes referred to by the Old English \DH{}. The smallest subdenomination of Ether, and thus the one in which all integer values of the currency are counted, is the Wei. One Ether is defined as being $10^{18}$ Wei. There exist other subdenominations of Ether: -\par -\begin{center} -\begin{tabular}{rl} -\toprule -Multiplier & Name \\ -\midrule -$10^0$ & Wei \\ -$10^{12}$ & Szabo \\ -$10^{15}$ & Finney \\ -$10^{18}$ & Ether \\ -\bottomrule -\end{tabular} -\end{center} -\par - -Throughout the present work, any reference to value, in the context of Ether, currency, a balance or a payment, should be assumed to be counted in Wei. - -\subsection{Which History?} - -Since the system is decentralised and all parties have an opportunity to create a new block on some older pre-existing block, the resultant structure is necessarily a tree of blocks. In order to form a consensus as to which path, from root (the \hyperlink{GenesisBlock}{genesis block}) to leaf (the block containing the most recent transactions) through this tree structure, known as the blockchain, there must be an agreed-upon scheme. If there is ever a disagreement between nodes as to which root-to-leaf path down the block tree is the `best' blockchain, then a \textit{fork} occurs. - -This would mean that past a given point in time (block), multiple states of the system may coexist: some nodes believing one block to contain the canonical transactions, other nodes believing some other block to be canonical, potentially containing radically different or incompatible transactions. This is to be avoided at all costs as the uncertainty that would ensue would likely kill all confidence in the entire system. - -The scheme we use in order to generate consensus is a simplified version of the GHOST protocol introduced by \cite{cryptoeprint:2013:881}. This process is described in detail in section \ref{ch:ghost}. - -Sometimes, a path follows a new protocol from a particular height. This document describes one version of the protocol. In order to follow back the history of a path, one might need to reference multiple versions of this document. - -\section{Conventions}\label{ch:conventions} - -I use a number of typographical conventions for the formal notation, some of which are quite particular to the present work: - -The two sets of highly structured, `top-level', state values, are denoted with bold lowercase Greek letters. They fall into those of world-state, which are denoted $\boldsymbol{\sigma}$ (or a variant thereupon) and those of machine-state, $\boldsymbol{\mu}$. - -Functions operating on highly structured values are denoted with an upper-case greek letter, \eg \hyperlink{Upsilon}{$\Upsilon$}, the Ethereum state transition function. - -For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg $C_\text{\tiny SSTORE}$, the cost function for the {\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. - -Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_\mathbf{n}$, denotes the \hyperlink{transaction nonce}{nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. - -Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a \hyperlink{transaction nonce}{transaction nonce}. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation. - -Arbitrary-length sequences are typically denoted as a bold lower-case letter, \eg $\mathbf{o}$ is used to denote the byte sequence given as the output data of a message call. For particularly important values, a bold uppercase letter may be used. - -Throughout, we assume scalars are positive integers and thus belong to the set $\mathbb{P}$. The set of all byte sequences is $\mathbb{B}$, formally defined in Appendix \ref{app:rlp}. If such a set of sequences is restricted to those of a particular length, it is denoted with a subscript, thus the set of all byte sequences of length $32$ is named $\mathbb{B}_{32}$ and the set of all positive integers smaller than $2^{256}$ is named $\mathbb{P}_{256}$. This is formally defined in section \ref{ch:block}. - -Square brackets are used to index into and reference individual components or subsequences of sequences, \eg $\boldsymbol{\mu}_\mathbf{s}[0]$ denotes the first item on the machine's stack. For subsequences, ellipses are used to specify the intended range, to include elements at both limits, \eg $\boldsymbol{\mu}_\mathbf{m}[0..31]$ denotes the first 32 items of the machine's memory. - -In the case of the global state $\boldsymbol{\sigma}$, which is a sequence of accounts, themselves tuples, the square brackets are used to reference an individual account. - -When considering variants of existing values, I follow the rule that within a given scope for definition, if we assume that the unmodified `input' value be denoted by the placeholder $\Box$ then the modified and utilisable value is denoted as $\Box'$, and intermediate values would be $\Box^*$, $\Box^{**}$ \&c. On very particular occasions, in order to maximise readability and only if unambiguous in meaning, I may use alpha-numeric subscripts to denote intermediate values, especially those of particular note. - -When considering the use of existing functions, given a function $f$, the function $f^*$ denotes a similar, element-wise version of the function mapping instead between sequences. It is formally defined in section \ref{ch:block}. - -I define a number of useful functions throughout. \hypertarget{ell}{}One of the more common is $\ell$, which evaluates to the last item in the given sequence: - -\begin{equation} -\ell(\mathbf{x}) \equiv \mathbf{x}[\lVert \mathbf{x} \rVert - 1] -\end{equation} - -\section{Blocks, State and Transactions} \label{ch:bst} - -Having introduced the basic concepts behind Ethereum, we will discuss the meaning of a transaction, a block and the state in more detail. - -\subsection{World State} \label{ch:state} - -The world state (\textit{state}), is a mapping between addresses (160-bit identifiers) and account states (a data structure serialised as RLP, see Appendix \ref{app:rlp}). Though not stored on the blockchain, it is assumed that the implementation will maintain this mapping in a modified Merkle Patricia tree (\textit{trie}, see Appendix \ref{app:trie}). The trie requires a simple database backend that maintains a mapping of bytearrays to bytearrays; we name this underlying database the state database. This has a number of benefits; firstly the root node of this structure is cryptographically dependent on all internal data and as such its hash can be used as a secure identity for the entire system state. Secondly, being an immutable data structure, it allows any previous state (whose root hash is known) to be recalled by simply altering the root hash accordingly. Since we store all such root hashes in the blockchain, we are able to trivially revert to old states. - -The account state comprises the following four fields: - -\begin{description} -\hypertarget{account nonce}{} -\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_\mathbf{n}$. -\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_\mathbf{b}$. -\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the 256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{s}$. -\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{c}$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_\mathbf{c}$. -\end{description} - -Since I typically wish to refer not to the trie's root hash but to the underlying set of key/value pairs stored within, I define a convenient equivalence: -\begin{equation} -\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathbf{s})\big) \equiv \boldsymbol{\sigma}[a]_\mathbf{s} -\end{equation} - -The collapse function for the set of key/value pairs in the trie, $L_I^*$, is defined as the element-wise transformation of the base function $L_I$, given as: -\begin{equation} -L_I\big( (k, v) \big) \equiv \big(\texttt{\small KEC}(k), \texttt{\small RLP}(v)\big) -\end{equation} - -where: -\begin{equation} -k \in \mathbb{B}_{32} \quad \wedge \quad v \in \mathbb{P} -\end{equation} - -It shall be understood that $\boldsymbol{\sigma}[a]_\mathbf{s}$ is not a `physical' member of the account and does not contribute to its later serialisation. - -If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_\mathbf{c} = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account. - -Thus we may define a world-state collapse function $L_S$: -\begin{equation} -L_S(\boldsymbol{\sigma}) \equiv \{ p(a): \boldsymbol{\sigma}[a] \neq \varnothing \} -\end{equation} -where -\begin{equation} -p(a) \equiv \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_\mathbf{n}, \boldsymbol{\sigma}[a]_\mathbf{b}, \boldsymbol{\sigma}[a]_\mathbf{s}, \boldsymbol{\sigma}[a]_\mathbf{c}) \big) \big) -\end{equation} - -This function, $L_S$, is used alongside the trie function to provide a short identity (hash) of the world state. We assume: -\begin{equation} -\forall a: \boldsymbol{\sigma}[a] = \varnothing \; \vee \; (a \in \mathbb{B}_{20} \; \wedge \; v(\boldsymbol{\sigma}[a])) -\end{equation} -\hypertarget{v x}{where $v$ is the account validity function: -\begin{equation} -\quad v(x) \equiv x_\mathbf{n} \in \mathbb{P}_{256} \wedge x_\mathbf{b} \in \mathbb{P}_{256} \wedge x_\mathbf{s} \in \mathbb{B}_{32} \wedge x_\mathbf{c} \in \mathbb{B}_{32} -} -\end{equation} - -\subsection{The Transaction} \label{subsec:transaction} - -A transaction (formally, $T$) is a single cryptographically-signed instruction constructed by an actor externally to the scope of Ethereum. While it is assumed that the ultimate external actor will be human in nature, software tools will be used in its construction and dissemination\footnote{Notably, such `tools' could ultimately become so causally removed from their human-based initiation---or humans may become so causally-neutral---that there could be a point at which they rightly be considered autonomous agents. \eg contracts may offer bounties to humans for being sent transactions to initiate their execution.}. There are two types of transactions: those which result in message calls and those which result in the creation of new accounts with associated code (known informally as `contract creation'). Both types specify a number of common fields: - -\begin{description} -\hypertarget{T n}{ -\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_\mathbf{n}$.}\hypertarget{T p}{ -\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_\mathbf{p}$.}\hypertarget{T g}{ -\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathbf{g}$.}\hypertarget{T t}{ -\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathbf{t}$.}\hypertarget{T v}{ -\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathbf{v}$.} -\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally \hyperlink{T w}{$T_\mathbf{w}$}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}. This is expanded in Appendix \ref{app:signing}. -\end{description} - -Additionally, a contract creation transaction contains: - -\begin{description} -\item[init] An unlimited size byte array specifying the EVM-code for the account initialisation procedure, formally $T_\mathbf{i}$. -\end{description} - -\textbf{init} is an EVM-code fragment; it returns the \textbf{body}, a second fragment of code that executes each time the account receives a message call (either through a transaction or due to the internal execution of code). \textbf{init} is executed only once at account creation and gets discarded immediately thereafter. - -In contrast, a message call transaction contains: - -\begin{description} -\item[data] An unlimited size byte array specifying the input data of the message call, formally $T_\mathbf{d}$. -\end{description} - - -\begin{equation} -L_\mathbf{T}(T) \equiv \begin{cases} -(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{if} \; T_\mathbf{t} = \varnothing\\ -(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{otherwise} -\end{cases} -\end{equation} - -Here, we assume all components are interpreted by the RLP as integer values, with the exception of the arbitrary length byte arrays $T_\mathbf{i}$ and $T_\mathbf{d}$. -\begin{equation} -\begin{array}[t]{lclclc} -T_\mathbf{n} \in \mathbb{P}_{256} & \wedge & \hyperlink{T v}{T_\mathbf{v}} \in \mathbb{P}_{256} & \wedge & T_\mathbf{p} \in \mathbb{P}_{256} & \wedge \\ -T_\mathbf{g} \in \mathbb{P}_{256} & \wedge & \hyperlink{T w}{T_\mathbf{w}} \in \mathbb{P}_5 & \wedge & T_\mathbf{r} \in \mathbb{P}_{256} & \wedge \\ -T_\mathbf{s} \in \mathbb{P}_{256} & \wedge & T_\mathbf{d} \in \mathbb{B} & \wedge & T_\mathbf{i} \in \mathbb{B} -\end{array} -\end{equation} -where -\begin{equation} -\mathbb{P}_\mathbf{n} = \{ P: P \in \mathbb{P} \wedge P < 2^n \} -\end{equation} - -The address hash $T_\mathbf{t}$ is slightly different: it is either a 20-byte address hash or, in the case of being a contract-creation transaction (and thus formally equal to $\varnothing$), it is the RLP empty byte sequence and thus the member of $\mathbb{B}_0$: -\begin{equation} -T_\mathbf{t} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_\mathbf{t} \neq \varnothing \\ -\mathbb{B}_{0} & \text{otherwise}\end{cases} -\end{equation} - -\subsection{The Block} \label{ch:block} - -The block in Ethereum is the collection of relevant pieces of information (known as the block \textit{header}), $H$, together with information corresponding to the comprised transactions, $\mathbf{T}$, and a set of other \hypertarget{ommerheaders}{block headers $\mathbf{U}$} that are known to have a parent equal to the present block's parent's parent (such blocks are known as \textit{ommers}\footnote{\textit{ommer} is the most prevalent (which is not saying much, as it is not a well-known word) gender-neutral term to mean ``sibling of parent''; see \url{http://nonbinary.org/wiki/Gender_neutral_language\#Family_Terms}}). The block header contains several pieces of information: - -%\textit{TODO: Introduce logs} - -\begin{description}\hypertarget{H p}{ -\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_\mathbf{p}$.} -\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_\mathbf{o}}$.\hypertarget{H c}{ -\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block shall be transferred; formally $H_\mathbf{c}$.} -\item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}. -\item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}. -\item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}. -\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarget{H d}{ -\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{ -\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{ -\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathbf{l}$.}\hypertarget{H g}{ -\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathbf{g}$.}\hypertarget{H s}{ -\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_\mathbf{s}$}.}\hypertarget{H x}{ -\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_\mathbf{x}$.}\hypertarget{H m}{ -\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{m}$.} -\hypertarget{block nonce}{\hypertarget{H n}{ -\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{n}$.}} -\end{description} -\hypertarget{B U}{ -The other two components in the block are simply a list of ommer block headers (of the same format as above), $B_\mathbf{U}$, and a series of the transactions, $B_\mathbf{T}$. Formally, we can refer to a block $B$: -\begin{equation} -B \equiv (B_H, B_\mathbf{T}, B_\mathbf{U}) -\end{equation}} - -\hypertarget{Transaction Receipt}{\subsubsection{Transaction Receipt}} - -In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution. -Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_\mathbf{e}$}. - -\hypertarget{R}{} -The transaction receipt, $R$, is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathbf{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathbf{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathbf{b}$}: -\begin{equation} -R \equiv (R_{\boldsymbol{\sigma}}, R_\mathbf{u}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) -\end{equation} - -The function $L_R$ trivially prepares a transaction receipt for being transformed into an RLP-serialised byte array: -\begin{equation} -L_R(R) \equiv (\mathtt{\small \hyperlink{trie}{TRIE}}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathbf{u}}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) -\end{equation} -thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a \hyperlink{trie}{trie} structure, the root of which forms the first item. - -We assert $\hyperlink{R u}{R_\mathbf{u}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_\mathbf{b}$}, is a hash of size 2048 bits (256 bytes): -\begin{equation} -\hyperlink{R u}{R_\mathbf{u}} \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_\mathbf{b}} \in \mathbb{B}_{256} -\end{equation} - -%Notably $B_\mathbf{T}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence. - -The log entries, $\hyperlink{R l}{R_\mathbf{l}}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_\mathbf{a}$, a series of 32-bytes log topics, $O_\mathbf{t}$ and some number of bytes of data, $O_\mathbf{d}$: -\begin{equation} -O \equiv (O_\mathbf{a}, ({O_\mathbf{t}}_0, {O_\mathbf{t}}_1, ...), O_\mathbf{d}) -\end{equation} -\begin{equation} -O_\mathbf{a} \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_\mathbf{t}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_\mathbf{d} \in \mathbb{B} -\end{equation} - -We define the Bloom filter function, $M$, to reduce a log entry into a single 256-byte hash: -\begin{equation} -M(O) \equiv \hyperlink{bigvee}{\bigvee}_{t \in \{O_\mathbf{a}\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big) -\end{equation} - -where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence.\footnote{11 bits $= 2^{2048}$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence".} Formally: -\begin{eqnarray} -M_{3:2048}(\mathbf{x}: \mathbf{x} \in \mathbb{B}) & \equiv & \mathbf{y}: \mathbf{y} \in \mathbb{B}_{256} \quad \text{where:}\\ -\mathbf{y} & = & (0, 0, ..., 0) \quad \text{except:}\\ -\forall_{i \in \{0, 2, 4\}}&:& \mathcal{B}_{m(\mathbf{x}, i)}(\mathbf{y}) = 1\\ -m(\mathbf{x}, i) &\equiv& \mathtt{\tiny KEC}(\mathbf{x})[i, i + 1] \bmod 2048 -\end{eqnarray} - -where $\mathcal{B}$ is the bit reference function such that $\mathcal{B}_j(\mathbf{x})$ equals the bit of index $j$ (indexed from 0) in the byte array $\mathbf{x}$. - -\subsubsection{Holistic Validity} - -We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathbf{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_\mathbf{r}$: -\begin{equation} -\begin{array}[t]{lclc}\hypertarget{H r}{ -H_\mathbf{r} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\ -H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathbf{U}}))) & \wedge }\hypertarget{H t}{\\ -H_\mathbf{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{T} \rVert, i \in \mathbb{P}: p(i, L_\mathbf{T}(B_\mathbf{T}[i]))\}) }& \wedge \hypertarget{H e}{\\ -H_\mathbf{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert \hyperlink{Transaction Receipt}{B_\mathbf{R}} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\}) & \wedge }\hypertarget{H b}{\hypertarget{r}{\\ -H_\mathbf{b} &\equiv& \hyperlink{bigvee}{\bigvee}_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_\mathbf{b} \big)}} -\end{array} -\end{equation} - -where $p(k, v)$ is simply the pairwise RLP transformation, in this case, the first being the index of the transaction in the block and the second being the transaction receipt: -\begin{equation} -p(k, v) \equiv \big( \mathtt{\small RLP}(k), \mathtt{\small RLP}(v) \big) -\end{equation} - -Furthermore: -\begin{equation} -\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_\mathbf{r} -\end{equation} - -Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly. - -The values stemming from the computation of transactions, specifically the \hyperlink{transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{stateR-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}. - -\subsubsection{Serialisation} - -The function $L_B$ and $L_H$ are the preparation functions for a block and block header respectively. Much like the transaction receipt preparation function $L_R$, we assert the types and order of the structure for when the RLP transformation is required: -\begin{eqnarray} -\quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_\mathbf{p}}, \hyperlink{H o}{H_\mathbf{o}}, \hyperlink{H c}{H_\mathbf{c}}, \hyperlink{H r}{H_\mathbf{r}}, \hyperlink{H t}{H_\mathbf{t}}, \hyperlink{H e}{H_\mathbf{e}}, \hyperlink{H b}{H_\mathbf{b}}, \hyperlink{H d}{H_\mathbf{d}},\\ \hyperlink{H i}{H_\mathbf{i}}, \hyperlink{H l}{H_\mathbf{l}}, \hyperlink{H g}{H_\mathbf{g}}, \hyperlink{H s}{H_\mathbf{s}}, \hyperlink{H x}{H_\mathbf{x}}, \hyperlink{H m}{H_\mathbf{m}}, \hyperlink{H n}{H_\mathbf{n}} \; )\end{array} \\ -\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathbf{T}^*(B_\mathbf{T}), L_H^*(\hyperlink{B U}{B_\mathbf{U}}) \big) -\end{eqnarray} - -With $L_\mathbf{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus: -\begin{equation} -f^*\big( (x_0, x_1, ...) \big) \equiv \big( f(x_0), f(x_1), ... \big) \quad \text{for any function} \; f -\end{equation} - -The component types are defined thus: -\begin{equation} -\begin{array}[t]{lclclcl} -\hyperlink{H p}{H_\mathbf{p}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H o}{H_\mathbf{o}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H c}{H_\mathbf{c}} \in \mathbb{B}_{20} & \wedge \\ -\hyperlink{H r}{H_\mathbf{r}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H t}{H_\mathbf{t}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H e}{H_\mathbf{e}} \in \mathbb{B}_{32} & \wedge \\ -H_\mathbf{b} \in \mathbb{B}_{256} & \wedge & \hyperlink{H d}{H_\mathbf{d}} \in \mathbb{P} & \wedge & \hyperlink{H i}{H_\mathbf{i}} \in \mathbb{P} & \wedge \\ -\hyperlink{H l}{H_\mathbf{l}} \in \mathbb{P} & \wedge & \hyperlink{H g}{H_\mathbf{g}} \in \mathbb{P} & \wedge & \hyperlink{H s}{H_\mathbf{s}} \in \mathbb{P}_{256} & \wedge \\ -\hyperlink{H x}{H_\mathbf{x}} \in \mathbb{B} & \wedge & \hyperlink{H m}{H_\mathbf{m}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H n}{H_\mathbf{n}} \in \mathbb{B}_{8} -\end{array} -\end{equation} - -where -\begin{equation} -\mathbb{B}_\mathbf{n} = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \} -\end{equation} - -We now have a rigorous specification for the construction of a formal block structure. The RLP function $\texttt{\small RLP}$ (see Appendix \ref{app:rlp}) provides the canonical method for transforming this structure into a sequence of bytes ready for transmission over the wire or storage locally. - -\subsubsection{Block Header Validity} - -We define $P(B_H)$ to be the parent block of $B$, formally: -\begin{equation} -P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = \hyperlink{H p}{H_\mathbf{p}} -\end{equation} - -The block number is the parent's block number incremented by one: -\begin{equation} -\hyperlink{H i}{H_\mathbf{i}} \equiv {{P(H)_H}_\mathbf{i}} + 1 -\end{equation} - -\newcommand{\mindifficulty}{D_0} -\newcommand{\homesteadmod}{\ensuremath{\varsigma_2}} -\newcommand{\expdiffsymb}{\ensuremath{\epsilon}} -\newcommand{\diffadjustment}{x} - -The canonical difficulty of a block of header $H$ is defined as $D(H)$: -\begin{equation} -D(H) \equiv \begin{dcases} -\mindifficulty & \text{if} \quad \hyperlink{H i}{H_\mathbf{i}} = 0\\ -\text{max}\!\left(\mindifficulty, {P(H)_H}_\mathbf{d} + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\ -\end{dcases} -\end{equation} -where: -\begin{equation} -\mindifficulty \equiv 131072 -\end{equation} -\begin{equation} -\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_\mathbf{d}}{2048}\right\rfloor -\end{equation} -\begin{equation} -\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{\hyperlink{H s}{H_\mathbf{s}} - {P(H)_H}_\mathbf{s}}{10}\right\rfloor, -99 \right) -\end{equation} -\begin{equation} -\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor -\end{equation} - -The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation: -\begin{eqnarray} -& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ -& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ -& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000 -\end{eqnarray} - -\hyperlink{H s}{$H_\mathbf{s}$} is the timestamp of block $H$ and must fulfil the relation: -\begin{equation} -\hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s} -\end{equation} - -This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced. - -The nonce of a block, $\hyperlink{H n}{H_\mathbf{n}}$, must satisfy the relations: -\begin{equation} -n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \wedge \quad m = \hyperlink{H m}{H_\mathbf{m}} -\end{equation} -with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$. - -\hypertarget{h cancel n}{} -Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $\hyperlink{H d}{H_\mathbf{d}}$. - -This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the \hyperlink{block nonce}{block nonce} must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers. - -Thus we are able to define the \hypertarget{BlockHeaderValidityFunction}{block header validity function $V(H)$}:\label{eq:BlockHeaderValidityFunction} -\begin{eqnarray} -V(H) & \equiv & n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \wedge m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \\ -& & \hyperlink{H d}{H_\mathbf{d}} = D(H) \quad \wedge \\ -& & \hyperlink{H g}{H_\mathbf{g}} \le \hyperlink{H l}{H_\mathbf{l}} \quad \wedge \\ -& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ -& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ -& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000 \quad \wedge \\ -& & \hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s} \quad \wedge \\ -& & \hyperlink{H i}{H_\mathbf{i}} = {P(H)_H}_\mathbf{i} +1 \quad \wedge \\ -& & \lVert \hyperlink{H x}{H_\mathbf{x}} \rVert \le 32 -\end{eqnarray} -where $(n, m) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$ - -Noting additionally that \textbf{extraData} must be at most 32 bytes. - -\section{Gas and Payment} \label{ch:payment} - -In order to avoid issues of network abuse and to sidestep the inevitable questions stemming from Turing completeness, all programmable computation in Ethereum is subject to fees. The fee schedule is specified in units of \textit{gas} (see Appendix \ref{app:fees} for the fees associated with various computation). Thus any given fragment of programmable computation (this includes creating contracts, making message calls, utilising and accessing account storage and executing operations on the virtual machine) has a universally agreed cost in terms of gas. - -Every transaction has a specific amount of gas associated with it: \textbf{gasLimit}. This is the amount of gas which is implicitly purchased from the sender's account balance. The purchase happens at the according \textbf{gasPrice}, also specified in the transaction. The transaction is considered invalid if the account balance cannot support such a purchase. It is named \textbf{gasLimit} since any unused gas at the end of the transaction is refunded (at the same rate of purchase) to the sender's account. Gas does not exist outside of the execution of a transaction. Thus for accounts with trusted code associated, a relatively high gas limit may be set and left alone. - -In general, Ether used to purchase gas that is not refunded is delivered to the \textit{beneficiary} address, the address of an account typically under the control of the miner. Transactors are free to specify any \textbf{gasPrice} that they wish, however miners are free to ignore transactions as they choose. A higher gas price on a transaction will therefore cost the sender more in terms of Ether and deliver a greater value to the miner and thus will more likely be selected for inclusion by more miners. Miners, in general, will choose to advertise the minimum gas price for which they will execute transactions and transactors will be free to canvas these prices in determining what gas price to offer. Since there will be a (weighted) distribution of minimum acceptable gas prices, transactors will necessarily have a trade-off to make between lowering the gas price and maximising the chance that their transaction will be mined in a timely manner. - -%\subsubsection{Determining Computation Costs} - -\section{Transaction Execution} \label{ch:transactions} - -The execution of a transaction is the most complex part of the Ethereum protocol: it defines the state transition function \hyperlink{Upsilon}{$\Upsilon$}. It is assumed that any transactions executed first pass the initial tests of intrinsic validity. These include: - -\begin{enumerate} -\item The transaction is well-formed RLP, with no additional trailing bytes; -\item the transaction signature is valid; -\item the \hyperlink{transaction nonce}{transaction nonce} is valid (equivalent to the \hyperlink{account nonce}{sender account's current nonce}); -\item the gas limit is no smaller than the intrinsic gas, $g_0$, used by the transaction; -\item the sender account balance contains at least the cost, $v_0$, required in up-front payment. -\end{enumerate} - -Formally, we consider the function \hyperlink{Upsilon}{$\Upsilon$}, with $T$ being a transaction and $\boldsymbol{\sigma}$ the state: -\begin{equation} -\boldsymbol{\sigma}' = \Upsilon(\boldsymbol{\sigma}, T) -\end{equation} - -Thus $\boldsymbol{\sigma}'$ is the post-transactional state. We also define \hyperlink{Upsilong}{$\Upsilon^g$} to evaluate to the amount of gas used in the execution of a transaction and \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} to evaluate to the transaction's accrued log items, both to be formally defined later. - -\subsection{Substate} -Throughout transaction execution, we accrue certain information that is acted upon immediately following the transaction. We call this \textit{transaction substate}, and represent it as $A$, which is a tuple: -\begin{equation} -A \equiv (A_\mathbf{s}, A_\mathbf{l}, A_\mathbf{r}) -\end{equation} - -The tuple contents include $A_\mathbf{s}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_\mathbf{l}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_\mathbf{r}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs. - -For brevity, we define the empty substate $A^0$ to have no self-destructs, no logs and a zero refund balance: -\begin{equation} -A^0 \equiv (\varnothing, (), 0) -\end{equation} - -\subsection{Execution} -We define intrinsic gas $g_0$, the amount of gas this transaction requires to be paid prior to execution, as follows: -\begin{align} -g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} G_{txdatazero} & \text{if} \quad i = 0 \\ G_{txdatanonzero} & \text{otherwise} \end{cases} \\ -{} & + \begin{cases} G_\text{txcreate} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ -{} & + G_{transaction} -\end{align} - -where $T_\mathbf{i},T_\mathbf{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_\text{txcreate}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}. - -%todo Explain g_d reason? - -The up-front cost $v_0$ is calculated as: -\begin{equation} -v_0 \equiv T_\mathbf{g} T_\mathbf{p} + \hyperlink{T v}{T_\mathbf{v}} -\end{equation} - -The validity is determined as: -\begin{equation} -\begin{array}[t]{rcl} -S(T) & \neq & \varnothing \quad \wedge \\ -\boldsymbol{\sigma}[S(T)] & \neq & \varnothing \quad \wedge \\ -T_\mathbf{n} & = & \boldsymbol{\sigma}[S(T)]_\mathbf{n} \quad \wedge \\ -g_0 & \leqslant & T_\mathbf{g} \quad \wedge \\ -v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_\mathbf{b} \quad \wedge \\ -T_\mathbf{g} & \leqslant & {B_H}_\mathbf{l} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_\mathbf{R})_\mathbf{u}} -\end{array} -\end{equation} - -Note the final condition; the sum of the transaction's gas limit, $T_\mathbf{g}$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathbf{R})_\mathbf{u}$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_\mathbf{l}$. - -The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_\mathbf{g}T_\mathbf{p}$. The gas available for the proceeding computation, $g$, is defined as $T_\mathbf{g} - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point. - -We define the checkpoint state $\boldsymbol{\sigma}_0$: -\begin{eqnarray} -\boldsymbol{\sigma}_0 & \equiv & \boldsymbol{\sigma} \quad \text{except:} \\ -\boldsymbol{\sigma}_0[S(T)]_b & \equiv & \boldsymbol{\sigma}[S(T)]_b - T_g T_p \\% -\boldsymbol{\sigma}_0[S(T)]_\mathbf{n} & \equiv & \boldsymbol{\sigma}[S(T)]_\mathbf{n} + 1 -\end{eqnarray} - -Evaluating $\boldsymbol{\sigma}_P$ from $\boldsymbol{\sigma}_0$ depends on the transaction type; either contract creation or message call; we define the tuple of post-execution provisional state $\boldsymbol{\sigma}_P$, remaining gas $g'$ and substate $A$: -\begin{equation} -(\boldsymbol{\sigma}_P, g', A) \equiv \begin{cases} -\Lambda(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, 0) & \text{if} \quad T_\mathbf{t} = \varnothing \\ -\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad T_\mathbf{t}, T_\mathbf{t}, g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, 0) & \text{otherwise} -\end{cases} -\end{equation} - -where $g$ is the amount of gas remaining after deducting the basic amount required to pay for the existence of the transaction: -\begin{equation} -g \equiv T_\mathbf{g} - g_0 -\end{equation} -and $T_\mathbf{o}$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code. - -Note we use $\Theta_{3}$ to denote the fact that only the first three components of the function's value are taken; the final represents the message-call's output value (a byte array) and is unused in the context of transaction evaluation. - -After the message call or contract creation is processed, the state is finalised by determining the amount to be refunded, $g^*$ from the remaining gas, $g'$, plus some allowance from the refund counter, to the sender at the original rate. -\begin{equation} -g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_\mathbf{g} - g'}{2} \Big\rfloor, A_\mathbf{r} \} -\end{equation} - -The total refundable amount is the legitimately remaining gas $g'$, added to $A_\mathbf{r}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_\mathbf{g} - g'$. - -The Ether for the gas is given to the miner, whose address is specified as the beneficiary of the present block $B$. So we define the pre-final state $\boldsymbol{\sigma}^*$ in terms of the provisional state $\boldsymbol{\sigma}_P$: -\begin{eqnarray} -\boldsymbol{\sigma}^* & \equiv & \boldsymbol{\sigma}_P \quad \text{except} \\ -\boldsymbol{\sigma}^*[S(T)]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[S(T)]_\mathbf{b} + g^* T_\mathbf{p} \\ -\boldsymbol{\sigma}^*[m]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[m]_\mathbf{b} + (T_\mathbf{g} - g^*) T_\mathbf{p} \\ -m & \equiv & {B_H}_\mathbf{c} -\end{eqnarray} - -The final state, $\boldsymbol{\sigma}'$, is reached after deleting all accounts that appear in the self-destruct set: -\begin{eqnarray} -\boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}^* \quad \text{except} \\ -\forall i \in A_\mathbf{s}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing -\end{eqnarray} - -\hypertarget{Upsilong}{And finally, we specify $\Upsilon^g$, the total gas used in this transaction}\hypertarget{Upsilonl}{ and $\Upsilon^\mathbf{l}$, the logs created by this transaction:} -\begin{eqnarray} -\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_\mathbf{g} - \mathbf{g}' \\ -\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_\mathbf{l} -\end{eqnarray} - -These are used to help define the \hyperlink{Transaction Receipt}{transaction receipt}. - -\section{Contract Creation} \label{ch:create} - -There are a number of intrinsic parameters used when creating an account: sender ($s$), original transactor ($o$), available gas ($g$), gas price ($p$), endowment ($v$) together with an arbitrary length byte array, $\mathbf{i}$, the initialisation EVM code and finally the present depth of the message-call/contract-creation stack ($e$). - -We define the creation function formally as the function $\Lambda$, which evaluates from these values, together with the state $\boldsymbol{\sigma}$ to the tuple containing the new state, remaining gas and accrued transaction substate $(\boldsymbol{\sigma}', g', A)$, as in section \ref{ch:transactions}: -\begin{equation} -(\boldsymbol{\sigma}', g', A) \equiv \Lambda(\boldsymbol{\sigma}, s, o, g, p, v, \mathbf{i}, e) -\end{equation} - -The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$: -\begin{equation} -a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_\mathbf{n} - 1)\;\big)\Big)\Big) -\end{equation} - -where $\mathtt{\tiny KEC}$ is the Keccak 256-bit hash function, $\mathtt{\tiny RLP}$ is the RLP encoding function, $\mathcal{B}_{a..b}(X)$ evaluates to binary value containing the bits of indices in the range $[a, b]$ of the binary data $X$ and $\boldsymbol{\sigma}[x]$ is the address state of $x$ or $\varnothing$ if none exists. Note we use one fewer than the \hyperlink{account nonce}{sender's nonce value}; we assert that we have incremented the sender account's nonce prior to this call, and so the value used is the sender's nonce at the beginning of the responsible transaction or VM operation. - -The account's nonce is initially defined as zero, the balance as the value passed, the storage as empty and the code hash as the Keccak 256-bit hash of the empty string; the sender's balance is also reduced by the value passed. Thus the mutated state becomes $\boldsymbol{\sigma}^*$: -\begin{equation} -\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except:} -\end{equation} -\begin{eqnarray} -\boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\ -\boldsymbol{\sigma}^*[s]_\mathbf{b} &\equiv& \boldsymbol{\sigma}[s]_\mathbf{b} - v -\end{eqnarray} - -where $v'$ is the account's pre-existing value, in the event it was previously in existence: -\begin{equation} -v' \equiv \begin{cases} -0 & \text{if} \quad \boldsymbol{\sigma}[a] = \varnothing\\ -\boldsymbol{\sigma}[a]_\mathbf{b} & \text{otherwise} -\end{cases} -\end{equation} - -%It is asserted that the state database will also change such that it defines the pair $(\mathtt{\tiny KEC}(\mathbf{b}), \mathbf{b})$. - -Finally, the account is initialised through the execution of the initialising EVM code $\mathbf{i}$ according to the execution model (see section \ref{ch:model}). Code execution can effect several events that are not internal to the execution state: the account's storage can be altered, further accounts can be created and further message calls can be made. As such, the code execution function $\Xi$ evaluates to a tuple of the resultant state $\boldsymbol{\sigma}^{**}$, available gas remaining $g^{**}$, the accrued substate $A$ and the body code of the account $\mathbf{o}$. - -\begin{equation} -(\boldsymbol{\sigma}^{**}, g^{**}, A, \mathbf{o}) \equiv \Xi(\boldsymbol{\sigma}^*, g, I) \\ -\end{equation} -where $I$ contains the parameters of the execution environment as defined in section \ref{ch:model}, that is: -\begin{eqnarray} -I_\mathbf{a} & \equiv & a \\ -I_\mathbf{o} & \equiv & o \\ -I_\mathbf{p} & \equiv & p \\ -I_\mathbf{d} & \equiv & () \\ -I_\mathbf{s} & \equiv & s \\ -\hyperlink{I v}{I_\mathbf{v}} & \equiv & v \\ -I_\mathbf{b} & \equiv & \mathbf{i} \\ -I_\mathbf{e} & \equiv & e -\end{eqnarray} - -$I_\mathbf{d}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain. - -Code execution depletes gas, and gas may not go below zero, thus execution may exit before the code has come to a natural halting state. In this (and several other) exceptional cases we say an out-of-gas (OOG) exception has occurred: The evaluated state is defined as being the empty set, $\varnothing$, and the entire create operation should have no effect on the state, effectively leaving it as it was immediately prior to attempting the creation. - -If the initialization code completes successfully, a final contract-creation cost is paid, the code-deposit cost, $c$, proportional to the size of the created contract's code: -\begin{equation} -c \equiv G_{codedeposit} \times |\mathbf{o}| -\end{equation} - -If there is not enough gas remaining to pay this, \ie $g^{**} < c$, then we also declare an out-of-gas exception. - -The gas remaining will be zero in any such exceptional condition, \ie if the creation was conducted as the reception of a transaction, then this doesn't affect payment of the intrinsic cost of contract creation; it is paid regardless. However, the value of the transaction is not transferred to the aborted contract's address when we are out-of-gas. - -If such an exception does not occur, then the remaining gas is refunded to the originator and the now-altered state is allowed to persist. Thus formally, we may specify the resultant state, gas and substate as $(\boldsymbol{\sigma}', g', A)$ where: - -\begin{align} -\quad g' &\equiv \begin{cases} -0 & \text{if} \quad F \\ -g^{**} - \mathbf{c} & \text{otherwise} \\ -\end{cases} \\ -\quad \boldsymbol{\sigma}' &\equiv \begin{cases} -\boldsymbol{\sigma} & \text{if} \quad F \\ -\boldsymbol{\sigma}^{**} \quad \text{except:} & \\ -\quad\boldsymbol{\sigma}'[a]_\mathbf{c} = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise} -\end{cases} \\ -\nonumber \text{where} \\ -F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ \mathbf{g}^{**} < \mathbf{c} \ \vee\ |\mathbf{o}| > 24576\big) -\end{align} - -The exception in the determination of $\boldsymbol{\sigma}'$ dictates that $\mathbf{o}$, the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account. Note that the 24576 byte limit for $\mathbf{o}$ exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity. - -Note that the intention is that the result is either a successfully created new contract with its endowment, or no new contract with no transfer of value. - -\subsection{Subtleties} -Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever. - -\section{Message Call} \label{ch:call} -In the case of executing a message call, several parameters are required: sender ($s$), transaction originator ($o$), recipient ($r$), the account whose code is to be executed ($c$, usually the same as recipient), available gas ($g$), value ($v$) and gas price ($p$) together with an arbitrary length byte array, $\mathbf{d}$, the input data of the call and finally the present depth of the message-call/contract-creation stack ($e$). - -Aside from evaluating to a new state and transaction substate, message calls also have an extra component---the output data denoted by the byte array $\mathbf{o}$. This is ignored when executing transactions, however message calls can be initiated due to VM-code execution and in this case this information is used. -\begin{equation} -(\boldsymbol{\sigma}', g', A, \mathbf{o}) \equiv \Theta(\boldsymbol{\sigma}, s, o, r, c, g, p, v, \tilde{v}, \mathbf{d}, e) -\end{equation} -Note that we need to differentiate between the value that is to be transferred, $v$, from the value apparent in the execution context, $\tilde{v}$, for the {\small DELEGATECALL} instruction. - -We define $\boldsymbol{\sigma}_1$, the first transitional state as the original state but with the value transferred from sender to recipient: -\begin{equation} -\boldsymbol{\sigma}_1[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}[s]_\mathbf{b} - v -\end{equation} -unless $s = r$. - -Throughout the present work, it is assumed that if $\boldsymbol{\sigma}_1[r]$ was originally undefined, it will be created as an account with no code or state and zero balance and \hyperlink{account nonce}{nonce}. Thus the previous equation should be taken to mean: -\begin{equation} -\boldsymbol{\sigma}_1 \equiv \boldsymbol{\sigma}_1' \quad \text{except:} \\ -\end{equation} -\begin{equation} -\boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}_1'[s]_\mathbf{b} - v -\end{equation} -\begin{equation} -\text{and}\quad \boldsymbol{\sigma}_1' \equiv \boldsymbol{\sigma} \quad \text{except:} \\ -\end{equation} -\begin{equation} -\begin{cases} -\boldsymbol{\sigma}_1'[r] \equiv (v, 0, \mathtt{\tiny KEC}(()), \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing)) & \text{if} \quad \boldsymbol{\sigma}[r] = \varnothing \\ -\boldsymbol{\sigma}_1'[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v & \text{otherwise} -\end{cases} -\end{equation} - -The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_\mathbf{c}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$). - -\begin{eqnarray} -\boldsymbol{\sigma}' & \equiv & \begin{cases} -\boldsymbol{\sigma} & \text{if} \quad \boldsymbol{\sigma}^{**} = \varnothing \\ -\boldsymbol{\sigma}^{**} & \text{otherwise} -\end{cases} \\ -g' & \equiv & \begin{cases} -0 & \text{if} \quad \boldsymbol{\sigma}^{**} = \varnothing \\ -g^{**} & \text{otherwise} -\end{cases} \\ -\qquad (\boldsymbol{\sigma}^{**}, g^{**}, A, \mathbf{o}) & \equiv & \begin{cases} -\Xi_{\mathtt{ECREC}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 1 \\ -\Xi_{\mathtt{SHA256}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 2 \\ -\Xi_{\mathtt{RIP160}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 3 \\ -\Xi_{\mathtt{ID}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 4 \\ -\Xi(\boldsymbol{\sigma}_1, g, I) & \text{otherwise} \end{cases} \\ -I_\mathbf{a} & \equiv & r \\ -I_\mathbf{o} & \equiv & o \\ -I_\mathbf{p} & \equiv & p \\ -I_\mathbf{d} & \equiv & \mathbf{d} \\ -I_\mathbf{s} & \equiv & s \\ -\hyperlink{I v}{I_\mathbf{v}} & \equiv & \tilde{v} \\ -I_\mathbf{e} & \equiv & e \\ -\text{Let} \; \mathtt{\tiny KEC}(I_\mathbf{b}) & = & \boldsymbol{\sigma}[c]_\mathbf{c} -\end{eqnarray} - -It is assumed that the client will have stored the pair $(\mathtt{\tiny KEC}(I_\mathbf{b}), I_\mathbf{b})$ at some point prior in order to make the determination of $I_\mathbf{b}$ feasible. - -As can be seen, there are four exceptions to the usage of the general execution framework $\Xi$ for evaluation of the message call: these are four so-called `precompiled' contracts, meant as a preliminary piece of architecture that may later become \textit{native extensions}. The four contracts in addresses 1, 2, 3 and 4 execute the elliptic curve public key recovery function, the SHA2 256-bit hash scheme, the RIPEMD 160-bit hash scheme and the identity function respectively. - -Their full formal definition is in Appendix \ref{app:precompiled}. - -\section{Execution Model} \label{ch:model} - -The execution model specifies how the system state is altered given a series of bytecode instructions and a small tuple of environmental data. This is specified through a formal model of a virtual state machine, known as the Ethereum Virtual Machine (EVM). It is a \textit{quasi-}Turing-complete machine; the \textit{quasi} qualification comes from the fact that the computation is intrinsically bounded through a parameter, \textit{gas}, which limits the total amount of computation done. - -\subsection{Basics} - -The EVM is a simple stack-based architecture. The word size of the machine (and thus size of stack item) is 256-bit. This was chosen to facilitate the Keccak-256 hash scheme and elliptic-curve computations. The memory model is a simple word-addressed byte array. The stack has a maximum size of $1024$. The machine also has an independent storage model; this is similar in concept to the memory but rather than a byte array, it is a word-addressable word array. Unlike memory, which is volatile, storage is non volatile and is maintained as part of the system state. All locations in both storage and memory are well-defined initially as zero. - -The machine does not follow the standard von Neumann architecture. Rather than storing program code in generally-accessible memory or storage, it is stored separately in a virtual ROM interactable only through a specialised instruction. - -The machine can have exceptional execution for several reasons, including stack underflows and invalid instructions. Like the out-of-gas exception, they do not leave state changes intact. Rather, the machine halts immediately and reports the issue to the execution agent (either the transaction processor or, recursively, the spawning execution environment) which will deal with it separately. - -\subsection{Fees Overview} - -Fees (denominated in gas) are charged under three distinct circumstances, all three as prerequisite to the execution of an operation. The first and most common is the fee intrinsic to the computation of the operation (see Appendix \ref{app:fees}). Secondly, gas may be deducted in order to form the payment for a subordinate message call or contract creation; this forms part of the payment for {\small CREATE}, {\small CALL} and {\small CALLCODE}. Finally, gas may be paid due to an increase in the usage of the memory. - -Over an account's execution, the total fee for memory-usage payable is proportional to the smallest multiple of 32 bytes that is required such that all memory indices (whether for read or write) are included in the range. This is paid for on a just-in-time basis; as such, referencing an area of memory at least 32 bytes greater than any previously indexed memory will certainly result in an additional memory usage fee. Due to this fee it is highly unlikely addresses will ever go above 32-bit bounds. That said, implementations must be able to manage this eventuality. - -Storage fees have a slightly nuanced behaviour---to incentivise minimisation of the use of storage (which corresponds directly to a larger state database on all nodes), the execution fee for an operation that clears an entry in the storage is not only waived, a qualified refund is given; in fact, this refund is effectively paid up-front since the initial usage of a storage location costs substantially more than normal usage. - -See Appendix \ref{app:vm} for a rigorous definition of the EVM gas cost. - -\subsection{Execution Environment} - -In addition to the system state $\boldsymbol{\sigma}$, and the remaining gas for computation $g$, there are several pieces of important information used in the execution environment that the execution agent must provide; these are contained in the tuple $I$: - -\begin{itemize}\hypertarget{I a}{ -\item $I_\mathbf{a}$, the address of the account which owns the code that is executing.}\hypertarget{I o}{ -\item $I_\mathbf{o}$, the sender address of the transaction that originated this execution.}\hypertarget{I p}{ -\item $I_\mathbf{p}$, the price of gas in the transaction that originated this execution.}\hypertarget{I d}{ -\item $I_\mathbf{d}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data.}\hypertarget{I s}{ -\item $I_\mathbf{s}$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender.}\hypertarget{I v}{ -\item $I_\mathbf{v}$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value.}\hypertarget{I b}{ -\item $I_\mathbf{b}$, the byte array that is the machine code to be executed. -\item $I_H$, the block header of the present block.}\hypertarget{I e}{ -\item $I_\mathbf{e}$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present).} -\end{itemize} - -The execution model defines the function $\Xi$, which can compute the resultant state $\boldsymbol{\sigma}'$, the remaining gas $g'$, the accrued substate $A$ and the resultant output, $\mathbf{o}$, given these definitions. For the present context, we will defined it as: -\begin{equation} -(\boldsymbol{\sigma}', g', A, \mathbf{o}) \equiv \Xi(\boldsymbol{\sigma}, g, I) -\end{equation} - -where we will remember that $A$, the accrued substate is defined as the tuple of the suicides set $\mathbf{s}$, the log series $\mathbf{l}$ and the refunds $r$: - -\begin{equation} -A \equiv (\mathbf{s}, \mathbf{l}, r) -\end{equation} - -\subsection{Execution Overview} - -We must now define the $\Xi$ function. In most practical implementations this will be modelled as an iterative progression of the pair comprising the full system state, $\boldsymbol{\sigma}$ and the machine state, $\boldsymbol{\mu}$. Formally, we define it recursively with a function $X$. This uses an iterator function $O$ (which defines the result of a single cycle of the state machine) together with functions $Z$ which determines if the present state is an exceptional halting state of the machine and $H$, specifying the output data of the instruction if and only if the present state is a normal halting state of the machine. - -\hypertarget{emptySequence}{} -The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. -\begin{eqnarray} -\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_\mathbf{g}, A, \mathbf{o}) \\ -(\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\ -\boldsymbol{\mu}_\mathbf{g} & \equiv & \mathbf{g} \\ -\boldsymbol{\mu}_{pc} & \equiv & 0 \\ -\boldsymbol{\mu}_\mathbf{m} & \equiv & (0, 0, ...) \\ -\boldsymbol{\mu}_\mathbf{i} & \equiv & 0 \\ -\boldsymbol{\mu}_\mathbf{s} & \equiv & () -\end{eqnarray} -\begin{equation} -X\big( (\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \big) \equiv \begin{cases} -\big(\varnothing, \boldsymbol{\mu}, A^0, I, ()\big) & \text{if} \quad Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I)\\ -O(\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \cdot \mathbf{o} & \text{if} \quad \mathbf{o} \neq \varnothing\\ -X\big(O(\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I)\big) & \text{otherwise}\\ -\end{cases} -\end{equation} - -where -\begin{eqnarray} -\mathbf{o} & \equiv & H(\boldsymbol{\mu}, I) \\ -(a, b, c, d) \cdot e & \equiv & (a, b, c, d, e) -\end{eqnarray} - -Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_\mathbf{g}$ from the resultant machine state $\boldsymbol{\mu}'$. - -$X$ is thus cycled (recursively here, but implementations are generally expected to use a simple iterative loop) until either $Z$ becomes true indicating that the present state is exceptional and that the machine must be halted and any changes discarded or until $H$ becomes a series (rather than the empty set) indicating that the machine has reached a controlled halt. - -\subsubsection{Machine State} -The machine state $\boldsymbol{\mu}$ is defined as the tuple $(g, pc, \mathbf{m}, i, \mathbf{s})$ which are the gas available, the program counter $pc \in \mathbb{P}_{256}$ , the memory contents, the active number of words in memory (counting continuously from position 0), and the stack contents. The memory contents $\boldsymbol{\mu}_\mathbf{m}$ are a series of zeroes of size $2^{256}$. - -For the ease of reading, the instruction mnemonics, written in small-caps (\eg \space {\small ADD}), should be interpreted as their numeric equivalents; the full table of instructions and their specifics is given in Appendix \ref{app:vm}. - -For the purposes of defining $Z$, $H$ and $O$, we define $w$ as the current operation to be executed: -\begin{equation}\label{eq:currentoperation} -w \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathbf{b} \rVert \\ -\text{\small STOP} & \text{otherwise} -\end{cases} -\end{equation} - -We also assume the fixed amounts of $\mathbf{\delta}$ and $\mathbf{\alpha}$, specifying the stack items removed and added, both subscriptable on the instruction and an instruction cost function $C$ evaluating to the full cost, in gas, of executing the given instruction. - -\subsubsection{Exceptional Halting} - -The exceptional halting function $Z$ is defined as: -\begin{equation} -Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv -\begin{array}[t]{l} -\boldsymbol{\mu}_\mathbf{g} < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\ -\mathbf{\delta}_w = \varnothing \quad \vee \\ -\lVert\boldsymbol{\mu}_\mathbf{s}\rVert < \mathbf{\delta}_w \quad \vee \\ -( w \in \{ \text{\small JUMP}, \text{\small JUMPI} \} \quad \wedge \\ \quad \boldsymbol{\mu}_\mathbf{s}[0] \notin D(I_\mathbf{b}) ) \quad \vee \\ -\lVert\boldsymbol{\mu}_\mathbf{s}\rVert - \mathbf{\delta}_w + \mathbf{\alpha}_w > 1024 \quad -\end{array} -\end{equation} - -This states that the execution is in an exceptional halting state if there is insufficient gas, if the instruction is invalid (and therefore its $\delta$ subscript is undefined), if there are insufficient stack items, if a {\small JUMP}/{\small JUMPI} destination is invalid or the new stack size would be larger then 1024. The astute reader will realise that this implies that no instruction can, through its execution, cause an exceptional halt. - -\subsubsection{Jump Destination Validity} - -We previously used $D$ as the function to determine the set of valid jump destinations given the code that is being run. We define this as any position in the code occupied by a {\small JUMPDEST} instruction. - -All such positions must be on valid instruction boundaries, rather than sitting in the data portion of {\small PUSH} operations and must appear within the explicitly defined portion of the code (rather than in the implicitly defined {\small STOP} operations that trail it). - -Formally: -\begin{equation} -D(\mathbf{c}) \equiv D_J(\mathbf{c}, 0) -\end{equation} - -where: -\begin{equation} -D_J(\mathbf{c}, i) \equiv \begin{cases} -\{\} & \text{if} \quad i \geqslant |\mathbf{c}| \\ -\{ i \} \cup D_J(\mathbf{c}, N(i, \mathbf{c}[i])) & \text{if} \quad \mathbf{c}[i] = \text{\small JUMPDEST} \\ -D_J(\mathbf{c}, N(i, \mathbf{c}[i])) & \text{otherwise} \\ -\end{cases} -\end{equation} - -where $N$ is the next valid instruction position in the code, skipping the data of a {\small PUSH} instruction, if any: -\begin{equation} -N(i, w) \equiv \begin{cases} -i + w - \text{\small PUSH1} + 2 & \text{if} \quad w \in [\text{\small PUSH1}, \text{\small PUSH32}] \\ -i + 1 & \text{otherwise} \end{cases} -\end{equation} - -\subsubsection{Normal Halting} \label{subsec:Normal Halting} - -The normal halting function $H$ is defined: -\begin{equation} \label{eq:Normal Halting} -H(\boldsymbol{\mu}, I) \equiv \begin{cases} -H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small RETURN} \\ -() & \text{if} \quad w \in \text{\small STOP}, \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ -\varnothing & \text{otherwise} -\end{cases} -\end{equation} - -The data-returning halt operation, \hyperlink{RETURN}{\text{\small RETURN}}, has a special function $H_{\text{\tiny RETURN}}$. Note also the difference between the empty sequence and the empty set as discussed \hyperlink{emptySequence}{here}. - -\subsection{The Execution Cycle} - -Stack items are added or removed from the left-most, lower-indexed portion of the series; all other items remain unchanged: -\begin{eqnarray} -O\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I)\big) & \equiv & (\boldsymbol{\sigma}', \boldsymbol{\mu}', A', I) \\ -\Delta & \equiv & \mathbf{\alpha}_w - \mathbf{\delta}_w \\ -\lVert\boldsymbol{\mu}'_\mathbf{s}\rVert & \equiv & \lVert\boldsymbol{\mu}_\mathbf{s}\rVert + \Delta \\ -\quad \forall x \in [\mathbf{\alpha}_w, \lVert\boldsymbol{\mu}'_\mathbf{s}\rVert): \boldsymbol{\mu}'_\mathbf{s}[x] & \equiv & \boldsymbol{\mu}_\mathbf{s}[x-\Delta] -\end{eqnarray} - -The gas is reduced by the instruction's gas cost and for most instructions, the program counter increments on each cycle, for the three exceptions, we assume a function $J$, subscripted by one of two instructions, which evaluates to the according value: -\begin{eqnarray} -\quad \boldsymbol{\mu}'_{g} & \equiv & \boldsymbol{\mu}_{g} - C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \\ -\hypertarget{JUMP}{} \hypertarget{JUMPI}{} \label{eq:JUMP} \quad \boldsymbol{\mu}'_{pc} & \equiv & \begin{cases} -J_{\text{JUMP}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMP} \\ -J_{\text{JUMPI}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMPI} \\ -N(\boldsymbol{\mu}_{pc}, w) & \text{otherwise} -\end{cases} -\end{eqnarray} - -In general, we assume the memory, self-destruct set and system state don't change: -\begin{eqnarray} -\boldsymbol{\mu}'_\mathbf{m} & \equiv & \boldsymbol{\mu}_\mathbf{m} \\ -\boldsymbol{\mu}'_\mathbf{i} & \equiv & \boldsymbol{\mu}_\mathbf{i} \\ -A' & \equiv & A \\ -\boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma} -\end{eqnarray} - -However, instructions do typically alter one or several components of these values. Altered components listed by instruction are noted in Appendix \ref{app:vm}, alongside values for $\alpha$ and $\delta$ and a formal description of the gas requirements. - -\section{Blocktree to Blockchain} \label{ch:ghost} - -The canonical blockchain is a path from root to leaf through the entire block tree. In order to have consensus over which path it is, conceptually we identify the path that has had the most computation done upon it, or, the \textit{heaviest} path. Clearly one factor that helps determine the heaviest path is the block number of the leaf, equivalent to the number of blocks, not counting the unmined \hyperlink{GenesisBlock}{genesis block}, in the path. The longer the path, the greater the total mining effort that must have been done in order to arrive at the leaf. This is akin to existing schemes, such as that employed in Bitcoin-derived protocols. - -Since a block header includes the difficulty, the header alone is enough to validate the computation done. Any block contributes toward the total computation or \textit{total difficulty} of a chain. - -Thus we define the total difficulty of block $B$ recursively as: -\begin{eqnarray} -B_\mathbf{t} & \equiv & B'_\mathbf{t} + B_\mathbf{d} \\ -B' & \equiv & P(B_H) -\end{eqnarray} - -As such given a block $B$, $B_\mathbf{t}$ is its total difficulty, $B'$ is its parent block and $B_\mathbf{d}$ is its difficulty. - -\section{Block Finalisation} \label{ch:finalisation} - -The process of finalising a block involves four stages: - -\begin{enumerate} -\item Validate (or, if mining, determine) ommers; -\item validate (or, if mining, determine) transactions; -\item apply rewards; -\item verify (or, if mining, compute a valid) state and \hyperlink{block nonce}{nonce}. -\end{enumerate} - -\subsection{Ommer Validation} - -The validation of \hyperlink{ommerheaders}{ommer headers} means nothing more than verifying that each ommer header is both a valid header and satisfies the relation of $N$th-generation ommer to the present block where $N \leq 6$. The maximum of ommer headers is two. Formally: -\begin{equation} -\lVert \hyperlink{B U}{B_\mathbf{U}} \rVert \leqslant 2 \bigwedge_{U \in \hyperlink{B U}{B_\mathbf{U}}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6) -\end{equation} - -where $k$ denotes the ``is-kin'' property: -\begin{equation} -k(U, H, n) \equiv \begin{cases} false & \text{if} \quad n = 0 \\ -s(U, H) &\\ -\quad \vee \; k(U, P(H)_H, n - 1) & \text{otherwise} -\end{cases} -\end{equation} - -and $s$ denotes the ``is-sibling'' property: -\begin{equation} -s(U, H) \equiv (P(H) = P(U)\; \wedge \; H \neq U \; \wedge \; U \notin B(H)_\mathbf{U}) -\end{equation} -where $B(H)$ is the block of the corresponding header $H$. - -\subsection{Transaction Validation} - -%where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_\mathbf{T}[i]$, and $g[i]$ the total gas used immediately after said transaction. - -The given \textbf{gasUsed} must correspond faithfully to the transactions listed: \hyperlink{H g}{${B_H}_\mathbf{g}$}, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction: -\begin{equation} -\hyperlink{H g}{{B_H}_\mathbf{g}} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathbf{u}} -\end{equation} - -\subsection{Reward Application} - -The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{block reward R b}{$R_\mathbf{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):} -\begin{eqnarray} -\Omega(B, \boldsymbol{\sigma}) & \equiv & \boldsymbol{\sigma}': \boldsymbol{\sigma}' = \boldsymbol{\sigma} \quad \text{except:} \\ -\boldsymbol{\sigma}'[\hyperlink{H c}{{B_H}_\mathbf{c}}]_\mathbf{b} & = & \boldsymbol{\sigma}[{B_H}_\mathbf{c}]_\mathbf{b} + (1 + \frac{\lVert \hyperlink{B U}{B_\mathbf{U}}\rVert}{32})\hyperlink{block reward R b}{R_\mathbf{b}} \\ -\forall_{U \in B_\mathbf{U}}: \\ \nonumber - \boldsymbol{\sigma}'[U_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[U_\mathbf{c}]_\mathbf{b} + (1 + \frac{1}{8} (U_\mathbf{i} - \hyperlink{H i}{{B_H}_\mathbf{i}})) \hyperlink{block reward R b}{R_\mathbf{b}} -\end{eqnarray} - -If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively.\hypertarget{block reward R b}{} - -We define the block reward as 5 Ether: -\begin{equation} -\text{Let} \quad R_\mathbf{b} = 5 \times 10^{18} -\end{equation} - -\subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} - -\hypertarget{Gamma}{ -We may now define the function, $\Gamma$, that maps a block $B$ to its initiation state: -\begin{equation} -\Gamma(B) \equiv \begin{cases} -\boldsymbol{\sigma}_0 & \text{if} \quad P(B_H) = \varnothing \\ -\boldsymbol{\sigma}_\mathbf{i}: \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\boldsymbol{\sigma}_\mathbf{i})) = {P(B_H)_H}_\mathbf{r} & \text{otherwise} -\end{cases} -\end{equation} -} -Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathbf{i}$; it is assumed that implementations will store this in the state database, which is trivial and efficient since the trie is by nature an immutable data structure. -\hypertarget{Phi}{ -And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$:} -\begin{eqnarray} -\Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\ -B'_\mathbf{n} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \\ -B'_\mathbf{m} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\ -B^* & \equiv & B \quad \text{except:} \quad {\hyperlink{Transaction Receipt}{B^*_\mathbf{r}}} = \hyperlink{r}{r}(\hyperlink{Pi}{\Pi}(\Gamma(B), B)) -\end{eqnarray} -With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}. - -As specified at the beginning of the present work, \hyperlink{Pi}{$\Pi$ is the state-transition function}, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined. - -\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_\mathbf{u}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_\mathbf{b}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction): -\begin{equation} -\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) & \text{otherwise} \end{cases} -\end{equation} - -In the case of \hyperlink{Transaction Receipt}{${B_\mathbf{R}}[n]_\mathbf{u}$}, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total: -\begin{equation} -\mathbf{R}[n]_\mathbf{u} = \begin{cases} 0 & \text{if} \quad n < 0 \\ -\begin{array}[b]{l} -\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])\\ \quad + \mathbf{R}[n-1]_\mathbf{u} -\end{array} - & \text{otherwise} \end{cases} -\end{equation} - -For $\mathbf{R}[n]_\mathbf{l}$, we utilise the \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} function that we conveniently defined in the transaction execution function. -\begin{equation} -\mathbf{R}[n]_\mathbf{l} = -\hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) -\end{equation} - -\hypertarget{Pi}{ -Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$: -\begin{equation} -\Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{R sigma}{\mathbf{R})_{\boldsymbol{\sigma}}}) -\end{equation}} - -Thus the complete block-transition mechanism is defined, except for $\mathtt{PoW}$, the proof-of-work function. - -\subsection{Mining Proof-of-Work} \label{ch:pow} - -The mining proof-of-work (PoW) exists as a cryptographically secure nonce that proves beyond reasonable doubt that a particular amount of computation has been expended in the determination of some token value $n$. It is utilised to enforce the blockchain security by giving meaning and credence to the notion of difficulty (and, by extension, total difficulty). However, since mining new blocks comes with an attached reward, the proof-of-work not only functions as a method of securing confidence that the blockchain will remain canonical into the future, but also as a wealth distribution mechanism. - -For both reasons, there are two important goals of the proof-of-work function; firstly, it should be as accessible as possible to as many people as possible. The requirement of, or reward from, specialised and uncommon hardware should be minimised. This makes the distribution model as open as possible, and, ideally, makes the act of mining a simple swap from electricity to Ether at roughly the same rate for anyone around the world. - -Secondly, it should not be possible to make super-linear profits, and especially not so with a high initial barrier. Such a mechanism allows a well-funded adversary to gain a troublesome amount of the network's total mining power and as such gives them a super-linear reward (thus skewing distribution in their favour) as well as reducing the network security. - -One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task (\cite{ASICSmithMJS}, \cite{ASICWiki}). In Bitcoin's case the task is the SHA256 hash function (\cite{ASICbitcoinwiki}). While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet. - -Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the \hyperlink{block nonce}{nonce} requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware'' for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum \textit{Frontier} and \textit{Homestead} we have chosen the first path. - -More formally, the proof-of-work function takes the form of $\mathtt{PoW}$: -\begin{equation} -m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \quad n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathbf{n}, \mathbf{d}) -\end{equation} - -Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathbf{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathbf{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being the \hyperlink{block nonce}{block nonce}, a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. -\subsubsection{Ethash} -Ethash is the PoW algorithm for Ethereum \textit{Frontier} and \textit{Homestead}. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms were drastically changed with R\&D from February 2015 until May 4 2015 (\cite{commitdateforEthash}). The general route that the algorithm takes is as follows: - -There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, \hyperlink{Jcacheinit}{$J_{\rm{cacheinit}}$} bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, \hyperlink{Jdatasetinit}{$J_{\rm{datasetinit}}$} bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. - -Mining involves grabbing random slices of the dataset and hashing them together. Verification can be done with low memory by using the cache to regenerate the specific pieces of the dataset that you need, so you only need to store the cache. The large dataset is updated once every \hyperlink{Jepoch}{$J_{\rm{epoch}}$} blocks, so the vast majority of a miner's effort will be reading the dataset, not making changes to it. The mentioned parameters as well as the algorithm is explained in detail in appendix \ref{app:ethash}. - -\section{Implementing Contracts} - -There are several patterns of contracts engineering that allow particular useful behaviours; two of these that I will briefly discuss are data feeds and random numbers. - -\subsection{Data Feeds} -A data feed contract is one which provides a single service: it gives access to information from the external world within Ethereum. The accuracy and timeliness of this information is not guaranteed and it is the task of a secondary contract author---the contract that utilises the data feed---to determine how much trust can be placed in any single data feed. - -The general pattern involves a single contract within Ethereum which, when given a message call, replies with some timely information concerning an external phenomenon. An example might be the local temperature of New York City. This would be implemented as a contract that returned that value of some known point in storage. Of course this point in storage must be maintained with the correct such temperature, and thus the second part of the pattern would be for an external server to run an Ethereum node, and immediately on discovery of a new block, creates a new valid transaction, sent to the contract, updating said value in storage. The contract's code would accept such updates only from the identity contained on said server. - -\subsection{Random Numbers} -Providing random numbers within a deterministic system is, naturally, an impossible task. However, we can approximate with pseudo-random numbers by utilising data which is generally unknowable at the time of transacting. Such data might include the block's hash, the block's timestamp and the block's beneficiary address. In order to make it hard for malicious miner to control those values, one should use the {\small BLOCKHASH} operation in order to use hashes of the previous 256 blocks as pseudo-random numbers. For a series of such numbers, a trivial solution would be to add some constant amount and hashing the result. - -\section{Future Directions} \label{ch:future} - -The state database won't be forced to maintain all past state \hyperlink{trie}{trie} structures into the future. It should maintain an age for each node and eventually discard nodes that are neither recent enough nor checkpoints; checkpoints, or a set of nodes in the database that allow a particular block's state trie to be traversed, could be used to place a maximum limit on the amount of computation needed in order to retrieve any state throughout the blockchain. - -Blockchain consolidation could be used in order to reduce the amount of blocks a client would need to download to act as a full, mining, node. A compressed archive of the trie structure at given points in time (perhaps one in every 10,000th block) could be maintained by the peer network, effectively recasting the \hyperlink{GenesisBlock}{genesis block}. This would reduce the amount to be downloaded to a single archive plus a hard maximum limit of blocks. - -Finally, blockchain compression could perhaps be conducted: nodes in state trie that haven't sent/received a transaction in some constant amount of blocks could be thrown out, reducing both Ether-leakage and the growth of the state database. - -\subsection{Scalability} - -Scalability remains an eternal concern. With a generalised state transition function, it becomes difficult to partition and parallelise transactions to apply the divide-and-conquer strategy. Unaddressed, the dynamic value-range of the system remains essentially fixed and as the average transaction value increases, the less valuable of them become ignored, being economically pointless to include in the main ledger. However, several strategies exist that may potentially be exploited to provide a considerably more scalable protocol. - -Some form of hierarchical structure, achieved by either consolidating smaller lighter-weight chains into the main block or building the main block through the incremental combination and adhesion (through proof-of-work) of smaller transaction sets may allow parallelisation of transaction combination and block-building. Parallelism could also come from a prioritised set of parallel blockchains, consolidating each block and with duplicate or invalid transactions thrown out accordingly. - -Finally, verifiable computation, if made generally available and efficient enough, may provide a route to allow the proof-of-work to be the verification of final state. - -\section{Conclusion} \label{ch:conclusion} - -I have introduced, discussed and formally defined the protocol of Ethereum. Through this protocol the reader may implement a node on the Ethereum network and join others in a decentralised secure social operating system. Contracts may be authored in order to algorithmically specify and autonomously enforce rules of interaction. - -\section{Acknowledgements} - -Many thanks to Aeron Buchanan for authoring the Homestead revisions, Christoph Jentzsch for authoring the Ethash algorithm and Yoichi Hirai for doing most of the EIP-150 changes. Important maintenance, useful corrections and suggestions were provided by a number of others from the Ethereum DEV organisation and Ethereum community at large including Gustav Simonsson, Pawe\l{} Bylica, Jutta Steiner, Nick Savers, Viktor Tr\'{o}n, Marko Simovic, Giacomo Tazzari and, of course, Vitalik Buterin. - -\section{Availability} - -The source of this paper is maintained at \url{https://github.com/ethereum/yellowpaper/}. An auto-generated PDF is located at \url{https://ethereum.github.io/yellowpaper/paper.pdf}. - -\bibliography{Biblio} -\bibliographystyle{plainnat} - -\end{multicols} - -\appendix - -\section{Terminology} \label{ch:Terminology} - -\begin{description} -\item[External Actor] A person or other entity able to interface to an Ethereum node, but external to the world of Ethereum. It can interact with Ethereum through depositing signed Transactions and inspecting the blockchain and associated state. Has one (or more) intrinsic Accounts. - -\item[Address] A 160-bit code used for identifying Accounts. - -\item[Account] Accounts have an intrinsic balance and transaction count maintained as part of the Ethereum state. They also have some (possibly empty) EVM Code and a (possibly empty) Storage State associated with them. Though homogenous, it makes sense to distinguish between two practical types of account: those with empty associated EVM Code (thus the account balance is controlled, if at all, by some external entity) and those with non-empty associated EVM Code (thus the account represents an Autonomous Object). Each Account has a single Address that identifies it. - -\item[Transaction] A piece of data, signed by an External Actor. It represents either a Message or a new Autonomous Object. Transactions are recorded into each block of the blockchain. - -\item[Autonomous Object] A notional object existent only within the hypothetical state of Ethereum. Has an intrinsic address and thus an associated account; the account will have non-empty associated EVM Code. Incorporated only as the Storage State of that account. - -\item[Storage State] The information particular to a given Account that is maintained between the times that the Account's associated EVM Code runs. - -\item[Message] Data (as a set of bytes) and Value (specified as Ether) that is passed between two Accounts, either through the deterministic operation of an Autonomous Object or the cryptographically secure signature of the Transaction. - -\item[Message Call] The act of passing a message from one Account to another. If the destination account is associated with non-empty EVM Code, then the VM will be started with the state of said Object and the Message acted upon. If the message sender is an Autonomous Object, then the Call passes any data returned from the VM operation. - -\item[Gas] The fundamental network cost unit. Paid for exclusively by Ether (as of PoC-4), which is converted freely to and from Gas as required. Gas does not exist outside of the internal Ethereum computation engine; its price is set by the Transaction and miners are free to ignore Transactions whose Gas price is too low. - -\item[Contract] Informal term used to mean both a piece of EVM Code that may be associated with an Account or an Autonomous Object. - -\item[Object] Synonym for Autonomous Object. - -\item[App] An end-user-visible application hosted in the Ethereum Browser. - -\item[Ethereum Browser] (aka Ethereum Reference Client) A cross-platform GUI of an interface similar to a simplified browser (a la Chrome) that is able to host sandboxed applications whose backend is purely on the Ethereum protocol. - -\item[Ethereum Virtual Machine] (aka EVM) The virtual machine that forms the key part of the execution model for an Account's associated EVM Code. - -\item[Ethereum Runtime Environment] (aka ERE) The environment which is provided to an Autonomous Object executing in the EVM. Includes the EVM but also the structure of the world state on which the EVM relies for certain I/O instructions including CALL \& CREATE. - -\item[EVM Code] The bytecode that the EVM can natively execute. Used to formally specify the meaning and ramifications of a message to an Account. - -\item[EVM Assembly] The human-readable form of EVM-code. - -\item[LLL] The Lisp-like Low-level Language, a human-writable language used for authoring simple contracts and general low-level language toolkit for trans-compiling to. - -\end{description} - -\hypertarget{rlp}{} -\section{Recursive Length Prefix}\label{app:rlp} -This is a serialisation method for encoding arbitrarily structured binary data (byte arrays). - -We define the set of possible structures $\mathbb{T}$: -\begin{eqnarray} -\mathbb{T} & \equiv & \mathbb{L} \cup \mathbb{B} \\ -\mathbb{L} & \equiv & \{ \mathbf{t}: \mathbf{t} = ( \mathbf{t}[0], \mathbf{t}[1], ... ) \; \wedge \; \forall_{n < \lVert \mathbf{t} \rVert} \; \mathbf{t}[n] \in \mathbb{T} \} \\ -\mathbb{B} & \equiv & \{ \mathbf{b}: \mathbf{b} = ( \mathbf{b}[0], \mathbf{b}[1], ... ) \; \wedge \; \forall_{n < \lVert \mathbf{b} \rVert} \; \mathbf{b}[n] \in \mathbb{O} \} -\end{eqnarray} - -Where $\mathbb{O}$ is the set of bytes. Thus $\mathbb{B}$ is the set of all sequences of bytes (otherwise known as byte-arrays, and a leaf if imagined as a tree), $\mathbb{L}$ is the set of all tree-like (sub-)structures that are not a single leaf (a branch node if imagined as a tree) and $\mathbb{T}$ is the set of all byte-arrays and such structural sequences. - -We define the RLP function as $\mathtt{\tiny RLP}$ through two sub-functions, the first handling the instance when the value is a byte array, the second when it is a sequence of further values: -\begin{equation} -\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_\mathbf{b}}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ \hyperlink{R l}{R_\mathbf{l}}(\mathbf{x}) & \text{otherwise} \end{cases} -\end{equation} - -If the value to be serialised is a byte-array, the RLP serialisation takes one of three forms: - -\begin{itemize} -\item If the byte-array contains solely a single byte and that single byte is less than 128, then the input is exactly equal to the output. -\item If the byte-array contains fewer than 56 bytes, then the output is equal to the input prefixed by the byte equal to the length of the byte array plus 128. -\item Otherwise, the output is equal to the input prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the input byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 183. -\end{itemize} -\hypertarget{R b}{ -Formally, we define $R_\mathbf{b}$:} -\begin{eqnarray} -R_\mathbf{b}(\mathbf{x}) & \equiv & \begin{cases} -\mathbf{x} & \text{if} \quad \lVert \mathbf{x} \rVert = 1 \wedge \mathbf{x}[0] < 128 \\ -(128 + \lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{else if} \quad \lVert \mathbf{x} \rVert < 56 \\ -\big(183 + \big\lVert \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{otherwise} -\end{cases} \\ -\mathtt{\tiny BE}(x) & \equiv & (b_0, b_1, ...): b_0 \neq 0 \wedge x = \sum_{n = 0}^{n < \lVert \mathbf{b} \rVert} b_n \cdot 256^{\lVert \mathbf{b} \rVert - 1 - n} \\ -(a) \cdot (b, c) \cdot (d, e) & = & (a, b, c, d, e) -\end{eqnarray} - -Thus $\mathtt{\tiny BE}$ is the function that expands a positive integer value to a big-endian byte array of minimal length and the dot operator performs sequence concatenation. - -If instead, the value to be serialised is a sequence of other items then the RLP serialisation takes one of two forms: - -\begin{itemize} -\item If the concatenated serialisations of each contained item is less than 56 bytes in length, then the output is equal to that concatenation prefixed by the byte equal to the length of this byte array plus 192. -\item Otherwise, the output is equal to the concatenated serialisations prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the concatenated serialisations byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 247. -\end{itemize} -\hypertarget{R l}{ -Thus we finish by formally defining $R_\mathbf{l}$: -\begin{eqnarray} -R_\mathbf{l}(\mathbf{x}) & \equiv & \begin{cases} -(192 + \lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{if} \quad \lVert s(\mathbf{x}) \rVert < 56 \\ -\big(247 + \big\lVert \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{otherwise} -\end{cases} \\ -s(\mathbf{x}) & \equiv & \mathtt{\tiny RLP}(\mathbf{x}_0) \cdot \mathtt{\tiny RLP}(\mathbf{x}_1) ... -\end{eqnarray} -} -If RLP is used to encode a scalar, defined only as a positive integer ($\mathbb{P}$ or any $x$ for $\mathbb{P}_x$), it must be specified as the shortest byte array such that the big-endian interpretation of it is equal. Thus the RLP of some positive integer $i$ is defined as: -\begin{equation} -\mathtt{\tiny RLP}(i : i \in \mathbb{P}) \equiv \mathtt{\tiny RLP}(\mathtt{\tiny BE}(i)) -\end{equation} - -When interpreting RLP data, if an expected fragment is decoded as a scalar and leading zeroes are found in the byte sequence, clients are required to consider it non-canonical and treat it in the same manner as otherwise invalid RLP data, dismissing it completely. - -There is no specific canonical encoding format for signed or floating-point values. - -\section{Hex-Prefix Encoding}\label{app:hexprefix} -Hex-prefix encoding is an efficient method of encoding an arbitrary number of nibbles as a byte array. It is able to store an additional flag which, when used in the context of the trie (the only context in which it is used), disambiguates between node types. - -It is defined as the function $\mathtt{\tiny HP}$ which maps from a sequence of nibbles (represented by the set $\mathbb{Y}$) together with a boolean value to a sequence of bytes (represented by the set $\mathbb{B}$): - -\begin{eqnarray} -\mathtt{\tiny HP}(\mathbf{x}, t): \mathbf{x} \in \mathbb{Y} & \equiv & \begin{cases} -(16f(t), 16\mathbf{x}[0] + \mathbf{x}[1], 16\mathbf{x}[2] + \mathbf{x}[3], ...) & -\text{if} \quad \lVert \mathbf{x} \rVert \; \text{is even} \\ -(16(f(t) + 1) + \mathbf{x}[0], 16\mathbf{x}[1] + \mathbf{x}[2], 16\mathbf{x}[3] + \mathbf{x}[4], ...) & -\text{otherwise} -\end{cases} \\ -f(t) & \equiv & \begin{cases} 2 & \text{if} \quad t \neq 0 \\ 0 & \text{otherwise} \end{cases} -\end{eqnarray} - -Thus the high nibble of the first byte contains two flags; the lowest bit encoding the oddness of the length and the second-lowest encoding the flag $t$. The low nibble of the first byte is zero in the case of an even number of nibbles and the first nibble in the case of an odd number. All remaining nibbles (now an even number) fit properly into the remaining bytes. - -\hypertarget{trie}{} -\section{Modified Merkle Patricia Tree}\label{app:trie} -The modified Merkle Patricia tree (trie) provides a persistent data structure to map between arbitrary-length binary data (byte arrays). It is defined in terms of a mutable data structure to map between 256-bit binary fragments and arbitrary-length binary data, typically implemented as a database. The core of the trie, and its sole requirement in terms of the protocol specification is to provide a single value that identifies a given set of key-value pairs, which may be either a 32 byte sequence or the empty byte sequence. It is left as an implementation consideration to store and maintain the structure of the trie in a manner that allows effective and efficient realisation of the protocol. - -Formally, we assume the input value $\mathfrak{I}$, a set containing pairs of byte sequences: -\begin{equation} -\mathfrak{I} = \{ (k_0 \in \mathbb{B}, v_0 \in \mathbb{B}), k_1 \in \mathbb{B}, v_1 \in \mathbb{B}), ... \} -\end{equation} - -When considering such a sequence, we use the common numeric subscript notation to refer to a tuple's key or value, thus: -\begin{equation} -\forall_{I \in \mathfrak{I}} I \equiv (I_0, I_1) -\end{equation} - -Any series of bytes may also trivially be viewed as a series of nibbles, given an endian-specific notation; here we assume big-endian. Thus: -\begin{eqnarray} -y(\mathfrak{I}) & = & \{ (k_0' \in \mathbb{Y}, v_0 \in \mathbb{B}), (k_1' \in \mathbb{Y}, v_1 \in \mathbb{B}), ... \} \\ -\forall_n \quad \forall_{i: i < 2\lVert\ k_n\rVert} \quad k_n'[i] & \equiv & -\begin{cases} -\lfloor k_n[i \div 2] \div 16 \rfloor & \text{if} \; i \; \text{is even} \\ -k_n[\lfloor i \div 2 \rfloor] \bmod 16 & \text{otherwise} -\end{cases} -\end{eqnarray} - -We define the function $\texttt{\small TRIE}$, which evaluates to the root of the trie that represents this set when encoded in this structure: -\begin{equation} -\texttt{\small TRIE}(\mathfrak{I}) \equiv \texttt{\small KEC}(c(\mathfrak{I}, 0)) -\end{equation} - -We also assume a function $n$, the trie's node cap function. When composing a node, we use RLP to encode the structure. As a means of reducing storage complexity, for nodes whose composed RLP is fewer than 32 bytes, we store the RLP directly; for those larger we assert prescience of the byte array whose Keccak hash evaluates to our reference. Thus we define in terms of $c$, the node composition function: -\begin{equation} -n(\mathfrak{I}, i) \equiv \begin{cases} -() & \text{if} \quad \mathfrak{I} = \varnothing \\ -c(\mathfrak{I}, i) & \text{if} \quad \lVert c(\mathfrak{I}, i)\rVert < 32 \\ -\texttt{\small KEC}(c(\mathfrak{I}, i)) & \text{otherwise} -\end{cases} -\end{equation} - -In a manner similar to a radix tree, when the trie is traversed from root to leaf, one may build a single key-value pair. The key is accumulated through the traversal, acquiring a single nibble from each branch node (just as with a radix tree). Unlike a radix tree, in the case of multiple keys sharing the same prefix or in the case of a single key having a unique suffix, two optimising nodes are provided. Thus while traversing, one may potentially acquire multiple nibbles from each of the other two node types, extension and leaf. There are three kinds of nodes in the trie: -\begin{description} -\item[Leaf] A two-item structure whose first item corresponds to the nibbles in the key not already accounted for by the accumulation of keys and branches traversed from the root. The hex-prefix encoding method is used and the second parameter to the function is required to be $true$. -\item[Extension] A two-item structure whose first item corresponds to a series of nibbles of size greater than one that are shared by at least two distinct keys past the accumulation of the keys of nibbles and the keys of branches as traversed from the root. The hex-prefix encoding method is used and the second parameter to the function is required to be $false$. -\item[Branch] A 17-item structure whose first sixteen items correspond to each of the sixteen possible nibble values for the keys at this point in their traversal. The 17th item is used in the case of this being a terminator node and thus a key being ended at this point in its traversal. -\end{description} - -A branch is then only used when necessary; no branch nodes may exist that contain only a single non-zero entry. We may formally define this structure with the structural composition function $c$: -\begin{equation} -c(\mathfrak{I}, i) \equiv \begin{cases} -\texttt{\small RLP}\Big( \big(\texttt{\small HP}(I_0[i .. (\lVert I_0\rVert - 1)], true), I_1 \big) \Big) & \text{if} \quad \lVert \mathfrak{I} \rVert = 1 \quad \text{where} \; \exists I: I \in \mathfrak{I} \\ -\texttt{\small RLP}\Big( \big(\texttt{\small HP}(I_0[i .. (j - 1)], false), n(\mathfrak{I}, j) \big) \Big) & \text{if} \quad i \ne j \quad \text{where} \; j = \arg \max_x : \exists \mathbf{l}: \lVert \mathbf{l} \rVert = x : \forall_{I \in \mathfrak{I}}: I_0[0 .. (x - 1)] = \mathbf{l} \\ -\texttt{\small RLP}\Big( (u(0), u(1), ..., u(15), v) \Big) & \text{otherwise} \quad \text{where} \begin{array}[t]{rcl} -u(j) & \equiv & n(\{ I : I \in \mathfrak{I} \wedge I_0[i] = j \}, i + 1) \\ -v & = & \begin{cases} -I_1 & \text{if} \quad \exists I: I \in \mathfrak{I} \wedge \lVert I_0 \rVert = i \\ -() & \text{otherwise} -\end{cases} -\end{array} -\end{cases} -\end{equation} - -\subsection{Trie Database} -Thus no explicit assumptions are made concerning what data is stored and what is not, since that is an implementation-specific consideration; we simply define the identity function mapping the key-value set $\mathfrak{I}$ to a 32-byte hash and assert that only a single such hash exists for any $\mathfrak{I}$, which though not strictly true is accurate within acceptable precision given the Keccak hash's collision resistance. In reality, a sensible implementation will not fully recompute the trie root hash for each set. - -A reasonable implementation will maintain a database of nodes determined from the computation of various tries or, more formally, it will memoise the function $c$. This strategy uses the nature of the trie to both easily recall the contents of any previous key-value set and to store multiple such sets in a very efficient manner. Due to the dependency relationship, Merkle-proofs may be constructed with an $O(\log N)$ space requirement that can demonstrate a particular leaf must exist within a trie of a given root hash. - -\section{Precompiled Contracts}\label{app:precompiled} - -For each precompiled contract, we make use of a template function, $\Xi_{\mathtt{PRE}}$, which implements the out-of-gas checking. -\begin{equation} -\Xi_{\mathtt{PRE}}(\boldsymbol{\sigma}, g, I) \equiv \begin{cases} -(\varnothing, 0, A^0, ()) & \text{if} \quad \mathbf{g} < \mathbf{g}_\mathbf{r} \\ -(\boldsymbol\sigma, \mathbf{g} - \mathbf{g}_\mathbf{r}, A^0, \mathbf{o}) & \text{otherwise}\end{cases} -\end{equation} - -The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $\mathbf{g}_\mathbf{r}$, the gas requirements. - -For the elliptic curve DSA recover VM execution function, we also define $\mathbf{d}$ to be the input data, well-defined for an infinite length by appending zeroes as required. Importantly in the case of an invalid signature ($\mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing$), then we have no output. -\begin{eqnarray} -\Xi_{\mathtt{ECREC}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -\mathbf{g}_\mathbf{r} &=& 3000\\ -|\mathbf{o}| &=& \begin{cases} 0 & \text{if} \quad \mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing\\ 32 & \text{otherwise} \end{cases}\\ -\text{if} \quad |\mathbf{o}| = 32: &&\\ -\mathbf{o}[0..11] &=& 0 \\ -\mathbf{o}[12..31] &=& \mathtt{\tiny KEC}\big(\mathtt{\tiny ECDSARECOVER}(h, v, r, s)\big)[12..31] \quad \text{where:}\\ -\mathbf{d}[0..(|I_\mathbf{d}|-1)] &=& I_\mathbf{d}\\ -\mathbf{d}[|I_\mathbf{d}|..] &=& (0, 0, ...) \\ -h &=& \mathbf{d}[0..31]\\ -v &=& \mathbf{d}[32..63]\\ -r &=& \mathbf{d}[64..95]\\ -s &=& \mathbf{d}[96..127] -\end{eqnarray} - -The two hash functions, RIPEMD-160 and SHA2-256 are more trivially defined as an almost pass-through operation. Their gas usage is dependent on the input data size, a factor rounded up to the nearest number of words. -\begin{eqnarray} -\Xi_{\mathtt{SHA256}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -\mathbf{g}_\mathbf{r} &=& 60 + 12\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ -\mathbf{o}[0..31] &=& \mathtt{\tiny SHA256}(I_\mathbf{d})\\ -\Xi_{\mathtt{RIP160}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -\mathbf{g}_\mathbf{r} &=& 600 + 120\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ -\mathbf{o}[0..11] &=& 0 \\ -\mathbf{o}[12..31] &=& \mathtt{\tiny RIPEMD160}(I_\mathbf{d})\\ -\end{eqnarray} - -For the purposes here, we assume we have well-defined standard cryptographic functions for RIPEMD-160 and SHA2-256 of the form: -\begin{eqnarray} -\mathtt{\small SHA256}(\mathbf{i} \in \mathbb{B}) & \equiv & o \in \mathbb{B}_{32} \\ -\mathtt{\small RIPEMD160}(\mathbf{i} \in \mathbb{B}) & \equiv & o \in \mathbb{B}_{20} -\end{eqnarray} - -Finally, the fourth contract, the identity function $\Xi_{\mathtt{ID}}$ simply defines the output as the input: -\begin{eqnarray} -\Xi_{\mathtt{ID}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ -\mathbf{g}_\mathbf{r} &=& 15 + 3\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ -\mathbf{o} &=& I_\mathbf{d} -\end{eqnarray} - - -\section{Signing Transactions}\label{app:signing} - -The method of signing transactions is similar to the `Electrum style signatures' as defined by \cite{npmElectrum2017}, heading "Managing styles with Radium" in the bullet point list. This method utilises the SECP-256k1 curve as described by \cite{secp256k1BitcoinWiki2016} and \cite{secp256k1StackExchange2014}, and is implemented similarly to as described by \cite{gura2004comparing} on p. 9 of 15, para. 3. - -It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}. - -We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \footnote{For the former citation, refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.} %(assuming that the former is for signature generation and the latter is for signature verification) -\begin{eqnarray} -\mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\ -\mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\ -\mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} -\end{eqnarray} - -Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range)\hypertarget{v}{. It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} - -\newcommand{\slimit}{\ensuremath{\text{s-limit}}} - -We declare that a signature is invalid unless all the following conditions are true: -\begin{align} -0 < r &< \mathtt{\tiny secp256k1n} \\ -0 < s &< \mathtt{\tiny secp256k1n} \div 2 + 1 \\ -\hyperlink{v}{v} &\in \{27,28\} -\end{align} -where: -\begin{align} -\mathtt{\tiny secp256k1n} &= 115792089237316195423570985008687907852837564279074904382605163141518161494337 -%\mathtt{\tiny secp256k1p} &= 2^{256} - 2^{32} - 977\\ -\end{align} - -For a given private key, $p_r$, the Ethereum address $A(p_r)$ (a 160-bit value) to which it corresponds is defined as the right most 160-bits of the Keccak hash of the corresponding ECDSA public key: -\begin{equation} -A(p_r) = \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSAPUBKEY}(p_r) \big) \big) -\end{equation} - -The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_\mathbf{r}$, $T_\mathbf{s}$ and $\hyperlink{T w}{T_\mathbf{w}}$: -\begin{eqnarray} -L_S(T) & \equiv & \begin{cases} -(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}) & \text{if} \; T_\mathbf{t} = 0\\ -(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}) & \text{otherwise} -\end{cases} \\ -h(T) & \equiv & \mathtt{\small KEC}( L_S(T) ) -\end{eqnarray} - -\hypertarget{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as: -\begin{eqnarray} -G(T, p_r) \equiv T \quad \text{except:} \\ -(\hyperlink{T w}{T_\mathbf{w}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r) -\end{eqnarray}} - -We may then define the sender function $S$ of the transaction as: -\begin{equation} -S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) \big) \big) -\end{equation} - -The assertion that the sender of a signed transaction equals the address of the signer should be self-evident: -\begin{equation} -\forall T: \forall p_r: S(G(T, p_r)) \equiv A(p_r) -\end{equation} - -\newpage -\section{Fee Schedule}\label{app:fees} - -The fee schedule $G$ is a tuple of 31 scalar values corresponding to the relative costs, in gas, of a number of abstract operations that a transaction may effect. - \begin{tabularx}{\textwidth}{lrX} \toprule -Name & Value & Description* \\ -\midrule -$G_{zero}$ & 0 & Nothing is paid for operations of the set {\small $W_{zero}$}. \\ -$G_{base}$ & 2 & This is the amount of gas to pay for operations of the set {\small $W_{base}$}. \\ -$G_{verylow}$ & 3 & This is the amount of gas to pay for operations of the set {\small $W_{verylow}$}. \\ -$G_{low}$ & 5 & This is the amount of gas to pay for operations of the set {\small $W_{low}$}. \\ -$G_{mid}$ & 8 & This is the amount of gas to pay for operations of the set {\small $W_{mid}$}. \\ -$G_{high}$ & 10 & This is the amount of gas to pay for operations of the set {\small $W_{high}$}. \\ -$G_{extcode}$ & 700 & This is the amount of gas to pay for operations of the set {\small $W_{extcode}$}. \\ -$G_{balance}$ & 400 & This is the amount of gas to pay for a {\small BALANCE} operation. \\ -$G_{sload}$ & 200 & This is paid for an {\small SLOAD} operation. \\ -$G_{jumpdest}$ & 1 & This is paid for a {\small JUMPDEST} operation. \\ -$G_{sset}$ & 20000 & This is paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\ -$G_{sreset}$ & 5000 & This is the amount for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\ -$R_{sclear}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \hypertarget{Rselfdestruct}{}\\ -$R_{selfdestruct}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \hypertarget{Gselfdestruct}{}\\ -$G_{selfdestruct}$ & 5000 & This is the amount of gas to pay for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation. \\ -$G_{create}$ & 32000 & This is paid for a {\small CREATE} operation. \\ -$G_{codedeposit}$ & 200 & This is paid per byte for a {\small CREATE} operation to succeed in placing code into the state. \\ -$G_{call}$ & 700 & This is paid for a {\small CALL} operation. \\ -$G_{callvalue}$ & 9000 & This is paid for a non-zero value transfer as part of the {\small CALL} operation. \\ -$G_{callstipend}$ & 2300 & This is a stipend for the called contract subtracted from $G_{callvalue}$ for a non-zero value transfer. \hypertarget{Gnewaccount}{}\\ -$G_{newaccount}$ & 25000 & This is paid for a {\small CALL} or for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation which creates an account. \\ -$G_{exp}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ -$G_{expbyte}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ -$G_{memory}$ & 3 & This is paid for every additional word when expanding memory. \\ -$G_\text{txcreate}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.\\ -$G_{txdatazero}$ & 4 & This is paid for every zero byte of data or code for a transaction. \\ -$G_{txdatanonzero}$ & 68 & This is paid for every non-zero byte of data or code for a transaction. \\ -$G_{transaction}$ & 21000 & This is paid for every transaction. \\ -$G_{log}$ & 375 & This is a partial payment for a {\small LOG} operation. \\ -$G_{logdata}$ & 8 & This is paid for each byte in a {\small LOG} operation's data. \\ -$G_{logtopic}$ & 375 & This is paid for each topic of a {\small LOG} operation. \\ -$G_{sha3}$ & 30 & This is paid for each {\small SHA3} operation. \\ -$G_{sha3word}$ & 6 & This is paid for each word (rounded up) for input data to a {\small SHA3} operation. \\ -$G_{copy}$ & 3 & This is a partial payment for {\small *COPY} operations, multiplied by the number of words copied, rounded up. \\ -$G_{blockhash}$ & 20 & This is a payment for a {\small BLOCKHASH} operation. \\ - -%extern u256 const \mathbf{c}_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. -\bottomrule -\end{tabularx} - -\section{Virtual Machine Specification}\label{app:vm} - -When interpreting 256-bit binary values as integers, the representation is big-endian. - -When a 256-bit machine datum is converted to and from a 160-bit address or hash, the rightwards (low-order for BE) 20 bytes are used and the left most 12 are discarded or filled with zeroes, thus the integer values (when the bytes are interpreted as big-endian) are equivalent. - -\subsection{Gas Cost} - -The general gas cost function, $C$, is defined as: - -\begin{equation} -C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_\mathbf{i})-C_{mem}(\boldsymbol{\mu}_\mathbf{i}) + \begin{cases} -C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SSTORE} \\ -G_{exp} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] = 0 \\ -G_{exp} + G_{expbyte}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathbf{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] > 0 \\ -G_{verylow} + G_{copy}\times\lceil\boldsymbol{\mu}_\mathbf{s}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\ -G_{extcode} + G_{copy}\times\lceil\boldsymbol{\mu}_\mathbf{s}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1] & \text{if} \quad w = \text{\small LOG0} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+G_{logtopic} & \text{if} \quad w = \text{\small LOG1} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+2G_{logtopic} & \text{if} \quad w = \text{\small LOG2} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+3G_{logtopic} & \text{if} \quad w = \text{\small LOG3} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+4G_{logtopic} & \text{if} \quad w = \text{\small LOG4} \\ -C_\text{\tiny CALL}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small CALL} \lor \text{\small CALLCODE} \lor \text{\small DELEGATECALL} \\ -\hyperlink{C tiny SELFDESTRUCT}{C_\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ -G_{create} & \text{if} \quad w = \text{\small CREATE}\\ -G_{sha3}+G_{sha3word} \lceil \mathbf{s}[1] \div 32 \rceil & \text{if} \quad w = \text{\small SHA3}\\ -G_{jumpdest} & \text{if} \quad w = \text{\small JUMPDEST}\\ -G_{sload} & \text{if} \quad w = \text{\small SLOAD}\\ -G_{zero} & \text{if} \quad w \in W_{zero}\\ -G_{base} & \text{if} \quad w \in W_{base}\\ -G_{verylow} & \text{if} \quad w \in W_{verylow}\\ -G_{low} & \text{if} \quad w \in W_{low}\\ -G_{mid} & \text{if} \quad w \in W_{mid}\\ -G_{high} & \text{if} \quad w \in W_{high}\\ -G_{extcode} & \text{if} \quad w \in W_{extcode}\\ -G_{balance} & \text{if} \quad w = \text{\small BALANCE}\\ -G_{blockhash} & \text{if} \quad w = \text{\small BLOCKHASH}\\ -\end{cases} -\end{equation} -\begin{equation} -w \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathbf{b} \rVert\\ -\text{\small STOP} & \text{otherwise} -\end{cases} -\end{equation} - -where: -\begin{equation} -C_{mem}(a) \equiv G_{memory} \cdot a + \Big\lfloor \dfrac{a^2}{512} \Big\rfloor -\end{equation} - -with \hyperlink{tiny CALL}{$C_\text{\tiny CALL}$}, \hyperlink{C tiny SELFDESTRUCT}{$C_\text{\tiny SELFDESTRUCT}$} and \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$} as specified in the appropriate section below. We define the following subsets of instructions: - -$W_{zero}$ = \{{\small STOP}, {\small RETURN}\} - -$W_{base}$ = \{{\small ADDRESS}, {\small ORIGIN}, {\small CALLER}, {\small CALLVALUE}, {\small CALLDATASIZE}, {\small CODESIZE}, {\small GASPRICE}, {\small COINBASE},\newline \noindent\hspace*{1cm} {\small TIMESTAMP}, {\small NUMBER}, {\small DIFFICULTY}, {\small GASLIMIT}, {\small POP}, {\small PC}, {\small MSIZE}, {\small GAS}\} - -$W_{verylow}$ = \{{\small ADD}, {\small SUB}, {\small NOT}, {\small LT}, {\small GT}, {\small SLT}, {\small SGT}, {\small EQ}, {\small ISZERO}, {\small AND}, {\small OR}, {\small XOR}, {\small BYTE}, {\small CALLDATALOAD}, \newline \noindent\hspace*{1cm} {\small MLOAD}, {\small MSTORE}, {\small MSTORE8}, {\small PUSH*}, {\small DUP*}, {\small SWAP*}\} - -$W_{low}$ = \{{\small MUL}, {\small DIV}, {\small SDIV}, {\small MOD}, {\small SMOD}, {\small SIGNEXTEND}\} - -$W_{mid}$ = \{{\small ADDMOD}, {\small MULMOD}, {\small JUMP}\} - -$W_{high}$ = \{{\small JUMPI}\} - -$W_{extcode}$ = \{{\small EXTCODESIZE}\} - -Note the memory cost component, given as the product of $G_{memory}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathbf{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes. - -Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_\mathbf{i}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal. - -Note also that $C_{mem}$ is the memory cost function (the expansion function being the difference between the cost before and after). It is a polynomial, with the higher-order coefficient divided and floored, and thus linear up to 724B of memory used, after which it costs substantially more. - -While defining the instruction set, we defined the memory-expansion for range function, $M$, thus: - -\begin{equation} -M(s, f, l) \equiv \begin{cases} -s & \text{if} \quad l = 0 \\ -\max(s, \ceil{ (f + l) \div 32 }) & \text{otherwise} -\end{cases} -\end{equation} - -Another useful function is ``all but one 64th'' function~$L$ defined as: - -\begin{equation} -L(n) \equiv n - \lfloor n / 64 \rfloor -\end{equation} - -\subsection{Instruction Set} - -As previously specified in section \ref{ch:model}, these definitions take place in the final context there. In particular we assume $O$ is the EVM state-progression function and define the terms pertaining to the next cycle's state $(\boldsymbol{\sigma}', \boldsymbol{\mu}')$ such that: -\begin{equation} -O(\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \equiv (\boldsymbol{\sigma}', \boldsymbol{\mu}', A', I) \quad \text{with exceptions, as noted} -\end{equation} - -Here given are the various exceptions to the state transition rules given in section \ref{ch:model} specified for each instruction, together with the additional instruction-specific definitions of $J$ and $C$. For each instruction, also specified is $\alpha$, the additional items placed on the stack and $\delta$, the items removed from the stack, as defined in section \ref{ch:model}. - -%\begin{tabular*}{\columnwidth}[h]{rlrrl} -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{0s: Stop and Arithmetic Operations}} \\ -\multicolumn{5}{l}{All arithmetic is modulo $2^{256}$ unless otherwise noted. The zero-th power of zero $0^0$ is defined to be one.} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x00 & {\small STOP} & 0 & 0 & This operation halts execution, outputting the empty sequence as per equation \ref{eq:Normal Halting}. -\\ -\midrule -0x01 & {\small ADD} & 2 & 1 & This is the addition operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]$ \\ -\midrule -0x02 & {\small MUL} & 2 & 1 & This is the multiplication operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]$ \\ -\midrule -0x03 & {\small SUB} & 2 & 1 & This is the subtraction operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] - \boldsymbol{\mu}_\mathbf{s}[1]$ \\ -\midrule -0x04 & {\small DIV} & 2 & 1 & This is the integer division operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \lfloor\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]\rfloor & \text{otherwise}\end{cases}$ \\ -\midrule -0x05 & {\small SDIV} & 2 & 1 & This is the signed integer division operation (truncated). \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ -2^{255} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = -2^{255} \wedge \quad \boldsymbol{\mu}_\mathbf{s}[1] = -1\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]) \lfloor |\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]| \rfloor & \text{otherwise}\end{cases}$ \\ -&&&& Where all values are treated as two's complement signed 256-bit integers. \\ -&&&& Note the overflow semantic when $-2^{255}$ is negated.\\ -\midrule -0x06 & {\small MOD} & 2 & 1 & This is the modulo remainder operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \boldsymbol{\mu}_\mathbf{s}[0] \bmod \boldsymbol{\mu}_\mathbf{s}[1] & \text{otherwise}\end{cases}$ \\ -\midrule -0x07 & {\small SMOD} & 2 & 1 & This is the signed modulo remainder operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0]) (|\boldsymbol{\mu}_\mathbf{s}[0]| \bmod |\boldsymbol{\mu}_\mathbf{s}[1]|) & \text{otherwise}\end{cases}$ \\ -&&&& Where all values are treated as two's complement signed 256-bit integers. \\ -\midrule -0x08 & {\small ADDMOD} & 3 & 1 & This is the modulo addition operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$ \\ -&&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\ -\midrule -0x09 & {\small MULMOD} & 3 & 1 & This is the modulo multiplication operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$ \\ -&&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\ -\midrule -0x0a & {\small EXP} & 2 & 1 & This is the exponential operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] ^ {\boldsymbol{\mu}_\mathbf{s}[1] }$ \\ -\midrule -0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\ -&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{t} &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathbf{s}[0] + 1) \\ \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i} &\text{otherwise} \end{cases}$ \\ -\multicolumn{5}{l}{$\boldsymbol{\mu}_\mathbf{s}[x]_\mathbf{i}$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathbf{s}[x]$} \vspace{5pt} \\ -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{10s: Comparison \& Bitwise Logic Operations}} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x10 & {\small LT} & 2 & 1 & This is the less-than comparison. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ -\midrule -0x11 & {\small GT} & 2 & 1 & This is the greater-than comparison. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ -\midrule -0x12 & {\small SLT} & 2 & 1 & This is the signed less-than comparison. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ -&&&& Where all values are treated as two's complement signed 256-bit integers. \\ -\midrule -0x13 & {\small SGT} & 2 & 1 & This is the signed greater-than comparison. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ -&&&& Where all values are treated as two's complement signed 256-bit integers. \\ -\midrule -0x14 & {\small EQ} & 2 & 1 & This is the equality comparison. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ -\midrule -0x15 & {\small ISZERO} & 1 & 1 & This is the logical negation operation, also called the logical complement or the NOT operation. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ -\midrule -0x16 & {\small AND} & 2 & 1 & This is the bitwise AND operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \wedge \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ -\midrule -0x17 & {\small OR} & 2 & 1 & This is the bitwise OR operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \vee \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ -\midrule -0x18 & {\small XOR} & 2 & 1 & This is the bitwise XOR operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \oplus \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ -\midrule -0x19 & {\small NOT} & 1 & 1 & This is the bitwise NOT operation. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ -\midrule -0x1a & {\small BYTE} & 2 & 1 & Retrieve a single byte from a word. \\ -&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_{(i + 8\boldsymbol{\mu}_\mathbf{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathbf{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\ -&&&& For the Nth byte, we count from the left (i.e. $N=0$ would be the most significant in big endian). \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{20s: SHA3}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x20 & {\small SHA3} & 2 & 1 & Compute a Keccak-256 hash. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{30s: Environmental Information}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x30 & {\small ADDRESS} & 0 & 1 & Get the address of the currently executing account. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{a}$ \\ -\midrule -0x31 & {\small BALANCE} & 1 & 1 & Get the balance of the given account. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0]]_\mathbf{b}& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\ -\midrule -0x32 & {\small ORIGIN} & 0 & 1 & Get the address that the execution originated from. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{o}$ \\ -&&&& This is the sender of the original transaction; it is never an account with non-empty associated code. \\ -\midrule -0x33 & {\small CALLER} & 0 & 1 & Get the caller address. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{s}$ \\ -&&&& This is the address of the account that is directly responsible for this execution. \\ -\midrule -0x34 & {\small CALLVALUE} & 0 & 1 & Get the deposited value by the instruction/transaction responsible for this execution. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \hyperlink{I v}{I_\mathbf{v}}$ \\ -\midrule -0x35 & {\small CALLDATALOAD} & 1 & 1 & Get the input data of the current environment. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{d}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \quad \text{with} \quad I_\mathbf{d}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_\mathbf{d} \rVert$ \\ -&&&& This pertains to the input data passed with the message call instruction or transaction. \\ -\midrule -0x36 & {\small CALLDATASIZE} & 0 & 1 & Get the size of the input data in the current environment. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{d} \rVert$ \\ -&&&& This pertains to the input data passed with the message call instruction or transaction. \\ -\midrule -0x37 & {\small CALLDATACOPY} & 3 & 0 & Copy the input data in the current environment to memory. \\ -&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv -\begin{cases} I_\mathbf{d}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{d} \rVert \\ 0 & \text{otherwise} \end{cases}$\\ -&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ -&&&& This pertains to the input data passed with the message call instruction or transaction. \\ -\midrule -0x38 & {\small CODESIZE} & 0 & 1 & Get the size of code running in the current environment. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{b} \rVert$ \\ -\midrule -0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in the current environment to memory. \\ -&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv -\begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{b} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ -&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ -\midrule -0x3a & {\small GASPRICE} & 0 & 1 & Get the price of gas in the current environment. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{p}$ \\ -&&&& This is the gas price specified by the originating transaction.\\ -\midrule -0x3b & {\small EXTCODESIZE} & 1 & 1 & Get the size of an account's code. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c} \rVert$ \\ -\midrule -0x3c & {\small EXTCODECOPY} & 4 & 0 & Copy an account's code to memory. \\ -&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[3] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[1] + i ] \equiv -\begin{cases} \mathbf{c}[\boldsymbol{\mu}_\mathbf{s}[2] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\ -&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c}$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[3])$ \\ -&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[2] + i$ are not subject to the $2^{256}$ modulo. \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{40s: Block Information}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x40 & {\small BLOCKHASH} & 1 & 1 & Get the hash of one of the 256 most recent complete blocks. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv P(I_{\hyperlink{H p}{H_\mathbf{p}}}, \boldsymbol{\mu}_\mathbf{s}[0], 0)$ \\ -&&&& where $P$ is the hash of a block of a particular number, up to a maximum age. 0 is left on the stack if the looked for block number is greater than the current block number or more than 256 blocks behind the current block. \\ -&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > \hyperlink{H i}{H_\mathbf{i}} \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = \hyperlink{H i}{H_\mathbf{i}} \\ P(\hyperlink{H p}{H_\mathbf{p}}, n, a + 1) & \text{otherwise} \end{cases}$ \\ -&&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash in the block following it. \\ -\midrule -0x41 & {\small COINBASE} & 0 & 1 & Get the block's beneficiary address. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{c}$ \\ -\midrule -0x42 & {\small TIMESTAMP} & 0 & 1 & Get the block's timestamp. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{s}$ \\ -\midrule -0x43 & {\small NUMBER} & 0 & 1 & Get the block's number. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{i}$ \\ -\midrule -0x44 & {\small DIFFICULTY} & 0 & 1 & Get the block's difficulty. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{d}$ \\ -\midrule -0x45 & {\small GASLIMIT} & 0 & 1 & Get the block's gas limit. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{l}$ \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{50s: Stack, Memory, Storage and Flow Operations}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x50 & {\small POP} & 1 & 0 & Remove the top, first item from the stack. \\ -\midrule -0x51 & {\small MLOAD} & 1 & 1 & Load the first word from memory. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ]$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ -&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ -\midrule -0x52 & {\small MSTORE} & 2 & 0 & Save the first word (which is the first item in the stack) to memory. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ -&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ -\midrule -0x53 & {\small MSTORE8} & 2 & 0 & Save the first byte to memory. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv (\boldsymbol{\mu}_\mathbf{s}[1] \bmod 256) $ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 1) \div 32 })$ \\ -&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ -\midrule -0x54 & {\small SLOAD} & 1 & 1 & Load the first word from storage. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \\ -\midrule -0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\ -&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{}\\ -&&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -G_{sset} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ -G_{sreset} & \text{otherwise} -\end{cases}$ \\ -&&&& $A'_{r} \equiv A_{r} + \begin{cases} -R_{sclear} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\ -0 & \text{otherwise} -\end{cases}$ \\ -\midrule -0x56 & {\small JUMP} & 1 & 0 & Alter the program counter. \\ -&&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{s}[0] $ \\ -&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See equation \hyperlink{JUMP}{\ref{eq:JUMP}}. \\ -\midrule -0x57 & {\small JUMPI} & 2 & 0 & Conditionally alter the program counter. \\ -&&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[0] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \\ \boldsymbol{\mu}_{pc} + 1 & \text{otherwise} \end{cases} $ \\ -&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \hyperlink{JUMPI}{\ref{eq:JUMP}}. \\ -\midrule -0x58 & {\small PC} & 0 & 1 & Get the value of the program counter \textit{prior} to the increment corresponding to this instruction. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{pc}$ \\ -\midrule -0x59 & {\small MSIZE} & 0 & 1 & Get the size of active memory in bytes. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv 32\boldsymbol{\mu}_{i}$ \\ -\midrule -0x5a & {\small GAS} & 0 & 1 & Get the amount of available gas, including the corresponding reduction for the cost of this instruction. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{g}$ \\ -\midrule -0x5b & {\small JUMPDEST} & 0 & 0 & Mark a valid destination for jumps. \\ -&&&& This operation has no effect on the machine state during execution. \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{60s \& 70s: Push Operations}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x60 & {\small PUSH1} & 0 & 1 & Place a 1 byte item on the stack. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv c(\boldsymbol{\mu}_{pc} + 1)$ \\ -&&&& $\text{where} \quad c(x) \equiv \begin{cases} I_\mathbf{b}[x] & \text{if} \quad x < \lVert I_\mathbf{b} \rVert \\ 0 & \text{otherwise} \end{cases}$ \\ -&&&& The bytes are read in line from the program code's bytes array. \\ -&&&& The function $c$ ensures the bytes default to zero if they extend past the limits.\\ -&&&& The byte is right-aligned (\ie it takes the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ -\midrule -0x61 & {\small PUSH2} & 0 & 1 & Place a 2-byte item on the stack. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big( (\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 2) \big)$ \\ -&&&& with $\boldsymbol{c}(\boldsymbol{x}) \equiv (c(\boldsymbol{x}_0), ..., c(\boldsymbol{x}_{\lVert x \rVert -1})) $ with $c$ as defined as above. \\ -&&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ -\midrule -\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ -\midrule -0x7f & {\small PUSH32} & 0 & 1 & Place 32-byte (full word) item on stack. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big((\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 32) \big)$ \\ -&&&& where $\boldsymbol{c}$ is defined as above. \\ -&&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{80s: Duplication Operations}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x80 & {\small DUP1} & 1 & 2 & Duplicate the 1st stack item. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ -\midrule -0x81 & {\small DUP2} & 2 & 3 & Duplicate the 2nd stack item. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ -\midrule -\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ -\midrule -0x8f & {\small DUP16} & 16 & 17 & Duplicate the 16th stack item. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[15]$ \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{90s: Exchange Operations}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0x90 & {\small SWAP1} & 2 & 2 & Exchange the 1st and the 2nd stack items. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[1] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ -\midrule -0x91 & {\small SWAP2} & 3 & 3 & Exchange the 1st and the 3rd stack items. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[2]$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[2] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ -\midrule -\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ -\midrule -0x9f & {\small SWAP16} & 17 & 17 & Exchange the 1st and the 17th stack items. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[16]$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[16] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{a0s: Logging Operations}} \vspace{5pt} \\ -\multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\\ -\multicolumn{5}{l}{$A'_\mathbf{l} \equiv A_\mathbf{l} \cdot (I_\mathbf{a}, \mathbf{t}, \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$}\\ -\multicolumn{5}{l}{and to update the memory consumption counter:}\\ -\multicolumn{5}{l}{$\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$}\\ -\multicolumn{5}{l}{The entry's topic series, $\mathbf{t}$, differs accordingly:}\vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0xa0 & {\small LOG0} & 2 & 0 & Append the log record with no topics. \\ -&&&& $\mathbf{t} \equiv ()$ \\ -\midrule -0xa1 & {\small LOG1} & 3 & 0 & Append the log record with one topic. \\ -&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2])$ \\ -\midrule -\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ -\midrule -0xa4 & {\small LOG4} & 6 & 0 & Append the log record with four topics. \\ -&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4], \boldsymbol{\mu}_\mathbf{s}[5])$ \\ -\bottomrule -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\toprule -\multicolumn{5}{c}{\textbf{f0s: System operations}} \vspace{5pt} \\ -\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ -0xf0 & {\small CREATE} & 3 & 1 & Create a new account with associated code. \\ -&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[1] \dots (\boldsymbol{\mu}_\mathbf{s}[1] + \boldsymbol{\mu}_\mathbf{s}[2] - 1) ]$ \\ -&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_\mathbf{g}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, L(\boldsymbol{\mu}_\mathbf{g}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[0], \mathbf{i}, I_\mathbf{e} + 1) & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_\mathbf{g}, \varnothing\big) & \text{otherwise} \end{cases}$ \\ -&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_\mathbf{a}]_\mathbf{n} = \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n} + 1$ \\ -&&&& $A' \equiv A \Cup A^+$ which implies: $A'_\mathbf{s} \equiv A_\mathbf{s} \cup A^+_\mathbf{s} \quad \wedge \quad A'_\mathbf{l} \equiv A_\mathbf{l} \cdot A^+_\mathbf{l} \quad \wedge \quad A'_\mathbf{r} \equiv A_\mathbf{r} + A^+_\mathbf{r}$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ -&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\ -&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_\mathbf{e} = 1024$ \\ -&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_\mathbf{a}, \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n})$, the address of the \\ -&&&& newly created account. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ -&&&& Thus the operand order is: value, input offset, input size. \\ -\midrule -0xf1 & {\small CALL} & 7 & 1 & Message-call into an account. \\ -&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[3] \dots (\boldsymbol{\mu}_\mathbf{s}[3] + \boldsymbol{\mu}_\mathbf{s}[4] - 1) ]$ \\ -&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_\mathbf{a}, I_\mathbf{o}, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge \\ \quad\quad I_\mathbf{e} < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ -&&&& $n \equiv \min(\{ \boldsymbol{\mu}_\mathbf{s}[6], |\mathbf{o}|\})$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[5] \dots (\boldsymbol{\mu}_\mathbf{s}[5] + n - 1) ] = \mathbf{o}[0 \dots (n - 1)]$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{g} \equiv \boldsymbol{\mu}_\mathbf{g} + g'$ \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ -&&&& $A' \equiv A \Cup A^+$ \\ -&&&& $t \equiv \boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}$ \\ -&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting \\ -&&&& $Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) = \top$ or if \\ -&&&& $\boldsymbol{\mu}_\mathbf{s}[2] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (not enough funds) or $I_\mathbf{e} = 1024$ (call depth limit reached); $x=1$ \\ -&&&& otherwise. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4]), \boldsymbol{\mu}_\mathbf{s}[5], \boldsymbol{\mu}_\mathbf{s}[6])$ \\ -&&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \hypertarget{tiny CALL}{}\\ -&&&& $C_{\text{\tiny CALL}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$ \\ -&&&& $C_{\text{\tiny CALLGAS}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{callstipend} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ -C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{otherwise} -\end{cases}$ \\ -&&&& $C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -\min\{ L(\boldsymbol{\mu}_\mathbf{g} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_\mathbf{s}[0] \} & \text{if} \quad \boldsymbol{\mu}_\mathbf{g} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\ -\boldsymbol{\mu}_\mathbf{s}[0] & \text{otherwise} -\end{cases}$\\ -&&&& $C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{call} + C_{\text{\tiny XFER}}(\boldsymbol{\mu}) + C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$\\ -&&&& $C_{\text{\tiny XFER}}(\boldsymbol{\mu}) \equiv \begin{cases} -G_{callvalue} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ -0 & \text{otherwise} -\end{cases}$ \\ -&&&& $C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -G_{newaccount} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}] = \varnothing \\ -0 & \text{otherwise} -\end{cases}$ \\ -\midrule -0xf2 & {\small CALLCODE} & 7 & 1 & Message-call into this account with an alternative account's code. \\ -&&&& Exactly equivalent to {\small CALL} except: \\ -&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\\ \quad\quad{}I_\mathbf{e} < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ -&&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_\mathbf{s}[1]$\\ -&&&& (as in {\small CALL}) to the present address $I_\mathbf{a}$. This means that the recipient is in fact the\\ -&&&& same account as at present, simply that the code is overwritten.\hypertarget{RETURN}{}\\ -\midrule -0xf3 & {\small RETURN} & 2 & 0 & Halt execution returning output data. \\ -&&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots ( \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1 ) ]$ \\ -&&&& This has the effect of halting the execution at this point with output defined.\\ -&&&& See equation \ref{eq:Normal Halting}. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ -\end{tabularx} - -\begin{tabularx}{\textwidth}{rlrrX} -\midrule -0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ -&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ -&&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ -\midrule -0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{SELFDESTRUCT}{}\\ -\midrule -0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. \\ -&&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_\mathbf{a} \}$ \\ -&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} + \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ \\ -&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{b} \equiv 0$ \\ -&&&& $A'_{r} \equiv A_{r} + \begin{cases} -\hyperlink{Rselfdestruct}{R_{selfdestruct}} & \text{if} \quad I_\mathbf{a} \notin A_\mathbf{s} \\ -0 & \text{otherwise} -\end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\ -&&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{selfdestruct}} + \begin{cases} -\hyperlink{Gnewaccount}{G_{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] = \varnothing \\ -0 & \text{otherwise} -\end{cases}$ \\ -\bottomrule -\end{tabularx} - -%\section{Low-level Lisp-like Language}\label{app:lll} -%The Low-level Lisp-like Language is a language created in order to efficiently author low-level programs (contracts) without having to resort to EVM-Assembly. - -\hypertarget{GenesisBlock}{} -\section{Genesis Block}\label{app:genesis} - -The genesis block is 15 items, and is specified thus: -\begin{equation} -\big( \big( 0_{256}, \mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big), 0_{160}, stateRoot, 0, 0, 0_{2048}, 2^{17}, 0, 0, 3141592, time, 0, 0_{256}, \mathtt{\tiny KEC}\big( (42) \big) \big), (), () \big) -\end{equation} - -Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the \hyperlink{H c}{beneficiary address}, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the \hyperlink{H b}{log bloom}, a 2048-bit sequence of all zeros; $2^{17}$ refers to the \hyperlink{H d}{difficulty}; the \hyperlink{H t}{transaction trie root}, \hyperlink{H e}{receipt trie root}, \hyperlink{H g}{gas used}, \hyperlink{H i}{block number} and \hyperlink{H x}{extradata} are all $0$ (listed in the order of decimal zeros in the above sequence), being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the \hyperlink{block nonce}{nonce}. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in \hyperlink{rlp}{RLP}, both empty lists. - -The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values. - -\section{Ethash}\label{app:ethash} -\subsection{Definitions} -We employ the following definitions: - -\begin{tabularx}{\textwidth}{lrX} -%\begin{tabu}{X[,l]X[,r]X[,l]} - -\toprule -Name & Value & Description\hypertarget{Jwordbytes}{}\\ +Foo \\ \midrule -$J_{\rm{wordbytes}}$ & 4 & This is the bytes in a word.\hypertarget{Jdatasetinit}{\\ -$J_{\rm{datasetinit}$ & $2^{30}$ & This is the bytes in the dataset at genesis.}\hypertarget{Jdatasetgrowth}{\\ -$J_{\rm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch.}\hypertarget{Jcacheinit}{\\ -$J_{\rm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.}\hypertarget{Jcachegrowth}{\\ -$J_{\rm{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch.}\hypertarget{Jepoch}{\\ -$J_{\rm{epoch}}$ & 30000 & This is the blocks per epoch.}\hypertarget{Jmixbytes}{\\ -$J_{\rm{mixbytes}}$ & 128 & This is the mix length in bytes.}\hypertarget{Jhashbytes}{\\ -$J_{\rm{hashbytes}}$ & 64 & This is the hash length in bytes.}\hypertarget{Jparents}{\\ -$J_{\rm{parents}}$ & 256 & This is the number of parents of each dataset element.}\hypertarget{Jcacherounds}{\\ -$J_{\rm{cacherounds}}$ & 3 & This is the number of rounds in cache production.}\hypertarget{Jaccesses}{\\ -$J_{\rm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.}\\ -\bottomrule -%\end{tabu} -\end{tabularx} - -\subsection{Size of dataset and cache} -The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. -\begin{equation} -E_{\rm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{\rm{epoch}}}}\right\rfloor -\end{equation} -The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\rm{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\rm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\rm{hashbytes}}$} for the cache.\hypertarget{dsize}{ -Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:} -\begin{equation} - d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{\rm{datasetinit}}}} + \hyperlink{Jdatasetgrowth}{J_{\rm{datasetgrowth}} \cdot E_{\rm{epoch}} - \hyperlink{Jmixbytes}{J_\{rm{mixbytes}}}, J_{\rm{mixbytes}}) -\end{equation} -The size of the cache, $c_{size}$, is calculated using -\begin{equation} - c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{\rm{cacheinit}}} + \hyperlink{\rm{cachegrowth}}{J_{\rm{cachegrowth}}} \cdot E_{\rm{epoch}} - \hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}, J_{\rm{hashbytes}}) -\end{equation} -\begin{equation} - E_{prime}(x, y) = \begin{cases} -x & \text{if} \quad x / y \in \mathbb{P} \\ -E_{prime}((x - 1) \cdot y, y) & \text{otherwise} -\end{cases} -\end{equation} -\subsection{Dataset generation} -In order the generate the dataset we need the cache $c$, which is an array of bytes. It depends on the cache size $c_{size}$ and the seed hash $s \in \mathbb{B}_{32}$. -\subsubsection{Seed hash} -The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash: -\begin{equation} - s = C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) -\end{equation} -\begin{equation} - C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} -\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\rm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ -\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{\rm{epoch}}})) & \text{otherwise} -\end{cases} -\end{equation} -With $\mathbf{0}_{32}$ being 32 bytes of zeros. - -\subsubsection{Cache} -The cache production process involves using the seed hash to first sequentially fill up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{\rm{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. - -We define the array $\mathbf{c}_{i}$, consisting of 64 single bytes, as the $i$th element of the initial cache: -\begin{equation} - \mathbf{c}_{i} = \begin{cases} -\texttt{KEC512}(\mathbf{s}) & \text{if} \quad i = 0 \quad \\ -\texttt{KEC512}(\mathbf{c}_{i-1}) & \text{otherwise} -\end{cases} -\end{equation} -Therefore $ \mathbf{c'}$ can be defined as -\begin{equation} - \mathbf{c'}[i] = \mathbf{c}_{i} \quad \forall \quad i < n -\end{equation} -\begin{equation} - n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}\right\rfloor -\end{equation} -The cache is calculated by performing \hyperlink{Jcacherounds}{$J_{\rm{cacherounds}}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: -\begin{equation} - \mathbf{c} = E_{\rm{cacherounds}}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_{\rm{cacherounds}}}) -\end{equation} -\begin{equation} - E_{\rm{cacherounds}}(\mathbf{x}, y) = \begin{cases} -\mathbf{x} & \text{if} \quad y = 0 \quad \\ -E_\text{\tiny RMH}(\mathbf{x}) & \text{if} \quad y = 1 \quad \\ -E_{\rm{cacherounds}}(E_\text{\tiny RMH}(\mathbf{x}), y -1 ) & \text{otherwise} -\end{cases} -\end{equation} -Where a single round modifies each subset of the cache as follows: -\begin{equation} - E_\text{\tiny RMH}(\mathbf{x}) = \big( E_{rmh}(\mathbf{x}, 0), E_{rmh}(\mathbf{x}, 1), ... , E_{rmh}(\mathbf{x}, n - 1) \big) -\end{equation} -\hypertarget{Ecacherounds}{} -\begin{multline} - E_{rmh}(\mathbf{x}, i) = \texttt{KEC512}(\mathbf{x'}[(i - 1 + n) \mod n] \oplus \mathbf{x'}[\mathbf{x'}[i][0] \mod n]) \\ - \text{with} \quad \mathbf{x'} = \mathbf{x} \quad \text{except} \quad \mathbf{x'}[j] = E_{rmh}(\mathbf{x}, j) \quad \forall \quad j < i -\end{multline} - -\subsubsection{Full dataset calculation} \label{dataset} -Essentially, we combine data from $J_{\rm{parents}}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_{\rm{hashbytes}}$} bytes in size: -\begin{equation} - \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}\right\rfloor -\end{equation} -In order to calculate the single item we use an algorithm inspired by the FNV hash (\cite{FowlerNollVo1991FNVHash}) in some cases as a non-associative substitute for XOR. -\begin{equation} - E_\text{\tiny FNV}(\mathbf{x}, \mathbf{y}) = (\mathbf{x} \cdot (\mathrm{0x01000193} \oplus \mathbf{y})) \mod 2^{32} -\end{equation} -The single item of the dataset can now be calculated as: -\begin{equation} - E_{datasetitem}(\mathbf{c}, i) = E_{\rm{parents}}(\mathbf{c}, i, -1, \varnothing) -\end{equation} -\begin{equation} - E_{\rm{parents}}(\mathbf{c}, i, p, \mathbf{m}) = \begin{cases} -E_{\rm{parents}}(\mathbf{c}, i, p +1, E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_{\rm{parents}} -2 \\ -E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1) & \text{otherwise} -\end{cases} -\end{equation} -\begin{equation} - E_{mix}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} -\texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{size}] \oplus i) & \text{if} \quad p = 0 \\ -E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_{\rm{hashbytes}}} / \hyperlink{Jwordbytes}{J_{\rm{wordbytes}}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} -\end{cases} -\end{equation} - -\subsection{Proof-of-work function} -Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_{\rm{mixbytes}}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. - -If the output of this algorithm is below the desired target, then the \hyperlink{block nonce}{nonce} is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. - -The PoW-function returns an array with the compressed mix as its first item and the Keccak-256 hash of the concatenation of the compressed mix with the seed hash as the second item: -\begin{equation} - \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}) = \lbrace \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}), \texttt{KEC}(\mathbf{s}_\mathbf{h}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}) + \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})) \rbrace -\end{equation} -With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathbf{c}$ is obtained as follows: -\begin{equation} - \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{\rm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) -\end{equation} - -The seed hash being: -\begin{equation} - \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{revert}(\mathbf{n})) -\end{equation} -$E_{revert}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$: -\begin{equation} - E_{revert}(\mathbf{n})[i] = \mathbf{n}[\lVert \mathbf{n} \rVert -i] -\end{equation} -We note that the ``$+$''-operator between two byte sequences results in the concatenation of both sequences. - -The dataset $\mathbf{d}$ is obtained as described in section \ref{dataset}. - -The number of replicated sequences in the mix is: -\begin{equation} - n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\rm{mixbytes}}}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}\right\rfloor -\end{equation} -In order to add random dataset nodes to the mix, the $E_{\rm{accesses}}$ function is used: -\begin{equation} - E_{\rm{accesses}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} -E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_{\rm{accesses}}} -2 \\ -E_{\rm{accesses}}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} -\end{cases} -\end{equation} -\begin{equation} - E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = E_\text{\tiny FNV}(\mathbf{m}, E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) -\end{equation} -$E_{newdata}$ returns an array with $n_{mix}$ elements: -\begin{equation} - E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\rm{mixbytes}}}}{\hyperlink{Jwordbytes}{J_{\rm{wordbytes}}}}\right\rfloor]) \mod \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\rm{hashbytes}}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} -\end{equation} -The mix is compressed as follows: -\begin{equation} - E_{compress}(\mathbf{m}, i) = \begin{cases} -\mathbf{m} & \text{if} \quad i \geqslant \lVert \mathbf{m} \rVert - 8 \\ -E_{compress}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(\mathbf{m}[i + 4], \mathbf{m}[i + 5]), \mathbf{m}[i + 6]), \mathbf{m}[i + 7]), i + 8) & \text{otherwise} -\end{cases} -\end{equation} - -\section{List of mathematical symbols}\label{app:symbols} -\begin{tabularx}{\textwidth}{lcX} -\toprule -Symbol & Latex Command & Description \\ -\midrule -\hypertarget{bigvee}{ -$\bigvee$ & \verb|\bigvee| & This is the least upper bound, supremum, or join of all elements operated on. Thus it is the greatest element of such elements. More information is here: \cite{LatticeOrder}.}\\ +$J_{\mathrm{wordbytes}}$ & 4 & This is the bytes in a word.\hypertarget{Jdatasetinit}{\\ +Foo}\hyperlink{Jdatasetinit\\ +$ This doesn't have a closing bracket so will cause the \bottomrule \end{tabularx} From 82ae531d80e0d5ebb86a11ac3003acaf5d137503 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sat, 30 Sep 2017 15:36:36 +1000 Subject: [PATCH 043/132] =?UTF-8?q?This=20file=20actually=20builds=20and?= =?UTF-8?q?=20is=20the=20correct=20one;=20=20the=20last=20one=20was=20an?= =?UTF-8?q?=20extract=20for=20testing=20purposes.=20=20Changes=20made=20in?= =?UTF-8?q?clude=20changing=20\rm=20font=20to=20\mathrm,=20=20fixing=20syn?= =?UTF-8?q?tax=20errors=20from=20the=20previous=20failing=20build;=20=20(e?= =?UTF-8?q?.g.=20uneven=20braces),=20adding=20cross-references,=20=20extra?= =?UTF-8?q?=20citations=20(e.g.=20for=20Ethash=20and=20ASICs),=20a=20list?= =?UTF-8?q?=20of=20maths=20symbols=20which=20I've=20just=20added=20just=20?= =?UTF-8?q?one=20item=20so=20far=E2=80=94\bigvee.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Paper.tex | 2267 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 2259 insertions(+), 8 deletions(-) diff --git a/Paper.tex b/Paper.tex index 885dd836..591d836d 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1,19 +1,2270 @@ -\documentclass{amsart} +\documentclass[9pt,oneside]{amsart} +\usepackage{cancel} +%\usepackage{tweaklist} +\usepackage{xspace} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{subfig} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage[a4paper,width=170mm,top=18mm,bottom=22mm,includeheadfoot]{geometry} +\usepackage{booktabs} +\usepackage{array} +\usepackage{verbatim} +\usepackage{caption} +\usepackage{natbib} +\usepackage{float} +\usepackage{pdflscape} +\usepackage{mathtools} +\usepackage[usenames,dvipsnames]{xcolor} +\usepackage{afterpage} +\usepackage{tikz} +\usepackage{underscore} +%\usepackage{lipsum} % to generate filler text for testing of document rendering +\usepackage[english]{babel} +\usepackage [autostyle]{csquotes} +\MakeOuterQuote{"} +\usepackage[bookmarks=true, unicode=true, pdftitle={Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain}, pdfauthor={Gavin Wood and others as per https://github.com/ethereum/yellowpaper/commits/master},pdfkeywords={Ethereum, Yellow Paper, blockchain, virtual machine, cryptography, decentralised, singleton, transaction, generalised},pdfborder={0 0 0.5 [1 3]}]{hyperref} +%,pagebackref=true + +%\usepackage{longtable} +%https://stackoverflow.com/questions/1918366/automated-line-breaks-in-latex-tables/1918465#1918465 +%tabularx seems better, but we can include this if we need tables to break across pages automatically, as well as tabu and longtabu + \usepackage{tabularx} -\usepackage{booktabs} -\usepackage{hyperref} -\usepackage{amsmath} +%https://stackoverflow.com/a/1919447/7438857 + +%was using tabularx, but found tabu which seems more flexible, and generally better. +\usepackage{tabu} + +\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} +% "hyperref loads the url package internally. Use \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} to pass the option to the url package when it is loaded by hyperref. This avoids any package option clashes." Source: . +% Note also this: "If the \PassOptionsToPackage{hyphens}{url} approach does not work, maybe it's "because you're trying to load the url package with a specific option, but it's being loaded by one of your packages before that with a different set of options. Try loading the url package earlier than the package that requires it. If it's loaded by the document class, try using \RequirePackage[hyphens]{url} before the document class." Source: . + +\makeatletter +\g@addto@macro{\UrlBreaks}{\UrlOrds} +\makeatother +%\PassOptionsToPackage{url}\g@addto@macro{\UrlBreaks}{\UrlOrds} +% info on the above command: . Note that the three preceding lines, as well as \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} did not fix the error where if a URL breaks over a page, it shows a snippet in the header as shown here: . The following command did fix this error, however only because it happened to compact the text, preventing a URL from breaking over a page. If you force a URL to break over a page, the error still occurs. + +\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one + \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j% + \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t% + \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D% + \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N% + \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X% + \do\Y\do\Z} +% More info: . +%\sloppy +%\setlength{\emergencystretch}{2pt} +% These don't appear to make a difference with the preceding use of the \hypens package and \expandafter. +% https://tex.stackexchange.com/a/59131/143781 +% + +%\usepackage{glossaries} + +\input{Version.tex} + +\newcommand{\hcancel}[1]{% + \tikz[baseline=(tocancel.base)]{ + \node[inner sep=0pt,outer sep=0pt] (tocancel) {#1}; + \draw[black] (tocancel.south west) -- (tocancel.north east); + }% +}% + +\definecolor{lightyellow}{rgb}{1,0.98,0.9} +\definecolor{lightpink}{rgb}{1,0.94,0.95} + +\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil} +\newcommand*\eg{e.g.\@\xspace} +\newcommand*\Eg{e.g.\@\xspace} +\newcommand*\ie{i.e.\@\xspace} +%\renewcommand{\itemhook}{\setlength{\topsep}{0pt} \setlength{\itemsep}{0pt}\setlength{\leftmargin}{15pt}} +\title{Ethereum: A Secure Decentralised Generalised Transaction Ledger \\ {\smaller \textbf{EIP-150 revision (\YellowPaperVersionNumber{})}}} +\author{ + Dr. Gavin Wood\\ + Founder, Ethereum \& Ethcore\\ + gavin@ethcore.io +} \begin{document} +\pagecolor{lightyellow} +%\pagecolor{lightpink} + +\begin{abstract} +The blockchain paradigm when coupled with cryptographically-secured transactions has demonstrated its utility through a number of projects, not the least being Bitcoin. Each such project can be seen as a simple application on a decentralised, but singleton, compute resource. We can call this paradigm a transactional singleton machine with shared-state. + +Ethereum implements this paradigm in a generalised manner. Furthermore it provides a plurality of such resources, each with a distinct state and operating code but able to interact through a message-passing framework with others. We discuss its design, implementation issues, the opportunities it provides and the future hurdles we envisage. +\end{abstract} + +\maketitle + +\setlength{\columnsep}{20pt} +\begin{multicols}{2} + +\section{Introduction}\label{sec:introduction} + +With ubiquitous internet connections in most places of the world, global information transmission has become incredibly cheap. Technology-rooted movements like Bitcoin have demonstrated, through the power of the default, consensus mechanisms and voluntary respect of the social contract that it is possible to use the internet to make a decentralised value-transfer system, shared across the world and virtually free to use. This system can be said to be a very specialised version of a cryptographically secure, transaction-based state machine. Follow-up systems such as Namecoin adapted this original ``currency application'' of the technology into other applications albeit rather simplistic ones. + +Ethereum is a project which attempts to build the generalised technology; technology on which all transaction-based state machine concepts may be built. Moreover it aims to provide to the end-developer a tightly integrated end-to-end system for building software on a hitherto unexplored compute paradigm in the mainstream: a trustful object messaging compute framework. + +\subsection{Driving Factors} \label{ch:driving} + +There are many goals of this project; one key goal is to facilitate transactions between consenting individuals who would otherwise have no means to trust one another. This may be due to geographical separation, interfacing difficulty, or perhaps the incompatibility, incompetence, unwillingness, expense, uncertainty, inconvenience or corruption of existing legal systems. By specifying a state-change system through a rich and unambiguous language, and furthermore architecting a system such that we can reasonably expect that an agreement will be thus enforced autonomously, we can provide a means to this end. + +Dealings in this proposed system would have several attributes not often found in the real world. The incorruptibility of judgement, often difficult to find, comes naturally from a disinterested algorithmic interpreter. Transparency, or being able to see exactly how a state or judgement came about through the transaction log and rules or instructional codes, never happens perfectly in human-based systems since natural language is necessarily vague, information is often lacking, and plain old prejudices are difficult to shake. + +Overall, I wish to provide a system such that users can be guaranteed that no matter with which other individuals, systems or organisations they interact, they can do so with absolute confidence in the possible outcomes and how those outcomes might come about. + +\subsection{Previous Work} \label{ch:previous} + +\cite{buterin2013ethereum} first proposed the kernel of this work in late November, 2013. Though now evolved in many ways, the key functionality of a block-chain with a Turing-complete language and an effectively unlimited inter-transaction storage capability remains unchanged. + +\cite{dwork92pricingvia} provided the first work into the usage of a cryptographic proof of computational expenditure (``proof-of-work'') as a means of transmitting a value signal over the Internet. The value-signal was utilised here as a spam deterrence mechanism rather than any kind of currency, but critically demonstrated the potential for a basic data channel to carry a \textit{strong economic signal}, allowing a receiver to make a physical assertion without having to rely upon \textit{trust}. \cite{back2002hashcash} later produced a system in a similar vein. + +The first example of utilising the proof-of-work as a strong economic signal to secure a currency was by \cite{vishnumurthy03karma:a}. In this instance, the token was used to keep peer-to-peer file trading in check, providing ``consumers'' with the ability to make micro-payments to ``suppliers'' for their services. The security model afforded by the proof-of-work was augmented with digital signatures and a ledger in order to ensure that the historical record couldn't be corrupted and that malicious actors could not spoof payment or unjustly complain about service delivery. Five years later, \cite{nakamoto2008bitcoin} introduced another such proof-of-work-secured value token, somewhat wider in scope. The fruits of this project, Bitcoin, became the first widely adopted global decentralised transaction ledger. + +Other projects built on Bitcoin's success; the alt-coins introduced numerous other currencies through alteration to the protocol. Some of the best known are Litecoin and Primecoin, discussed by \cite{sprankel2013technical}. Other projects sought to take the core value content mechanism of the protocol and repurpose it; \cite{aron2012bitcoin} discusses, for example, the Namecoin project which aims to provide a decentralised name-resolution system. + +Other projects still aim to build upon the Bitcoin network itself, leveraging the large amount of value placed in the system and the vast amount of computation that goes into the consensus mechanism. The Mastercoin project, first proposed by \cite{mastercoin2013willett}, aims to build a richer protocol involving many additional high-level features on top of the Bitcoin protocol through utilisation of a number of auxiliary parts to the core protocol. The Coloured Coins project, proposed by \cite{colouredcoins2012rosenfeld}, takes a similar but more simplified strategy, embellishing the rules of a transaction in order to break the fungibility of Bitcoin's base currency and allow the creation and tracking of tokens through a special ``chroma-wallet''-protocol-aware piece of software. + +Additional work has been done in the area with discarding the decentralisation foundation; Ripple, discussed by \cite{boutellier2014pirates}, has sought to create a ``federated'' system for currency exchange, effectively creating a new financial clearing system. It has demonstrated that high efficiency gains can be made if the decentralisation premise is discarded. + +Early work on smart contracts has been done by \cite{szabo1997formalizing} and \cite{miller1997future}. Around the 1990s it became clear that algorithmic enforcement of agreements could become a significant force in human cooperation. Though no specific system was proposed to implement such a system, it was proposed that the future of law would be heavily affected by such systems. In this light, Ethereum may be seen as a general implementation of such a \textit{crypto-law} system. + +%E language/glossary? + +For a list of terms used in this paper, refer to Appendix \ref{ch:Terminology}. + +\section{The Blockchain Paradigm} \label{ch:overview} + +Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally:\hypertarget{Upsilon}{} +\begin{equation} +\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_\mathbf{t}, T) +\end{equation} + +where $\Upsilon$ is the Ethereum state transition function. In Ethereum, $\Upsilon$, together with $\boldsymbol{\sigma}$ are considerably more powerful then any existing comparable system; $\Upsilon$ allows components to carry out arbitrary computation, while $\boldsymbol{\sigma}$ allows components to store arbitrary state between transactions. + +Transactions are collated into blocks; blocks are chained together using a cryptographic hash as a means of reference. Blocks function as a journal or ledger, recording a series of transactions together with the previous block and an identifier for the final state (though blocks do not store the final state itself---that would be far too big). They also punctuate the transaction series with incentives for nodes to \textit{mine}. This incentivisation takes place as a state-transition function, adding value to a nominated account. + +Mining is the process of dedicating effort (working) to bolster one series of transactions (a block) over any other potential competitor block. It is achieved thanks to a cryptographically secure proof. This scheme is known as a proof-of-work and is discussed in detail in section \ref{ch:pow}. + +Formally, we expand to: +\begin{eqnarray} +\boldsymbol{\sigma}_{t+1} & \equiv & \hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}_\mathbf{t}, B) \\ +B & \equiv & (..., (T_0, T_1, ...) ) \\ +\Pi(\boldsymbol{\sigma}, B) & \equiv & \hyperlink{Omega}{\Omega}(B, \hyperlink{Upsilon}{\Upsilon}(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...) +\end{eqnarray} + +Where \hyperlink{Omega}{$\Omega$} is the block-finalisation state transition function (a function that rewards a nominated party); $B$ is this block, which includes a series of transactions amongst some other components; and $\hyperlink{Pi}{\Pi}$ is the block-level state-transition function. + +This is the basis of the blockchain paradigm, a model that forms the backbone of not only Ethereum, but all decentralised consensus-based transaction systems to date. + +\subsection{Value} + +In order to incentivise computation within the network, there needs to be an agreed method for transmitting value. To address this issue, Ethereum has an intrinsic currency, Ether, known also as {\small ETH} and sometimes referred to by the Old English \DH{}. The smallest subdenomination of Ether, and thus the one in which all integer values of the currency are counted, is the Wei. One Ether is defined as being $10^{18}$ Wei. There exist other subdenominations of Ether: +\par +\begin{center} +\begin{tabular}{rl} +\toprule +Multiplier & Name \\ +\midrule +$10^0$ & Wei \\ +$10^{12}$ & Szabo \\ +$10^{15}$ & Finney \\ +$10^{18}$ & Ether \\ +\bottomrule +\end{tabular} +\end{center} +\par + +Throughout the present work, any reference to value, in the context of Ether, currency, a balance or a payment, should be assumed to be counted in Wei. + +\subsection{Which History?} + +Since the system is decentralised and all parties have an opportunity to create a new block on some older pre-existing block, the resultant structure is necessarily a tree of blocks. In order to form a consensus as to which path, from root (the \hyperlink{GenesisBlock}{genesis block}) to leaf (the block containing the most recent transactions) through this tree structure, known as the blockchain, there must be an agreed-upon scheme. If there is ever a disagreement between nodes as to which root-to-leaf path down the block tree is the `best' blockchain, then a \textit{fork} occurs. + +This would mean that past a given point in time (block), multiple states of the system may coexist: some nodes believing one block to contain the canonical transactions, other nodes believing some other block to be canonical, potentially containing radically different or incompatible transactions. This is to be avoided at all costs as the uncertainty that would ensue would likely kill all confidence in the entire system. + +The scheme we use in order to generate consensus is a simplified version of the GHOST protocol introduced by \cite{cryptoeprint:2013:881}. This process is described in detail in section \ref{ch:ghost}. + +Sometimes, a path follows a new protocol from a particular height. This document describes one version of the protocol. In order to follow back the history of a path, one might need to reference multiple versions of this document. + +\section{Conventions}\label{ch:conventions} + +I use a number of typographical conventions for the formal notation, some of which are quite particular to the present work: + +The two sets of highly structured, `top-level', state values, are denoted with bold lowercase Greek letters. They fall into those of world-state, which are denoted $\boldsymbol{\sigma}$ (or a variant thereupon) and those of machine-state, $\boldsymbol{\mu}$. + +Functions operating on highly structured values are denoted with an upper-case greek letter, \eg \hyperlink{Upsilon}{$\Upsilon$}, the Ethereum state transition function. + +For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg $C_\text{\tiny SSTORE}$, the cost function for the {\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. + +Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_\mathbf{n}$, denotes the \hyperlink{transaction nonce}{nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. + +Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a \hyperlink{transaction nonce}{transaction nonce}. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation. + +Arbitrary-length sequences are typically denoted as a bold lower-case letter, \eg $\mathbf{o}$ is used to denote the byte sequence given as the output data of a message call. For particularly important values, a bold uppercase letter may be used. + +Throughout, we assume scalars are positive integers and thus belong to the set $\mathbb{P}$. The set of all byte sequences is $\mathbb{B}$, formally defined in Appendix \ref{app:rlp}. If such a set of sequences is restricted to those of a particular length, it is denoted with a subscript, thus the set of all byte sequences of length $32$ is named $\mathbb{B}_{32}$ and the set of all positive integers smaller than $2^{256}$ is named $\mathbb{P}_{256}$. This is formally defined in section \ref{ch:block}. + +Square brackets are used to index into and reference individual components or subsequences of sequences, \eg $\boldsymbol{\mu}_\mathbf{s}[0]$ denotes the first item on the machine's stack. For subsequences, ellipses are used to specify the intended range, to include elements at both limits, \eg $\boldsymbol{\mu}_\mathbf{m}[0..31]$ denotes the first 32 items of the machine's memory. + +In the case of the global state $\boldsymbol{\sigma}$, which is a sequence of accounts, themselves tuples, the square brackets are used to reference an individual account. + +When considering variants of existing values, I follow the rule that within a given scope for definition, if we assume that the unmodified `input' value be denoted by the placeholder $\Box$ then the modified and utilisable value is denoted as $\Box'$, and intermediate values would be $\Box^*$, $\Box^{**}$ \&c. On very particular occasions, in order to maximise readability and only if unambiguous in meaning, I may use alpha-numeric subscripts to denote intermediate values, especially those of particular note. + +When considering the use of existing functions, given a function $f$, the function $f^*$ denotes a similar, element-wise version of the function mapping instead between sequences. It is formally defined in section \ref{ch:block}. + +I define a number of useful functions throughout. \hypertarget{ell}{}One of the more common is $\ell$, which evaluates to the last item in the given sequence: + +\begin{equation} +\ell(\mathbf{x}) \equiv \mathbf{x}[\lVert \mathbf{x} \rVert - 1] +\end{equation} + +\section{Blocks, State and Transactions} \label{ch:bst} + +Having introduced the basic concepts behind Ethereum, we will discuss the meaning of a transaction, a block and the state in more detail. + +\subsection{World State} \label{ch:state} + +The world state (\textit{state}), is a mapping between addresses (160-bit identifiers) and account states (a data structure serialised as RLP, see Appendix \ref{app:rlp}). Though not stored on the blockchain, it is assumed that the implementation will maintain this mapping in a modified Merkle Patricia tree (\textit{trie}, see Appendix \ref{app:trie}). The trie requires a simple database backend that maintains a mapping of bytearrays to bytearrays; we name this underlying database the state database. This has a number of benefits; firstly the root node of this structure is cryptographically dependent on all internal data and as such its hash can be used as a secure identity for the entire system state. Secondly, being an immutable data structure, it allows any previous state (whose root hash is known) to be recalled by simply altering the root hash accordingly. Since we store all such root hashes in the blockchain, we are able to trivially revert to old states. + +The account state comprises the following four fields: + +\begin{description} +\hypertarget{account nonce}{} +\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_\mathbf{n}$. +\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_\mathbf{b}$. +\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the 256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{s}$. +\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{c}$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_\mathbf{c}$. +\end{description} + +Since I typically wish to refer not to the trie's root hash but to the underlying set of key/value pairs stored within, I define a convenient equivalence: +\begin{equation} +\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathbf{s})\big) \equiv \boldsymbol{\sigma}[a]_\mathbf{s} +\end{equation} + +The collapse function for the set of key/value pairs in the trie, $L_I^*$, is defined as the element-wise transformation of the base function $L_I$, given as: +\begin{equation} +L_I\big( (k, v) \big) \equiv \big(\texttt{\small KEC}(k), \texttt{\small RLP}(v)\big) +\end{equation} + +where: +\begin{equation} +k \in \mathbb{B}_{32} \quad \wedge \quad v \in \mathbb{P} +\end{equation} + +It shall be understood that $\boldsymbol{\sigma}[a]_\mathbf{s}$ is not a `physical' member of the account and does not contribute to its later serialisation. + +If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_\mathbf{c} = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account. + +Thus we may define a world-state collapse function $L_S$: +\begin{equation} +L_S(\boldsymbol{\sigma}) \equiv \{ p(a): \boldsymbol{\sigma}[a] \neq \varnothing \} +\end{equation} +where +\begin{equation} +p(a) \equiv \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_\mathbf{n}, \boldsymbol{\sigma}[a]_\mathbf{b}, \boldsymbol{\sigma}[a]_\mathbf{s}, \boldsymbol{\sigma}[a]_\mathbf{c}) \big) \big) +\end{equation} + +This function, $L_S$, is used alongside the trie function to provide a short identity (hash) of the world state. We assume: +\begin{equation} +\forall a: \boldsymbol{\sigma}[a] = \varnothing \; \vee \; (a \in \mathbb{B}_{20} \; \wedge \; v(\boldsymbol{\sigma}[a])) +\end{equation} +\hypertarget{v x}{where $v$ is the account validity function: +\begin{equation} +\quad v(x) \equiv x_\mathbf{n} \in \mathbb{P}_{256} \wedge x_\mathbf{b} \in \mathbb{P}_{256} \wedge x_\mathbf{s} \in \mathbb{B}_{32} \wedge x_\mathbf{c} \in \mathbb{B}_{32} +} +\end{equation} + +\subsection{The Transaction} \label{subsec:transaction} + +A transaction (formally, $T$) is a single cryptographically-signed instruction constructed by an actor externally to the scope of Ethereum. While it is assumed that the ultimate external actor will be human in nature, software tools will be used in its construction and dissemination\footnote{Notably, such `tools' could ultimately become so causally removed from their human-based initiation---or humans may become so causally-neutral---that there could be a point at which they rightly be considered autonomous agents. \eg contracts may offer bounties to humans for being sent transactions to initiate their execution.}. There are two types of transactions: those which result in message calls and those which result in the creation of new accounts with associated code (known informally as `contract creation'). Both types specify a number of common fields: + +\begin{description} +\hypertarget{T n}{ +\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_\mathbf{n}$.}\hypertarget{T p}{ +\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_\mathbf{p}$.}\hypertarget{T g}{ +\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathbf{g}$.}\hypertarget{T t}{ +\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathbf{t}$.}\hypertarget{T v}{ +\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathbf{v}$.} +\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally \hyperlink{T w}{$T_\mathbf{w}$}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}. This is expanded in Appendix \ref{app:signing}. +\end{description} + +Additionally, a contract creation transaction contains: + +\begin{description} +\item[init] An unlimited size byte array specifying the EVM-code for the account initialisation procedure, formally $T_\mathbf{i}$. +\end{description} + +\textbf{init} is an EVM-code fragment; it returns the \textbf{body}, a second fragment of code that executes each time the account receives a message call (either through a transaction or due to the internal execution of code). \textbf{init} is executed only once at account creation and gets discarded immediately thereafter. + +In contrast, a message call transaction contains: + +\begin{description} +\item[data] An unlimited size byte array specifying the input data of the message call, formally $T_\mathbf{d}$. +\end{description} + + +\begin{equation} +L_\mathbf{T}(T) \equiv \begin{cases} +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{if} \; T_\mathbf{t} = \varnothing\\ +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{otherwise} +\end{cases} +\end{equation} + +Here, we assume all components are interpreted by the RLP as integer values, with the exception of the arbitrary length byte arrays $T_\mathbf{i}$ and $T_\mathbf{d}$. +\begin{equation} +\begin{array}[t]{lclclc} +T_\mathbf{n} \in \mathbb{P}_{256} & \wedge & \hyperlink{T v}{T_\mathbf{v}} \in \mathbb{P}_{256} & \wedge & T_\mathbf{p} \in \mathbb{P}_{256} & \wedge \\ +T_\mathbf{g} \in \mathbb{P}_{256} & \wedge & \hyperlink{T w}{T_\mathbf{w}} \in \mathbb{P}_5 & \wedge & T_\mathbf{r} \in \mathbb{P}_{256} & \wedge \\ +T_\mathbf{s} \in \mathbb{P}_{256} & \wedge & T_\mathbf{d} \in \mathbb{B} & \wedge & T_\mathbf{i} \in \mathbb{B} +\end{array} +\end{equation} +where +\begin{equation} +\mathbb{P}_\mathbf{n} = \{ P: P \in \mathbb{P} \wedge P < 2^n \} +\end{equation} + +The address hash $T_\mathbf{t}$ is slightly different: it is either a 20-byte address hash or, in the case of being a contract-creation transaction (and thus formally equal to $\varnothing$), it is the RLP empty byte sequence and thus the member of $\mathbb{B}_0$: +\begin{equation} +T_\mathbf{t} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_\mathbf{t} \neq \varnothing \\ +\mathbb{B}_{0} & \text{otherwise}\end{cases} +\end{equation} + +\subsection{The Block} \label{ch:block} + +The block in Ethereum is the collection of relevant pieces of information (known as the block \textit{header}), $H$, together with information corresponding to the comprised transactions, $\mathbf{T}$, and a set of other \hypertarget{ommerheaders}{block headers $\mathbf{U}$} that are known to have a parent equal to the present block's parent's parent (such blocks are known as \textit{ommers}\footnote{\textit{ommer} is the most prevalent (which is not saying much, as it is not a well-known word) gender-neutral term to mean ``sibling of parent''; see \url{http://nonbinary.org/wiki/Gender_neutral_language\#Family_Terms}}). The block header contains several pieces of information: + +%\textit{TODO: Introduce logs} + +\begin{description}\hypertarget{H p}{ +\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_\mathbf{p}$.} +\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_\mathbf{o}}$.\hypertarget{H c}{ +\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block shall be transferred; formally $H_\mathbf{c}$.} +\item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}. +\item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}. +\item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}. +\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarget{H d}{ +\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{ +\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{ +\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathbf{l}$.}\hypertarget{H g}{ +\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathbf{g}$.}\hypertarget{H s}{ +\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_\mathbf{s}$}.}\hypertarget{H x}{ +\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_\mathbf{x}$.}\hypertarget{H m}{ +\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{m}$.} +\hypertarget{block nonce}{\hypertarget{H n}{ +\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{n}$.}} +\end{description} +\hypertarget{B U}{ +The other two components in the block are simply a list of ommer block headers (of the same format as above), $B_\mathbf{U}$, and a series of the transactions, $B_\mathbf{T}$. Formally, we can refer to a block $B$: +\begin{equation} +B \equiv (B_H, B_\mathbf{T}, B_\mathbf{U}) +\end{equation}} + +\hypertarget{Transaction Receipt}{\subsubsection{Transaction Receipt}} + +In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution. +Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_\mathbf{e}$}. + +\hypertarget{R}{} +The transaction receipt, $R$, is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathbf{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathbf{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathbf{b}$}: +\begin{equation} +R \equiv (R_{\boldsymbol{\sigma}}, R_\mathbf{u}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) +\end{equation} + +The function $L_R$ trivially prepares a transaction receipt for being transformed into an RLP-serialised byte array: +\begin{equation} +L_R(R) \equiv (\mathtt{\small \hyperlink{trie}{TRIE}}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathbf{u}}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}}) +\end{equation} +thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a \hyperlink{trie}{trie} structure, the root of which forms the first item. + +We assert $\hyperlink{R u}{R_\mathbf{u}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_\mathbf{b}$}, is a hash of size 2048 bits (256 bytes): +\begin{equation} +\hyperlink{R u}{R_\mathbf{u}} \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_\mathbf{b}} \in \mathbb{B}_{256} +\end{equation} + +%Notably $B_\mathbf{T}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence. + +The log entries, $\hyperlink{R l}{R_\mathbf{l}}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_\mathbf{a}$, a series of 32-bytes log topics, $O_\mathbf{t}$ and some number of bytes of data, $O_\mathbf{d}$: +\begin{equation} +O \equiv (O_\mathbf{a}, ({O_\mathbf{t}}_0, {O_\mathbf{t}}_1, ...), O_\mathbf{d}) +\end{equation} +\begin{equation} +O_\mathbf{a} \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_\mathbf{t}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_\mathbf{d} \in \mathbb{B} +\end{equation} + +We define the Bloom filter function, $M$, to reduce a log entry into a single 256-byte hash: +\begin{equation} +M(O) \equiv \hyperlink{bigvee}{\bigvee}_{t \in \{O_\mathbf{a}\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big) +\end{equation} + +where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence.\footnote{11 bits $= 2^{2048}$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence".} Formally: +\begin{eqnarray} +M_{3:2048}(\mathbf{x}: \mathbf{x} \in \mathbb{B}) & \equiv & \mathbf{y}: \mathbf{y} \in \mathbb{B}_{256} \quad \text{where:}\\ +\mathbf{y} & = & (0, 0, ..., 0) \quad \text{except:}\\ +\forall_{i \in \{0, 2, 4\}}&:& \mathcal{B}_{m(\mathbf{x}, i)}(\mathbf{y}) = 1\\ +m(\mathbf{x}, i) &\equiv& \mathtt{\tiny KEC}(\mathbf{x})[i, i + 1] \bmod 2048 +\end{eqnarray} + +where $\mathcal{B}$ is the bit reference function such that $\mathcal{B}_j(\mathbf{x})$ equals the bit of index $j$ (indexed from 0) in the byte array $\mathbf{x}$. + +\subsubsection{Holistic Validity} + +We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathbf{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_\mathbf{r}$: +\begin{equation} +\begin{array}[t]{lclc}\hypertarget{H r}{ +H_\mathbf{r} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\ +H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathbf{U}}))) & \wedge }\hypertarget{H t}{\\ +H_\mathbf{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{T} \rVert, i \in \mathbb{P}: p(i, L_\mathbf{T}(B_\mathbf{T}[i]))\}) }& \wedge \hypertarget{H e}{\\ +H_\mathbf{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert \hyperlink{Transaction Receipt}{B_\mathbf{R}} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\}) & \wedge }\hypertarget{H b}{\hypertarget{r}{\\ +H_\mathbf{b} &\equiv& \hyperlink{bigvee}{\bigvee}_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_\mathbf{b} \big)}} +\end{array} +\end{equation} + +where $p(k, v)$ is simply the pairwise RLP transformation, in this case, the first being the index of the transaction in the block and the second being the transaction receipt: +\begin{equation} +p(k, v) \equiv \big( \mathtt{\small RLP}(k), \mathtt{\small RLP}(v) \big) +\end{equation} + +Furthermore: +\begin{equation} +\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_\mathbf{r} +\end{equation} + +Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly. + +The values stemming from the computation of transactions, specifically the \hyperlink{transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{stateR-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}. + +\subsubsection{Serialisation} + +The function $L_B$ and $L_H$ are the preparation functions for a block and block header respectively. Much like the transaction receipt preparation function $L_R$, we assert the types and order of the structure for when the RLP transformation is required: +\begin{eqnarray} +\quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_\mathbf{p}}, \hyperlink{H o}{H_\mathbf{o}}, \hyperlink{H c}{H_\mathbf{c}}, \hyperlink{H r}{H_\mathbf{r}}, \hyperlink{H t}{H_\mathbf{t}}, \hyperlink{H e}{H_\mathbf{e}}, \hyperlink{H b}{H_\mathbf{b}}, \hyperlink{H d}{H_\mathbf{d}},\\ \hyperlink{H i}{H_\mathbf{i}}, \hyperlink{H l}{H_\mathbf{l}}, \hyperlink{H g}{H_\mathbf{g}}, \hyperlink{H s}{H_\mathbf{s}}, \hyperlink{H x}{H_\mathbf{x}}, \hyperlink{H m}{H_\mathbf{m}}, \hyperlink{H n}{H_\mathbf{n}} \; )\end{array} \\ +\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathbf{T}^*(B_\mathbf{T}), L_H^*(\hyperlink{B U}{B_\mathbf{U}}) \big) +\end{eqnarray} + +With $L_\mathbf{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus: +\begin{equation} +f^*\big( (x_0, x_1, ...) \big) \equiv \big( f(x_0), f(x_1), ... \big) \quad \text{for any function} \; f +\end{equation} + +The component types are defined thus: +\begin{equation} +\begin{array}[t]{lclclcl} +\hyperlink{H p}{H_\mathbf{p}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H o}{H_\mathbf{o}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H c}{H_\mathbf{c}} \in \mathbb{B}_{20} & \wedge \\ +\hyperlink{H r}{H_\mathbf{r}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H t}{H_\mathbf{t}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H e}{H_\mathbf{e}} \in \mathbb{B}_{32} & \wedge \\ +H_\mathbf{b} \in \mathbb{B}_{256} & \wedge & \hyperlink{H d}{H_\mathbf{d}} \in \mathbb{P} & \wedge & \hyperlink{H i}{H_\mathbf{i}} \in \mathbb{P} & \wedge \\ +\hyperlink{H l}{H_\mathbf{l}} \in \mathbb{P} & \wedge & \hyperlink{H g}{H_\mathbf{g}} \in \mathbb{P} & \wedge & \hyperlink{H s}{H_\mathbf{s}} \in \mathbb{P}_{256} & \wedge \\ +\hyperlink{H x}{H_\mathbf{x}} \in \mathbb{B} & \wedge & \hyperlink{H m}{H_\mathbf{m}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H n}{H_\mathbf{n}} \in \mathbb{B}_{8} +\end{array} +\end{equation} + +where +\begin{equation} +\mathbb{B}_\mathbf{n} = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \} +\end{equation} + +We now have a rigorous specification for the construction of a formal block structure. The RLP function $\texttt{\small RLP}$ (see Appendix \ref{app:rlp}) provides the canonical method for transforming this structure into a sequence of bytes ready for transmission over the wire or storage locally. + +\subsubsection{Block Header Validity} + +We define $P(B_H)$ to be the parent block of $B$, formally: +\begin{equation} +P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = \hyperlink{H p}{H_\mathbf{p}} +\end{equation} + +The block number is the parent's block number incremented by one: +\begin{equation} +\hyperlink{H i}{H_\mathbf{i}} \equiv {{P(H)_H}_\mathbf{i}} + 1 +\end{equation} + +\newcommand{\mindifficulty}{D_0} +\newcommand{\homesteadmod}{\ensuremath{\varsigma_2}} +\newcommand{\expdiffsymb}{\ensuremath{\epsilon}} +\newcommand{\diffadjustment}{x} + +The canonical difficulty of a block of header $H$ is defined as $D(H)$: +\begin{equation} +D(H) \equiv \begin{dcases} +\mindifficulty & \text{if} \quad \hyperlink{H i}{H_\mathbf{i}} = 0\\ +\text{max}\!\left(\mindifficulty, {P(H)_H}_\mathbf{d} + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\ +\end{dcases} +\end{equation} +where: +\begin{equation} +\mindifficulty \equiv 131072 +\end{equation} +\begin{equation} +\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_\mathbf{d}}{2048}\right\rfloor +\end{equation} +\begin{equation} +\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{\hyperlink{H s}{H_\mathbf{s}} - {P(H)_H}_\mathbf{s}}{10}\right\rfloor, -99 \right) +\end{equation} +\begin{equation} +\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor +\end{equation} + +The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation: +\begin{eqnarray} +& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000 +\end{eqnarray} + +\hyperlink{H s}{$H_\mathbf{s}$} is the timestamp of block $H$ and must fulfil the relation: +\begin{equation} +\hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s} +\end{equation} + +This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced. + +The nonce of a block, $\hyperlink{H n}{H_\mathbf{n}}$, must satisfy the relations: +\begin{equation} +n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \wedge \quad m = \hyperlink{H m}{H_\mathbf{m}} +\end{equation} +with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$. + +\hypertarget{h cancel n}{} +Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $\hyperlink{H d}{H_\mathbf{d}}$. + +This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the \hyperlink{block nonce}{block nonce} must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers. + +Thus we are able to define the \hypertarget{BlockHeaderValidityFunction}{block header validity function $V(H)$}:\label{eq:BlockHeaderValidityFunction} +\begin{eqnarray} +V(H) & \equiv & n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \wedge m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \\ +& & \hyperlink{H d}{H_\mathbf{d}} = D(H) \quad \wedge \\ +& & \hyperlink{H g}{H_\mathbf{g}} \le \hyperlink{H l}{H_\mathbf{l}} \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\ +& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000 \quad \wedge \\ +& & \hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s} \quad \wedge \\ +& & \hyperlink{H i}{H_\mathbf{i}} = {P(H)_H}_\mathbf{i} +1 \quad \wedge \\ +& & \lVert \hyperlink{H x}{H_\mathbf{x}} \rVert \le 32 +\end{eqnarray} +where $(n, m) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$ + +Noting additionally that \textbf{extraData} must be at most 32 bytes. + +\section{Gas and Payment} \label{ch:payment} + +In order to avoid issues of network abuse and to sidestep the inevitable questions stemming from Turing completeness, all programmable computation in Ethereum is subject to fees. The fee schedule is specified in units of \textit{gas} (see Appendix \ref{app:fees} for the fees associated with various computation). Thus any given fragment of programmable computation (this includes creating contracts, making message calls, utilising and accessing account storage and executing operations on the virtual machine) has a universally agreed cost in terms of gas. + +Every transaction has a specific amount of gas associated with it: \textbf{gasLimit}. This is the amount of gas which is implicitly purchased from the sender's account balance. The purchase happens at the according \textbf{gasPrice}, also specified in the transaction. The transaction is considered invalid if the account balance cannot support such a purchase. It is named \textbf{gasLimit} since any unused gas at the end of the transaction is refunded (at the same rate of purchase) to the sender's account. Gas does not exist outside of the execution of a transaction. Thus for accounts with trusted code associated, a relatively high gas limit may be set and left alone. + +In general, Ether used to purchase gas that is not refunded is delivered to the \textit{beneficiary} address, the address of an account typically under the control of the miner. Transactors are free to specify any \textbf{gasPrice} that they wish, however miners are free to ignore transactions as they choose. A higher gas price on a transaction will therefore cost the sender more in terms of Ether and deliver a greater value to the miner and thus will more likely be selected for inclusion by more miners. Miners, in general, will choose to advertise the minimum gas price for which they will execute transactions and transactors will be free to canvas these prices in determining what gas price to offer. Since there will be a (weighted) distribution of minimum acceptable gas prices, transactors will necessarily have a trade-off to make between lowering the gas price and maximising the chance that their transaction will be mined in a timely manner. + +%\subsubsection{Determining Computation Costs} + +\section{Transaction Execution} \label{ch:transactions} + +The execution of a transaction is the most complex part of the Ethereum protocol: it defines the state transition function \hyperlink{Upsilon}{$\Upsilon$}. It is assumed that any transactions executed first pass the initial tests of intrinsic validity. These include: + +\begin{enumerate} +\item The transaction is well-formed RLP, with no additional trailing bytes; +\item the transaction signature is valid; +\item the \hyperlink{transaction nonce}{transaction nonce} is valid (equivalent to the \hyperlink{account nonce}{sender account's current nonce}); +\item the gas limit is no smaller than the intrinsic gas, $g_0$, used by the transaction; +\item the sender account balance contains at least the cost, $v_0$, required in up-front payment. +\end{enumerate} + +Formally, we consider the function \hyperlink{Upsilon}{$\Upsilon$}, with $T$ being a transaction and $\boldsymbol{\sigma}$ the state: +\begin{equation} +\boldsymbol{\sigma}' = \Upsilon(\boldsymbol{\sigma}, T) +\end{equation} + +Thus $\boldsymbol{\sigma}'$ is the post-transactional state. We also define \hyperlink{Upsilong}{$\Upsilon^g$} to evaluate to the amount of gas used in the execution of a transaction and \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} to evaluate to the transaction's accrued log items, both to be formally defined later. + +\subsection{Substate} +Throughout transaction execution, we accrue certain information that is acted upon immediately following the transaction. We call this \textit{transaction substate}, and represent it as $A$, which is a tuple: +\begin{equation} +A \equiv (A_\mathbf{s}, A_\mathbf{l}, A_\mathbf{r}) +\end{equation} + +The tuple contents include $A_\mathbf{s}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_\mathbf{l}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_\mathbf{r}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs. + +For brevity, we define the empty substate $A^0$ to have no self-destructs, no logs and a zero refund balance: +\begin{equation} +A^0 \equiv (\varnothing, (), 0) +\end{equation} + +\subsection{Execution} +We define intrinsic gas $g_0$, the amount of gas this transaction requires to be paid prior to execution, as follows: +\begin{align} +g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} G_{txdatazero} & \text{if} \quad i = 0 \\ G_{txdatanonzero} & \text{otherwise} \end{cases} \\ +{} & + \begin{cases} G_\text{txcreate} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ +{} & + G_{transaction} +\end{align} + +where $T_\mathbf{i},T_\mathbf{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_\text{txcreate}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}. + +%todo Explain g_d reason? + +The up-front cost $v_0$ is calculated as: +\begin{equation} +v_0 \equiv T_\mathbf{g} T_\mathbf{p} + \hyperlink{T v}{T_\mathbf{v}} +\end{equation} + +The validity is determined as: +\begin{equation} +\begin{array}[t]{rcl} +S(T) & \neq & \varnothing \quad \wedge \\ +\boldsymbol{\sigma}[S(T)] & \neq & \varnothing \quad \wedge \\ +T_\mathbf{n} & = & \boldsymbol{\sigma}[S(T)]_\mathbf{n} \quad \wedge \\ +g_0 & \leqslant & T_\mathbf{g} \quad \wedge \\ +v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_\mathbf{b} \quad \wedge \\ +T_\mathbf{g} & \leqslant & {B_H}_\mathbf{l} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_\mathbf{R})_\mathbf{u}} +\end{array} +\end{equation} + +Note the final condition; the sum of the transaction's gas limit, $T_\mathbf{g}$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathbf{R})_\mathbf{u}$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_\mathbf{l}$. + +The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_\mathbf{g}T_\mathbf{p}$. The gas available for the proceeding computation, $g$, is defined as $T_\mathbf{g} - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point. + +We define the checkpoint state $\boldsymbol{\sigma}_0$: +\begin{eqnarray} +\boldsymbol{\sigma}_0 & \equiv & \boldsymbol{\sigma} \quad \text{except:} \\ +\boldsymbol{\sigma}_0[S(T)]_b & \equiv & \boldsymbol{\sigma}[S(T)]_b - T_g T_p \\% +\boldsymbol{\sigma}_0[S(T)]_\mathbf{n} & \equiv & \boldsymbol{\sigma}[S(T)]_\mathbf{n} + 1 +\end{eqnarray} + +Evaluating $\boldsymbol{\sigma}_P$ from $\boldsymbol{\sigma}_0$ depends on the transaction type; either contract creation or message call; we define the tuple of post-execution provisional state $\boldsymbol{\sigma}_P$, remaining gas $g'$ and substate $A$: +\begin{equation} +(\boldsymbol{\sigma}_P, g', A) \equiv \begin{cases} +\Lambda(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, 0) & \text{if} \quad T_\mathbf{t} = \varnothing \\ +\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad T_\mathbf{t}, T_\mathbf{t}, g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, 0) & \text{otherwise} +\end{cases} +\end{equation} + +where $g$ is the amount of gas remaining after deducting the basic amount required to pay for the existence of the transaction: +\begin{equation} +g \equiv T_\mathbf{g} - g_0 +\end{equation} +and $T_\mathbf{o}$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code. + +Note we use $\Theta_{3}$ to denote the fact that only the first three components of the function's value are taken; the final represents the message-call's output value (a byte array) and is unused in the context of transaction evaluation. + +After the message call or contract creation is processed, the state is finalised by determining the amount to be refunded, $g^*$ from the remaining gas, $g'$, plus some allowance from the refund counter, to the sender at the original rate. +\begin{equation} +g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_\mathbf{g} - g'}{2} \Big\rfloor, A_\mathbf{r} \} +\end{equation} + +The total refundable amount is the legitimately remaining gas $g'$, added to $A_\mathbf{r}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_\mathbf{g} - g'$. + +The Ether for the gas is given to the miner, whose address is specified as the beneficiary of the present block $B$. So we define the pre-final state $\boldsymbol{\sigma}^*$ in terms of the provisional state $\boldsymbol{\sigma}_P$: +\begin{eqnarray} +\boldsymbol{\sigma}^* & \equiv & \boldsymbol{\sigma}_P \quad \text{except} \\ +\boldsymbol{\sigma}^*[S(T)]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[S(T)]_\mathbf{b} + g^* T_\mathbf{p} \\ +\boldsymbol{\sigma}^*[m]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[m]_\mathbf{b} + (T_\mathbf{g} - g^*) T_\mathbf{p} \\ +m & \equiv & {B_H}_\mathbf{c} +\end{eqnarray} + +The final state, $\boldsymbol{\sigma}'$, is reached after deleting all accounts that appear in the self-destruct set: +\begin{eqnarray} +\boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}^* \quad \text{except} \\ +\forall i \in A_\mathbf{s}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing +\end{eqnarray} + +\hypertarget{Upsilong}{And finally, we specify $\Upsilon^g$, the total gas used in this transaction}\hypertarget{Upsilonl}{ and $\Upsilon^\mathbf{l}$, the logs created by this transaction:} +\begin{eqnarray} +\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_\mathbf{g} - \mathbf{g}' \\ +\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_\mathbf{l} +\end{eqnarray} + +These are used to help define the \hyperlink{Transaction Receipt}{transaction receipt}. + +\section{Contract Creation} \label{ch:create} + +There are a number of intrinsic parameters used when creating an account: sender ($s$), original transactor ($o$), available gas ($g$), gas price ($p$), endowment ($v$) together with an arbitrary length byte array, $\mathbf{i}$, the initialisation EVM code and finally the present depth of the message-call/contract-creation stack ($e$). + +We define the creation function formally as the function $\Lambda$, which evaluates from these values, together with the state $\boldsymbol{\sigma}$ to the tuple containing the new state, remaining gas and accrued transaction substate $(\boldsymbol{\sigma}', g', A)$, as in section \ref{ch:transactions}: +\begin{equation} +(\boldsymbol{\sigma}', g', A) \equiv \Lambda(\boldsymbol{\sigma}, s, o, g, p, v, \mathbf{i}, e) +\end{equation} + +The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$: +\begin{equation} +a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_\mathbf{n} - 1)\;\big)\Big)\Big) +\end{equation} + +where $\mathtt{\tiny KEC}$ is the Keccak 256-bit hash function, $\mathtt{\tiny RLP}$ is the RLP encoding function, $\mathcal{B}_{a..b}(X)$ evaluates to binary value containing the bits of indices in the range $[a, b]$ of the binary data $X$ and $\boldsymbol{\sigma}[x]$ is the address state of $x$ or $\varnothing$ if none exists. Note we use one fewer than the \hyperlink{account nonce}{sender's nonce value}; we assert that we have incremented the sender account's nonce prior to this call, and so the value used is the sender's nonce at the beginning of the responsible transaction or VM operation. + +The account's nonce is initially defined as zero, the balance as the value passed, the storage as empty and the code hash as the Keccak 256-bit hash of the empty string; the sender's balance is also reduced by the value passed. Thus the mutated state becomes $\boldsymbol{\sigma}^*$: +\begin{equation} +\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except:} +\end{equation} +\begin{eqnarray} +\boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\ +\boldsymbol{\sigma}^*[s]_\mathbf{b} &\equiv& \boldsymbol{\sigma}[s]_\mathbf{b} - v +\end{eqnarray} + +where $v'$ is the account's pre-existing value, in the event it was previously in existence: +\begin{equation} +v' \equiv \begin{cases} +0 & \text{if} \quad \boldsymbol{\sigma}[a] = \varnothing\\ +\boldsymbol{\sigma}[a]_\mathbf{b} & \text{otherwise} +\end{cases} +\end{equation} + +%It is asserted that the state database will also change such that it defines the pair $(\mathtt{\tiny KEC}(\mathbf{b}), \mathbf{b})$. + +Finally, the account is initialised through the execution of the initialising EVM code $\mathbf{i}$ according to the execution model (see section \ref{ch:model}). Code execution can effect several events that are not internal to the execution state: the account's storage can be altered, further accounts can be created and further message calls can be made. As such, the code execution function $\Xi$ evaluates to a tuple of the resultant state $\boldsymbol{\sigma}^{**}$, available gas remaining $g^{**}$, the accrued substate $A$ and the body code of the account $\mathbf{o}$. + +\begin{equation} +(\boldsymbol{\sigma}^{**}, g^{**}, A, \mathbf{o}) \equiv \Xi(\boldsymbol{\sigma}^*, g, I) \\ +\end{equation} +where $I$ contains the parameters of the execution environment as defined in section \ref{ch:model}, that is: +\begin{eqnarray} +I_\mathbf{a} & \equiv & a \\ +I_\mathbf{o} & \equiv & o \\ +I_\mathbf{p} & \equiv & p \\ +I_\mathbf{d} & \equiv & () \\ +I_\mathbf{s} & \equiv & s \\ +\hyperlink{I v}{I_\mathbf{v}} & \equiv & v \\ +I_\mathbf{b} & \equiv & \mathbf{i} \\ +I_\mathbf{e} & \equiv & e +\end{eqnarray} + +$I_\mathbf{d}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain. + +Code execution depletes gas, and gas may not go below zero, thus execution may exit before the code has come to a natural halting state. In this (and several other) exceptional cases we say an out-of-gas (OOG) exception has occurred: The evaluated state is defined as being the empty set, $\varnothing$, and the entire create operation should have no effect on the state, effectively leaving it as it was immediately prior to attempting the creation. + +If the initialization code completes successfully, a final contract-creation cost is paid, the code-deposit cost, $c$, proportional to the size of the created contract's code: +\begin{equation} +c \equiv G_{codedeposit} \times |\mathbf{o}| +\end{equation} + +If there is not enough gas remaining to pay this, \ie $g^{**} < c$, then we also declare an out-of-gas exception. + +The gas remaining will be zero in any such exceptional condition, \ie if the creation was conducted as the reception of a transaction, then this doesn't affect payment of the intrinsic cost of contract creation; it is paid regardless. However, the value of the transaction is not transferred to the aborted contract's address when we are out-of-gas. + +If such an exception does not occur, then the remaining gas is refunded to the originator and the now-altered state is allowed to persist. Thus formally, we may specify the resultant state, gas and substate as $(\boldsymbol{\sigma}', g', A)$ where: + +\begin{align} +\quad g' &\equiv \begin{cases} +0 & \text{if} \quad F \\ +g^{**} - \mathbf{c} & \text{otherwise} \\ +\end{cases} \\ +\quad \boldsymbol{\sigma}' &\equiv \begin{cases} +\boldsymbol{\sigma} & \text{if} \quad F \\ +\boldsymbol{\sigma}^{**} \quad \text{except:} & \\ +\quad\boldsymbol{\sigma}'[a]_\mathbf{c} = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise} +\end{cases} \\ +\nonumber \text{where} \\ +F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\ \mathbf{g}^{**} < \mathbf{c} \ \vee\ |\mathbf{o}| > 24576\big) +\end{align} + +The exception in the determination of $\boldsymbol{\sigma}'$ dictates that $\mathbf{o}$, the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account. Note that the 24576 byte limit for $\mathbf{o}$ exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity. + +Note that the intention is that the result is either a successfully created new contract with its endowment, or no new contract with no transfer of value. + +\subsection{Subtleties} +Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever. + +\section{Message Call} \label{ch:call} +In the case of executing a message call, several parameters are required: sender ($s$), transaction originator ($o$), recipient ($r$), the account whose code is to be executed ($c$, usually the same as recipient), available gas ($g$), value ($v$) and gas price ($p$) together with an arbitrary length byte array, $\mathbf{d}$, the input data of the call and finally the present depth of the message-call/contract-creation stack ($e$). + +Aside from evaluating to a new state and transaction substate, message calls also have an extra component---the output data denoted by the byte array $\mathbf{o}$. This is ignored when executing transactions, however message calls can be initiated due to VM-code execution and in this case this information is used. +\begin{equation} +(\boldsymbol{\sigma}', g', A, \mathbf{o}) \equiv \Theta(\boldsymbol{\sigma}, s, o, r, c, g, p, v, \tilde{v}, \mathbf{d}, e) +\end{equation} +Note that we need to differentiate between the value that is to be transferred, $v$, from the value apparent in the execution context, $\tilde{v}$, for the {\small DELEGATECALL} instruction. + +We define $\boldsymbol{\sigma}_1$, the first transitional state as the original state but with the value transferred from sender to recipient: +\begin{equation} +\boldsymbol{\sigma}_1[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}[s]_\mathbf{b} - v +\end{equation} +unless $s = r$. + +Throughout the present work, it is assumed that if $\boldsymbol{\sigma}_1[r]$ was originally undefined, it will be created as an account with no code or state and zero balance and \hyperlink{account nonce}{nonce}. Thus the previous equation should be taken to mean: +\begin{equation} +\boldsymbol{\sigma}_1 \equiv \boldsymbol{\sigma}_1' \quad \text{except:} \\ +\end{equation} +\begin{equation} +\boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}_1'[s]_\mathbf{b} - v +\end{equation} +\begin{equation} +\text{and}\quad \boldsymbol{\sigma}_1' \equiv \boldsymbol{\sigma} \quad \text{except:} \\ +\end{equation} +\begin{equation} +\begin{cases} +\boldsymbol{\sigma}_1'[r] \equiv (v, 0, \mathtt{\tiny KEC}(()), \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing)) & \text{if} \quad \boldsymbol{\sigma}[r] = \varnothing \\ +\boldsymbol{\sigma}_1'[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v & \text{otherwise} +\end{cases} +\end{equation} + +The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_\mathbf{c}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$). + +\begin{eqnarray} +\boldsymbol{\sigma}' & \equiv & \begin{cases} +\boldsymbol{\sigma} & \text{if} \quad \boldsymbol{\sigma}^{**} = \varnothing \\ +\boldsymbol{\sigma}^{**} & \text{otherwise} +\end{cases} \\ +g' & \equiv & \begin{cases} +0 & \text{if} \quad \boldsymbol{\sigma}^{**} = \varnothing \\ +g^{**} & \text{otherwise} +\end{cases} \\ +\qquad (\boldsymbol{\sigma}^{**}, g^{**}, A, \mathbf{o}) & \equiv & \begin{cases} +\Xi_{\mathtt{ECREC}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 1 \\ +\Xi_{\mathtt{SHA256}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 2 \\ +\Xi_{\mathtt{RIP160}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 3 \\ +\Xi_{\mathtt{ID}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 4 \\ +\Xi(\boldsymbol{\sigma}_1, g, I) & \text{otherwise} \end{cases} \\ +I_\mathbf{a} & \equiv & r \\ +I_\mathbf{o} & \equiv & o \\ +I_\mathbf{p} & \equiv & p \\ +I_\mathbf{d} & \equiv & \mathbf{d} \\ +I_\mathbf{s} & \equiv & s \\ +\hyperlink{I v}{I_\mathbf{v}} & \equiv & \tilde{v} \\ +I_\mathbf{e} & \equiv & e \\ +\text{Let} \; \mathtt{\tiny KEC}(I_\mathbf{b}) & = & \boldsymbol{\sigma}[c]_\mathbf{c} +\end{eqnarray} + +It is assumed that the client will have stored the pair $(\mathtt{\tiny KEC}(I_\mathbf{b}), I_\mathbf{b})$ at some point prior in order to make the determination of $I_\mathbf{b}$ feasible. + +As can be seen, there are four exceptions to the usage of the general execution framework $\Xi$ for evaluation of the message call: these are four so-called `precompiled' contracts, meant as a preliminary piece of architecture that may later become \textit{native extensions}. The four contracts in addresses 1, 2, 3 and 4 execute the elliptic curve public key recovery function, the SHA2 256-bit hash scheme, the RIPEMD 160-bit hash scheme and the identity function respectively. + +Their full formal definition is in Appendix \ref{app:precompiled}. + +\section{Execution Model} \label{ch:model} + +The execution model specifies how the system state is altered given a series of bytecode instructions and a small tuple of environmental data. This is specified through a formal model of a virtual state machine, known as the Ethereum Virtual Machine (EVM). It is a \textit{quasi-}Turing-complete machine; the \textit{quasi} qualification comes from the fact that the computation is intrinsically bounded through a parameter, \textit{gas}, which limits the total amount of computation done. + +\subsection{Basics} + +The EVM is a simple stack-based architecture. The word size of the machine (and thus size of stack item) is 256-bit. This was chosen to facilitate the Keccak-256 hash scheme and elliptic-curve computations. The memory model is a simple word-addressed byte array. The stack has a maximum size of $1024$. The machine also has an independent storage model; this is similar in concept to the memory but rather than a byte array, it is a word-addressable word array. Unlike memory, which is volatile, storage is non volatile and is maintained as part of the system state. All locations in both storage and memory are well-defined initially as zero. + +The machine does not follow the standard von Neumann architecture. Rather than storing program code in generally-accessible memory or storage, it is stored separately in a virtual ROM interactable only through a specialised instruction. + +The machine can have exceptional execution for several reasons, including stack underflows and invalid instructions. Like the out-of-gas exception, they do not leave state changes intact. Rather, the machine halts immediately and reports the issue to the execution agent (either the transaction processor or, recursively, the spawning execution environment) which will deal with it separately. + +\subsection{Fees Overview} + +Fees (denominated in gas) are charged under three distinct circumstances, all three as prerequisite to the execution of an operation. The first and most common is the fee intrinsic to the computation of the operation (see Appendix \ref{app:fees}). Secondly, gas may be deducted in order to form the payment for a subordinate message call or contract creation; this forms part of the payment for {\small CREATE}, {\small CALL} and {\small CALLCODE}. Finally, gas may be paid due to an increase in the usage of the memory. + +Over an account's execution, the total fee for memory-usage payable is proportional to the smallest multiple of 32 bytes that is required such that all memory indices (whether for read or write) are included in the range. This is paid for on a just-in-time basis; as such, referencing an area of memory at least 32 bytes greater than any previously indexed memory will certainly result in an additional memory usage fee. Due to this fee it is highly unlikely addresses will ever go above 32-bit bounds. That said, implementations must be able to manage this eventuality. + +Storage fees have a slightly nuanced behaviour---to incentivise minimisation of the use of storage (which corresponds directly to a larger state database on all nodes), the execution fee for an operation that clears an entry in the storage is not only waived, a qualified refund is given; in fact, this refund is effectively paid up-front since the initial usage of a storage location costs substantially more than normal usage. + +See Appendix \ref{app:vm} for a rigorous definition of the EVM gas cost. + +\subsection{Execution Environment} + +In addition to the system state $\boldsymbol{\sigma}$, and the remaining gas for computation $g$, there are several pieces of important information used in the execution environment that the execution agent must provide; these are contained in the tuple $I$: + +\begin{itemize}\hypertarget{I a}{ +\item $I_\mathbf{a}$, the address of the account which owns the code that is executing.}\hypertarget{I o}{ +\item $I_\mathbf{o}$, the sender address of the transaction that originated this execution.}\hypertarget{I p}{ +\item $I_\mathbf{p}$, the price of gas in the transaction that originated this execution.}\hypertarget{I d}{ +\item $I_\mathbf{d}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data.}\hypertarget{I s}{ +\item $I_\mathbf{s}$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender.}\hypertarget{I v}{ +\item $I_\mathbf{v}$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value.}\hypertarget{I b}{ +\item $I_\mathbf{b}$, the byte array that is the machine code to be executed. +\item $I_H$, the block header of the present block.}\hypertarget{I e}{ +\item $I_\mathbf{e}$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present).} +\end{itemize} + +The execution model defines the function $\Xi$, which can compute the resultant state $\boldsymbol{\sigma}'$, the remaining gas $g'$, the accrued substate $A$ and the resultant output, $\mathbf{o}$, given these definitions. For the present context, we will defined it as: +\begin{equation} +(\boldsymbol{\sigma}', g', A, \mathbf{o}) \equiv \Xi(\boldsymbol{\sigma}, g, I) +\end{equation} + +where we will remember that $A$, the accrued substate is defined as the tuple of the suicides set $\mathbf{s}$, the log series $\mathbf{l}$ and the refunds $r$: + +\begin{equation} +A \equiv (\mathbf{s}, \mathbf{l}, r) +\end{equation} + +\subsection{Execution Overview} + +We must now define the $\Xi$ function. In most practical implementations this will be modelled as an iterative progression of the pair comprising the full system state, $\boldsymbol{\sigma}$ and the machine state, $\boldsymbol{\mu}$. Formally, we define it recursively with a function $X$. This uses an iterator function $O$ (which defines the result of a single cycle of the state machine) together with functions $Z$ which determines if the present state is an exceptional halting state of the machine and $H$, specifying the output data of the instruction if and only if the present state is a normal halting state of the machine. + +\hypertarget{emptySequence}{} +The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt. +\begin{eqnarray} +\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_\mathbf{g}, A, \mathbf{o}) \\ +(\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\ +\boldsymbol{\mu}_\mathbf{g} & \equiv & \mathbf{g} \\ +\boldsymbol{\mu}_{pc} & \equiv & 0 \\ +\boldsymbol{\mu}_\mathbf{m} & \equiv & (0, 0, ...) \\ +\boldsymbol{\mu}_\mathbf{i} & \equiv & 0 \\ +\boldsymbol{\mu}_\mathbf{s} & \equiv & () +\end{eqnarray} +\begin{equation} +X\big( (\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \big) \equiv \begin{cases} +\big(\varnothing, \boldsymbol{\mu}, A^0, I, ()\big) & \text{if} \quad Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I)\\ +O(\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \cdot \mathbf{o} & \text{if} \quad \mathbf{o} \neq \varnothing\\ +X\big(O(\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I)\big) & \text{otherwise}\\ +\end{cases} +\end{equation} + +where +\begin{eqnarray} +\mathbf{o} & \equiv & H(\boldsymbol{\mu}, I) \\ +(a, b, c, d) \cdot e & \equiv & (a, b, c, d, e) +\end{eqnarray} + +Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_\mathbf{g}$ from the resultant machine state $\boldsymbol{\mu}'$. + +$X$ is thus cycled (recursively here, but implementations are generally expected to use a simple iterative loop) until either $Z$ becomes true indicating that the present state is exceptional and that the machine must be halted and any changes discarded or until $H$ becomes a series (rather than the empty set) indicating that the machine has reached a controlled halt. + +\subsubsection{Machine State} +The machine state $\boldsymbol{\mu}$ is defined as the tuple $(g, pc, \mathbf{m}, i, \mathbf{s})$ which are the gas available, the program counter $pc \in \mathbb{P}_{256}$ , the memory contents, the active number of words in memory (counting continuously from position 0), and the stack contents. The memory contents $\boldsymbol{\mu}_\mathbf{m}$ are a series of zeroes of size $2^{256}$. + +For the ease of reading, the instruction mnemonics, written in small-caps (\eg \space {\small ADD}), should be interpreted as their numeric equivalents; the full table of instructions and their specifics is given in Appendix \ref{app:vm}. + +For the purposes of defining $Z$, $H$ and $O$, we define $w$ as the current operation to be executed: +\begin{equation}\label{eq:currentoperation} +w \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathbf{b} \rVert \\ +\text{\small STOP} & \text{otherwise} +\end{cases} +\end{equation} + +We also assume the fixed amounts of $\mathbf{\delta}$ and $\mathbf{\alpha}$, specifying the stack items removed and added, both subscriptable on the instruction and an instruction cost function $C$ evaluating to the full cost, in gas, of executing the given instruction. + +\subsubsection{Exceptional Halting} + +The exceptional halting function $Z$ is defined as: +\begin{equation} +Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv +\begin{array}[t]{l} +\boldsymbol{\mu}_\mathbf{g} < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\ +\mathbf{\delta}_w = \varnothing \quad \vee \\ +\lVert\boldsymbol{\mu}_\mathbf{s}\rVert < \mathbf{\delta}_w \quad \vee \\ +( w \in \{ \text{\small JUMP}, \text{\small JUMPI} \} \quad \wedge \\ \quad \boldsymbol{\mu}_\mathbf{s}[0] \notin D(I_\mathbf{b}) ) \quad \vee \\ +\lVert\boldsymbol{\mu}_\mathbf{s}\rVert - \mathbf{\delta}_w + \mathbf{\alpha}_w > 1024 \quad +\end{array} +\end{equation} + +This states that the execution is in an exceptional halting state if there is insufficient gas, if the instruction is invalid (and therefore its $\delta$ subscript is undefined), if there are insufficient stack items, if a {\small JUMP}/{\small JUMPI} destination is invalid or the new stack size would be larger then 1024. The astute reader will realise that this implies that no instruction can, through its execution, cause an exceptional halt. + +\subsubsection{Jump Destination Validity} + +We previously used $D$ as the function to determine the set of valid jump destinations given the code that is being run. We define this as any position in the code occupied by a {\small JUMPDEST} instruction. + +All such positions must be on valid instruction boundaries, rather than sitting in the data portion of {\small PUSH} operations and must appear within the explicitly defined portion of the code (rather than in the implicitly defined {\small STOP} operations that trail it). + +Formally: +\begin{equation} +D(\mathbf{c}) \equiv D_J(\mathbf{c}, 0) +\end{equation} + +where: +\begin{equation} +D_J(\mathbf{c}, i) \equiv \begin{cases} +\{\} & \text{if} \quad i \geqslant |\mathbf{c}| \\ +\{ i \} \cup D_J(\mathbf{c}, N(i, \mathbf{c}[i])) & \text{if} \quad \mathbf{c}[i] = \text{\small JUMPDEST} \\ +D_J(\mathbf{c}, N(i, \mathbf{c}[i])) & \text{otherwise} \\ +\end{cases} +\end{equation} + +where $N$ is the next valid instruction position in the code, skipping the data of a {\small PUSH} instruction, if any: +\begin{equation} +N(i, w) \equiv \begin{cases} +i + w - \text{\small PUSH1} + 2 & \text{if} \quad w \in [\text{\small PUSH1}, \text{\small PUSH32}] \\ +i + 1 & \text{otherwise} \end{cases} +\end{equation} + +\subsubsection{Normal Halting} \label{subsec:Normal Halting} + +The normal halting function $H$ is defined: +\begin{equation} \label{eq:Normal Halting} +H(\boldsymbol{\mu}, I) \equiv \begin{cases} +H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small RETURN} \\ +() & \text{if} \quad w \in \text{\small STOP}, \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ +\varnothing & \text{otherwise} +\end{cases} +\end{equation} + +The data-returning halt operation, \hyperlink{RETURN}{\text{\small RETURN}}, has a special function $H_{\text{\tiny RETURN}}$. Note also the difference between the empty sequence and the empty set as discussed \hyperlink{emptySequence}{here}. + +\subsection{The Execution Cycle} + +Stack items are added or removed from the left-most, lower-indexed portion of the series; all other items remain unchanged: +\begin{eqnarray} +O\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I)\big) & \equiv & (\boldsymbol{\sigma}', \boldsymbol{\mu}', A', I) \\ +\Delta & \equiv & \mathbf{\alpha}_w - \mathbf{\delta}_w \\ +\lVert\boldsymbol{\mu}'_\mathbf{s}\rVert & \equiv & \lVert\boldsymbol{\mu}_\mathbf{s}\rVert + \Delta \\ +\quad \forall x \in [\mathbf{\alpha}_w, \lVert\boldsymbol{\mu}'_\mathbf{s}\rVert): \boldsymbol{\mu}'_\mathbf{s}[x] & \equiv & \boldsymbol{\mu}_\mathbf{s}[x-\Delta] +\end{eqnarray} + +The gas is reduced by the instruction's gas cost and for most instructions, the program counter increments on each cycle, for the three exceptions, we assume a function $J$, subscripted by one of two instructions, which evaluates to the according value: +\begin{eqnarray} +\quad \boldsymbol{\mu}'_{g} & \equiv & \boldsymbol{\mu}_{g} - C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \\ +\hypertarget{JUMP}{} \hypertarget{JUMPI}{} \label{eq:JUMP} \quad \boldsymbol{\mu}'_{pc} & \equiv & \begin{cases} +J_{\text{JUMP}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMP} \\ +J_{\text{JUMPI}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMPI} \\ +N(\boldsymbol{\mu}_{pc}, w) & \text{otherwise} +\end{cases} +\end{eqnarray} + +In general, we assume the memory, self-destruct set and system state don't change: +\begin{eqnarray} +\boldsymbol{\mu}'_\mathbf{m} & \equiv & \boldsymbol{\mu}_\mathbf{m} \\ +\boldsymbol{\mu}'_\mathbf{i} & \equiv & \boldsymbol{\mu}_\mathbf{i} \\ +A' & \equiv & A \\ +\boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma} +\end{eqnarray} + +However, instructions do typically alter one or several components of these values. Altered components listed by instruction are noted in Appendix \ref{app:vm}, alongside values for $\alpha$ and $\delta$ and a formal description of the gas requirements. + +\section{Blocktree to Blockchain} \label{ch:ghost} + +The canonical blockchain is a path from root to leaf through the entire block tree. In order to have consensus over which path it is, conceptually we identify the path that has had the most computation done upon it, or, the \textit{heaviest} path. Clearly one factor that helps determine the heaviest path is the block number of the leaf, equivalent to the number of blocks, not counting the unmined \hyperlink{GenesisBlock}{genesis block}, in the path. The longer the path, the greater the total mining effort that must have been done in order to arrive at the leaf. This is akin to existing schemes, such as that employed in Bitcoin-derived protocols. + +Since a block header includes the difficulty, the header alone is enough to validate the computation done. Any block contributes toward the total computation or \textit{total difficulty} of a chain. + +Thus we define the total difficulty of block $B$ recursively as: +\begin{eqnarray} +B_\mathbf{t} & \equiv & B'_\mathbf{t} + B_\mathbf{d} \\ +B' & \equiv & P(B_H) +\end{eqnarray} + +As such given a block $B$, $B_\mathbf{t}$ is its total difficulty, $B'$ is its parent block and $B_\mathbf{d}$ is its difficulty. + +\section{Block Finalisation} \label{ch:finalisation} + +The process of finalising a block involves four stages: + +\begin{enumerate} +\item Validate (or, if mining, determine) ommers; +\item validate (or, if mining, determine) transactions; +\item apply rewards; +\item verify (or, if mining, compute a valid) state and \hyperlink{block nonce}{nonce}. +\end{enumerate} + +\subsection{Ommer Validation} + +The validation of \hyperlink{ommerheaders}{ommer headers} means nothing more than verifying that each ommer header is both a valid header and satisfies the relation of $N$th-generation ommer to the present block where $N \leq 6$. The maximum of ommer headers is two. Formally: +\begin{equation} +\lVert \hyperlink{B U}{B_\mathbf{U}} \rVert \leqslant 2 \bigwedge_{U \in \hyperlink{B U}{B_\mathbf{U}}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6) +\end{equation} + +where $k$ denotes the ``is-kin'' property: +\begin{equation} +k(U, H, n) \equiv \begin{cases} false & \text{if} \quad n = 0 \\ +s(U, H) &\\ +\quad \vee \; k(U, P(H)_H, n - 1) & \text{otherwise} +\end{cases} +\end{equation} + +and $s$ denotes the ``is-sibling'' property: +\begin{equation} +s(U, H) \equiv (P(H) = P(U)\; \wedge \; H \neq U \; \wedge \; U \notin B(H)_\mathbf{U}) +\end{equation} +where $B(H)$ is the block of the corresponding header $H$. + +\subsection{Transaction Validation} + +%where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_\mathbf{T}[i]$, and $g[i]$ the total gas used immediately after said transaction. + +The given \textbf{gasUsed} must correspond faithfully to the transactions listed: \hyperlink{H g}{${B_H}_\mathbf{g}$}, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction: +\begin{equation} +\hyperlink{H g}{{B_H}_\mathbf{g}} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathbf{u}} +\end{equation} + +\subsection{Reward Application} + +The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{block reward R b}{$R_\mathbf{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):} +\begin{eqnarray} +\Omega(B, \boldsymbol{\sigma}) & \equiv & \boldsymbol{\sigma}': \boldsymbol{\sigma}' = \boldsymbol{\sigma} \quad \text{except:} \\ +\boldsymbol{\sigma}'[\hyperlink{H c}{{B_H}_\mathbf{c}}]_\mathbf{b} & = & \boldsymbol{\sigma}[{B_H}_\mathbf{c}]_\mathbf{b} + (1 + \frac{\lVert \hyperlink{B U}{B_\mathbf{U}}\rVert}{32})\hyperlink{block reward R b}{R_\mathbf{b}} \\ +\forall_{U \in B_\mathbf{U}}: \\ \nonumber + \boldsymbol{\sigma}'[U_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[U_\mathbf{c}]_\mathbf{b} + (1 + \frac{1}{8} (U_\mathbf{i} - \hyperlink{H i}{{B_H}_\mathbf{i}})) \hyperlink{block reward R b}{R_\mathbf{b}} +\end{eqnarray} + +If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively.\hypertarget{block reward R b}{} + +We define the block reward as 5 Ether: +\begin{equation} +\text{Let} \quad R_\mathbf{b} = 5 \times 10^{18} +\end{equation} + +\subsection{State \& Nonce Validation}\label{sec:statenoncevalidation} + +\hypertarget{Gamma}{ +We may now define the function, $\Gamma$, that maps a block $B$ to its initiation state: +\begin{equation} +\Gamma(B) \equiv \begin{cases} +\boldsymbol{\sigma}_0 & \text{if} \quad P(B_H) = \varnothing \\ +\boldsymbol{\sigma}_\mathbf{i}: \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\boldsymbol{\sigma}_\mathbf{i})) = {P(B_H)_H}_\mathbf{r} & \text{otherwise} +\end{cases} +\end{equation} +} +Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathbf{i}$; it is assumed that implementations will store this in the state database, which is trivial and efficient since the trie is by nature an immutable data structure. +\hypertarget{Phi}{ +And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$:} +\begin{eqnarray} +\Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\ +B'_\mathbf{n} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \\ +B'_\mathbf{m} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\ +B^* & \equiv & B \quad \text{except:} \quad {\hyperlink{Transaction Receipt}{B^*_\mathbf{r}}} = \hyperlink{r}{r}(\hyperlink{Pi}{\Pi}(\Gamma(B), B)) +\end{eqnarray} +With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}. + +As specified at the beginning of the present work, \hyperlink{Pi}{$\Pi$ is the state-transition function}, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined. + +\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_\mathbf{u}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_\mathbf{b}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction): +\begin{equation} +\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) & \text{otherwise} \end{cases} +\end{equation} + +In the case of \hyperlink{Transaction Receipt}{${B_\mathbf{R}}[n]_\mathbf{u}$}, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total: +\begin{equation} +\mathbf{R}[n]_\mathbf{u} = \begin{cases} 0 & \text{if} \quad n < 0 \\ +\begin{array}[b]{l} +\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])\\ \quad + \mathbf{R}[n-1]_\mathbf{u} +\end{array} + & \text{otherwise} \end{cases} +\end{equation} + +For $\mathbf{R}[n]_\mathbf{l}$, we utilise the \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} function that we conveniently defined in the transaction execution function. +\begin{equation} +\mathbf{R}[n]_\mathbf{l} = +\hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) +\end{equation} + +\hypertarget{Pi}{ +Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$: +\begin{equation} +\Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{R sigma}{\mathbf{R})_{\boldsymbol{\sigma}}}) +\end{equation}} + +Thus the complete block-transition mechanism is defined, except for $\mathtt{PoW}$, the proof-of-work function. + +\subsection{Mining Proof-of-Work} \label{ch:pow} + +The mining proof-of-work (PoW) exists as a cryptographically secure nonce that proves beyond reasonable doubt that a particular amount of computation has been expended in the determination of some token value $n$. It is utilised to enforce the blockchain security by giving meaning and credence to the notion of difficulty (and, by extension, total difficulty). However, since mining new blocks comes with an attached reward, the proof-of-work not only functions as a method of securing confidence that the blockchain will remain canonical into the future, but also as a wealth distribution mechanism. + +For both reasons, there are two important goals of the proof-of-work function; firstly, it should be as accessible as possible to as many people as possible. The requirement of, or reward from, specialised and uncommon hardware should be minimised. This makes the distribution model as open as possible, and, ideally, makes the act of mining a simple swap from electricity to Ether at roughly the same rate for anyone around the world. + +Secondly, it should not be possible to make super-linear profits, and especially not so with a high initial barrier. Such a mechanism allows a well-funded adversary to gain a troublesome amount of the network's total mining power and as such gives them a super-linear reward (thus skewing distribution in their favour) as well as reducing the network security. + +One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task (\cite{ASICSmithMJS}, \cite{ASICWiki}). In Bitcoin's case the task is the SHA256 hash function (\cite{ASICbitcoinwiki}). While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet. + +Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the \hyperlink{block nonce}{nonce} requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware'' for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum \textit{Frontier} and \textit{Homestead} we have chosen the first path. + +More formally, the proof-of-work function takes the form of $\mathtt{PoW}$: +\begin{equation} +m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \quad n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathbf{n}, \mathbf{d}) +\end{equation} + +Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathbf{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathbf{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being the \hyperlink{block nonce}{block nonce}, a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below. +\subsubsection{Ethash} +Ethash is the PoW algorithm for Ethereum \textit{Frontier} and \textit{Homestead}. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms were drastically changed with R\&D from February 2015 until May 4 2015 (\cite{commitdateforEthash}). The general route that the algorithm takes is as follows: + +There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, \hyperlink{Jcacheinit}{$J_{\mathrm{cacheinit}}$} bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, \hyperlink{Jdatasetinit}{$J_{\rm{datasetinit}}$} bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. + +Mining involves grabbing random slices of the dataset and hashing them together. Verification can be done with low memory by using the cache to regenerate the specific pieces of the dataset that you need, so you only need to store the cache. The large dataset is updated once every \hyperlink{Jepoch}{$J_{\mathrm{epoch}}$} blocks, so the vast majority of a miner's effort will be reading the dataset, not making changes to it. The mentioned parameters as well as the algorithm is explained in detail in appendix \ref{app:ethash}. + +\section{Implementing Contracts} + +There are several patterns of contracts engineering that allow particular useful behaviours; two of these that I will briefly discuss are data feeds and random numbers. + +\subsection{Data Feeds} +A data feed contract is one which provides a single service: it gives access to information from the external world within Ethereum. The accuracy and timeliness of this information is not guaranteed and it is the task of a secondary contract author---the contract that utilises the data feed---to determine how much trust can be placed in any single data feed. + +The general pattern involves a single contract within Ethereum which, when given a message call, replies with some timely information concerning an external phenomenon. An example might be the local temperature of New York City. This would be implemented as a contract that returned that value of some known point in storage. Of course this point in storage must be maintained with the correct such temperature, and thus the second part of the pattern would be for an external server to run an Ethereum node, and immediately on discovery of a new block, creates a new valid transaction, sent to the contract, updating said value in storage. The contract's code would accept such updates only from the identity contained on said server. + +\subsection{Random Numbers} +Providing random numbers within a deterministic system is, naturally, an impossible task. However, we can approximate with pseudo-random numbers by utilising data which is generally unknowable at the time of transacting. Such data might include the block's hash, the block's timestamp and the block's beneficiary address. In order to make it hard for malicious miner to control those values, one should use the {\small BLOCKHASH} operation in order to use hashes of the previous 256 blocks as pseudo-random numbers. For a series of such numbers, a trivial solution would be to add some constant amount and hashing the result. + +\section{Future Directions} \label{ch:future} + +The state database won't be forced to maintain all past state \hyperlink{trie}{trie} structures into the future. It should maintain an age for each node and eventually discard nodes that are neither recent enough nor checkpoints; checkpoints, or a set of nodes in the database that allow a particular block's state trie to be traversed, could be used to place a maximum limit on the amount of computation needed in order to retrieve any state throughout the blockchain. + +Blockchain consolidation could be used in order to reduce the amount of blocks a client would need to download to act as a full, mining, node. A compressed archive of the trie structure at given points in time (perhaps one in every 10,000th block) could be maintained by the peer network, effectively recasting the \hyperlink{GenesisBlock}{genesis block}. This would reduce the amount to be downloaded to a single archive plus a hard maximum limit of blocks. + +Finally, blockchain compression could perhaps be conducted: nodes in state trie that haven't sent/received a transaction in some constant amount of blocks could be thrown out, reducing both Ether-leakage and the growth of the state database. + +\subsection{Scalability} + +Scalability remains an eternal concern. With a generalised state transition function, it becomes difficult to partition and parallelise transactions to apply the divide-and-conquer strategy. Unaddressed, the dynamic value-range of the system remains essentially fixed and as the average transaction value increases, the less valuable of them become ignored, being economically pointless to include in the main ledger. However, several strategies exist that may potentially be exploited to provide a considerably more scalable protocol. + +Some form of hierarchical structure, achieved by either consolidating smaller lighter-weight chains into the main block or building the main block through the incremental combination and adhesion (through proof-of-work) of smaller transaction sets may allow parallelisation of transaction combination and block-building. Parallelism could also come from a prioritised set of parallel blockchains, consolidating each block and with duplicate or invalid transactions thrown out accordingly. + +Finally, verifiable computation, if made generally available and efficient enough, may provide a route to allow the proof-of-work to be the verification of final state. + +\section{Conclusion} \label{ch:conclusion} + +I have introduced, discussed and formally defined the protocol of Ethereum. Through this protocol the reader may implement a node on the Ethereum network and join others in a decentralised secure social operating system. Contracts may be authored in order to algorithmically specify and autonomously enforce rules of interaction. + +\section{Acknowledgements} + +Many thanks to Aeron Buchanan for authoring the Homestead revisions, Christoph Jentzsch for authoring the Ethash algorithm and Yoichi Hirai for doing most of the EIP-150 changes. Important maintenance, useful corrections and suggestions were provided by a number of others from the Ethereum DEV organisation and Ethereum community at large including Gustav Simonsson, Pawe\l{} Bylica, Jutta Steiner, Nick Savers, Viktor Tr\'{o}n, Marko Simovic, Giacomo Tazzari and, of course, Vitalik Buterin. + +\section{Availability} + +The source of this paper is maintained at \url{https://github.com/ethereum/yellowpaper/}. An auto-generated PDF is located at \url{https://ethereum.github.io/yellowpaper/paper.pdf}. + +\bibliography{Biblio} +\bibliographystyle{plainnat} + +\end{multicols} + +\appendix + +\section{Terminology} \label{ch:Terminology} + +\begin{description} +\item[External Actor] A person or other entity able to interface to an Ethereum node, but external to the world of Ethereum. It can interact with Ethereum through depositing signed Transactions and inspecting the blockchain and associated state. Has one (or more) intrinsic Accounts. + +\item[Address] A 160-bit code used for identifying Accounts. + +\item[Account] Accounts have an intrinsic balance and transaction count maintained as part of the Ethereum state. They also have some (possibly empty) EVM Code and a (possibly empty) Storage State associated with them. Though homogenous, it makes sense to distinguish between two practical types of account: those with empty associated EVM Code (thus the account balance is controlled, if at all, by some external entity) and those with non-empty associated EVM Code (thus the account represents an Autonomous Object). Each Account has a single Address that identifies it. + +\item[Transaction] A piece of data, signed by an External Actor. It represents either a Message or a new Autonomous Object. Transactions are recorded into each block of the blockchain. + +\item[Autonomous Object] A notional object existent only within the hypothetical state of Ethereum. Has an intrinsic address and thus an associated account; the account will have non-empty associated EVM Code. Incorporated only as the Storage State of that account. + +\item[Storage State] The information particular to a given Account that is maintained between the times that the Account's associated EVM Code runs. + +\item[Message] Data (as a set of bytes) and Value (specified as Ether) that is passed between two Accounts, either through the deterministic operation of an Autonomous Object or the cryptographically secure signature of the Transaction. + +\item[Message Call] The act of passing a message from one Account to another. If the destination account is associated with non-empty EVM Code, then the VM will be started with the state of said Object and the Message acted upon. If the message sender is an Autonomous Object, then the Call passes any data returned from the VM operation. + +\item[Gas] The fundamental network cost unit. Paid for exclusively by Ether (as of PoC-4), which is converted freely to and from Gas as required. Gas does not exist outside of the internal Ethereum computation engine; its price is set by the Transaction and miners are free to ignore Transactions whose Gas price is too low. + +\item[Contract] Informal term used to mean both a piece of EVM Code that may be associated with an Account or an Autonomous Object. + +\item[Object] Synonym for Autonomous Object. + +\item[App] An end-user-visible application hosted in the Ethereum Browser. + +\item[Ethereum Browser] (aka Ethereum Reference Client) A cross-platform GUI of an interface similar to a simplified browser (a la Chrome) that is able to host sandboxed applications whose backend is purely on the Ethereum protocol. + +\item[Ethereum Virtual Machine] (aka EVM) The virtual machine that forms the key part of the execution model for an Account's associated EVM Code. + +\item[Ethereum Runtime Environment] (aka ERE) The environment which is provided to an Autonomous Object executing in the EVM. Includes the EVM but also the structure of the world state on which the EVM relies for certain I/O instructions including CALL \& CREATE. + +\item[EVM Code] The bytecode that the EVM can natively execute. Used to formally specify the meaning and ramifications of a message to an Account. + +\item[EVM Assembly] The human-readable form of EVM-code. + +\item[LLL] The Lisp-like Low-level Language, a human-writable language used for authoring simple contracts and general low-level language toolkit for trans-compiling to. + +\end{description} + +\hypertarget{rlp}{} +\section{Recursive Length Prefix}\label{app:rlp} +This is a serialisation method for encoding arbitrarily structured binary data (byte arrays). + +We define the set of possible structures $\mathbb{T}$: +\begin{eqnarray} +\mathbb{T} & \equiv & \mathbb{L} \cup \mathbb{B} \\ +\mathbb{L} & \equiv & \{ \mathbf{t}: \mathbf{t} = ( \mathbf{t}[0], \mathbf{t}[1], ... ) \; \wedge \; \forall_{n < \lVert \mathbf{t} \rVert} \; \mathbf{t}[n] \in \mathbb{T} \} \\ +\mathbb{B} & \equiv & \{ \mathbf{b}: \mathbf{b} = ( \mathbf{b}[0], \mathbf{b}[1], ... ) \; \wedge \; \forall_{n < \lVert \mathbf{b} \rVert} \; \mathbf{b}[n] \in \mathbb{O} \} +\end{eqnarray} + +Where $\mathbb{O}$ is the set of bytes. Thus $\mathbb{B}$ is the set of all sequences of bytes (otherwise known as byte-arrays, and a leaf if imagined as a tree), $\mathbb{L}$ is the set of all tree-like (sub-)structures that are not a single leaf (a branch node if imagined as a tree) and $\mathbb{T}$ is the set of all byte-arrays and such structural sequences. + +We define the RLP function as $\mathtt{\tiny RLP}$ through two sub-functions, the first handling the instance when the value is a byte array, the second when it is a sequence of further values: +\begin{equation} +\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_\mathbf{b}}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ \hyperlink{R l}{R_\mathbf{l}}(\mathbf{x}) & \text{otherwise} \end{cases} +\end{equation} + +If the value to be serialised is a byte-array, the RLP serialisation takes one of three forms: + +\begin{itemize} +\item If the byte-array contains solely a single byte and that single byte is less than 128, then the input is exactly equal to the output. +\item If the byte-array contains fewer than 56 bytes, then the output is equal to the input prefixed by the byte equal to the length of the byte array plus 128. +\item Otherwise, the output is equal to the input prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the input byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 183. +\end{itemize} +\hypertarget{R b}{ +Formally, we define $R_\mathbf{b}$:} +\begin{eqnarray} +R_\mathbf{b}(\mathbf{x}) & \equiv & \begin{cases} +\mathbf{x} & \text{if} \quad \lVert \mathbf{x} \rVert = 1 \wedge \mathbf{x}[0] < 128 \\ +(128 + \lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{else if} \quad \lVert \mathbf{x} \rVert < 56 \\ +\big(183 + \big\lVert \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{otherwise} +\end{cases} \\ +\mathtt{\tiny BE}(x) & \equiv & (b_0, b_1, ...): b_0 \neq 0 \wedge x = \sum_{n = 0}^{n < \lVert \mathbf{b} \rVert} b_n \cdot 256^{\lVert \mathbf{b} \rVert - 1 - n} \\ +(a) \cdot (b, c) \cdot (d, e) & = & (a, b, c, d, e) +\end{eqnarray} + +Thus $\mathtt{\tiny BE}$ is the function that expands a positive integer value to a big-endian byte array of minimal length and the dot operator performs sequence concatenation. + +If instead, the value to be serialised is a sequence of other items then the RLP serialisation takes one of two forms: + +\begin{itemize} +\item If the concatenated serialisations of each contained item is less than 56 bytes in length, then the output is equal to that concatenation prefixed by the byte equal to the length of this byte array plus 192. +\item Otherwise, the output is equal to the concatenated serialisations prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the concatenated serialisations byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 247. +\end{itemize} +\hypertarget{R l}{ +Thus we finish by formally defining $R_\mathbf{l}$: +\begin{eqnarray} +R_\mathbf{l}(\mathbf{x}) & \equiv & \begin{cases} +(192 + \lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{if} \quad \lVert s(\mathbf{x}) \rVert < 56 \\ +\big(247 + \big\lVert \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{otherwise} +\end{cases} \\ +s(\mathbf{x}) & \equiv & \mathtt{\tiny RLP}(\mathbf{x}_0) \cdot \mathtt{\tiny RLP}(\mathbf{x}_1) ... +\end{eqnarray} +} +If RLP is used to encode a scalar, defined only as a positive integer ($\mathbb{P}$ or any $x$ for $\mathbb{P}_x$), it must be specified as the shortest byte array such that the big-endian interpretation of it is equal. Thus the RLP of some positive integer $i$ is defined as: +\begin{equation} +\mathtt{\tiny RLP}(i : i \in \mathbb{P}) \equiv \mathtt{\tiny RLP}(\mathtt{\tiny BE}(i)) +\end{equation} + +When interpreting RLP data, if an expected fragment is decoded as a scalar and leading zeroes are found in the byte sequence, clients are required to consider it non-canonical and treat it in the same manner as otherwise invalid RLP data, dismissing it completely. + +There is no specific canonical encoding format for signed or floating-point values. + +\section{Hex-Prefix Encoding}\label{app:hexprefix} +Hex-prefix encoding is an efficient method of encoding an arbitrary number of nibbles as a byte array. It is able to store an additional flag which, when used in the context of the trie (the only context in which it is used), disambiguates between node types. + +It is defined as the function $\mathtt{\tiny HP}$ which maps from a sequence of nibbles (represented by the set $\mathbb{Y}$) together with a boolean value to a sequence of bytes (represented by the set $\mathbb{B}$): + +\begin{eqnarray} +\mathtt{\tiny HP}(\mathbf{x}, t): \mathbf{x} \in \mathbb{Y} & \equiv & \begin{cases} +(16f(t), 16\mathbf{x}[0] + \mathbf{x}[1], 16\mathbf{x}[2] + \mathbf{x}[3], ...) & +\text{if} \quad \lVert \mathbf{x} \rVert \; \text{is even} \\ +(16(f(t) + 1) + \mathbf{x}[0], 16\mathbf{x}[1] + \mathbf{x}[2], 16\mathbf{x}[3] + \mathbf{x}[4], ...) & +\text{otherwise} +\end{cases} \\ +f(t) & \equiv & \begin{cases} 2 & \text{if} \quad t \neq 0 \\ 0 & \text{otherwise} \end{cases} +\end{eqnarray} + +Thus the high nibble of the first byte contains two flags; the lowest bit encoding the oddness of the length and the second-lowest encoding the flag $t$. The low nibble of the first byte is zero in the case of an even number of nibbles and the first nibble in the case of an odd number. All remaining nibbles (now an even number) fit properly into the remaining bytes. + +\hypertarget{trie}{} +\section{Modified Merkle Patricia Tree}\label{app:trie} +The modified Merkle Patricia tree (trie) provides a persistent data structure to map between arbitrary-length binary data (byte arrays). It is defined in terms of a mutable data structure to map between 256-bit binary fragments and arbitrary-length binary data, typically implemented as a database. The core of the trie, and its sole requirement in terms of the protocol specification is to provide a single value that identifies a given set of key-value pairs, which may be either a 32 byte sequence or the empty byte sequence. It is left as an implementation consideration to store and maintain the structure of the trie in a manner that allows effective and efficient realisation of the protocol. + +Formally, we assume the input value $\mathfrak{I}$, a set containing pairs of byte sequences: +\begin{equation} +\mathfrak{I} = \{ (k_0 \in \mathbb{B}, v_0 \in \mathbb{B}), k_1 \in \mathbb{B}, v_1 \in \mathbb{B}), ... \} +\end{equation} + +When considering such a sequence, we use the common numeric subscript notation to refer to a tuple's key or value, thus: +\begin{equation} +\forall_{I \in \mathfrak{I}} I \equiv (I_0, I_1) +\end{equation} + +Any series of bytes may also trivially be viewed as a series of nibbles, given an endian-specific notation; here we assume big-endian. Thus: +\begin{eqnarray} +y(\mathfrak{I}) & = & \{ (k_0' \in \mathbb{Y}, v_0 \in \mathbb{B}), (k_1' \in \mathbb{Y}, v_1 \in \mathbb{B}), ... \} \\ +\forall_n \quad \forall_{i: i < 2\lVert\ k_n\rVert} \quad k_n'[i] & \equiv & +\begin{cases} +\lfloor k_n[i \div 2] \div 16 \rfloor & \text{if} \; i \; \text{is even} \\ +k_n[\lfloor i \div 2 \rfloor] \bmod 16 & \text{otherwise} +\end{cases} +\end{eqnarray} + +We define the function $\texttt{\small TRIE}$, which evaluates to the root of the trie that represents this set when encoded in this structure: +\begin{equation} +\texttt{\small TRIE}(\mathfrak{I}) \equiv \texttt{\small KEC}(c(\mathfrak{I}, 0)) +\end{equation} + +We also assume a function $n$, the trie's node cap function. When composing a node, we use RLP to encode the structure. As a means of reducing storage complexity, for nodes whose composed RLP is fewer than 32 bytes, we store the RLP directly; for those larger we assert prescience of the byte array whose Keccak hash evaluates to our reference. Thus we define in terms of $c$, the node composition function: +\begin{equation} +n(\mathfrak{I}, i) \equiv \begin{cases} +() & \text{if} \quad \mathfrak{I} = \varnothing \\ +c(\mathfrak{I}, i) & \text{if} \quad \lVert c(\mathfrak{I}, i)\rVert < 32 \\ +\texttt{\small KEC}(c(\mathfrak{I}, i)) & \text{otherwise} +\end{cases} +\end{equation} + +In a manner similar to a radix tree, when the trie is traversed from root to leaf, one may build a single key-value pair. The key is accumulated through the traversal, acquiring a single nibble from each branch node (just as with a radix tree). Unlike a radix tree, in the case of multiple keys sharing the same prefix or in the case of a single key having a unique suffix, two optimising nodes are provided. Thus while traversing, one may potentially acquire multiple nibbles from each of the other two node types, extension and leaf. There are three kinds of nodes in the trie: +\begin{description} +\item[Leaf] A two-item structure whose first item corresponds to the nibbles in the key not already accounted for by the accumulation of keys and branches traversed from the root. The hex-prefix encoding method is used and the second parameter to the function is required to be $true$. +\item[Extension] A two-item structure whose first item corresponds to a series of nibbles of size greater than one that are shared by at least two distinct keys past the accumulation of the keys of nibbles and the keys of branches as traversed from the root. The hex-prefix encoding method is used and the second parameter to the function is required to be $false$. +\item[Branch] A 17-item structure whose first sixteen items correspond to each of the sixteen possible nibble values for the keys at this point in their traversal. The 17th item is used in the case of this being a terminator node and thus a key being ended at this point in its traversal. +\end{description} + +A branch is then only used when necessary; no branch nodes may exist that contain only a single non-zero entry. We may formally define this structure with the structural composition function $c$: +\begin{equation} +c(\mathfrak{I}, i) \equiv \begin{cases} +\texttt{\small RLP}\Big( \big(\texttt{\small HP}(I_0[i .. (\lVert I_0\rVert - 1)], true), I_1 \big) \Big) & \text{if} \quad \lVert \mathfrak{I} \rVert = 1 \quad \text{where} \; \exists I: I \in \mathfrak{I} \\ +\texttt{\small RLP}\Big( \big(\texttt{\small HP}(I_0[i .. (j - 1)], false), n(\mathfrak{I}, j) \big) \Big) & \text{if} \quad i \ne j \quad \text{where} \; j = \arg \max_x : \exists \mathbf{l}: \lVert \mathbf{l} \rVert = x : \forall_{I \in \mathfrak{I}}: I_0[0 .. (x - 1)] = \mathbf{l} \\ +\texttt{\small RLP}\Big( (u(0), u(1), ..., u(15), v) \Big) & \text{otherwise} \quad \text{where} \begin{array}[t]{rcl} +u(j) & \equiv & n(\{ I : I \in \mathfrak{I} \wedge I_0[i] = j \}, i + 1) \\ +v & = & \begin{cases} +I_1 & \text{if} \quad \exists I: I \in \mathfrak{I} \wedge \lVert I_0 \rVert = i \\ +() & \text{otherwise} +\end{cases} +\end{array} +\end{cases} +\end{equation} + +\subsection{Trie Database} +Thus no explicit assumptions are made concerning what data is stored and what is not, since that is an implementation-specific consideration; we simply define the identity function mapping the key-value set $\mathfrak{I}$ to a 32-byte hash and assert that only a single such hash exists for any $\mathfrak{I}$, which though not strictly true is accurate within acceptable precision given the Keccak hash's collision resistance. In reality, a sensible implementation will not fully recompute the trie root hash for each set. + +A reasonable implementation will maintain a database of nodes determined from the computation of various tries or, more formally, it will memoise the function $c$. This strategy uses the nature of the trie to both easily recall the contents of any previous key-value set and to store multiple such sets in a very efficient manner. Due to the dependency relationship, Merkle-proofs may be constructed with an $O(\log N)$ space requirement that can demonstrate a particular leaf must exist within a trie of a given root hash. + +\section{Precompiled Contracts}\label{app:precompiled} + +For each precompiled contract, we make use of a template function, $\Xi_{\mathtt{PRE}}$, which implements the out-of-gas checking. +\begin{equation} +\Xi_{\mathtt{PRE}}(\boldsymbol{\sigma}, g, I) \equiv \begin{cases} +(\varnothing, 0, A^0, ()) & \text{if} \quad \mathbf{g} < \mathbf{g}_\mathbf{r} \\ +(\boldsymbol\sigma, \mathbf{g} - \mathbf{g}_\mathbf{r}, A^0, \mathbf{o}) & \text{otherwise}\end{cases} +\end{equation} + +The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $\mathbf{g}_\mathbf{r}$, the gas requirements. + +For the elliptic curve DSA recover VM execution function, we also define $\mathbf{d}$ to be the input data, well-defined for an infinite length by appending zeroes as required. Importantly in the case of an invalid signature ($\mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing$), then we have no output. +\begin{eqnarray} +\Xi_{\mathtt{ECREC}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ +\mathbf{g}_\mathbf{r} &=& 3000\\ +|\mathbf{o}| &=& \begin{cases} 0 & \text{if} \quad \mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing\\ 32 & \text{otherwise} \end{cases}\\ +\text{if} \quad |\mathbf{o}| = 32: &&\\ +\mathbf{o}[0..11] &=& 0 \\ +\mathbf{o}[12..31] &=& \mathtt{\tiny KEC}\big(\mathtt{\tiny ECDSARECOVER}(h, v, r, s)\big)[12..31] \quad \text{where:}\\ +\mathbf{d}[0..(|I_\mathbf{d}|-1)] &=& I_\mathbf{d}\\ +\mathbf{d}[|I_\mathbf{d}|..] &=& (0, 0, ...) \\ +h &=& \mathbf{d}[0..31]\\ +v &=& \mathbf{d}[32..63]\\ +r &=& \mathbf{d}[64..95]\\ +s &=& \mathbf{d}[96..127] +\end{eqnarray} + +The two hash functions, RIPEMD-160 and SHA2-256 are more trivially defined as an almost pass-through operation. Their gas usage is dependent on the input data size, a factor rounded up to the nearest number of words. +\begin{eqnarray} +\Xi_{\mathtt{SHA256}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ +\mathbf{g}_\mathbf{r} &=& 60 + 12\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ +\mathbf{o}[0..31] &=& \mathtt{\tiny SHA256}(I_\mathbf{d})\\ +\Xi_{\mathtt{RIP160}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ +\mathbf{g}_\mathbf{r} &=& 600 + 120\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ +\mathbf{o}[0..11] &=& 0 \\ +\mathbf{o}[12..31] &=& \mathtt{\tiny RIPEMD160}(I_\mathbf{d})\\ +\end{eqnarray} + +For the purposes here, we assume we have well-defined standard cryptographic functions for RIPEMD-160 and SHA2-256 of the form: +\begin{eqnarray} +\mathtt{\small SHA256}(\mathbf{i} \in \mathbb{B}) & \equiv & o \in \mathbb{B}_{32} \\ +\mathtt{\small RIPEMD160}(\mathbf{i} \in \mathbb{B}) & \equiv & o \in \mathbb{B}_{20} +\end{eqnarray} + +Finally, the fourth contract, the identity function $\Xi_{\mathtt{ID}}$ simply defines the output as the input: +\begin{eqnarray} +\Xi_{\mathtt{ID}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\ +\mathbf{g}_\mathbf{r} &=& 15 + 3\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\ +\mathbf{o} &=& I_\mathbf{d} +\end{eqnarray} + + +\section{Signing Transactions}\label{app:signing} + +The method of signing transactions is similar to the `Electrum style signatures' as defined by \cite{npmElectrum2017}, heading "Managing styles with Radium" in the bullet point list. This method utilises the SECP-256k1 curve as described by \cite{secp256k1BitcoinWiki2016} and \cite{secp256k1StackExchange2014}, and is implemented similarly to as described by \cite{gura2004comparing} on p. 9 of 15, para. 3. + +It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}. + +We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \footnote{For the former citation, refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.} %(assuming that the former is for signature generation and the latter is for signature verification) +\begin{eqnarray} +\mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\ +\mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\ +\mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} +\end{eqnarray} + +Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range)\hypertarget{v}{. It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} + +\newcommand{\slimit}{\ensuremath{\text{s-limit}}} + +We declare that a signature is invalid unless all the following conditions are true: +\begin{align} +0 < r &< \mathtt{\tiny secp256k1n} \\ +0 < s &< \mathtt{\tiny secp256k1n} \div 2 + 1 \\ +\hyperlink{v}{v} &\in \{27,28\} +\end{align} +where: +\begin{align} +\mathtt{\tiny secp256k1n} &= 115792089237316195423570985008687907852837564279074904382605163141518161494337 +%\mathtt{\tiny secp256k1p} &= 2^{256} - 2^{32} - 977\\ +\end{align} + +For a given private key, $p_r$, the Ethereum address $A(p_r)$ (a 160-bit value) to which it corresponds is defined as the right most 160-bits of the Keccak hash of the corresponding ECDSA public key: +\begin{equation} +A(p_r) = \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSAPUBKEY}(p_r) \big) \big) +\end{equation} + +The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_\mathbf{r}$, $T_\mathbf{s}$ and $\hyperlink{T w}{T_\mathbf{w}}$: +\begin{eqnarray} +L_S(T) & \equiv & \begin{cases} +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}) & \text{if} \; T_\mathbf{t} = 0\\ +(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}) & \text{otherwise} +\end{cases} \\ +h(T) & \equiv & \mathtt{\small KEC}( L_S(T) ) +\end{eqnarray} + +\hypertarget{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as: +\begin{eqnarray} +G(T, p_r) \equiv T \quad \text{except:} \\ +(\hyperlink{T w}{T_\mathbf{w}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r) +\end{eqnarray}} + +We may then define the sender function $S$ of the transaction as: +\begin{equation} +S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) \big) \big) +\end{equation} + +The assertion that the sender of a signed transaction equals the address of the signer should be self-evident: +\begin{equation} +\forall T: \forall p_r: S(G(T, p_r)) \equiv A(p_r) +\end{equation} + +\newpage +\section{Fee Schedule}\label{app:fees} + +The fee schedule $G$ is a tuple of 31 scalar values corresponding to the relative costs, in gas, of a number of abstract operations that a transaction may effect. + +\begin{tabularx}{\textwidth}{lrX} +\toprule +Name & Value & Description* \\ +\midrule +$G_{zero}$ & 0 & Nothing is paid for operations of the set {\small $W_{zero}$}. \\ +$G_{base}$ & 2 & This is the amount of gas to pay for operations of the set {\small $W_{base}$}. \\ +$G_{verylow}$ & 3 & This is the amount of gas to pay for operations of the set {\small $W_{verylow}$}. \\ +$G_{low}$ & 5 & This is the amount of gas to pay for operations of the set {\small $W_{low}$}. \\ +$G_{mid}$ & 8 & This is the amount of gas to pay for operations of the set {\small $W_{mid}$}. \\ +$G_{high}$ & 10 & This is the amount of gas to pay for operations of the set {\small $W_{high}$}. \\ +$G_{extcode}$ & 700 & This is the amount of gas to pay for operations of the set {\small $W_{extcode}$}. \\ +$G_{balance}$ & 400 & This is the amount of gas to pay for a {\small BALANCE} operation. \\ +$G_{sload}$ & 200 & This is paid for an {\small SLOAD} operation. \\ +$G_{jumpdest}$ & 1 & This is paid for a {\small JUMPDEST} operation. \\ +$G_{sset}$ & 20000 & This is paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\ +$G_{sreset}$ & 5000 & This is the amount for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\ +$R_{sclear}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \hypertarget{Rselfdestruct}{}\\ +$R_{selfdestruct}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \hypertarget{Gselfdestruct}{}\\ +$G_{selfdestruct}$ & 5000 & This is the amount of gas to pay for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation. \\ +$G_{create}$ & 32000 & This is paid for a {\small CREATE} operation. \\ +$G_{codedeposit}$ & 200 & This is paid per byte for a {\small CREATE} operation to succeed in placing code into the state. \\ +$G_{call}$ & 700 & This is paid for a {\small CALL} operation. \\ +$G_{callvalue}$ & 9000 & This is paid for a non-zero value transfer as part of the {\small CALL} operation. \\ +$G_{callstipend}$ & 2300 & This is a stipend for the called contract subtracted from $G_{callvalue}$ for a non-zero value transfer. \hypertarget{Gnewaccount}{}\\ +$G_{newaccount}$ & 25000 & This is paid for a {\small CALL} or for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation which creates an account. \\ +$G_{exp}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ +$G_{expbyte}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ +$G_{memory}$ & 3 & This is paid for every additional word when expanding memory. \\ +$G_\text{txcreate}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.\\ +$G_{txdatazero}$ & 4 & This is paid for every zero byte of data or code for a transaction. \\ +$G_{txdatanonzero}$ & 68 & This is paid for every non-zero byte of data or code for a transaction. \\ +$G_{transaction}$ & 21000 & This is paid for every transaction. \\ +$G_{log}$ & 375 & This is a partial payment for a {\small LOG} operation. \\ +$G_{logdata}$ & 8 & This is paid for each byte in a {\small LOG} operation's data. \\ +$G_{logtopic}$ & 375 & This is paid for each topic of a {\small LOG} operation. \\ +$G_{sha3}$ & 30 & This is paid for each {\small SHA3} operation. \\ +$G_{sha3word}$ & 6 & This is paid for each word (rounded up) for input data to a {\small SHA3} operation. \\ +$G_{copy}$ & 3 & This is a partial payment for {\small *COPY} operations, multiplied by the number of words copied, rounded up. \\ +$G_{blockhash}$ & 20 & This is a payment for a {\small BLOCKHASH} operation. \\ + +%extern u256 const \mathbf{c}_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. +\bottomrule +\end{tabularx} + +\section{Virtual Machine Specification}\label{app:vm} + +When interpreting 256-bit binary values as integers, the representation is big-endian. + +When a 256-bit machine datum is converted to and from a 160-bit address or hash, the rightwards (low-order for BE) 20 bytes are used and the left most 12 are discarded or filled with zeroes, thus the integer values (when the bytes are interpreted as big-endian) are equivalent. + +\subsection{Gas Cost} + +The general gas cost function, $C$, is defined as: + +\begin{equation} +C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_\mathbf{i})-C_{mem}(\boldsymbol{\mu}_\mathbf{i}) + \begin{cases} +C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SSTORE} \\ +G_{exp} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] = 0 \\ +G_{exp} + G_{expbyte}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathbf{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] > 0 \\ +G_{verylow} + G_{copy}\times\lceil\boldsymbol{\mu}_\mathbf{s}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\ +G_{extcode} + G_{copy}\times\lceil\boldsymbol{\mu}_\mathbf{s}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\ +G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1] & \text{if} \quad w = \text{\small LOG0} \\ +G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+G_{logtopic} & \text{if} \quad w = \text{\small LOG1} \\ +G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+2G_{logtopic} & \text{if} \quad w = \text{\small LOG2} \\ +G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+3G_{logtopic} & \text{if} \quad w = \text{\small LOG3} \\ +G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+4G_{logtopic} & \text{if} \quad w = \text{\small LOG4} \\ +C_\text{\tiny CALL}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small CALL} \lor \text{\small CALLCODE} \lor \text{\small DELEGATECALL} \\ +\hyperlink{C tiny SELFDESTRUCT}{C_\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ +G_{create} & \text{if} \quad w = \text{\small CREATE}\\ +G_{sha3}+G_{sha3word} \lceil \mathbf{s}[1] \div 32 \rceil & \text{if} \quad w = \text{\small SHA3}\\ +G_{jumpdest} & \text{if} \quad w = \text{\small JUMPDEST}\\ +G_{sload} & \text{if} \quad w = \text{\small SLOAD}\\ +G_{zero} & \text{if} \quad w \in W_{zero}\\ +G_{base} & \text{if} \quad w \in W_{base}\\ +G_{verylow} & \text{if} \quad w \in W_{verylow}\\ +G_{low} & \text{if} \quad w \in W_{low}\\ +G_{mid} & \text{if} \quad w \in W_{mid}\\ +G_{high} & \text{if} \quad w \in W_{high}\\ +G_{extcode} & \text{if} \quad w \in W_{extcode}\\ +G_{balance} & \text{if} \quad w = \text{\small BALANCE}\\ +G_{blockhash} & \text{if} \quad w = \text{\small BLOCKHASH}\\ +\end{cases} +\end{equation} +\begin{equation} +w \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathbf{b} \rVert\\ +\text{\small STOP} & \text{otherwise} +\end{cases} +\end{equation} + +where: +\begin{equation} +C_{mem}(a) \equiv G_{memory} \cdot a + \Big\lfloor \dfrac{a^2}{512} \Big\rfloor +\end{equation} + +with \hyperlink{tiny CALL}{$C_\text{\tiny CALL}$}, \hyperlink{C tiny SELFDESTRUCT}{$C_\text{\tiny SELFDESTRUCT}$} and \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$} as specified in the appropriate section below. We define the following subsets of instructions: + +$W_{zero}$ = \{{\small STOP}, {\small RETURN}\} + +$W_{base}$ = \{{\small ADDRESS}, {\small ORIGIN}, {\small CALLER}, {\small CALLVALUE}, {\small CALLDATASIZE}, {\small CODESIZE}, {\small GASPRICE}, {\small COINBASE},\newline \noindent\hspace*{1cm} {\small TIMESTAMP}, {\small NUMBER}, {\small DIFFICULTY}, {\small GASLIMIT}, {\small POP}, {\small PC}, {\small MSIZE}, {\small GAS}\} + +$W_{verylow}$ = \{{\small ADD}, {\small SUB}, {\small NOT}, {\small LT}, {\small GT}, {\small SLT}, {\small SGT}, {\small EQ}, {\small ISZERO}, {\small AND}, {\small OR}, {\small XOR}, {\small BYTE}, {\small CALLDATALOAD}, \newline \noindent\hspace*{1cm} {\small MLOAD}, {\small MSTORE}, {\small MSTORE8}, {\small PUSH*}, {\small DUP*}, {\small SWAP*}\} + +$W_{low}$ = \{{\small MUL}, {\small DIV}, {\small SDIV}, {\small MOD}, {\small SMOD}, {\small SIGNEXTEND}\} + +$W_{mid}$ = \{{\small ADDMOD}, {\small MULMOD}, {\small JUMP}\} + +$W_{high}$ = \{{\small JUMPI}\} + +$W_{extcode}$ = \{{\small EXTCODESIZE}\} + +Note the memory cost component, given as the product of $G_{memory}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathbf{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes. + +Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_\mathbf{i}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal. + +Note also that $C_{mem}$ is the memory cost function (the expansion function being the difference between the cost before and after). It is a polynomial, with the higher-order coefficient divided and floored, and thus linear up to 724B of memory used, after which it costs substantially more. + +While defining the instruction set, we defined the memory-expansion for range function, $M$, thus: + +\begin{equation} +M(s, f, l) \equiv \begin{cases} +s & \text{if} \quad l = 0 \\ +\max(s, \ceil{ (f + l) \div 32 }) & \text{otherwise} +\end{cases} +\end{equation} + +Another useful function is ``all but one 64th'' function~$L$ defined as: + +\begin{equation} +L(n) \equiv n - \lfloor n / 64 \rfloor +\end{equation} + +\subsection{Instruction Set} + +As previously specified in section \ref{ch:model}, these definitions take place in the final context there. In particular we assume $O$ is the EVM state-progression function and define the terms pertaining to the next cycle's state $(\boldsymbol{\sigma}', \boldsymbol{\mu}')$ such that: +\begin{equation} +O(\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \equiv (\boldsymbol{\sigma}', \boldsymbol{\mu}', A', I) \quad \text{with exceptions, as noted} +\end{equation} + +Here given are the various exceptions to the state transition rules given in section \ref{ch:model} specified for each instruction, together with the additional instruction-specific definitions of $J$ and $C$. For each instruction, also specified is $\alpha$, the additional items placed on the stack and $\delta$, the items removed from the stack, as defined in section \ref{ch:model}. + +%\begin{tabular*}{\columnwidth}[h]{rlrrl} +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{0s: Stop and Arithmetic Operations}} \\ +\multicolumn{5}{l}{All arithmetic is modulo $2^{256}$ unless otherwise noted. The zero-th power of zero $0^0$ is defined to be one.} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x00 & {\small STOP} & 0 & 0 & This operation halts execution, outputting the empty sequence as per equation \ref{eq:Normal Halting}. +\\ +\midrule +0x01 & {\small ADD} & 2 & 1 & This is the addition operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]$ \\ +\midrule +0x02 & {\small MUL} & 2 & 1 & This is the multiplication operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]$ \\ +\midrule +0x03 & {\small SUB} & 2 & 1 & This is the subtraction operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] - \boldsymbol{\mu}_\mathbf{s}[1]$ \\ +\midrule +0x04 & {\small DIV} & 2 & 1 & This is the integer division operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \lfloor\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]\rfloor & \text{otherwise}\end{cases}$ \\ +\midrule +0x05 & {\small SDIV} & 2 & 1 & This is the signed integer division operation (truncated). \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ -2^{255} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = -2^{255} \wedge \quad \boldsymbol{\mu}_\mathbf{s}[1] = -1\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]) \lfloor |\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]| \rfloor & \text{otherwise}\end{cases}$ \\ +&&&& Where all values are treated as two's complement signed 256-bit integers. \\ +&&&& Note the overflow semantic when $-2^{255}$ is negated.\\ +\midrule +0x06 & {\small MOD} & 2 & 1 & This is the modulo remainder operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \boldsymbol{\mu}_\mathbf{s}[0] \bmod \boldsymbol{\mu}_\mathbf{s}[1] & \text{otherwise}\end{cases}$ \\ +\midrule +0x07 & {\small SMOD} & 2 & 1 & This is the signed modulo remainder operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0]) (|\boldsymbol{\mu}_\mathbf{s}[0]| \bmod |\boldsymbol{\mu}_\mathbf{s}[1]|) & \text{otherwise}\end{cases}$ \\ +&&&& Where all values are treated as two's complement signed 256-bit integers. \\ +\midrule +0x08 & {\small ADDMOD} & 3 & 1 & This is the modulo addition operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$ \\ +&&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\ +\midrule +0x09 & {\small MULMOD} & 3 & 1 & This is the modulo multiplication operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$ \\ +&&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\ +\midrule +0x0a & {\small EXP} & 2 & 1 & This is the exponential operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] ^ {\boldsymbol{\mu}_\mathbf{s}[1] }$ \\ +\midrule +0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\ +&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{t} &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathbf{s}[0] + 1) \\ \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i} &\text{otherwise} \end{cases}$ \\ +\multicolumn{5}{l}{$\boldsymbol{\mu}_\mathbf{s}[x]_\mathbf{i}$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathbf{s}[x]$} \vspace{5pt} \\ +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{10s: Comparison \& Bitwise Logic Operations}} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x10 & {\small LT} & 2 & 1 & This is the less-than comparison. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ +\midrule +0x11 & {\small GT} & 2 & 1 & This is the greater-than comparison. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ +\midrule +0x12 & {\small SLT} & 2 & 1 & This is the signed less-than comparison. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ +&&&& Where all values are treated as two's complement signed 256-bit integers. \\ +\midrule +0x13 & {\small SGT} & 2 & 1 & This is the signed greater-than comparison. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ +&&&& Where all values are treated as two's complement signed 256-bit integers. \\ +\midrule +0x14 & {\small EQ} & 2 & 1 & This is the equality comparison. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\ +\midrule +0x15 & {\small ISZERO} & 1 & 1 & This is the logical negation operation, also called the logical complement or the NOT operation. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ +\midrule +0x16 & {\small AND} & 2 & 1 & This is the bitwise AND operation. \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \wedge \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ +\midrule +0x17 & {\small OR} & 2 & 1 & This is the bitwise OR operation. \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \vee \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ +\midrule +0x18 & {\small XOR} & 2 & 1 & This is the bitwise XOR operation. \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \oplus \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\ +\midrule +0x19 & {\small NOT} & 1 & 1 & This is the bitwise NOT operation. \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} = 0 \\ 0 & \text{otherwise} \end{cases}$ \\ +\midrule +0x1a & {\small BYTE} & 2 & 1 & Retrieve a single byte from a word. \\ +&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_{(i + 8\boldsymbol{\mu}_\mathbf{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathbf{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\ +&&&& For the Nth byte, we count from the left (i.e. $N=0$ would be the most significant in big endian). \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{20s: SHA3}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x20 & {\small SHA3} & 2 & 1 & Compute a Keccak-256 hash. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{30s: Environmental Information}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x30 & {\small ADDRESS} & 0 & 1 & Get the address of the currently executing account. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{a}$ \\ +\midrule +0x31 & {\small BALANCE} & 1 & 1 & Get the balance of the given account. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0]]_\mathbf{b}& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\ +\midrule +0x32 & {\small ORIGIN} & 0 & 1 & Get the address that the execution originated from. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{o}$ \\ +&&&& This is the sender of the original transaction; it is never an account with non-empty associated code. \\ +\midrule +0x33 & {\small CALLER} & 0 & 1 & Get the caller address. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{s}$ \\ +&&&& This is the address of the account that is directly responsible for this execution. \\ +\midrule +0x34 & {\small CALLVALUE} & 0 & 1 & Get the deposited value by the instruction/transaction responsible for this execution. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \hyperlink{I v}{I_\mathbf{v}}$ \\ +\midrule +0x35 & {\small CALLDATALOAD} & 1 & 1 & Get the input data of the current environment. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{d}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \quad \text{with} \quad I_\mathbf{d}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_\mathbf{d} \rVert$ \\ +&&&& This pertains to the input data passed with the message call instruction or transaction. \\ +\midrule +0x36 & {\small CALLDATASIZE} & 0 & 1 & Get the size of the input data in the current environment. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{d} \rVert$ \\ +&&&& This pertains to the input data passed with the message call instruction or transaction. \\ +\midrule +0x37 & {\small CALLDATACOPY} & 3 & 0 & Copy the input data in the current environment to memory. \\ +&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv +\begin{cases} I_\mathbf{d}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{d} \rVert \\ 0 & \text{otherwise} \end{cases}$\\ +&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ +&&&& This pertains to the input data passed with the message call instruction or transaction. \\ +\midrule +0x38 & {\small CODESIZE} & 0 & 1 & Get the size of code running in the current environment. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{b} \rVert$ \\ +\midrule +0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in the current environment to memory. \\ +&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv +\begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{b} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ +&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\ +\midrule +0x3a & {\small GASPRICE} & 0 & 1 & Get the price of gas in the current environment. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{p}$ \\ +&&&& This is the gas price specified by the originating transaction.\\ +\midrule +0x3b & {\small EXTCODESIZE} & 1 & 1 & Get the size of an account's code. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c} \rVert$ \\ +\midrule +0x3c & {\small EXTCODECOPY} & 4 & 0 & Copy an account's code to memory. \\ +&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[3] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[1] + i ] \equiv +\begin{cases} \mathbf{c}[\boldsymbol{\mu}_\mathbf{s}[2] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\ +&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c}$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[3])$ \\ +&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[2] + i$ are not subject to the $2^{256}$ modulo. \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{40s: Block Information}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x40 & {\small BLOCKHASH} & 1 & 1 & Get the hash of one of the 256 most recent complete blocks. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv P(I_{\hyperlink{H p}{H_\mathbf{p}}}, \boldsymbol{\mu}_\mathbf{s}[0], 0)$ \\ +&&&& where $P$ is the hash of a block of a particular number, up to a maximum age. 0 is left on the stack if the looked for block number is greater than the current block number or more than 256 blocks behind the current block. \\ +&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > \hyperlink{H i}{H_\mathbf{i}} \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = \hyperlink{H i}{H_\mathbf{i}} \\ P(\hyperlink{H p}{H_\mathbf{p}}, n, a + 1) & \text{otherwise} \end{cases}$ \\ +&&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash in the block following it. \\ +\midrule +0x41 & {\small COINBASE} & 0 & 1 & Get the block's beneficiary address. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{c}$ \\ +\midrule +0x42 & {\small TIMESTAMP} & 0 & 1 & Get the block's timestamp. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{s}$ \\ +\midrule +0x43 & {\small NUMBER} & 0 & 1 & Get the block's number. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{i}$ \\ +\midrule +0x44 & {\small DIFFICULTY} & 0 & 1 & Get the block's difficulty. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{d}$ \\ +\midrule +0x45 & {\small GASLIMIT} & 0 & 1 & Get the block's gas limit. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{l}$ \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{50s: Stack, Memory, Storage and Flow Operations}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x50 & {\small POP} & 1 & 0 & Remove the top, first item from the stack. \\ +\midrule +0x51 & {\small MLOAD} & 1 & 1 & Load the first word from memory. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ +&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ +\midrule +0x52 & {\small MSTORE} & 2 & 0 & Save the first word (which is the first item in the stack) to memory. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\ +&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ +\midrule +0x53 & {\small MSTORE8} & 2 & 0 & Save the first byte to memory. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv (\boldsymbol{\mu}_\mathbf{s}[1] \bmod 256) $ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 1) \div 32 })$ \\ +&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ +\midrule +0x54 & {\small SLOAD} & 1 & 1 & Load the first word from storage. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \\ +\midrule +0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\ +&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{}\\ +&&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} +G_{sset} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ +G_{sreset} & \text{otherwise} +\end{cases}$ \\ +&&&& $A'_{r} \equiv A_{r} + \begin{cases} +R_{sclear} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\ +0 & \text{otherwise} +\end{cases}$ \\ +\midrule +0x56 & {\small JUMP} & 1 & 0 & Alter the program counter. \\ +&&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{s}[0] $ \\ +&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See equation \hyperlink{JUMP}{\ref{eq:JUMP}}. \\ +\midrule +0x57 & {\small JUMPI} & 2 & 0 & Conditionally alter the program counter. \\ +&&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[0] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \\ \boldsymbol{\mu}_{pc} + 1 & \text{otherwise} \end{cases} $ \\ +&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \hyperlink{JUMPI}{\ref{eq:JUMP}}. \\ +\midrule +0x58 & {\small PC} & 0 & 1 & Get the value of the program counter \textit{prior} to the increment corresponding to this instruction. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{pc}$ \\ +\midrule +0x59 & {\small MSIZE} & 0 & 1 & Get the size of active memory in bytes. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv 32\boldsymbol{\mu}_{i}$ \\ +\midrule +0x5a & {\small GAS} & 0 & 1 & Get the amount of available gas, including the corresponding reduction for the cost of this instruction. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{g}$ \\ +\midrule +0x5b & {\small JUMPDEST} & 0 & 0 & Mark a valid destination for jumps. \\ +&&&& This operation has no effect on the machine state during execution. \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{60s \& 70s: Push Operations}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x60 & {\small PUSH1} & 0 & 1 & Place a 1 byte item on the stack. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv c(\boldsymbol{\mu}_{pc} + 1)$ \\ +&&&& $\text{where} \quad c(x) \equiv \begin{cases} I_\mathbf{b}[x] & \text{if} \quad x < \lVert I_\mathbf{b} \rVert \\ 0 & \text{otherwise} \end{cases}$ \\ +&&&& The bytes are read in line from the program code's bytes array. \\ +&&&& The function $c$ ensures the bytes default to zero if they extend past the limits.\\ +&&&& The byte is right-aligned (\ie it takes the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ +\midrule +0x61 & {\small PUSH2} & 0 & 1 & Place a 2-byte item on the stack. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big( (\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 2) \big)$ \\ +&&&& with $\boldsymbol{c}(\boldsymbol{x}) \equiv (c(\boldsymbol{x}_0), ..., c(\boldsymbol{x}_{\lVert x \rVert -1})) $ with $c$ as defined as above. \\ +&&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ +\midrule +\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ +\midrule +0x7f & {\small PUSH32} & 0 & 1 & Place 32-byte (full word) item on stack. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big((\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 32) \big)$ \\ +&&&& where $\boldsymbol{c}$ is defined as above. \\ +&&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{80s: Duplication Operations}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x80 & {\small DUP1} & 1 & 2 & Duplicate the 1st stack item. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ +\midrule +0x81 & {\small DUP2} & 2 & 3 & Duplicate the 2nd stack item. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ +\midrule +\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ +\midrule +0x8f & {\small DUP16} & 16 & 17 & Duplicate the 16th stack item. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[15]$ \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{90s: Exchange Operations}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0x90 & {\small SWAP1} & 2 & 2 & Exchange the 1st and the 2nd stack items. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[1] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ +\midrule +0x91 & {\small SWAP2} & 3 & 3 & Exchange the 1st and the 3rd stack items. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[2]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[2] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ +\midrule +\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ +\midrule +0x9f & {\small SWAP16} & 17 & 17 & Exchange the 1st and the 17th stack items. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[16]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[16] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{a0s: Logging Operations}} \vspace{5pt} \\ +\multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\\ +\multicolumn{5}{l}{$A'_\mathbf{l} \equiv A_\mathbf{l} \cdot (I_\mathbf{a}, \mathbf{t}, \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$}\\ +\multicolumn{5}{l}{and to update the memory consumption counter:}\\ +\multicolumn{5}{l}{$\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$}\\ +\multicolumn{5}{l}{The entry's topic series, $\mathbf{t}$, differs accordingly:}\vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0xa0 & {\small LOG0} & 2 & 0 & Append the log record with no topics. \\ +&&&& $\mathbf{t} \equiv ()$ \\ +\midrule +0xa1 & {\small LOG1} & 3 & 0 & Append the log record with one topic. \\ +&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2])$ \\ +\midrule +\multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\ +\midrule +0xa4 & {\small LOG4} & 6 & 0 & Append the log record with four topics. \\ +&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4], \boldsymbol{\mu}_\mathbf{s}[5])$ \\ +\bottomrule +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\toprule +\multicolumn{5}{c}{\textbf{f0s: System operations}} \vspace{5pt} \\ +\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\ +0xf0 & {\small CREATE} & 3 & 1 & Create a new account with associated code. \\ +&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[1] \dots (\boldsymbol{\mu}_\mathbf{s}[1] + \boldsymbol{\mu}_\mathbf{s}[2] - 1) ]$ \\ +&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_\mathbf{g}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, L(\boldsymbol{\mu}_\mathbf{g}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[0], \mathbf{i}, I_\mathbf{e} + 1) & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_\mathbf{g}, \varnothing\big) & \text{otherwise} \end{cases}$ \\ +&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_\mathbf{a}]_\mathbf{n} = \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n} + 1$ \\ +&&&& $A' \equiv A \Cup A^+$ which implies: $A'_\mathbf{s} \equiv A_\mathbf{s} \cup A^+_\mathbf{s} \quad \wedge \quad A'_\mathbf{l} \equiv A_\mathbf{l} \cdot A^+_\mathbf{l} \quad \wedge \quad A'_\mathbf{r} \equiv A_\mathbf{r} + A^+_\mathbf{r}$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ +&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\ +&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_\mathbf{e} = 1024$ \\ +&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_\mathbf{a}, \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n})$, the address of the \\ +&&&& newly created account. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[2])$ \\ +&&&& Thus the operand order is: value, input offset, input size. \\ +\midrule +0xf1 & {\small CALL} & 7 & 1 & Message-call into an account. \\ +&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[3] \dots (\boldsymbol{\mu}_\mathbf{s}[3] + \boldsymbol{\mu}_\mathbf{s}[4] - 1) ]$ \\ +&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_\mathbf{a}, I_\mathbf{o}, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge \\ \quad\quad I_\mathbf{e} < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ +&&&& $n \equiv \min(\{ \boldsymbol{\mu}_\mathbf{s}[6], |\mathbf{o}|\})$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[5] \dots (\boldsymbol{\mu}_\mathbf{s}[5] + n - 1) ] = \mathbf{o}[0 \dots (n - 1)]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{g} \equiv \boldsymbol{\mu}_\mathbf{g} + g'$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\ +&&&& $A' \equiv A \Cup A^+$ \\ +&&&& $t \equiv \boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}$ \\ +&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting \\ +&&&& $Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) = \top$ or if \\ +&&&& $\boldsymbol{\mu}_\mathbf{s}[2] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (not enough funds) or $I_\mathbf{e} = 1024$ (call depth limit reached); $x=1$ \\ +&&&& otherwise. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4]), \boldsymbol{\mu}_\mathbf{s}[5], \boldsymbol{\mu}_\mathbf{s}[6])$ \\ +&&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \hypertarget{tiny CALL}{}\\ +&&&& $C_{\text{\tiny CALL}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$ \\ +&&&& $C_{\text{\tiny CALLGAS}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} +C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{callstipend} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ +C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{otherwise} +\end{cases}$ \\ +&&&& $C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} +\min\{ L(\boldsymbol{\mu}_\mathbf{g} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_\mathbf{s}[0] \} & \text{if} \quad \boldsymbol{\mu}_\mathbf{g} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\ +\boldsymbol{\mu}_\mathbf{s}[0] & \text{otherwise} +\end{cases}$\\ +&&&& $C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{call} + C_{\text{\tiny XFER}}(\boldsymbol{\mu}) + C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$\\ +&&&& $C_{\text{\tiny XFER}}(\boldsymbol{\mu}) \equiv \begin{cases} +G_{callvalue} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ +0 & \text{otherwise} +\end{cases}$ \\ +&&&& $C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} +G_{newaccount} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}] = \varnothing \\ +0 & \text{otherwise} +\end{cases}$ \\ +\midrule +0xf2 & {\small CALLCODE} & 7 & 1 & Message-call into this account with an alternative account's code. \\ +&&&& Exactly equivalent to {\small CALL} except: \\ +&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\\ \quad\quad{}I_\mathbf{e} < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ +&&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_\mathbf{s}[1]$\\ +&&&& (as in {\small CALL}) to the present address $I_\mathbf{a}$. This means that the recipient is in fact the\\ +&&&& same account as at present, simply that the code is overwritten.\hypertarget{RETURN}{}\\ +\midrule +0xf3 & {\small RETURN} & 2 & 0 & Halt execution returning output data. \\ +&&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots ( \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1 ) ]$ \\ +&&&& This has the effect of halting the execution at this point with output defined.\\ +&&&& See equation \ref{eq:Normal Halting}. \\ +&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\ +\end{tabularx} + +\begin{tabularx}{\textwidth}{rlrrX} +\midrule +0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments. The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\ +&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ +&&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ +\midrule +0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{SELFDESTRUCT}{}\\ +\midrule +0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. \\ +&&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_\mathbf{a} \}$ \\ +&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} + \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ \\ +&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{b} \equiv 0$ \\ +&&&& $A'_{r} \equiv A_{r} + \begin{cases} +\hyperlink{Rselfdestruct}{R_{selfdestruct}} & \text{if} \quad I_\mathbf{a} \notin A_\mathbf{s} \\ +0 & \text{otherwise} +\end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\ +&&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{selfdestruct}} + \begin{cases} +\hyperlink{Gnewaccount}{G_{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] = \varnothing \\ +0 & \text{otherwise} +\end{cases}$ \\ +\bottomrule +\end{tabularx} + +%\section{Low-level Lisp-like Language}\label{app:lll} +%The Low-level Lisp-like Language is a language created in order to efficiently author low-level programs (contracts) without having to resort to EVM-Assembly. + +\hypertarget{GenesisBlock}{} +\section{Genesis Block}\label{app:genesis} + +The genesis block is 15 items, and is specified thus: +\begin{equation} +\big( \big( 0_{256}, \mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big), 0_{160}, stateRoot, 0, 0, 0_{2048}, 2^{17}, 0, 0, 3141592, time, 0, 0_{256}, \mathtt{\tiny KEC}\big( (42) \big) \big), (), () \big) +\end{equation} + +Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the \hyperlink{H c}{beneficiary address}, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the \hyperlink{H b}{log bloom}, a 2048-bit sequence of all zeros; $2^{17}$ refers to the \hyperlink{H d}{difficulty}; the \hyperlink{H t}{transaction trie root}, \hyperlink{H e}{receipt trie root}, \hyperlink{H g}{gas used}, \hyperlink{H i}{block number} and \hyperlink{H x}{extradata} are all $0$ (listed in the order of decimal zeros in the above sequence), being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the \hyperlink{block nonce}{nonce}. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in \hyperlink{rlp}{RLP}, both empty lists. + +The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values. + +\section{Ethash}\label{app:ethash} +\subsection{Definitions} +We employ the following definitions: + \begin{tabularx}{\textwidth}{lrX} +%\begin{tabu}{X[,l]X[,r]X[,l]} \toprule -Foo \\ +Name & Value & Description \hypertarget{Jwordbytes}{} \\ \midrule -$J_{\mathrm{wordbytes}}$ & 4 & This is the bytes in a word.\hypertarget{Jdatasetinit}{\\ -Foo}\hyperlink{Jdatasetinit\\ -$ This doesn't have a closing bracket so will cause the +$J_\mathrm{wordbytes}$ & 4 & This is the bytes in a word. \hypertarget{Jdatasetinit}{} \\ +$J_\mathrm{datasetinit}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{} \\ +$J_\mathrm{datasetgrowth}$ & $2^{23}$ & This is the dataset growth per epoch. \hypertarget{Jcacheinit}{\\ +$J_\mathrm{cacheinit}$ & $2^{24}$ & This is the bytes in the cache at genesis.}\hypertarget{Jcachegrowth}{\\ +$J_\mathrm{cachegrowth}$ & $2^{17}$ & This is the cache growth per epoch.}\hypertarget{Jepoch}{\\ +$J_\mathrm{epoch}$ & 30000 & This is the blocks per epoch.}\hypertarget{Jmixbytes}{\\ +$J_\mathrm{mixbytes}$ & 128 & This is the mix length in bytes.}\hypertarget{Jhashbytes}{\\ +$J_\mathrm{hashbytes}$ & 64 & This is the hash length in bytes.}\hypertarget{Jparents}{\\ +$J_\mathrm{parents}$ & 256 & This is the number of parents of each dataset element.}\hypertarget{Jcacherounds}{\\ +$J_\mathrm{cacherounds}$ & 3 & This is the number of rounds in cache production.}\hypertarget{Jaccesses}{\\ +$J_\mathrm{accesses}$ & 64 & This is the number of accesses in a hashimoto loop.}\\ +\bottomrule +%\end{tabu} +\end{tabularx} + +\subsection{Size of dataset and cache} +The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. +\begin{equation} +E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_\mathrm{epoch}}}\right\rfloor +\end{equation} +The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_\mathrm{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\mathrm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} for the cache.\hypertarget{dsize}{ +Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:} +\begin{equation} + d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{\mathrm{datasetinit}}}} + \hyperlink{Jdatasetgrowth}{J_{\mathrm{datasetgrowth}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jmixbytes}{J_\{rm{mixbytes}}}, J_{\mathrm{mixbytes}}) +\end{equation} +The size of the cache, $c_{size}$, is calculated using +\begin{equation} + c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{\mathrm{cacheinit}}} + \hyperlink{\mathrm{cachegrowth}}{J_{\mathrm{cachegrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}, J_{\mathrm{hashbytes}}) +\end{equation} +\begin{equation} + E_{prime}(x, y) = \begin{cases} +x & \text{if} \quad x / y \in \mathbb{P} \\ +E_{prime}((x - 1) \cdot y, y) & \text{otherwise} +\end{cases} +\end{equation} +\subsection{Dataset generation} +In order the generate the dataset we need the cache $c$, which is an array of bytes. It depends on the cache size $c_{size}$ and the seed hash $s \in \mathbb{B}_{32}$. +\subsubsection{Seed hash} +The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash: +\begin{equation} + s = C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) +\end{equation} +\begin{equation} + C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} +\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ +\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{\mathrm{epoch}}})) & \text{otherwise} +\end{cases} +\end{equation} +With $\mathbf{0}_{32}$ being 32 bytes of zeros. + +\subsubsection{Cache} +The cache production process involves using the seed hash to first sequentially fill up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{\mathrm{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. + +We define the array $\mathbf{c}_{i}$, consisting of 64 single bytes, as the $i$th element of the initial cache: +\begin{equation} + \mathbf{c}_{i} = \begin{cases} +\texttt{KEC512}(\mathbf{s}) & \text{if} \quad i = 0 \quad \\ +\texttt{KEC512}(\mathbf{c}_{i-1}) & \text{otherwise} +\end{cases} +\end{equation} +Therefore $ \mathbf{c'}$ can be defined as +\begin{equation} + \mathbf{c'}[i] = \mathbf{c}_{i} \quad \forall \quad i < n +\end{equation} +\begin{equation} + n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor +\end{equation} +The cache is calculated by performing \hyperlink{Jcacherounds}{$J_{\mathrm{cacherounds}}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: +\begin{equation} + \mathbf{c} = E_{\mathrm{cacherounds}}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_{\mathrm{cacherounds}}}) +\end{equation} +\begin{equation} + E_{\mathrm{cacherounds}}(\mathbf{x}, y) = \begin{cases} +\mathbf{x} & \text{if} \quad y = 0 \quad \\ +E_\text{\tiny RMH}(\mathbf{x}) & \text{if} \quad y = 1 \quad \\ +E_{\mathrm{cacherounds}}(E_\text{\tiny RMH}(\mathbf{x}), y -1 ) & \text{otherwise} +\end{cases} +\end{equation} +Where a single round modifies each subset of the cache as follows: +\begin{equation} + E_\text{\tiny RMH}(\mathbf{x}) = \big( E_{rmh}(\mathbf{x}, 0), E_{rmh}(\mathbf{x}, 1), ... , E_{rmh}(\mathbf{x}, n - 1) \big) +\end{equation} +\hypertarget{Ecacherounds}{} +\begin{multline} + E_{rmh}(\mathbf{x}, i) = \texttt{KEC512}(\mathbf{x'}[(i - 1 + n) \mod n] \oplus \mathbf{x'}[\mathbf{x'}[i][0] \mod n]) \\ + \text{with} \quad \mathbf{x'} = \mathbf{x} \quad \text{except} \quad \mathbf{x'}[j] = E_{rmh}(\mathbf{x}, j) \quad \forall \quad j < i +\end{multline} + +\subsubsection{Full dataset calculation} \label{dataset} +Essentially, we combine data from $J_{\mathrm{parents}}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} bytes in size: +\begin{equation} + \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor +\end{equation} +In order to calculate the single item we use an algorithm inspired by the FNV hash (\cite{FowlerNollVo1991FNVHash}) in some cases as a non-associative substitute for XOR. +\begin{equation} + E_\text{\tiny FNV}(\mathbf{x}, \mathbf{y}) = (\mathbf{x} \cdot (\mathrm{0x01000193} \oplus \mathbf{y})) \mod 2^{32} +\end{equation} +The single item of the dataset can now be calculated as: +\begin{equation} + E_{datasetitem}(\mathbf{c}, i) = E_{\mathrm{parents}}(\mathbf{c}, i, -1, \varnothing) +\end{equation} +\begin{equation} + E_{\mathrm{parents}}(\mathbf{c}, i, p, \mathbf{m}) = \begin{cases} +E_{\mathrm{parents}}(\mathbf{c}, i, p +1, E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_{\mathrm{parents}} -2 \\ +E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1) & \text{otherwise} +\end{cases} +\end{equation} +\begin{equation} + E_{mix}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} +\texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{size}] \oplus i) & \text{if} \quad p = 0 \\ +E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}} / \hyperlink{Jwordbytes}{J_{\mathrm{wordbytes}}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} +\end{cases} +\end{equation} + +\subsection{Proof-of-work function} +Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. + +If the output of this algorithm is below the desired target, then the \hyperlink{block nonce}{nonce} is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. + +The PoW-function returns an array with the compressed mix as its first item and the Keccak-256 hash of the concatenation of the compressed mix with the seed hash as the second item: +\begin{equation} + \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}) = \lbrace \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}), \texttt{KEC}(\mathbf{s}_\mathbf{h}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}) + \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})) \rbrace +\end{equation} +With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathbf{c}$ is obtained as follows: +\begin{equation} + \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{\mathrm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) +\end{equation} + +The seed hash being: +\begin{equation} + \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{revert}(\mathbf{n})) +\end{equation} +$E_{revert}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$: +\begin{equation} + E_{revert}(\mathbf{n})[i] = \mathbf{n}[\lVert \mathbf{n} \rVert -i] +\end{equation} +We note that the ``$+$''-operator between two byte sequences results in the concatenation of both sequences. + +The dataset $\mathbf{d}$ is obtained as described in section \ref{dataset}. + +The number of replicated sequences in the mix is: +\begin{equation} + n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor +\end{equation} +In order to add random dataset nodes to the mix, the $E_{\mathrm{accesses}}$ function is used: +\begin{equation} + E_{\mathrm{accesses}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} +E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_{\mathrm{accesses}}} -2 \\ +E_{\mathrm{accesses}}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} +\end{cases} +\end{equation} +\begin{equation} + E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = E_\text{\tiny FNV}(\mathbf{m}, E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) +\end{equation} +$E_{newdata}$ returns an array with $n_{mix}$ elements: +\begin{equation} + E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}}{\hyperlink{Jwordbytes}{J_{\mathrm{wordbytes}}}}\right\rfloor]) \mod \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} +\end{equation} +The mix is compressed as follows: +\begin{equation} + E_{compress}(\mathbf{m}, i) = \begin{cases} +\mathbf{m} & \text{if} \quad i \geqslant \lVert \mathbf{m} \rVert - 8 \\ +E_{compress}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(\mathbf{m}[i + 4], \mathbf{m}[i + 5]), \mathbf{m}[i + 6]), \mathbf{m}[i + 7]), i + 8) & \text{otherwise} +\end{cases} +\end{equation} + +\section{List of mathematical symbols}\label{app:symbols} +\begin{tabularx}{\textwidth}{lcX} +\toprule +Symbol & Latex Command & Description \\ +\midrule +\hypertarget{bigvee}{ +$\bigvee$ & \verb|\bigvee| & This is the least upper bound, supremum, or join of all elements operated on. Thus it is the greatest element of such elements. More information is here: \cite{LatticeOrder}.}\\ \bottomrule \end{tabularx} From aab1ea7ca516b62e20a4216367033b448b57096c Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sat, 30 Sep 2017 16:29:56 +1000 Subject: [PATCH 044/132] The citations were rendering with a ?, so I fixed that by checking the output, finding that there were three errors with cross-references and fixed them. I also fixed some syntax for the Ethash functions, which while they haven't caused the build to fail, isn't good practice to have _\mathrm, so I changed this to _{\mathrm} and also fixed a couple of other errors. --- Paper.tex | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Paper.tex b/Paper.tex index 591d836d..686d017a 100644 --- a/Paper.tex +++ b/Paper.tex @@ -437,7 +437,7 @@ \subsubsection{Holistic Validity} Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly. -The values stemming from the computation of transactions, specifically the \hyperlink{transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{stateR-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}. +The values stemming from the computation of transactions, specifically the \hyperlink{Transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{stateR-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}. \subsubsection{Serialisation} @@ -612,8 +612,8 @@ \subsection{Execution} \begin{equation} \begin{array}[t]{rcl} S(T) & \neq & \varnothing \quad \wedge \\ -\boldsymbol{\sigma}[S(T)] & \neq & \varnothing \quad \wedge \\ -T_\mathbf{n} & = & \boldsymbol{\sigma}[S(T)]_\mathbf{n} \quad \wedge \\ +\boldsymbol{\sigma}[S(T)] & \neq & \varnothing \quad \wedge \hypertarget{transaction nonce}{\\ +T_\mathbf{n} & = & \boldsymbol{\sigma}[S(T)]_\mathbf{n} \quad \wedge \\} g_0 & \leqslant & T_\mathbf{g} \quad \wedge \\ v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_\mathbf{b} \quad \wedge \\ T_\mathbf{g} & \leqslant & {B_H}_\mathbf{l} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_\mathbf{R})_\mathbf{u}} @@ -1156,7 +1156,7 @@ \subsection{Mining Proof-of-Work} \label{ch:pow} \subsubsection{Ethash} Ethash is the PoW algorithm for Ethereum \textit{Frontier} and \textit{Homestead}. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms were drastically changed with R\&D from February 2015 until May 4 2015 (\cite{commitdateforEthash}). The general route that the algorithm takes is as follows: -There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, \hyperlink{Jcacheinit}{$J_{\mathrm{cacheinit}}$} bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, \hyperlink{Jdatasetinit}{$J_{\rm{datasetinit}}$} bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. +There exists a seed which can be computed for each block by scanning through the block headers up until that point. From the seed, one can compute a pseudorandom cache, \hyperlink{Jcacheinit}{$J_{\mathrm{cacheinit}}$} bytes in initial size. Light clients store the cache. From the cache, we can generate a dataset, \hyperlink{Jdatasetinit}{$J_{\mathrm{datasetinit}}$} bytes in initial size, with the property that each item in the dataset depends on only a small number of items from the cache. Full clients and miners store the dataset. The dataset grows linearly with time. Mining involves grabbing random slices of the dataset and hashing them together. Verification can be done with low memory by using the cache to regenerate the specific pieces of the dataset that you need, so you only need to store the cache. The large dataset is updated once every \hyperlink{Jepoch}{$J_{\mathrm{epoch}}$} blocks, so the vast majority of a miner's effort will be reading the dataset, not making changes to it. The mentioned parameters as well as the algorithm is explained in detail in appendix \ref{app:ethash}. @@ -2090,19 +2090,19 @@ \subsection{Definitions} \begin{tabularx}{\textwidth}{lrX} %\begin{tabu}{X[,l]X[,r]X[,l]} \toprule -Name & Value & Description \hypertarget{Jwordbytes}{} \\ +Name & Value & Description \hypertarget{Jwordbytes}{ \\ \midrule -$J_\mathrm{wordbytes}$ & 4 & This is the bytes in a word. \hypertarget{Jdatasetinit}{} \\ -$J_\mathrm{datasetinit}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{} \\ -$J_\mathrm{datasetgrowth}$ & $2^{23}$ & This is the dataset growth per epoch. \hypertarget{Jcacheinit}{\\ -$J_\mathrm{cacheinit}$ & $2^{24}$ & This is the bytes in the cache at genesis.}\hypertarget{Jcachegrowth}{\\ -$J_\mathrm{cachegrowth}$ & $2^{17}$ & This is the cache growth per epoch.}\hypertarget{Jepoch}{\\ -$J_\mathrm{epoch}$ & 30000 & This is the blocks per epoch.}\hypertarget{Jmixbytes}{\\ -$J_\mathrm{mixbytes}$ & 128 & This is the mix length in bytes.}\hypertarget{Jhashbytes}{\\ -$J_\mathrm{hashbytes}$ & 64 & This is the hash length in bytes.}\hypertarget{Jparents}{\\ -$J_\mathrm{parents}$ & 256 & This is the number of parents of each dataset element.}\hypertarget{Jcacherounds}{\\ -$J_\mathrm{cacherounds}$ & 3 & This is the number of rounds in cache production.}\hypertarget{Jaccesses}{\\ -$J_\mathrm{accesses}$ & 64 & This is the number of accesses in a hashimoto loop.}\\ +$J_{\mathrm{wordbytes}}$ & 4 & This is the bytes in a word. }\hypertarget{Jdatasetinit}{ \\ +$J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{ \\ +$J_{\mathrm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch. }\hypertarget{Jcacheinit}{\\ +$J_{\mathrm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.}\hypertarget{Jcachegrowth}{\\ +$J_{\mathrm{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch.}\hypertarget{Jepoch}{\\ +$J_{\mathrm{epoch}}$ & 30000 & This is the blocks per epoch.}\hypertarget{Jmixbytes}{\\ +$J_{\mathrm{mixbytes}}$ & 128 & This is the mix length in bytes.}\hypertarget{Jhashbytes}{\\ +$J_{\mathrm{hashbytes}}$ & 64 & This is the hash length in bytes.}\hypertarget{Jparents}{\\ +$J_{\mathrm{parents}}$ & 256 & This is the number of parents of each dataset element.}\hypertarget{Jcacherounds}{\\ +$J_{\mathrm{cacherounds}}$ & 3 & This is the number of rounds in cache production.}\hypertarget{Jaccesses}{\\ +$J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.}\\ \bottomrule %\end{tabu} \end{tabularx} @@ -2110,16 +2110,16 @@ \subsection{Definitions} \subsection{Size of dataset and cache} The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$ and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number. \begin{equation} -E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_\mathrm{epoch}}}\right\rfloor +E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{\mathrm{epoch}}}}\right\rfloor \end{equation} -The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_\mathrm{datasetgrowth}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\mathrm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} for the cache.\hypertarget{dsize}{ +The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\mathrm{datasetgrowth}}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\mathrm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} for the cache.\hypertarget{dsize}{ Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:} \begin{equation} - d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{\hyperlink{Jdatasetinit}{J_{\mathrm{datasetinit}}}} + \hyperlink{Jdatasetgrowth}{J_{\mathrm{datasetgrowth}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jmixbytes}{J_\{rm{mixbytes}}}, J_{\mathrm{mixbytes}}) + d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{J_{\mathrm{datasetinit}}} + \hyperlink{Jdatasetgrowth}{J_{\mathrm{datasetgrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}, J_{\mathrm{mixbytes}}) \end{equation} The size of the cache, $c_{size}$, is calculated using \begin{equation} - c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{\mathrm{cacheinit}}} + \hyperlink{\mathrm{cachegrowth}}{J_{\mathrm{cachegrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}, J_{\mathrm{hashbytes}}) + c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{\mathrm{cacheinit}}} + \hyperlink{Jcachegrowth}{J_{\mathrm{cachegrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}, J_{\mathrm{hashbytes}}) \end{equation} \begin{equation} E_{prime}(x, y) = \begin{cases} @@ -2161,7 +2161,7 @@ \subsubsection{Cache} \end{equation} The cache is calculated by performing \hyperlink{Jcacherounds}{$J_{\mathrm{cacherounds}}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: \begin{equation} - \mathbf{c} = E_{\mathrm{cacherounds}}(\mathbf{c'}, \hyperlink{Jcacherounds}{J_{\mathrm{cacherounds}}}) + \mathbf{c} = E_{\mathrm{cacherounds}}(\mathbf{c'}, J_{\mathrm{cacherounds}}) \end{equation} \begin{equation} E_{\mathrm{cacherounds}}(\mathbf{x}, y) = \begin{cases} @@ -2207,7 +2207,7 @@ \subsubsection{Full dataset calculation} \label{dataset} \end{equation} \subsection{Proof-of-work function} -Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$} bytes wide, and repeatedly sequentially fetch \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$} bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$} bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. +Essentially, we maintain a "mix" \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$} bytes wide, and repeatedly sequentially fetch $J_{\mathrm{mixbytes}}$ bytes from the full dataset and use the $E_\text{\tiny FNV}$ function to combine it with the mix. $J_{\mathrm{mixbytes}}$ bytes of sequential access are used so that each round of the algorithm always fetches a full page from RAM, minimizing translation lookaside buffer misses which ASICs would theoretically be able to avoid. If the output of this algorithm is below the desired target, then the \hyperlink{block nonce}{nonce} is valid. Note that the extra application of \texttt{KEC} at the end ensures that there exists an intermediate nonce which can be provided to prove that at least a small amount of work was done; this quick outer PoW verification can be used for anti-DDoS purposes. It also serves to provide statistical assurance that the result is an unbiased, 256 bit number. From a04ea02dca80027e36095c1cc66bf190707f02b9 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sat, 30 Sep 2017 17:37:33 +1000 Subject: [PATCH 045/132] Changed subscript to \mathrm e.g. for gas costs (using Word with Find and replace is much faster), added a citation for Mist. --- Biblio.bib | 10 ++- Paper.tex | 237 +++++++++++++++++++++++++++-------------------------- 2 files changed, 128 insertions(+), 119 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index 78d529ba..2983925b 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -1,6 +1,14 @@ +@misc{Mist, + url = "https://github.com/ethereum/mist/releases/tag/0.8.0", + note = "\url{https://web.archive.org/web/20170930071729/https://github.com/ethereum/mist/releases/tag/0.8.0}.", + author = {{Fabian Vogelsteller and Alex Van de Sande and Everton Fraga and Ramesh Nair and Luca Zeug}}, + date = "8 July 2016", + publisher = "Github" +} + @misc{commitdateforEthash, url = "https://github.com/ethereum/yellowpaper/commit/77a8cf2428ce245bf6e2c39c5e652ba58a278666#commitcomment-24644869", - note = "Not able to be archived by the Wayback Machine, the saved page doesn't load showing the cited change and comment.", + note = {{Not able to be archived by the Wayback Machine, the saved page doesn't load showing the cited change and comment.}}, author = {{Christoph Jentzsch}}, date = "4 May 2015", publisher = "Github", diff --git a/Paper.tex b/Paper.tex index 686d017a..e072b087 100644 --- a/Paper.tex +++ b/Paper.tex @@ -594,12 +594,12 @@ \subsection{Substate} \subsection{Execution} We define intrinsic gas $g_0$, the amount of gas this transaction requires to be paid prior to execution, as follows: \begin{align} -g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} G_{txdatazero} & \text{if} \quad i = 0 \\ G_{txdatanonzero} & \text{otherwise} \end{cases} \\ -{} & + \begin{cases} G_\text{txcreate} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ -{} & + G_{transaction} +g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} G_{\mathrm{txdatazero}} & \text{if} \quad i = 0 \\ G_{\mathrm{txdatanonzero}} & \text{otherwise} \end{cases} \\ +{} & + \begin{cases} G_{\mathrm{txcreate}} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ +{} & + G_{\mathrm{transaction}} \end{align} -where $T_\mathbf{i},T_\mathbf{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_\text{txcreate}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}. +where $T_\mathbf{i},T_\mathbf{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_{\mathrm{txcreate}}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}. %todo Explain g_d reason? @@ -734,7 +734,7 @@ \section{Contract Creation} \label{ch:create} If the initialization code completes successfully, a final contract-creation cost is paid, the code-deposit cost, $c$, proportional to the size of the created contract's code: \begin{equation} -c \equiv G_{codedeposit} \times |\mathbf{o}| +c \equiv G_{\mathrm{codedeposit}} \times |\mathbf{o}| \end{equation} If there is not enough gas remaining to pay this, \ie $g^{**} < c$, then we also declare an out-of-gas exception. @@ -762,7 +762,7 @@ \section{Contract Creation} \label{ch:create} Note that the intention is that the result is either a successfully created new contract with its endowment, or no new contract with no transfer of value. \subsection{Subtleties} -Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever. +Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a \hyperlink{selfdestruct}{\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever. \section{Message Call} \label{ch:call} In the case of executing a message call, several parameters are required: sender ($s$), transaction originator ($o$), recipient ($r$), the account whose code is to be executed ($c$, usually the same as recipient), available gas ($g$), value ($v$) and gas price ($p$) together with an arbitrary length byte array, $\mathbf{d}$, the input data of the call and finally the present depth of the message-call/contract-creation stack ($e$). @@ -974,7 +974,7 @@ \subsubsection{Normal Halting} \label{subsec:Normal Halting} \begin{equation} \label{eq:Normal Halting} H(\boldsymbol{\mu}, I) \equiv \begin{cases} H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small RETURN} \\ -() & \text{if} \quad w \in \text{\small STOP}, \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ +() & \text{if} \quad w \in \text{\small STOP}, \text{\hyperlink{selfdestruct}{\small SELFDESTRUCT}} \\ \varnothing & \text{otherwise} \end{cases} \end{equation} @@ -1234,7 +1234,7 @@ \section{Terminology} \label{ch:Terminology} \item[App] An end-user-visible application hosted in the Ethereum Browser. -\item[Ethereum Browser] (aka Ethereum Reference Client) A cross-platform GUI of an interface similar to a simplified browser (a la Chrome) that is able to host sandboxed applications whose backend is purely on the Ethereum protocol. +\item[Ethereum Browser] (aka Ethereum Reference Client) A cross-platform GUI of an interface similar to a simplified browser (a la Chrome) that is able to host sandboxed applications whose backend is purely on the Ethereum protocol, which is known as Mist since 8 July 2016 (\cite{Mist}). \item[Ethereum Virtual Machine] (aka EVM) The virtual machine that forms the key part of the execution model for an Account's associated EVM Code. @@ -1514,41 +1514,41 @@ \section{Fee Schedule}\label{app:fees} \toprule Name & Value & Description* \\ \midrule -$G_{zero}$ & 0 & Nothing is paid for operations of the set {\small $W_{zero}$}. \\ -$G_{base}$ & 2 & This is the amount of gas to pay for operations of the set {\small $W_{base}$}. \\ -$G_{verylow}$ & 3 & This is the amount of gas to pay for operations of the set {\small $W_{verylow}$}. \\ -$G_{low}$ & 5 & This is the amount of gas to pay for operations of the set {\small $W_{low}$}. \\ -$G_{mid}$ & 8 & This is the amount of gas to pay for operations of the set {\small $W_{mid}$}. \\ -$G_{high}$ & 10 & This is the amount of gas to pay for operations of the set {\small $W_{high}$}. \\ -$G_{extcode}$ & 700 & This is the amount of gas to pay for operations of the set {\small $W_{extcode}$}. \\ -$G_{balance}$ & 400 & This is the amount of gas to pay for a {\small BALANCE} operation. \\ -$G_{sload}$ & 200 & This is paid for an {\small SLOAD} operation. \\ -$G_{jumpdest}$ & 1 & This is paid for a {\small JUMPDEST} operation. \\ -$G_{sset}$ & 20000 & This is paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\ -$G_{sreset}$ & 5000 & This is the amount for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\ -$R_{sclear}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \hypertarget{Rselfdestruct}{}\\ -$R_{selfdestruct}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \hypertarget{Gselfdestruct}{}\\ -$G_{selfdestruct}$ & 5000 & This is the amount of gas to pay for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation. \\ -$G_{create}$ & 32000 & This is paid for a {\small CREATE} operation. \\ -$G_{codedeposit}$ & 200 & This is paid per byte for a {\small CREATE} operation to succeed in placing code into the state. \\ -$G_{call}$ & 700 & This is paid for a {\small CALL} operation. \\ -$G_{callvalue}$ & 9000 & This is paid for a non-zero value transfer as part of the {\small CALL} operation. \\ -$G_{callstipend}$ & 2300 & This is a stipend for the called contract subtracted from $G_{callvalue}$ for a non-zero value transfer. \hypertarget{Gnewaccount}{}\\ -$G_{newaccount}$ & 25000 & This is paid for a {\small CALL} or for a \hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT} operation which creates an account. \\ -$G_{exp}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ -$G_{expbyte}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ -$G_{memory}$ & 3 & This is paid for every additional word when expanding memory. \\ -$G_\text{txcreate}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.\\ -$G_{txdatazero}$ & 4 & This is paid for every zero byte of data or code for a transaction. \\ -$G_{txdatanonzero}$ & 68 & This is paid for every non-zero byte of data or code for a transaction. \\ -$G_{transaction}$ & 21000 & This is paid for every transaction. \\ -$G_{log}$ & 375 & This is a partial payment for a {\small LOG} operation. \\ -$G_{logdata}$ & 8 & This is paid for each byte in a {\small LOG} operation's data. \\ -$G_{logtopic}$ & 375 & This is paid for each topic of a {\small LOG} operation. \\ -$G_{sha3}$ & 30 & This is paid for each {\small SHA3} operation. \\ -$G_{sha3word}$ & 6 & This is paid for each word (rounded up) for input data to a {\small SHA3} operation. \\ -$G_{copy}$ & 3 & This is a partial payment for {\small *COPY} operations, multiplied by the number of words copied, rounded up. \\ -$G_{blockhash}$ & 20 & This is a payment for a {\small BLOCKHASH} operation. \\ +$G_{\mathrm{zero}}$ & 0 & Nothing is paid for operations of the set {\small $W_{\mathrm{zero}}$}. \\ +$G_{\mathrm{base}}$ & 2 & This is the amount of gas to pay for operations of the set {\small $W_{\mathrm{base}}$}. \\ +$G_{\mathrm{verylow}}$ & 3 & This is the amount of gas to pay for operations of the set {\small $W_{\mathrm{verylow}}$}. \\ +$G_{\mathrm{low}}$ & 5 & This is the amount of gas to pay for operations of the set {\small $W_{\mathrm{low}}$}. \\ +$G_{\mathrm{mid}}$ & 8 & This is the amount of gas to pay for operations of the set {\small $W_{\mathrm{mid}}$}. \\ +$G_{\mathrm{\mathrm{high}}}$ & 10 & This is the amount of gas to pay for operations of the set {\small $W_{\mathrm{\mathrm{high}}}$}. \\ +$G_{\mathrm{extcode}}$ & 700 & This is the amount of gas to pay for operations of the set {\small $W_{\mathrm{extcode}}$}. \\ +$G_{\mathrm{balance}}$ & 400 & This is the amount of gas to pay for a {\small BALANCE} operation. \\ +$G_{\mathrm{sload}}$ & 200 & This is paid for an {\small SLOAD} operation. \\ +$G_{\mathrm{jumpdest}}$ & 1 & This is paid for a {\small JUMPDEST} operation. \\ +$G_{\mathrm{sset}}$ & 20000 & This is paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\ +$G_{\mathrm{sreset}}$ & 5000 & This is the amount for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\ +$R_{\mathrm{sclear}}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \hypertarget{Rselfdestruct}{}\\ +$R_{\mathrm{selfdestruct}}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \hypertarget{Gselfdestruct}{}\\ +$G_{\mathrm{selfdestruct}}$ & 5000 & This is the amount of gas to pay for a \hyperlink{selfdestruct}{\small SELFDESTRUCT} operation. \\ +$G_{\mathrm{create}}$ & 32000 & This is paid for a {\small CREATE} operation. \\ +$G_{\mathrm{codedeposit}}$ & 200 & This is paid per byte for a {\small CREATE} operation to succeed in placing code into the state. \\ +$G_{\mathrm{call}}$ & 700 & This is paid for a {\small CALL} operation. \\ +$G_{\mathrm{callvalue}}$ & 9000 & This is paid for a non-zero value transfer as part of the {\small CALL} operation. \\ +$G_{\mathrm{callstipend}}$ & 2300 & This is a stipend for the called contract subtracted from $G_{\mathrm{callvalue}}$ for a non-zero value transfer. \hypertarget{Gnewaccount}{}\\ +$G_{\mathrm{newaccount}}$ & 25000 & This is paid for a {\small CALL} or for a \hyperlink{selfdestruct}{\small SELFDESTRUCT} operation which creates an account. \\ +$G_{\mathrm{exp}}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ +$G_{\mathrm{expbyte}}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ +$G_{\mathrm{memory}}$ & 3 & This is paid for every additional word when expanding memory. \\ +$G_{\mathrm{txcreate}}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.\\ +$G_{\mathrm{txdatazero}}$ & 4 & This is paid for every zero byte of data or code for a transaction. \\ +$G_{\mathrm{txdatanonzero}}$ & 68 & This is paid for every non-zero byte of data or code for a transaction. \\ +$G_{\mathrm{transaction}}$ & 21000 & This is paid for every transaction. \\ +$G_{\mathrm{log}}$ & 375 & This is a partial payment for a {\small LOG} operation. \\ +$G_{\mathrm{logdata}}$ & 8 & This is paid for each byte in a {\small LOG} operation's data. \\ +$G_{\mathrm{logtopic}}$ & 375 & This is paid for each topic of a {\small LOG} operation. \\ +$G_{\mathrm{sha3}}$ & 30 & This is paid for each {\small SHA3} operation. \\ +$G_{\mathrm{sha3word}}$ & 6 & This is paid for each word (rounded up) for input data to a {\small SHA3} operation. \\ +$G_{\mathrm{copy}}$ & 3 & This is a partial payment for {\small *COPY} operations, multiplied by the number of words copied, rounded up. \\ +$G_{\mathrm{blockhash}}$ & 20 & This is a payment for a {\small BLOCKHASH} operation. \\ %extern u256 const \mathbf{c}_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. \bottomrule @@ -1567,30 +1567,30 @@ \subsection{Gas Cost} \begin{equation} C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_\mathbf{i})-C_{mem}(\boldsymbol{\mu}_\mathbf{i}) + \begin{cases} C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SSTORE} \\ -G_{exp} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] = 0 \\ -G_{exp} + G_{expbyte}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathbf{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] > 0 \\ -G_{verylow} + G_{copy}\times\lceil\boldsymbol{\mu}_\mathbf{s}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\ -G_{extcode} + G_{copy}\times\lceil\boldsymbol{\mu}_\mathbf{s}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1] & \text{if} \quad w = \text{\small LOG0} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+G_{logtopic} & \text{if} \quad w = \text{\small LOG1} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+2G_{logtopic} & \text{if} \quad w = \text{\small LOG2} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+3G_{logtopic} & \text{if} \quad w = \text{\small LOG3} \\ -G_{log}+G_{logdata}\times\boldsymbol{\mu}_\mathbf{s}[1]+4G_{logtopic} & \text{if} \quad w = \text{\small LOG4} \\ +G_{\mathrm{exp}} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] = 0 \\ +G_{\mathrm{exp}} + G_{\mathrm{expbyte}}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathbf{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] > 0 \\ +G_{\mathrm{verylow}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathbf{s}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\ +G_{\mathrm{extcode}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathbf{s}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\ +G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1] & \text{if} \quad w = \text{\small LOG0} \\ +G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG1} \\ +G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+2G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG2} \\ +G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+3G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG3} \\ +G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+4G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG4} \\ C_\text{\tiny CALL}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small CALL} \lor \text{\small CALLCODE} \lor \text{\small DELEGATECALL} \\ -\hyperlink{C tiny SELFDESTRUCT}{C_\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{SELFDESTRUCT}{\small SELFDESTRUCT}} \\ -G_{create} & \text{if} \quad w = \text{\small CREATE}\\ -G_{sha3}+G_{sha3word} \lceil \mathbf{s}[1] \div 32 \rceil & \text{if} \quad w = \text{\small SHA3}\\ -G_{jumpdest} & \text{if} \quad w = \text{\small JUMPDEST}\\ -G_{sload} & \text{if} \quad w = \text{\small SLOAD}\\ -G_{zero} & \text{if} \quad w \in W_{zero}\\ -G_{base} & \text{if} \quad w \in W_{base}\\ -G_{verylow} & \text{if} \quad w \in W_{verylow}\\ -G_{low} & \text{if} \quad w \in W_{low}\\ -G_{mid} & \text{if} \quad w \in W_{mid}\\ -G_{high} & \text{if} \quad w \in W_{high}\\ -G_{extcode} & \text{if} \quad w \in W_{extcode}\\ -G_{balance} & \text{if} \quad w = \text{\small BALANCE}\\ -G_{blockhash} & \text{if} \quad w = \text{\small BLOCKHASH}\\ +\hyperlink{C tiny SELFDESTRUCT}{C_\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{selfdestruct}{\small SELFDESTRUCT}} \\ +G_{\mathrm{create}} & \text{if} \quad w = \text{\small CREATE}\\ +G_{\mathrm{sha3}}+G_{\mathrm{sha3word}} \lceil \mathbf{s}[1] \div 32 \rceil & \text{if} \quad w = \text{\small SHA3}\\ +G_{\mathrm{jumpdest}} & \text{if} \quad w = \text{\small JUMPDEST}\\ +G_{\mathrm{sload}} & \text{if} \quad w = \text{\small SLOAD}\\ +G_{\mathrm{zero}} & \text{if} \quad w \in W_{\mathrm{zero}}\\ +G_{\mathrm{base}} & \text{if} \quad w \in W_{\mathrm{base}}\\ +G_{\mathrm{verylow}} & \text{if} \quad w \in W_{\mathrm{verylow}}\\ +G_{\mathrm{low}} & \text{if} \quad w \in W_{\mathrm{low}}\\ +G_{\mathrm{mid}} & \text{if} \quad w \in W_{\mathrm{mid}}\\ +G_{\mathrm{\mathrm{high}}} & \text{if} \quad w \in W_{\mathrm{\mathrm{high}}}\\ +G_{\mathrm{extcode}} & \text{if} \quad w \in W_{\mathrm{extcode}}\\ +G_{\mathrm{balance}} & \text{if} \quad w = \text{\small BALANCE}\\ +G_{\mathrm{blockhash}} & \text{if} \quad w = \text{\small BLOCKHASH}\\ \end{cases} \end{equation} \begin{equation} @@ -1601,26 +1601,26 @@ \subsection{Gas Cost} where: \begin{equation} -C_{mem}(a) \equiv G_{memory} \cdot a + \Big\lfloor \dfrac{a^2}{512} \Big\rfloor +C_{mem}(a) \equiv G_{\mathrm{memory}} \cdot a + \Big\lfloor \dfrac{a^2}{512} \Big\rfloor \end{equation} with \hyperlink{tiny CALL}{$C_\text{\tiny CALL}$}, \hyperlink{C tiny SELFDESTRUCT}{$C_\text{\tiny SELFDESTRUCT}$} and \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$} as specified in the appropriate section below. We define the following subsets of instructions: -$W_{zero}$ = \{{\small STOP}, {\small RETURN}\} +$W_{\mathrm{zero}}$ = \{{\small STOP}, {\small RETURN}\} -$W_{base}$ = \{{\small ADDRESS}, {\small ORIGIN}, {\small CALLER}, {\small CALLVALUE}, {\small CALLDATASIZE}, {\small CODESIZE}, {\small GASPRICE}, {\small COINBASE},\newline \noindent\hspace*{1cm} {\small TIMESTAMP}, {\small NUMBER}, {\small DIFFICULTY}, {\small GASLIMIT}, {\small POP}, {\small PC}, {\small MSIZE}, {\small GAS}\} +$W_{\mathrm{base}}$ = \{{\small ADDRESS}, {\small ORIGIN}, {\small CALLER}, {\small CALLVALUE}, {\small CALLDATASIZE}, {\small CODESIZE}, {\small GASPRICE}, {\small COINBASE},\newline \noindent\hspace*{1cm} {\small TIMESTAMP}, {\small NUMBER}, {\small DIFFICULTY}, {\small GASLIMIT}, {\small POP}, {\small PC}, {\small MSIZE}, {\small GAS}\} -$W_{verylow}$ = \{{\small ADD}, {\small SUB}, {\small NOT}, {\small LT}, {\small GT}, {\small SLT}, {\small SGT}, {\small EQ}, {\small ISZERO}, {\small AND}, {\small OR}, {\small XOR}, {\small BYTE}, {\small CALLDATALOAD}, \newline \noindent\hspace*{1cm} {\small MLOAD}, {\small MSTORE}, {\small MSTORE8}, {\small PUSH*}, {\small DUP*}, {\small SWAP*}\} +$W_{\mathrm{verylow}}$ = \{{\small ADD}, {\small SUB}, {\small NOT}, {\small LT}, {\small GT}, {\small SLT}, {\small SGT}, {\small EQ}, {\small ISZERO}, {\small AND}, {\small OR}, {\small XOR}, {\small BYTE}, {\small CALLDATALOAD}, \newline \noindent\hspace*{1cm} {\small MLOAD}, {\small MSTORE}, {\small MSTORE8}, {\small PUSH*}, {\small DUP*}, {\small SWAP*}\} -$W_{low}$ = \{{\small MUL}, {\small DIV}, {\small SDIV}, {\small MOD}, {\small SMOD}, {\small SIGNEXTEND}\} +$W_{\mathrm{low}}$ = \{{\small MUL}, {\small DIV}, {\small SDIV}, {\small MOD}, {\small SMOD}, {\small SIGNEXTEND}\} -$W_{mid}$ = \{{\small ADDMOD}, {\small MULMOD}, {\small JUMP}\} +$W_{\mathrm{mid}}$ = \{{\small ADDMOD}, {\small MULMOD}, {\small JUMP}\} -$W_{high}$ = \{{\small JUMPI}\} +$W_{\mathrm{\mathrm{high}}}$ = \{{\small JUMPI}\} -$W_{extcode}$ = \{{\small EXTCODESIZE}\} +$W_{\mathrm{extcode}}$ = \{{\small EXTCODESIZE}\} -Note the memory cost component, given as the product of $G_{memory}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathbf{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes. +Note the memory cost component, given as the product of $G_{\mathrm{memory}}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathbf{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes. Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_\mathbf{i}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal. @@ -1866,11 +1866,11 @@ \subsection{Instruction Set} 0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\ &&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{}\\ &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -G_{sset} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ -G_{sreset} & \text{otherwise} +G_{\mathrm{sset}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ +G_{\mathrm{sreset}} & \text{otherwise} \end{cases}$ \\ &&&& $A'_{r} \equiv A_{r} + \begin{cases} -R_{sclear} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\ +R_{\mathrm{sclear}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule @@ -2014,20 +2014,20 @@ \subsection{Instruction Set} &&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \hypertarget{tiny CALL}{}\\ &&&& $C_{\text{\tiny CALL}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$ \\ &&&& $C_{\text{\tiny CALLGAS}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{callstipend} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ +C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{\mathrm{callstipend}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{otherwise} \end{cases}$ \\ &&&& $C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} \min\{ L(\boldsymbol{\mu}_\mathbf{g} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_\mathbf{s}[0] \} & \text{if} \quad \boldsymbol{\mu}_\mathbf{g} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\ \boldsymbol{\mu}_\mathbf{s}[0] & \text{otherwise} \end{cases}$\\ -&&&& $C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{call} + C_{\text{\tiny XFER}}(\boldsymbol{\mu}) + C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$\\ +&&&& $C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{\mathrm{call}} + C_{\text{\tiny XFER}}(\boldsymbol{\mu}) + C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$\\ &&&& $C_{\text{\tiny XFER}}(\boldsymbol{\mu}) \equiv \begin{cases} -G_{callvalue} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ +G_{\mathrm{callvalue}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\ 0 & \text{otherwise} \end{cases}$ \\ &&&& $C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} -G_{newaccount} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}] = \varnothing \\ +G_{\mathrm{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}] = \varnothing \\ 0 & \text{otherwise} \end{cases}$ \\ \midrule @@ -2051,25 +2051,26 @@ \subsection{Instruction Set} &&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ \midrule -0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{SELFDESTRUCT}{}\\ +0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{\mathrm{selfdestruct}}{}\\ \midrule 0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. \\ &&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_\mathbf{a} \}$ \\ &&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} + \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ \\ &&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{b} \equiv 0$ \\ &&&& $A'_{r} \equiv A_{r} + \begin{cases} -\hyperlink{Rselfdestruct}{R_{selfdestruct}} & \text{if} \quad I_\mathbf{a} \notin A_\mathbf{s} \\ +\hyperlink{Rselfdestruct}{R_{\mathrm{selfdestruct}}} & \text{if} \quad I_\mathbf{a} \notin A_\mathbf{s} \\ 0 & \text{otherwise} \end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\ -&&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{selfdestruct}} + \begin{cases} -\hyperlink{Gnewaccount}{G_{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] = \varnothing \\ +&&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{\mathrm{selfdestruct}}} + \begin{cases} +\hyperlink{Gnewaccount}{G_{\mathrm{newaccount}}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] = \varnothing \\ 0 & \text{otherwise} \end{cases}$ \\ \bottomrule \end{tabularx} +%Is in the terminology list. %\section{Low-level Lisp-like Language}\label{app:lll} -%The Low-level Lisp-like Language is a language created in order to efficiently author low-level programs (contracts) without having to resort to EVM-Assembly. +%The Low-level Lisp-like Language is a language created in order to efficiently author low-level programs (contracts) without having to resort to EVM-Assembly. \hypertarget{GenesisBlock}{} \section{Genesis Block}\label{app:genesis} @@ -2113,37 +2114,37 @@ \subsection{Size of dataset and cache} E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{\mathrm{epoch}}}}\right\rfloor \end{equation} The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\mathrm{datasetgrowth}}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\mathrm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} for the cache.\hypertarget{dsize}{ -Let $d_{size} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:} +Let $d_{\mathrm{\mathrm{size}}} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:} \begin{equation} - d_{size} = E_{prime}(\hyperlink{Jdatasetinit}{J_{\mathrm{datasetinit}}} + \hyperlink{Jdatasetgrowth}{J_{\mathrm{datasetgrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}, J_{\mathrm{mixbytes}}) + d_{\mathrm{\mathrm{size}}} = E_{\mathrm{prime}}(\hyperlink{Jdatasetinit}{J_{\mathrm{datasetinit}}} + \hyperlink{Jdatasetgrowth}{J_{\mathrm{datasetgrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}, J_{\mathrm{mixbytes}}) \end{equation} -The size of the cache, $c_{size}$, is calculated using +The size of the cache, $c_{\mathrm{size}}$, is calculated using \begin{equation} - c_{size} = E_{prime}(\hyperlink{Jcacheinit}{J_{\mathrm{cacheinit}}} + \hyperlink{Jcachegrowth}{J_{\mathrm{cachegrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}, J_{\mathrm{hashbytes}}) + c_{\mathrm{size}} = E_{\mathrm{prime}}(\hyperlink{Jcacheinit}{J_{\mathrm{cacheinit}}} + \hyperlink{Jcachegrowth}{J_{\mathrm{cachegrowth}}} \cdot E_{\mathrm{epoch}} - \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}, J_{\mathrm{hashbytes}}) \end{equation} \begin{equation} - E_{prime}(x, y) = \begin{cases} + E_{\mathrm{prime}}(x, y) = \begin{cases} x & \text{if} \quad x / y \in \mathbb{P} \\ -E_{prime}((x - 1) \cdot y, y) & \text{otherwise} +E_{\mathrm{prime}}((x - 1) \cdot y, y) & \text{otherwise} \end{cases} \end{equation} \subsection{Dataset generation} -In order the generate the dataset we need the cache $c$, which is an array of bytes. It depends on the cache size $c_{size}$ and the seed hash $s \in \mathbb{B}_{32}$. +In order the generate the dataset we need the cache $c$, which is an array of bytes. It depends on the cache size $c_{\mathrm{size}}$ and the seed hash $s \in \mathbb{B}_{32}$. \subsubsection{Seed hash} The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash: \begin{equation} - s = C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) + s = C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathbf{i}}) \end{equation} \begin{equation} - C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} + C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases} \texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad \\ -\texttt{KEC}(C_{seedhash}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{\mathrm{epoch}}})) & \text{otherwise} +\texttt{KEC}(C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{\mathrm{epoch}}})) & \text{otherwise} \end{cases} \end{equation} With $\mathbf{0}_{32}$ being 32 bytes of zeros. \subsubsection{Cache} -The cache production process involves using the seed hash to first sequentially fill up $c_{size}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{\mathrm{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. +The cache production process involves using the seed hash to first sequentially fill up $c_{\mathrm{size}}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{\mathrm{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows. We define the array $\mathbf{c}_{i}$, consisting of 64 single bytes, as the $i$th element of the initial cache: \begin{equation} @@ -2157,7 +2158,7 @@ \subsubsection{Cache} \mathbf{c'}[i] = \mathbf{c}_{i} \quad \forall \quad i < n \end{equation} \begin{equation} - n = \left\lfloor\frac{c_{size}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor + n = \left\lfloor\frac{c_{\mathrm{size}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor \end{equation} The cache is calculated by performing \hyperlink{Jcacherounds}{$J_{\mathrm{cacherounds}}$} rounds of the RandMemoHash algorithm to the inital cache $\mathbf{c'}$: \begin{equation} @@ -2183,7 +2184,7 @@ \subsubsection{Cache} \subsubsection{Full dataset calculation} \label{dataset} Essentially, we combine data from $J_{\mathrm{parents}}$ pseudorandomly selected cache nodes, and hash that to compute the dataset. The entire dataset is then generated by a number of items, each \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} bytes in size: \begin{equation} - \mathbf{d}[i] = E_{datasetitem}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor + \mathbf{d}[i] = E_{\mathrm{datasetitem}}(\mathbf{c}, i) \quad \forall \quad i < \left\lfloor\frac{\hyperlink{dsize}{d_{\mathrm{size}}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor \end{equation} In order to calculate the single item we use an algorithm inspired by the FNV hash (\cite{FowlerNollVo1991FNVHash}) in some cases as a non-associative substitute for XOR. \begin{equation} @@ -2191,18 +2192,18 @@ \subsubsection{Full dataset calculation} \label{dataset} \end{equation} The single item of the dataset can now be calculated as: \begin{equation} - E_{datasetitem}(\mathbf{c}, i) = E_{\mathrm{parents}}(\mathbf{c}, i, -1, \varnothing) + E_{\mathrm{datasetitem}}(\mathbf{c}, i) = E_{\mathrm{parents}}(\mathbf{c}, i, -1, \varnothing) \end{equation} \begin{equation} E_{\mathrm{parents}}(\mathbf{c}, i, p, \mathbf{m}) = \begin{cases} -E_{\mathrm{parents}}(\mathbf{c}, i, p +1, E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_{\mathrm{parents}} -2 \\ -E_{mix}(\mathbf{m}, \mathbf{c}, i, p + 1) & \text{otherwise} +E_{\mathrm{parents}}(\mathbf{c}, i, p +1, E_{\mathrm{mix}}(\mathbf{m}, \mathbf{c}, i, p + 1)) & \text{if} \quad p < J_{\mathrm{parents}} -2 \\ +E_{\mathrm{mix}}(\mathbf{m}, \mathbf{c}, i, p + 1) & \text{otherwise} \end{cases} \end{equation} \begin{equation} - E_{mix}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} -\texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{size}] \oplus i) & \text{if} \quad p = 0 \\ -E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}} / \hyperlink{Jwordbytes}{J_{\mathrm{wordbytes}}} \rfloor]) \mod \mathbf{c}_{size}] \big) & \text{otherwise} + E_{\mathrm{mix}}(\mathbf{m}, \mathbf{c}, i, p) = \begin{cases} +\texttt{KEC512}(\mathbf{c}[i \mod \mathbf{c}_{\mathrm{size}}] \oplus i) & \text{if} \quad p = 0 \\ +E_\text{\tiny FNV}\big(\mathbf{m}, \mathbf{c}[E_\text{\tiny FNV}(i \oplus p, \mathbf{m}[p \mod \lfloor \hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}} / \hyperlink{Jwordbytes}{J_{\mathrm{wordbytes}}} \rfloor]) \mod \mathbf{c}_{\mathrm{size}}] \big) & \text{otherwise} \end{cases} \end{equation} @@ -2217,16 +2218,16 @@ \subsection{Proof-of-work function} \end{equation} With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathbf{c}$ is obtained as follows: \begin{equation} - \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{compress}(E_{\mathrm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{mix}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) + \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{\mathrm{compress}}(E_{\mathrm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{\mathrm{mix}}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4) \end{equation} The seed hash being: \begin{equation} - \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{revert}(\mathbf{n})) + \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{\mathrm{revert}}(\mathbf{n})) \end{equation} -$E_{revert}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$: +$E_{\mathrm{revert}}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$: \begin{equation} - E_{revert}(\mathbf{n})[i] = \mathbf{n}[\lVert \mathbf{n} \rVert -i] + E_{\mathrm{revert}}(\mathbf{n})[i] = \mathbf{n}[\lVert \mathbf{n} \rVert -i] \end{equation} We note that the ``$+$''-operator between two byte sequences results in the concatenation of both sequences. @@ -2234,27 +2235,27 @@ \subsection{Proof-of-work function} The number of replicated sequences in the mix is: \begin{equation} - n_{mix} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor + n_{\mathrm{mix}} = \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor \end{equation} In order to add random dataset nodes to the mix, the $E_{\mathrm{accesses}}$ function is used: \begin{equation} E_{\mathrm{accesses}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = \begin{cases} -E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_{\mathrm{accesses}}} -2 \\ -E_{\mathrm{accesses}}(E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} +E_{\mathrm{mixdataset}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) & \text{if} \quad i = \hyperlink{Jaccesses}{J_{\mathrm{accesses}}} -2 \\ +E_{\mathrm{accesses}}(E_{\mathrm{mixdataset}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i), \mathbf{s}, i + 1) & \text{otherwise} \end{cases} \end{equation} \begin{equation} - E_{mixdataset}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = E_\text{\tiny FNV}(\mathbf{m}, E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) + E_{\mathrm{mixdataset}}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) = E_\text{\tiny FNV}(\mathbf{m}, E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i) \end{equation} -$E_{newdata}$ returns an array with $n_{mix}$ elements: +$E_{newdata}$ returns an array with $n_{\mathrm{mix}}$ elements: \begin{equation} - E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}}{\hyperlink{Jwordbytes}{J_{\mathrm{wordbytes}}}}\right\rfloor]) \mod \left\lfloor\frac{\hyperlink{dsize}{d_{size}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}{n_{mix}}\right\rfloor \cdot n_{mix} + j] \quad \forall \quad j < n_{mix} + E_{newdata}(\mathbf{d}, \mathbf{m}, \mathbf{s}, i)[j] = \mathbf{d}[E_\text{\tiny FNV}(i \oplus \mathbf{s}[0], \mathbf{m}[i \mod \left\lfloor\frac{\hyperlink{Jmixbytes}{J_{\mathrm{mixbytes}}}}{\hyperlink{Jwordbytes}{J_{\mathrm{wordbytes}}}}\right\rfloor]) \mod \left\lfloor\frac{\hyperlink{dsize}{d_{\mathrm{size}}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}{n_{\mathrm{mix}}}\right\rfloor \cdot n_{\mathrm{mix}} + j] \quad \forall \quad j < n_{\mathrm{mix}} \end{equation} The mix is compressed as follows: \begin{equation} - E_{compress}(\mathbf{m}, i) = \begin{cases} + E_{\mathrm{compress}}(\mathbf{m}, i) = \begin{cases} \mathbf{m} & \text{if} \quad i \geqslant \lVert \mathbf{m} \rVert - 8 \\ -E_{compress}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(\mathbf{m}[i + 4], \mathbf{m}[i + 5]), \mathbf{m}[i + 6]), \mathbf{m}[i + 7]), i + 8) & \text{otherwise} +E_{\mathrm{compress}}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(E_\text{\tiny FNV}(\mathbf{m}[i + 4], \mathbf{m}[i + 5]), \mathbf{m}[i + 6]), \mathbf{m}[i + 7]), i + 8) & \text{otherwise} \end{cases} \end{equation} From d3068a96d1e65e1a1f65a41c3b32a6c2b169f75f Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sun, 1 Oct 2017 19:44:10 +1100 Subject: [PATCH 046/132] Added citations for Keccak and cross-references. --- Biblio.bib | 19 ++++++++++++++++++- Paper.tex | 50 ++++++++++++++++++++++++++------------------------ 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/Biblio.bib b/Biblio.bib index 2983925b..28699a78 100644 --- a/Biblio.bib +++ b/Biblio.bib @@ -1,9 +1,25 @@ +@misc{Keccak, + url = "https://keccak.team/keccak.html", + note = "Unable to be archived by the Wayback Machine", + author = {{Guido Bertoni and Joan Daemen and Michaël Peeters and Gilles Van Assche and Ronny Van Keer}}, + title = {{KECCAK}}, + year = "2017", +} + +@misc{KeccakWikipedia, + url = "https://en.wikipedia.org/wiki/SHA-3", + note = "\url{https://web.archive.org/web/20171001081722/https://en.wikipedia.org/wiki/SHA-3}", + title = {{SHA-3}}, + date = "17 September 2017", +} + @misc{Mist, url = "https://github.com/ethereum/mist/releases/tag/0.8.0", note = "\url{https://web.archive.org/web/20170930071729/https://github.com/ethereum/mist/releases/tag/0.8.0}.", author = {{Fabian Vogelsteller and Alex Van de Sande and Everton Fraga and Ramesh Nair and Luca Zeug}}, date = "8 July 2016", - publisher = "Github" + publisher = "Github", + title = {[Mist release 0.8.0}}, } @misc{commitdateforEthash, @@ -12,6 +28,7 @@ @misc{commitdateforEthash author = {{Christoph Jentzsch}}, date = "4 May 2015", publisher = "Github", + title = "Commit date for Ethash", } @misc{ASICbitcoinwiki, diff --git a/Paper.tex b/Paper.tex index e072b087..cb6ac39b 100644 --- a/Paper.tex +++ b/Paper.tex @@ -31,11 +31,10 @@ %https://stackoverflow.com/questions/1918366/automated-line-breaks-in-latex-tables/1918465#1918465 %tabularx seems better, but we can include this if we need tables to break across pages automatically, as well as tabu and longtabu - \usepackage{tabularx} %https://stackoverflow.com/a/1919447/7438857 -%was using tabularx, but found tabu which seems more flexible, and generally better. +% Tabu seems more flexible, and generally better. \usepackage{tabu} \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} @@ -45,7 +44,7 @@ \makeatletter \g@addto@macro{\UrlBreaks}{\UrlOrds} \makeatother -%\PassOptionsToPackage{url}\g@addto@macro{\UrlBreaks}{\UrlOrds} + % info on the above command: . Note that the three preceding lines, as well as \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} did not fix the error where if a URL breaks over a page, it shows a snippet in the header as shown here: . The following command did fix this error, however only because it happened to compact the text, preventing a URL from breaking over a page. If you force a URL to break over a page, the error still occurs. \expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one @@ -62,6 +61,8 @@ % https://tex.stackexchange.com/a/59131/143781 % +\usepackage[utf8]{inputenc} + %\usepackage{glossaries} \input{Version.tex} @@ -200,9 +201,9 @@ \section{Conventions}\label{ch:conventions} Functions operating on highly structured values are denoted with an upper-case greek letter, \eg \hyperlink{Upsilon}{$\Upsilon$}, the Ethereum state transition function. -For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg $C_\text{\tiny SSTORE}$, the cost function for the {\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. +For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$}, the cost function for the \hyperlink{SSTORE}{\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest, rather than later releases (\cite{Keccak}, \cite{KeccakWikipedia})) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function. -Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg $T_\mathbf{n}$, denotes the \hyperlink{transaction nonce}{nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. +Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg \hyperlink{transaction nonce}{$T_\mathbf{n}$, denotes the nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components. Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a \hyperlink{transaction nonce}{transaction nonce}. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation. @@ -216,7 +217,7 @@ \section{Conventions}\label{ch:conventions} When considering variants of existing values, I follow the rule that within a given scope for definition, if we assume that the unmodified `input' value be denoted by the placeholder $\Box$ then the modified and utilisable value is denoted as $\Box'$, and intermediate values would be $\Box^*$, $\Box^{**}$ \&c. On very particular occasions, in order to maximise readability and only if unambiguous in meaning, I may use alpha-numeric subscripts to denote intermediate values, especially those of particular note. -When considering the use of existing functions, given a function $f$, the function $f^*$ denotes a similar, element-wise version of the function mapping instead between sequences. It is formally defined in section \ref{ch:block}. +When considering the use of existing functions, given a function $f$, the function \hyperlink{f*}{$f^*$} denotes a similar, element-wise version of the function mapping instead between sequences. I define a number of useful functions throughout. \hypertarget{ell}{}One of the more common is $\ell$, which evaluates to the last item in the given sequence: @@ -247,7 +248,7 @@ \subsection{World State} \label{ch:state} \texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathbf{s})\big) \equiv \boldsymbol{\sigma}[a]_\mathbf{s} \end{equation} -The collapse function for the set of key/value pairs in the trie, $L_I^*$, is defined as the element-wise transformation of the base function $L_I$, given as: +The collapse function for the set of key/value pairs in the trie, $L_I^*$, is defined as the \hyperlink{f*}{element-wise transformation} of the base function $L_I$, given as: \begin{equation} L_I\big( (k, v) \big) \equiv \big(\texttt{\small KEC}(k), \texttt{\small RLP}(v)\big) \end{equation} @@ -447,10 +448,11 @@ \subsubsection{Serialisation} \quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathbf{T}^*(B_\mathbf{T}), L_H^*(\hyperlink{B U}{B_\mathbf{U}}) \big) \end{eqnarray} +\hypertarget{f*}{ With $L_\mathbf{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus: \begin{equation} f^*\big( (x_0, x_1, ...) \big) \equiv \big( f(x_0), f(x_1), ... \big) \quad \text{for any function} \; f -\end{equation} +\end{equation}} The component types are defined thus: \begin{equation} @@ -593,11 +595,11 @@ \subsection{Substate} \subsection{Execution} We define intrinsic gas $g_0$, the amount of gas this transaction requires to be paid prior to execution, as follows: -\begin{align} -g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} G_{\mathrm{txdatazero}} & \text{if} \quad i = 0 \\ G_{\mathrm{txdatanonzero}} & \text{otherwise} \end{cases} \\ -{} & + \begin{cases} G_{\mathrm{txcreate}} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ -{} & + G_{\mathrm{transaction}} -\end{align} +\begin{align}\hypertarget{g0}{ +g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} \hyperlink{Gtxdatazero}{G_{\mathrm{txdatazero}}} & \text{if} \quad i = 0 \\ \hyperlink{Gtxdatanonzero}{G_{\mathrm{txdatanonzero}}} & \text{otherwise} \end{cases} \\ +{} & + \begin{cases} \hyperlink{Gtxcreate}{G_{\mathrm{txcreate}}} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\ +{} & + \hyperlink{Gtransaction}{G_{\mathrm{transaction}}} +}\end{align} where $T_\mathbf{i},T_\mathbf{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_{\mathrm{txcreate}}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}. @@ -1174,7 +1176,7 @@ \subsection{Random Numbers} \section{Future Directions} \label{ch:future} -The state database won't be forced to maintain all past state \hyperlink{trie}{trie} structures into the future. It should maintain an age for each node and eventually discard nodes that are neither recent enough nor checkpoints; checkpoints, or a set of nodes in the database that allow a particular block's state trie to be traversed, could be used to place a maximum limit on the amount of computation needed in order to retrieve any state throughout the blockchain. +The state database won't be forced to maintain all past state \hyperlink{trie}{trie} structures into the future. It should maintain an age for each node and eventually discard nodes that are neither recent enough nor checkpoints. Checkpoints, or a set of nodes in the database that allow a particular block's state trie to be traversed, could be used to place a maximum limit on the amount of computation needed in order to retrieve any state throughout the blockchain. Blockchain consolidation could be used in order to reduce the amount of blocks a client would need to download to act as a full, mining, node. A compressed archive of the trie structure at given points in time (perhaps one in every 10,000th block) could be maintained by the peer network, effectively recasting the \hyperlink{GenesisBlock}{genesis block}. This would reduce the amount to be downloaded to a single archive plus a hard maximum limit of blocks. @@ -1537,11 +1539,11 @@ \section{Fee Schedule}\label{app:fees} $G_{\mathrm{newaccount}}$ & 25000 & This is paid for a {\small CALL} or for a \hyperlink{selfdestruct}{\small SELFDESTRUCT} operation which creates an account. \\ $G_{\mathrm{exp}}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ $G_{\mathrm{expbyte}}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ -$G_{\mathrm{memory}}$ & 3 & This is paid for every additional word when expanding memory. \\ -$G_{\mathrm{txcreate}}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.\\ -$G_{\mathrm{txdatazero}}$ & 4 & This is paid for every zero byte of data or code for a transaction. \\ -$G_{\mathrm{txdatanonzero}}$ & 68 & This is paid for every non-zero byte of data or code for a transaction. \\ -$G_{\mathrm{transaction}}$ & 21000 & This is paid for every transaction. \\ +$G_{\mathrm{memory}}$ & 3 & This is paid for every additional word when expanding memory. \hypertarget{txcreate}{\\ +$G_{\mathrm{txcreate}}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.}\hypertarget{Gtxdatazero}{\\ +$G_{\mathrm{txdatazero}}$ & 4 & This is paid for every zero byte of data or code for a transaction.}\hypertarget{Gtxdatanonzero}{ \\ +$G_{\mathrm{txdatanonzero}}$ & 68 & This is paid for every non-zero byte of data or code for a transaction.}\hypertarget{Gtransaction}{ \\ +$G_{\mathrm{Gtransaction}}$ & 21000 & This is paid for every transaction.} \\ $G_{\mathrm{log}}$ & 375 & This is a partial payment for a {\small LOG} operation. \\ $G_{\mathrm{logdata}}$ & 8 & This is paid for each byte in a {\small LOG} operation's data. \\ $G_{\mathrm{logtopic}}$ & 375 & This is paid for each topic of a {\small LOG} operation. \\ @@ -1861,18 +1863,18 @@ \subsection{Instruction Set} &&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\ \midrule 0x54 & {\small SLOAD} & 1 & 1 & Load the first word from storage. \\ -&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \\ +&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \hypertarget{SSTORE}{\\ \midrule 0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\ -&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{}\\ +&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{\\ &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases} G_{\mathrm{sset}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\ G_{\mathrm{sreset}} & \text{otherwise} -\end{cases}$ \\ +\end{cases}$ }\\ &&&& $A'_{r} \equiv A_{r} + \begin{cases} R_{\mathrm{sclear}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\ 0 & \text{otherwise} -\end{cases}$ \\ +\end{cases}$ }\\ \midrule 0x56 & {\small JUMP} & 1 & 0 & Alter the program counter. \\ &&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{s}[0] $ \\ @@ -2265,7 +2267,7 @@ \section{List of mathematical symbols}\label{app:symbols} Symbol & Latex Command & Description \\ \midrule \hypertarget{bigvee}{ -$\bigvee$ & \verb|\bigvee| & This is the least upper bound, supremum, or join of all elements operated on. Thus it is the greatest element of such elements. More information is here: \cite{LatticeOrder}.}\\ +$\bigvee$ & \verb|\bigvee| & This is the least upper bound, supremum, or join of all elements operated on. Thus it is the greatest element of such elements (\cite{LatticeOrder}).}\\ \bottomrule \end{tabularx} From f7561a3255e28290ddaab9d2b120897ae1a6e78a Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sun, 1 Oct 2017 20:11:23 +1100 Subject: [PATCH 047/132] Fixed error with a space between \usepackage [autostyle]{csquotes}. --- Paper.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Paper.tex b/Paper.tex index cb6ac39b..72702515 100644 --- a/Paper.tex +++ b/Paper.tex @@ -22,7 +22,7 @@ \usepackage{underscore} %\usepackage{lipsum} % to generate filler text for testing of document rendering \usepackage[english]{babel} -\usepackage [autostyle]{csquotes} +\usepackage[autostyle]{csquotes} \MakeOuterQuote{"} \usepackage[bookmarks=true, unicode=true, pdftitle={Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain}, pdfauthor={Gavin Wood and others as per https://github.com/ethereum/yellowpaper/commits/master},pdfkeywords={Ethereum, Yellow Paper, blockchain, virtual machine, cryptography, decentralised, singleton, transaction, generalised},pdfborder={0 0 0.5 [1 3]}]{hyperref} %,pagebackref=true From e7aab56539a49f057dc3e3e28c5ced8ea2999a20 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 1 Oct 2017 20:34:28 +1100 Subject: [PATCH 048/132] Omitted yellowpaper.io; with the previous change actually being instructions on how to build. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a016b5e1..20e0b1cb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Gitter](https://badges.gitter.im/ethereum/yellowpaper.svg)](https://gitter.im/ethereum/yellowpaper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf or just [yellowpaper.io](http://yellowpaper.io/) . +The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf. How to build --- From 6a7dc75cb63b7465af433cc0095363f942174c45 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sun, 1 Oct 2017 20:45:24 +1100 Subject: [PATCH 049/132] Fixed warnings for reference doesn't exist. --- Paper.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Paper.tex b/Paper.tex index 72702515..a96754ad 100644 --- a/Paper.tex +++ b/Paper.tex @@ -1539,7 +1539,7 @@ \section{Fee Schedule}\label{app:fees} $G_{\mathrm{newaccount}}$ & 25000 & This is paid for a {\small CALL} or for a \hyperlink{selfdestruct}{\small SELFDESTRUCT} operation which creates an account. \\ $G_{\mathrm{exp}}$ & 10 & This is a partial payment for an {\small EXP} operation. \\ $G_{\mathrm{expbyte}}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\ -$G_{\mathrm{memory}}$ & 3 & This is paid for every additional word when expanding memory. \hypertarget{txcreate}{\\ +$G_{\mathrm{memory}}$ & 3 & This is paid for every additional word when expanding memory. \hypertarget{Gtxcreate}{\\ $G_{\mathrm{txcreate}}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.}\hypertarget{Gtxdatazero}{\\ $G_{\mathrm{txdatazero}}$ & 4 & This is paid for every zero byte of data or code for a transaction.}\hypertarget{Gtxdatanonzero}{ \\ $G_{\mathrm{txdatanonzero}}$ & 68 & This is paid for every non-zero byte of data or code for a transaction.}\hypertarget{Gtransaction}{ \\ @@ -2053,9 +2053,9 @@ \subsection{Instruction Set} &&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\ &&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\ \midrule -0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{\mathrm{selfdestruct}}{}\\ +0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{selfdestruct}{\\ \midrule -0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. \\ +0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. }\\ &&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_\mathbf{a} \}$ \\ &&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} + \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ \\ &&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{b} \equiv 0$ \\ From 055cf2dac056b5482e37ff8c144edbf15430e3e6 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 1 Oct 2017 21:01:32 +1100 Subject: [PATCH 050/132] Delete Paper.brf --- Paper.brf | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Paper.brf diff --git a/Paper.brf b/Paper.brf deleted file mode 100644 index e69de29b..00000000 From 30a10e086efb92c56bd3a7a0cf5b0a1e42006e93 Mon Sep 17 00:00:00 2001 From: jamesray1 <16969914+jamesray1@users.noreply.github.com> Date: Sun, 1 Oct 2017 21:05:09 +1100 Subject: [PATCH 051/132] Added extra dependency. --- csquotes.sty | 2467 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2467 insertions(+) create mode 100644 csquotes.sty diff --git a/csquotes.sty b/csquotes.sty new file mode 100644 index 00000000..91b20d1a --- /dev/null +++ b/csquotes.sty @@ -0,0 +1,2467 @@ +% Copyright (c) 2003-2011 Philipp Lehman. +% (c) 2015-2017 Joseph Wright. +% +% Permission is granted to copy, distribute and/or modify this +% software under the terms of the LaTeX Project Public License +% (LPPL), version 1.3c or any later version. +% +% This software is provided 'as is', without warranty of any kind, +% either expressed or implied, including, but not limited to, the +% implied warranties of merchantability and fitness for a +% particular purpose. + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{csquotes} + [2017/03/11 v5.2b context-sensitive quotations (JAW)] + +%% Compatibility and requirements + +\RequirePackage{etoolbox} +\RequirePackage{keyval} + +\@ifpackagelater{etoolbox}{2008/06/28} + {} + {\PackageError{csquotes} + {Outdated 'etoolbox' package} + {Upgrade to etoolbox v1.7 (2008/06/28) or later.\MessageBreak + I found: '\csuse{ver@etoolbox.sty}'.\MessageBreak + This is a fatal error. I'm aborting now.} + \endinput} + +\@ifpackageloaded{inputenc} + {} + {\AtEndPreamble{% + \@ifpackageloaded{inputenc} + {\csq@warn@loadfirst{inputenc}} + {}}} + +\@ifpackageloaded{inputenx} + {} + {\AtEndPreamble{% + \@ifpackageloaded{inputenx} + {\csq@warn@loadfirst{inputenx}} + {}}} + +\@ifpackageloaded{ucs} + {\let\csq@ifucs\@firstoftwo} + {\let\csq@ifucs\@secondoftwo + \AtEndPreamble{% + \@ifpackageloaded{ucs} + {\let\csq@ifucs\@firstoftwo} + {}}} + +\AtEndPreamble{% + \@ifpackageloaded{biblatex} + {\@ifpackagelater{biblatex}{2009/05/30} + {} + {\csq@error + {Outdated 'biblatex' package} + {Upgrade to biblatex v0.8d (2009/05/30) or later.\MessageBreak + I found: '\csuse{ver@biblatex.sty}'}}} + {}} + +%% Category codes + +\def\csq@catcodes{\do\~\do\&\do\:\do\"\do\<\do\>} +\def\do#1{\catcode\number`#1=\the\catcode`#1\relax} +\edef\csq@catcodes{\csq@catcodes} +\let\do\noexpand + +\catcode`\~=\active +\catcode`\&=3 +\@makeother\: +\@makeother\" +\@makeother\< +\@makeother\> + +%% General + +\newtoggle{csq@tempsw} +\newtoggle{csq@quiet} +\newtoggle{csq@active} +\newtoggle{csq@block} +\newtoggle{csq@parbox} +\newtoggle{csq@parthreshold} +\newbool{csdisplay} + +\newcount\csq@reset +\newcount\csq@gtype +\newcount\csq@glevel +\newcount\csq@qlevel +\newcount\csq@maxlvl +\newcount\csq@tshold + +\providecommand{\@gobblethree}[3]{} +\providecommand{\@gobblefive}[5]{} +\providecommand{\@gobbletwo@optarg}[2][]{} + +% {}{}{} + +\def\csq@addto@list#1{% + \expandafter\csq@addto@list@i\csname\string#1\endcsname} +\def\csq@addto@list@i#1#2#3{% + \begingroup + \@tempswatrue + \def#3##1{\ifnum`#1=`##1\relax\@tempswafalse\fi}#2% + \expandafter\endgroup\if@tempswa + \appto#2{#3#1}% + \fi} + +% {} + +\def\csq@everypar#1{% + \let\csq@theeverypar#1% + \ifx\csq@theeverypar\@empty + \else + \csq@everypar@i + \fi} + +\def\csq@everypar@i{% + \leavevmode + \let\csq@new@everypar\everypar + \csq@ltx@everypar=\expandafter{\the\everypar}% + \csq@new@everypar={\the\csq@ltx@everypar\csq@theeverypar}% + \let\everypar\csq@ltx@everypar + \let\csq@everypar@i\relax} + +\newtoks\csq@ltx@everypar + +% Miscellaneous tests + +\newcommand*{\ifblockquote}{\iftoggle{csq@block}} + +\def\csq@ifsafeactives{% + \ifx\if@safe@actives\iftrue + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@iftypeset{% + \ifx\protect\@typeset@protect + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@ifstrings{% + \ifx\protect\string + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@ifnested{% + \iftoggle{csq@block} + {\@firstoftwo} + {\ifnumgreater\csq@qlevel\z@}} + +% Parsers for UTF-8 + +\def\csq@string#1{\csq@string@i#1&} +\def\csq@string@i#1#2&{% + \string#1\ifblank{#2}{}{\csq@string@i#2&}} + +\def\csq@number#1{\csq@number@i#1&} +\def\csq@number@i#1#2&{% + \number`#1 \ifblank{#2}{}{.\csq@number@i#2&}} + +\def\csq@utfprint#1{u8:\csq@utfprint@i#1&} +\def\csq@utfprint@i#1#2&{% + \number`#1 \ifblank{#2}{}{:\csq@utfprint@i#2&}} + +% Grouping control + +\protected\def\csq@bqgroup{% + \begingroup\leavevmode + \csq@glevel\currentgrouplevel + \csq@gtype\currentgrouptype} + +\protected\def\csq@eqgroup{% + \ifnum\csq@gtype=\currentgrouptype + \ifnum\csq@glevel=\currentgrouplevel + \else + \csq@err@glevel + \fi + \else + \csq@err@gtype + \fi + \endgroup} + +\AtEndDocument{% + \ifnum\csq@qlevel>\z@ + \csq@err@gleft + \fi} + +%% User feedback + +\protected\def\csq@warning@loose#1{% + \csq@warning{#1}\@gobbletwo} +\protected\def\csq@warning@strict#1{% + \csq@error} +\let\csq@warnorerr\csq@warning@loose + +\protected\def\csq@error#1#2{% + \PackageError{csquotes}{#1}{#2.}} + +\protected\def\csq@warning#1{% + \PackageWarning{csquotes}{#1}} + +\protected\def\csq@info#1{% + \iftoggle{csq@quiet} + {} + {\PackageInfo{csquotes}{#1\csq@noline}}} +\let\csq@noline\@gobble +\AtBeginDocument{\let\csq@noline\@empty} + +\protected\def\csq@logdebug#1{% + \begingroup + \def\MessageBreak{^^J(csquotes) \@spaces\@spaces\@spaces\space}% + \set@display@protect + \immediate\write\m@ne{Package csquotes Debug: #1\on@line.}% + \endgroup} + +\let\csq@debug\@gobble + +% Errors + +\protected\def\csq@errormark{% + \rule[0.25ex]{1.25ex}{1.25ex}} + +\protected\def\csq@eqerror{% + \csq@eqgroup + \csq@errormark} + +\protected\def\csq@mismatch#{% + \csq@errormark + \csq@err@mismatch} + +\protected\def\csq@err@mismatch#1{% + \csq@error + {Unbalanced groups or invalid nesting} + {#1}} + +\protected\def\csq@err@mmode#1{% + \csq@error + {'\string#1' invalid in math mode} + {This command may not be used in math mode}} + +\protected\def\csq@err@undef#1{% + \csq@error + {'\string#1' not defined} + {This command or environment environment appears to + be\MessageBreak undefined}} + +\protected\def\csq@err@opt#1{% + \csq@error + {Option '#1' invalid} + {The option you have supplied is invalid. See the csquotes + manual\MessageBreak for valid option keys and values}} + +\protected\def\csq@err@sfcodes#1{% + \csq@error + {'\string#1' not available} + {'\string#1' may not be used here because the\MessageBreak + punctuation tracker is not working at this point}} + +\protected\def\csq@err@glevel{% + \csq@mismatch{% + I have detected a group level mismatch. Verify that all + groups\MessageBreak and all active quotes are properly + balanced and nested. If you\MessageBreak continue, I + will write a summary of all previously opened + groups\MessageBreak to the transcript file}% + \showgroups} + +\protected\def\csq@err@gtype{% + \csq@mismatch{% + I have detected a group type mismatch. Verify that all + groups\MessageBreak and all active quotes are properly + balanced and nested. If you\MessageBreak continue, I + will write a summary of all previously opened + groups\MessageBreak to the transcript file}% + \showgroups} + +\protected\def\csq@err@gleft{% + \csq@err@mismatch{% + Still \number\csq@qlevel\space quote\ifnum\csq@qlevel>\@ne s\fi + \space open. If you continue, I will write a summary\MessageBreak + of all previously opened groups to the transcript file}% + \showgroups} + +\protected\def\csq@err@alloc{% + \csq@error + {Invalid argument} + {One of the arguments you have supplied is already allocated + as\MessageBreak active quote or delimiter}} + +\protected\def\csq@err@char{% + \csq@error + {Invalid argument} + {Only single characters with category code 12 or 13 may + be\MessageBreak allocated as active quotes. Numbers, + punctuation marks, and\MessageBreak characters which + are part of LaTeX's syntax or reserved\MessageBreak + for a specific purpose are invalid}} + +\protected\def\csq@err@utf{% + \csq@error + {Invalid argument} + {Only valid UTF-8 sequences representing a single + character\MessageBreak may be allocated as active quotes}} + +\protected\def\csq@err@nbquote{% + \csq@mismatch{% + You have nested a \@backslashchar blockquote. Block quotation + commands\MessageBreak may only be used on quotation level 0}}% + +\protected\def\csq@err@patch#1{% + \csq@error + {Patching #1 failed} + {This is an internal issue typically caused by a + conflict\MessageBreak between csquotes and some + other package. Modifying\MessageBreak the package + loading order may fix the problem}} + +\protected\def\csq@err@ucs{% + \csq@error + {ucs package not supported} + {The ucs package is not supported. If you want to use + UTF-8\MessageBreak encoded active quotes, try + '\string\usepackage[utf8]{inputenc}'.\MessageBreak + If you continue now, I will reject all UTF-8 encoded + arguments\MessageBreak as invalid}} + +% Warnings + +\protected\def\csq@warn@loadfirst#1{% + \csq@warnorerr + {Load '#1' before 'csquotes'} + {'#1' package loaded too late} + {Always load '#1' before 'csquotes'}} + +\protected\def\csq@warn@multilang#1{% + \csq@warnorerr + {No multilingual support.\MessageBreak #1} + {#1} + {Multilingual support does not seem to be available.\MessageBreak + Try loading the 'babel' or the 'polyglossia' package}} + +\protected\def\csq@warn@style#1{% + \csq@warnorerr + {No style for language '#1'.\MessageBreak + Using fallback style} + {No style for language '#1'} + {Define a style or alias for this language first}} + +\protected\def\csq@warn@location#1{% + \csq@warnorerr + {'\string#1' invalid at this point.\MessageBreak + Ignoring command} + {'\string#1' invalid at this point} + {This command may not be used at this particular + point.\MessageBreak See the manual of the 'csquotes' + package for details}} + +\protected\def\csq@warn@sfcodes#1{% + \csq@warnorerr + {No space factor codes for '#1' encoding.\MessageBreak + Punctuation tracker may fail} + {Punctuation tracker may fail at this point} + {No space factor codes for '#1' encoding. + See \string\DeclareQuoteGlyph\MessageBreak + in the 'csquotes' manual for details}} + +%% Outer quotations + +\protected\def\csq@oqmark{% + \csq@bqgroup + \ifnum\csq@qlevel>\z@ + \csq@mismatch{% + Level 1 quote invalid at this point. + The current level is \number\csq@qlevel}% + \advance\csq@qlevel\@ne + \let\csq@oqmark\csq@eqerror + \else + \csq@qlevel\@ne + \let\csq@oqmark\csq@qclose + \expandafter\csq@qopen + \fi} + +%% Inner quotations + +\protected\def\csq@iqmark{% + \csq@bqgroup + \ifnum\csq@qlevel>\@ne + \csq@mismatch{% + Level 2 quote invalid at this point. + The current level is \number\csq@qlevel}% + \advance\csq@qlevel\@ne + \let\csq@iqmark\csq@eqerror + \else + \csq@qlevel\tw@ + \let\csq@iqmark\csq@qclose + \expandafter\csq@qopen + \fi} + +%% Nestable quotations + +\protected\def\csq@oqopen{% + \csq@bqgroup + \csq@oqopen@i} + +\def\csq@oqopen@i{% + \advance\csq@qlevel\@ne + \csq@qopen} + +\protected\def\csq@iqopen{% + \csq@bqgroup + \csq@iqopen@i} + +\def\csq@iqopen@i{% + \ifnum\csq@qlevel=\z@ + \advance\csq@qlevel\tw@ + \else + \advance\csq@qlevel\@ne + \fi + \csq@qopen} + +%% Opening marks + +\def\csq@qopen{% + \ifnum\csq@qlevel>\csq@maxlvl + \csq@mismatch{% + Level \number\csq@qlevel\space quote invalid at this point. + The maximum level is \number\csq@maxlvl}% + \else + \csq@resetstyle + \csq@init + \csq@addkern@open + \ifodd\csq@qlevel + \let\csq@kernchar@i\csq@thequote@oopen + \csq@thequote@oopen + \else + \let\csq@kernchar@i\csq@thequote@iopen + \csq@thequote@iopen + \fi + \csq@setmarker@open + \expandafter\csq@fixkern + \fi} + +%% Closing marks + +\protected\def\csq@qclose{% + \csq@qclose@i{}} + +\def\csq@qclose@i{% + \ifnum\csq@qlevel=\z@ + \csq@mismatch{% + Cannot close any quote. The current level is 0}% + \else + \ifnum\csq@qlevel>\csq@maxlvl + \csq@eqerror + \else + \expandafter\expandafter + \expandafter\csq@qclose@ii + \fi + \fi} + +\def\csq@qclose@ii#1{% + \ifdim\lastkern=\csq@omitmarker + #1\csq@eqgroup + \else + \csq@addkern@close + \ifodd\csq@qlevel + \csq@thequote@oclose + \let\csq@kernchar@i\csq@thequote@oclose + \else + \csq@thequote@iclose + \let\csq@kernchar@i\csq@thequote@iclose + \fi + \ifnum\csq@qlevel>\@ne + \csq@setmarker@close + \fi + \ifblank{#1}{}{\expandafter#1}% + \expandafter\csq@eqgroup + \expandafter\def + \expandafter\csq@kernchar@i + \expandafter{\csq@kernchar@i}% + \expandafter\csq@fixkern + \fi} + +%% Style initialization + +\def\csq@init{% + \csq@setsfcodes + \ifodd\csq@qlevel + \csq@thequote@oinit + \csq@everypar\csq@thequote@omiddle + \else + \csq@thequote@iinit + \csq@everypar\csq@thequote@imiddle + \fi + \csq@init@kern{open}{o}{i}% + \csq@init@kern{close}{i}{o}} + +\def\csq@init@kern#1#2#3{% + \begingroup + \settowidth{\@tempdima}{% + \csuse{csq@thequote@#2#1}% + \csuse{csq@thequote@#3#1}}% + \settowidth{\@tempdimb}{% + \csuse{csq@thequote@#2#1}\unkern + \csuse{csq@thequote@#3#1}}% + \ifdim\@tempdima=\@tempdimb + \let\csq@tempa\endgroup + \else + \edef\csq@tempa{\endgroup + \csdef{csq@thekern@#1}{% + \the\dimexpr\@tempdima-\@tempdimb\relax}}% + \fi + \csq@tempa} + +\def\blx@hook@parboxrestore{% + \let\csq@theeverypar\@empty + \csq@qlevel\z@ + \toggletrue{csq@parbox}% + \togglefalse{csq@block}} + +\protected\def\blx@parboxrestore{% + \ifx\protect\noexpand % \@outputpage + \else + \blx@hook@parboxrestore + \fi} + +\appto\@parboxrestore{\blx@parboxrestore} + +%% Restore kerning + +\def\csq@fixkern{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter\csq@fixkern@i} + +\def\csq@fixkern@i{% + \futurelet\csq@kernchar@ii\csq@fixkern@ii} + +\def\csq@fixkern@ii{% + \ifcat a\noexpand\csq@kernchar@ii + \expandafter\csq@fixkern@iii + \else + \ifcat 1\noexpand\csq@kernchar@ii + \expandafter\expandafter + \expandafter\csq@fixkern@iii + \fi + \fi} + +\def\csq@fixkern@iii{% + \begingroup + \settowidth{\@tempdima}{% + \csq@kernchar@i\csq@kernchar@ii}% + \settowidth{\@tempdimb}{% + \csq@kernchar@i\kern\z@\csq@kernchar@ii}% + \ifdim\@tempdima=\@tempdimb + \else + \addtolength{\@tempdima}{-\@tempdimb}% + \penalty\@M\hskip\@tempdima\relax + \fi + \endgroup} + +%% Detect and kern adjoining quotes + +\def\csq@kernmarker{13sp} +\def\csq@omitmarker{17sp} +\let\csq@themarker\csq@kernmarker +\def\csq@thekern@open{\csq@thequote@kern} +\def\csq@thekern@close{\csq@thequote@kern} +\def\csq@thequote@kern{0.1em} + +\def\csq@setmarker@open{% + \penalty\@M + \hskip-\csq@themarker\relax + \hskip\csq@themarker\relax} + +\def\csq@setmarker@close{% + \kern-\csq@themarker\relax + \kern\csq@themarker\relax} + +\def\csq@addkern@open{% + \ifdim\lastskip=\csq@kernmarker + \unskip\unskip\unpenalty + \unkern % EC fix + \ifdim\csq@thekern@open=\z@ + \else + \penalty\@M\hskip\csq@thekern@open\relax + \fi + \fi} + +\def\csq@addkern@close{% + \ifdim\lastkern=\csq@kernmarker + \unkern\unkern + \ifdim\csq@thekern@close=\z@ + \else + \penalty\@M\hskip\csq@thekern@close\relax + \fi + \fi} + +%% Punctuation + +% 1001 apostrophe (biblatex only) +% 1002 abbreviation dot (biblatex only) +% 1003/1250 comma +% 1004/1500 semicolon +% 1005/2000 colon +% 1006/3000 period +% 1007/3001 exclamation mark +% 1008/3002 question mark +% 1009 suppress punctuation (biblatex only) + +\mathchardef\csq@sf@comma=1003 +\mathchardef\csq@sf@semicolon=1004 +\mathchardef\csq@sf@colon=1005 +\mathchardef\csq@sf@period=1006 +\mathchardef\csq@sf@exclam=1007 +\mathchardef\csq@sf@question=1008 +\mathchardef\csq@sf@threshold@low=1002 +\mathchardef\csq@sf@threshold@term=1005 +\mathchardef\csq@sf@threshold@high=1009 + +\def\csq@setsfcodes{% + \ifcsdef{csq@sfcodes@\f@encoding} + {\csuse{csq@sfcodes@\f@encoding}} + {\csq@warn@sfcodes\f@encoding}% + \sfcode`\)=\z@ + \sfcode`\]=\z@ + \ifnum\sfcode`\.>2000 + \csq@setencodes + \else + \csq@setfrcodes + \fi + \let\frenchspacing\csq@setfrcodes + \let\nonfrenchspacing\csq@setencodes + \let\csq@setsfcodes\relax} + +\def\csq@ifsfcodes{% + \ifnumequal\csq@sf@question + {\ifcsdef{csq@sfactor@\the\sfcode`\?} + {\csuse{csq@sfactor@\the\sfcode`\?}} + {\sfcode`\?}}} + +\def\csq@setfrcodes{% + \ifnum\sfcode`\A=\@m + \else + \csq@setazcodes + \fi + \sfcode`\,=1003 + \sfcode`\;=1004 + \sfcode`\:=1005 + \sfcode`\.=1006 + \sfcode`\!=1007 + \sfcode`\?=1008 +} + +\def\csq@setencodes{% + \sfcode`\,=1250 + \sfcode`\;=1500 + \sfcode`\:=2000 + \sfcode`\.=3000 + \sfcode`\!=3001 + \sfcode`\?=3002 +} + +\begingroup +\let\csq@setazcodes\@empty +\def\csq@tempa{% + \xdef\csq@setazcodes{\csq@setazcodes\sfcode\the\@tempcnta=\@m} + \ifnum\@tempcnta<\@tempcntb + \advance\@tempcnta\@ne + \expandafter\csq@tempa + \fi} +\@tempcnta`\A +\@tempcntb`\Z +\csq@tempa +\ifnum\inputlineno=\m@ne\else + \@tempcnta"80 + \@tempcntb"9C + \csq@tempa + \@tempcnta"C0 + \@tempcntb"DF + \csq@tempa +\fi +\endgroup + +\csdef{csq@sfactor@1250}{1003} +\csdef{csq@sfactor@1500}{1004} +\csdef{csq@sfactor@2000}{1005} +\csdef{csq@sfactor@3000}{1006} +\csdef{csq@sfactor@3001}{1007} +\csdef{csq@sfactor@3002}{1008} + +\def\csq@spacefactor{% + \ifhmode + \ifcsdef{csq@sfactor@\the\spacefactor} + {\csuse{csq@sfactor@\the\spacefactor}} + {\the\spacefactor}% + \else + 1000% + \fi} + +% {}{} + +\newcommand*{\ifpunct}{% + \csq@ifsfcodes + {\ifnumgreater\csq@spacefactor\csq@sf@threshold@low + {\ifnumless\csq@spacefactor\csq@sf@threshold@high} + {\@secondoftwo}} + {\csq@err@sfcodes\ifpunct + \@secondoftwo}} + +% {}{}{} + +\newrobustcmd*{\iftextpunct}[1]{% + \csq@ifpuncttest{#1}{\ifpunct}} + +% {}{} + +\newcommand*{\ifterm}{% + \csq@ifsfcodes + {\ifnumgreater\csq@spacefactor\csq@sf@threshold@term + {\ifnumless\csq@spacefactor\csq@sf@threshold@high} + {\@secondoftwo}} + {\csq@err@sfcodes\ifterm + \@secondoftwo}} + +% {}{}{} + +\newrobustcmd*{\iftextterm}[1]{% + \csq@ifpuncttest{#1}{\ifterm}} + +% {}{}{} + +\newrobustcmd*{\ifpunctmark}[1]{% + \csq@ifsfcodes + {\ifbool{hmode} + {\ifnumequal{\sfcode`#1}\spacefactor} + {\@secondoftwo}} + {\csq@err@sfcodes\ifpunctmark + \@secondoftwo}} + +% {}{}{}{} + +\newrobustcmd*{\iftextpunctmark}[2]{% + \csq@ifpuncttest{#1}{\ifpunctmark{#2}}} + +\def\csq@ifpuncttest#1#2{% + \begingroup + \setbox\@tempboxa=\hbox{% + \csq@ifsfcodes\relax\csq@setsfcodes + #1#2 + {\aftergroup\@firstoftwo} + {\aftergroup\@secondoftwo}}% + {\endgroup\@firstoftwo} + {\endgroup\@secondoftwo}} + +%% Multilingual interface + +\def\csq@setstyle#1{% + \begingroup + \let\if@safe@actives\iftrue + \ifcsdef{csq@qstyle@#1} + {\edef\csq@tempa{\endgroup + \def\noexpand\csq@currentstyle{#1}% + \noexpand\csuse{csq@qstyle@#1}}% + \csq@tempa} + {\csq@warnorerr + {Quote style '#1' not defined.\MessageBreak Ignoring command} + {Quote style '#1' not defined} + {Define the style or alias first} + \endgroup}} + +\def\csq@resetstyle{% + \ifnum\csq@reset=\@ne + \ifx\csq@currentstyle\languagename + \else + \ifcsundef{csq@qstyle@\languagename} + {\csq@warn@style\languagename + \csq@setstyle{fallback}} + {\csq@setstyle{\languagename}}% + \fi + \fi} + +\def\csq@savelang{% + \ifdef\csq@mainlang + {} + {\edef\csq@mainlang{\languagename}}} + +\def\csq@resetlang{% + \ifdef\csq@mainlang + {\csuse{otherlanguage*}{\csq@mainlang}% + \let\csq@resetlang\relax} + {}} + +\protected\long\def\csq@switchlang#1{% + \ifdef\csq@mainlang + {\begingroup + \csuse{otherlanguage*}{\csq@mainlang}% + #1% + \csuse{endotherlanguage*}% + \endgroup} + {#1}} + +% \lowercase: workaround for page headers of book.cls et al. + +\def\csq@lang#1{% + \csq@savelang + \lowercase{\csuse{otherlanguage*}{#1}}} +\def\csq@endlang{% + \csuse{endotherlanguage*}} + +\def\csq@nolang#1{% + \begingroup + \lowercase{\def\csq@tempa{#1}}% + \csq@warn@multilang{Cannot switch to language '\csq@tempa'}% + \endgroup} + +\def\csq@hyph#1{% + \csq@savelang + \lowercase{\csq@hyphenrules{#1}}} +\let\csq@endhyph\@empty + +\def\csq@nohyph#1{% + \begingroup + \lowercase{\def\csq@tempa{#1}}% + \csq@warn@multilang{No hyphenation rules for '\csq@tempa'}% + \endgroup} + +\def\csq@hyphenrules#1{% + \language\csname l@#1\endcsname\relax + \ifcsundef{#1hyphenmins} + {\csq@sethyphenmins\tw@\thr@@} + {\expandafter\expandafter\expandafter\csq@sethyphenmins + \csname#1hyphenmins\endcsname}} + +\def\csq@sethyphenmins#1#2{% + \lefthyphenmin#1\relax + \righthyphenmin#2\relax} + +\appto\csq@hook@multilang{% + \appto\blx@hook@parboxrestore{\csq@resetlang}% + \ifundef\l@usenglish + {\ifundef\l@USenglish + {} + {\let\l@usenglish\l@USenglish}} + {}% + \ifundef\l@ukenglish + {\ifundef\l@UKenglish + {} + {\let\l@ukenglish\l@UKenglish}} + {}% + \ifcase\csq@reset + \or + \or + \csq@info{Enabling multilingual quotes}% + \csq@reset\@ne + \else + \csq@info{Adjusting default style}% + \ifcsdef{csq@qstyle@\csq@main@language} + {\DeclareQuoteAlias{\csq@main@language}{default}} + {\csq@warn@style\csq@main@language + \DeclareQuoteAlias{fallback}{default}}% + \fi} + +\appto\csq@hook@nomultilang{% + \ifcase\csq@reset + \or + \csq@warn@multilang{Cannot enable multilingual quotes}% + \or + \or + \csq@warn@multilang{Cannot adjust default style}% + \fi + \csq@reset\z@ + \let\csq@hyph\csq@nohyph + \let\csq@endhyph\@empty + \let\csq@lang\csq@nolang + \let\csq@endlang\@empty + \let\csq@switchlang\@firstofone + \def\csq@resetqstyle{% + \csq@warn@multilang{Cannot enable multilingual quotes}}} + +%% Markup with control sequences + +% Argument parsers + +% {}[][] => +% {\mkcitation}{}{} + +\def\csq@getcargs#1{% + \@ifnextchar[%] + {\csq@getcargs@i{#1}} + {\csq@getcargs@i{#1}[]}} + +\long\def\csq@getcargs@i#1[#2]{% + \@ifnextchar[%] + {\csq@getcargs@ii{#1}{#2}} + {\csq@getcargs@ii{#1}{#2}[]}} + +\long\def\csq@getcargs@ii#1#2[#3]{% + #1{\mkcitation}{#2}{#3}} + +% {}[
][]{}[] =>
+%  {\mkccitation}{\csq@cite[
][]{}}{}
+
+\def\csq@getccargs#1{%
+  \@ifnextchar[%]
+    {\csq@getccargs@i{#1}{}}
+    {\csq@getccargs@ii{#1}{}}}
+
+\long\def\csq@getccargs@i#1#2[#3]{%
+  \@ifnextchar[%]
+    {\csq@getccargs@i{#1}{#2[{#3}]}}
+    {\csq@getccargs@ii{#1}{#2[{#3}]}}}
+
+\long\def\csq@getccargs@ii#1#2#3{%
+  \@ifnextchar[%]
+    {\csq@getccargs@iii{#1}{#2}{#3}}
+    {\csq@getccargs@iii{#1}{#2}{#3}[]}}
+
+\long\def\csq@getccargs@iii#1#2#3[#4]{%
+  #1{\mkccitation}{\csq@cite#2{#3}}{#4}}
+
+% {} => {}
+
+\protected\long\def\csq@getpunct#1{%
+  \begingroup
+  \def\csq@tempa{\endgroup#1}%
+  \futurelet\@let@token\csq@getpunct@i}
+
+\def\csq@getpunct@i{%
+  \expandafter\csq@getpunct@ii\csq@allpunct&}
+
+\def\csq@getpunct@ii#1{%
+  \ifx#1&%
+    \expandafter\csq@getpunct@v
+  \fi
+  \ifx#1\@let@token
+    \expandafter\csq@getpunct@iii
+  \fi
+  \csq@getpunct@ii}
+
+\def\csq@getpunct@iii#1\csq@getpunct@ii#2&{%
+  \expandafter\csq@getpunct@iv\csq@autopunct&}
+
+\def\csq@getpunct@iv#1{%
+  \ifx#1&%
+    \expandafter\csq@getpunct@vi
+  \fi
+  \ifx#1\@let@token
+    \expandafter\csq@getpunct@vii
+  \fi
+  \csq@getpunct@iv}
+
+\def\csq@getpunct@v#1\csq@getpunct@ii{\csq@tempa{}\@empty}
+\def\csq@getpunct@vi#1\csq@getpunct@iv{\csq@tempa{}}
+\def\csq@getpunct@vii#1\csq@getpunct@iv#2{\csq@tempa{#3}\@empty}
+
+% Punctuation
+
+\newrobustcmd*{\DeclareAutoPunct}[1]{%
+  \ifblank{#1}
+    {\def\csq@autopunct{}}
+    {\def\csq@autopunct{#1}}}
+
+\let\csq@autopunct\@empty
+\def\csq@allpunct{.,;:!?}
+
+\AfterEndPreamble{% babel
+  \begingroup
+  \makeatletter
+  \endlinechar\m@ne
+  \edef\csq@tempa{%
+    \noexpand\scantokens{%
+      \gdef\noexpand\csq@autopunct{\csq@autopunct}%
+      \gdef\noexpand\csq@allpunct{\csq@allpunct}}}%
+  \csq@tempa
+  \endgroup}
+
+% Plain quotes
+
+\newrobustcmd*{\enquote}{%
+  \@ifstar{\csq@quote@ii{}{}}{\csq@quote@i{}{}}}
+
+% {}{}{}
+
+\long\def\csq@quote@i#1#2#3{%
+  \csq@bqgroup#1\csq@oqopen@i#3\csq@qclose@i{#2}}
+\long\def\csq@quote@ii#1#2#3{%
+  \csq@bqgroup#1\csq@iqopen@i#3\csq@qclose@i{#2}}
+
+% Plain quotes + language switching
+
+\newrobustcmd*{\foreignquote}{%
+  \@ifstar\csq@fquote@ii\csq@fquote@i}
+
+\def\csq@fquote@i#1{\csq@quote@i{\csq@lang{#1}}{\csq@endlang}}
+\def\csq@fquote@ii#1{\csq@quote@ii{\csq@lang{#1}}{\csq@endlang}}
+
+\newrobustcmd*{\hyphenquote}{%
+  \@ifstar\csq@hquote@ii\csq@hquote@i}
+
+\def\csq@hquote@i#1{\csq@quote@i{\csq@hyph{#1}}{\csq@endhyph}}
+\def\csq@hquote@ii#1{\csq@quote@ii{\csq@hyph{#1}}{\csq@endhyph}}
+
+% PDF strings
+
+\long\def\csq@pdf@quote#1{%
+  \if#1*\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+    {\csq@pdf@quote@ii}
+    {\csq@pdf@quote@i{#1}}}
+
+\long\def\csq@pdf@quote@i#1{%
+  \csq@pdf@ooqmark #1\csq@pdf@coqmark}
+\long\def\csq@pdf@quote@ii#1{%
+  \csq@pdf@oiqmark #1\csq@pdf@ciqmark}
+
+\long\def\csq@pdf@fquote#1{%
+  \if#1*\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+    {\expandafter\csq@pdf@quote@ii\@gobble}
+    {\csq@pdf@quote@i}}
+
+\appto\csq@hook@hyperref{%
+  \let\enquote\csq@pdf@quote
+  \let\foreignquote\csq@pdf@fquote
+  \let\hyphenquote\csq@pdf@fquote}
+
+% Text quotes
+
+\newrobustcmd*{\textquote}{%
+  \@ifstar
+    {\csq@getcargs{\csq@tquote{}{}{\csq@iqopen@i}}}
+    {\csq@getcargs{\csq@tquote{}{}{\csq@oqopen@i}}}}
+
+% {}{}{}{}{}{}{}
+
+\long\def\csq@tquote#1#2#3#4#5#6#7{%
+  \csq@getpunct{\csq@tquote@i{#1}{#2}{#3}{#4}{#5}{#6}{#7}}}
+
+% {}{}{}{}{}{}{}{}
+
+\long\def\csq@tquote@i#1#2#3#4#5#6#7#8#9{%
+  \begingroup
+  \csq@setsfcodes
+  \edef\csq@tempa{%
+    \unexpanded{%
+      \mktextquote
+      {#3}%
+      {#7}%
+      {\csq@qclose@i{#2}}%
+      {#6}{#8}}%
+    {\ifblank{#5}
+       {}
+       {\unexpanded{\csq@switchlang{#4{#5}}}}}}%
+  \csq@bqgroup#1\csq@tempa#9%
+  \endgroup}
+
+% {}{}{}{}{}{}
+
+\newcommand{\mktextquote}[6]{#1#2#4#3#6#5}
+
+% Text quotes + language switching
+
+\newrobustcmd*{\foreigntextquote}{%
+  \@ifstar\csq@ftquote@ii\csq@ftquote@i}
+
+\def\csq@ftquote@i#1{%
+  \csq@getcargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@oqopen@i}}}
+\def\csq@ftquote@ii#1{%
+  \csq@getcargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@iqopen@i}}}
+
+\newrobustcmd*{\hyphentextquote}{%
+  \@ifstar\csq@htquote@ii\csq@htquote@i}
+
+\def\csq@htquote@i#1{%
+  \csq@getcargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@oqopen@i}}}
+\def\csq@htquote@ii#1{%
+  \csq@getcargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@iqopen@i}}}
+
+% Integrated text quotes
+
+\newrobustcmd*{\textcquote}{%
+  \@ifstar
+    {\csq@getccargs{\csq@tquote{}{}{\csq@iqopen@i}}}
+    {\csq@getccargs{\csq@tquote{}{}{\csq@oqopen@i}}}}
+
+% Integrated text quotes + language switching
+
+\newrobustcmd*{\foreigntextcquote}{%
+  \@ifstar\csq@ftcquote@ii\csq@ftcquote@i}
+
+\def\csq@ftcquote@i#1{%
+  \csq@getccargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@oqopen@i}}}
+\def\csq@ftcquote@ii#1{%
+  \csq@getccargs{\csq@tquote{\csq@lang{#1}}{\csq@endlang}{\csq@iqopen@i}}}
+
+\newrobustcmd*{\hyphentextcquote}{%
+  \@ifstar\csq@htcquote@ii\csq@htcquote@i}
+
+\def\csq@htcquote@i#1{%
+  \csq@getccargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@oqopen@i}}}
+\def\csq@htcquote@ii#1{%
+  \csq@getccargs{\csq@tquote{\csq@hyph{#1}}{\csq@endhyph}{\csq@iqopen@i}}}
+
+% PDF strings
+
+\appto\csq@hook@hyperref{%
+  \def\textquote{\pdfstringdefWarn\textquote}%
+  \def\foreigntextquote{\pdfstringdefWarn\foreigntextquote}%
+  \def\hyphentextquote{\pdfstringdefWarn\hyphentextquote}%
+  \def\textcquote{\pdfstringdefWarn\textcquote}%
+  \def\foreigntextcquote{\pdfstringdefWarn\foreigntextcquote}%
+  \def\hyphentextcquote{\pdfstringdefWarn\hyphentextcquote}}
+
+% Block quotes
+
+\newrobustcmd*{\blockquote}{%
+  \csq@getcargs{\csq@bquote{}{}}}
+
+% {}{}{}{}{}{}
+
+\long\def\csq@bquote#1#2#3#4#5#6{%
+  \csq@ifnested
+    {\csq@err@nbquote}
+    {\csq@getpunct{%
+       \ifboolexpr{ bool {inner} and bool {hmode} }
+         {\csq@bquote@ii}
+	 {\ifbool{csdisplay}
+	    {\csq@bquote@i}
+	    {\iftoggle{csq@parbox}\csq@bquote@ii\csq@bquote@i}}%
+	 {#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+% {}{}{}{}{}{}{}
+
+\long\def\csq@bquote@i#1#2#3#4#5#6{%
+  \begingroup
+  \blockquote@prehook
+  \togglefalse{csq@tempsw}%
+  \setbox\@tempboxa=\vbox{%
+    \csuse{csq@bcount@\csq@thresholdtype}%
+    \parindent\z@
+    \blockquote@parsehook
+    #1#6#5#2\endgraf\expandafter}\expandafter
+  \@tempcnta\number\prevgraf\relax
+  \iftoggle{csq@tempsw}
+    {\csq@debug{%
+       \@backslashchar blockquote has \number\@tempcnta\space
+       \csq@thresholdtype\space and manual breaks.\MessageBreak
+       Setting as display}}
+    {\ifnumgreater\@tempcnta\csq@tshold
+       {\toggletrue{csq@tempsw}}
+       {}%
+     \csq@debug{%
+       \@backslashchar blockquote has \number\@tempcnta\space
+       \csq@thresholdtype. Threshold is \number\csq@tshold.\MessageBreak
+       Setting \iftoggle{csq@tempsw}{as display}{inline}}}%
+  \blockquote@posthook
+  \iftoggle{csq@tempsw}
+    {\aftergroup\@firstoftwo}
+    {\aftergroup\@secondoftwo}%
+  \endgroup
+  \csq@bquote@iii\csq@bquote@ii{#1}{#2}{#3}{#4}{#5}{#6}}
+
+\def\csq@bcount@lines{%
+  \iftoggle{csq@parthreshold}
+    {\def\par{\global\toggletrue{csq@tempsw}\@@par}%
+     \let\newline\par
+     \let\\\par}
+    {}%
+  \parfillskip\z@\@plus1fil\relax}
+
+\def\csq@bcount@words{%
+  \iftoggle{csq@parthreshold}
+    {\def\par{\global\toggletrue{csq@tempsw}\space}%
+     \let\newline\par
+     \let\\\par}
+    {\let\par\space
+     \let\newline\space
+     \let\\\space}%
+  \let\nobreakspace\space
+  \let~\space
+  \hsize\z@
+  \hyphenpenalty\@M
+  \exhyphenpenalty\csq@splitcomp
+  \relpenalty\@M
+  \binoppenalty\@M
+  \let\allowbreak\relax
+  \hfuzz\maxdimen}
+
+\newcommand*{\blockquote@prehook}{%
+  \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
+  \edef\csq@tempa{\cl@@ckpt}%
+  \let\@elt\relax
+  \@fileswfalse}
+
+\newcommand*{\blockquote@posthook}{%
+  \csq@tempa}
+
+\newcommand*{\blockquote@parsehook}{%
+  \let\csq@nbgobble\@gobble
+  \let\csq@bquote\@gobblefive
+  \let\csq@warnorerr\@gobblethree
+  \let\csq@error\@gobbletwo
+  \let\csq@warning\@gobble
+  \let\csq@info\@gobble
+  \def\textelp{\@ifstar\@gobble\@gobble}%
+  \let\textins\textelp
+  \let\marginpar\@gobbletwo@optarg
+  \let\label\@gobble
+  \let\index\@gobble
+  \let\glossary\@gobble}
+
+\newrobustcmd*{\BlockquoteDisable}{%
+  \gappto\blockquote@parsehook}
+
+\let\csq@nbgobble\@firstofone
+
+% {}{}{}{}{}{}{}
+
+\def\csq@bquote@ii#1#2{\csq@tquote@i{#1}{#2}{\csq@oqopen@i}}
+
+% {}{}{}{}{}{}{}
+
+\long\def\csq@bquote@iii#1#2#3#4#5#6#7#8{%
+  \begin{\csq@blockenvironment}%
+  \toggletrue{csq@block}%
+  \csq@setsfcodes
+  \edef\csq@tempa{%
+    \unexpanded{%
+      \mkblockquote
+      {#6}%
+      {#5}{#7}}%
+    {\ifblank{#4}
+       {}
+       {\unexpanded{\csq@switchlang{#3{#4}}}}}}%
+  #1\csq@tempa#8#2%
+  \end{\csq@blockenvironment}}
+
+% {}{}{}{}
+
+\newcommand{\mkblockquote}[4]{#1#2#4#3}
+
+% Block quotes + language switching
+
+\newrobustcmd*{\foreignblockquote}[1]{%
+  \csq@getcargs{\csq@bquote{\csq@lang{#1}}{\csq@endlang}}}
+
+\newrobustcmd*{\hyphenblockquote}[1]{%
+  \csq@getcargs{\csq@bquote{\csq@hyph{#1}}{\csq@endhyph}}}
+
+\newrobustcmd*{\hybridblockquote}[1]{%
+  \csq@getcargs{%
+    \csq@bquote
+      {\iftoggle{csq@block}{\csq@lang}{\csq@hyph}{#1}}
+      {\iftoggle{csq@block}{\csq@endlang}{\csq@endhyph}}}}
+
+% Integrated block quotes
+
+\newrobustcmd*{\blockcquote}{%
+  \csq@getccargs{\csq@bquote{}{}}}
+
+% Integrated block quotes + language switching
+
+\newrobustcmd*{\foreignblockcquote}[1]{%
+  \csq@getccargs{\csq@bquote{\csq@lang{#1}}{\csq@endlang}}}
+
+\newrobustcmd*{\hyphenblockcquote}[1]{%
+  \csq@getccargs{\csq@bquote{\csq@hyph{#1}}{\csq@endhyph}}}
+
+\newrobustcmd*{\hybridblockcquote}[1]{%
+  \csq@getccargs{%
+    \csq@bquote
+      {\iftoggle{csq@block}{\csq@lang}{\csq@hyph}{#1}}
+      {\iftoggle{csq@block}{\csq@endlang}{\csq@endhyph}}}}
+
+% PDF strings
+
+\appto\csq@hook@hyperref{%
+  \def\blockquote{\pdfstringdefWarn\blockquote}%
+  \def\foreignblockquote{\pdfstringdefWarn\foreignblockquote}%
+  \def\hyphenblockquote{\pdfstringdefWarn\hyphenblockquote}%
+  \def\blockcquote{\pdfstringdefWarn\blockcquote}%
+  \def\foreignblockcquote{\pdfstringdefWarn\foreignblockcquote}%
+  \def\hyphenblockcquote{\pdfstringdefWarn\hyphenblockcquote}}
+
+% Display quotes
+
+\newenvironment*{displayquote}
+  {\csq@getcargs{\csq@bdquote{}{}}}
+  {\csq@edquote}
+
+% {}{}{}{}{}
+
+\def\csq@bdquote#1#2#3#4#5{%
+  \csuse{\csq@blockenvironment}%
+  \toggletrue{csq@block}%
+  \csq@setsfcodes
+  #1\ifblank{#4}
+    {\def\csq@tempb{\mkenddispquote{#5}{}#2}%
+     \mkbegdispquote{#5}{}}
+    {\def\csq@tempb{\mkenddispquote{#5}{\csq@switchlang{#3{#4}}}#2}%
+     \mkbegdispquote{#5}{\csq@switchlang{#3{#4}}}}%
+  \ignorespaces}
+
+\def\csq@edquote{%
+  \unspace\csq@tempb
+  \csuse{end\csq@blockenvironment}}
+
+\providerobustcmd*{\unspace}{%
+  \ifbool{hmode}
+    {\ifdimgreater\lastskip\z@
+       {\unskip\unspace}
+       {\ifnumgreater\lastpenalty\z@
+	  {\unpenalty\unspace}
+	  {}}}
+    {}}
+
+% {}{}
+
+\newcommand{\mkbegdispquote}[2]{}
+\newcommand{\mkenddispquote}[2]{#1#2}
+
+% Display quotes + language switching
+
+\newenvironment*{foreigndisplayquote}[1]
+  {\csq@getcargs{\csq@bdquote{\csq@lang{#1}}{\csq@endlang}}}
+  {\csq@edquote}
+
+\newenvironment*{hyphendisplayquote}[1]
+  {\csq@getcargs{\csq@bdquote{\csq@hyph{#1}}{\csq@endhyph}}}
+  {\csq@edquote}
+
+% Integrated display quotes
+
+\newenvironment*{displaycquote}
+  {\csq@getccargs{\csq@bdquote{}{}}}
+  {\csq@edquote}
+
+% Integrated display quotes + language switching
+
+\newenvironment*{foreigndisplaycquote}[1]
+  {\csq@getccargs{\csq@bdquote{\csq@lang{#1}}{\csq@endlang}}}
+  {\csq@edquote}
+
+\newenvironment*{hyphendisplaycquote}[1]
+  {\csq@getccargs{\csq@bdquote{\csq@hyph{#1}}{\csq@endhyph}}}
+  {\csq@edquote}
+
+% Hooks
+
+\newcommand{\mkcitation}[1]{\space(#1)}
+\newcommand{\mkccitation}[1]{\space#1}
+
+%% Markup with active characters
+
+\let\csq@dospecials\@empty
+\let\csq@doutfspecials\@empty
+
+\def\csq@do@dospecial#1#2{%
+  \ifnum\catcode`#1=\active
+    \csq@info{Redefining character \string#1}%
+    \csq@letspecial{#1}{csq@special@\number`#1}%
+  \else
+    \csq@info{Making character \string#1 active}%
+    \csq@letspecial{#1}{csq@special@\number`#1}%
+    \catcode`#1=\active
+  \fi}
+
+\def\csq@do@undospecial#1#2{%
+  \ifnum#2=\active
+    \csq@info{Resetting character \string#1}%
+    \csq@letspecial{#1}{csq@saved@\number`#1}%
+  \else
+    \csq@info{Resetting catcode of \string#1}%
+    \catcode`#1=#2\relax
+  \fi}
+
+\def\csq@do@verbspecial#1#2{%
+  \csq@info{Redefining character \string#1}%
+  \ifnum`#1<128\relax
+    \csq@edefspecial{#1}{\string#1}%
+  \else
+    \csq@letspecial{#1}{csq@saved@\number`#1}%
+  \fi}
+
+\def\csq@do@doutfspecial#1{%
+  \csq@info{Redefining character \csq@utfprint{#1}}%
+  \csletcs{u8:\csq@string{#1}}{csq@special@\csq@number{#1}}}
+
+\def\csq@do@undoutfspecial#1{%
+  \csq@info{Resetting character \csq@utfprint{#1}}%
+  \csletcs{u8:\csq@string{#1}}{csq@saved@\csq@number{#1}}}
+
+\def\csq@do@delspecial#1#2{%
+  \csq@info{Deallocating character \string#1}%
+  \csundef{csq@special@\number`#1}%
+  \csundef{csq@saved@\number`#1}%
+  \csundef{csq@string@\number`#1}%
+  \csundef{csq@textdef@\number`#1}%
+  \csundef{csq@xtxtdef@\number`#1}%
+  \csundef{csq@pdfdef@\number`#1}}
+
+\def\csq@do@delutfspecial#1{%
+  \csq@info{Deallocating character \csq@utfprint{#1}}%
+  \csundef{csq@special@\csq@number{#1}}%
+  \csundef{csq@saved@\csq@number{#1}}%
+  \csundef{csq@string@\csq@number{#1}}%
+  \csundef{csq@textdef@\csq@number{#1}}%
+  \csundef{csq@xtxtdef@\csq@number{#1}}%
+  \csundef{csq@pdfdef@\csq@number{#1}}}
+
+\def\csq@mkenable{%
+  \let\do\csq@do@dospecial
+  \csq@dospecials
+  \let\do\csq@do@doutfspecial
+  \csq@doutfspecials
+  \let\do\noexpand
+  \toggletrue{csq@active}}
+
+\def\csq@mkdisable{%
+  \iftoggle{csq@active}
+    {\let\do\csq@do@undospecial
+     \csq@dospecials
+     \let\do\csq@do@undoutfspecial
+     \csq@doutfspecials
+     \let\do\noexpand
+     \togglefalse{csq@active}}
+    {}}
+
+\def\csq@mkverbatim{%
+  \iftoggle{csq@active}
+    {\let\do\csq@do@verbspecial
+     \csq@dospecials
+     \let\do\csq@do@undoutfspecial
+     \csq@doutfspecials
+     \let\do\noexpand}
+    {}}
+
+\def\csq@mkdelete{%
+  \csq@mkdisable
+  \let\do\csq@do@delspecial
+  \csq@dospecials
+  \let\do\csq@do@delutfspecial
+  \csq@doutfspecials
+  \let\do\noexpand
+  \let\csq@dospecials\@empty
+  \let\csq@doutfspecials\@empty
+  \let\csq@mkpdfstrings\@empty}
+
+\let\csq@mkpdfstrings\@empty
+\appto\csq@hook@hyperref{\csq@mkpdfstrings}
+
+\ifdef\inpenc@prehook
+  {\AtBeginDocument{%
+     \addto@hook\inpenc@prehook{%
+        \csq@info{Input encoding change}%
+        \csq@mkdelete}}}
+  {}
+
+% Regular specials
+
+% {}{}{}{}
+
+\def\csq@addspecial#1#2#3#4{%
+  \csq@validate{#1}
+    {\csq@addspecial@i@s{#1}{\csqQQ}{#2}{#3}{#4}}
+    {\csq@addspecial@i@u{#1}{\csqQQ}{#2}{#3}{#4}}}
+
+% {}{}{}{}{}
+
+\def\csq@addspecial@i@s#1#2#3#4#5{%
+  \csq@info{Allocating character \string#1}%
+  \csedef{csq@special@\number`#1}{\noexpand#2{\number`#1}}%
+  \ifnum\catcode`#1=\active
+    \cslet{csq@saved@\number`#1}{#1}%
+  \else
+    \csdef{csq@saved@\number`#1}{#1}%
+  \fi
+  \csedef{csq@string@\number`#1}{\string#1}%
+  \csdef{csq@textdef@\number`#1}{#3}%
+  \ifblank{#5}
+    {\csdef{csq@pdfdef@\number`#1}{#4}}
+    {\appto\csq@mkpdfstrings{\csq@defpspecial{#1}{#4}{#5}}}%
+  \eappto\csq@dospecials{\noexpand\do{\string#1}{\the\catcode`#1}}%
+  \ifnum`#1<128\relax
+    \csq@addto@list{#1}{\dospecials}{\do}%
+    \csq@addto@list{#1}{\@sanitize}{\@makeother}%
+  \fi}
+
+% {}{}{}{}{}
+
+\def\csq@addspecial@i@u#1#2#3#4#5{%
+  \csq@info{Allocating character \csq@utfprint{#1}}%
+  \csedef{csq@special@\csq@number{#1}}{%
+    \noexpand#2{\csq@number{#1}}}%
+  \ifcsundef{u8:\csq@string{#1}}
+    {\csq@error
+       {\csq@utfprint{#1} not supported by inputenc}
+       {This UTF-8 sequence does not seem to be supported by the
+        inputenc\MessageBreak package}%
+     \csdef{csq@saved@\csq@number{#1}}{}}
+    {\csletcs{csq@saved@\csq@number{#1}}{u8:\csq@string{#1}}}%
+  \csedef{csq@string@\csq@number{#1}}{\csq@string{#1}}%
+  \csdef{csq@textdef@\csq@number{#1}}{#3}%
+  \ifblank{#5}
+    {\csdef{csq@pdfdef@\csq@number{#1}}{#4}}
+    {\appto\csq@mkpdfstrings{\csq@defupspecial{#1}{#4}{#5}}}%
+  \eappto\csq@doutfspecials{\noexpand\do{\csq@string{#1}}}}
+
+% Block specials
+
+% {}{}{}{}
+
+\def\csq@addbspecial#1#2#3#4{%
+  \csq@validate{#1}
+    {\csq@addbspecial@i@s{#1}{#2}{#3}{#4}}
+    {\csq@addbspecial@i@u{#1}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@i@s#1#2#3#4{%
+  \begingroup
+  \def\csq@tempa{\endgroup\csq@addspecial@i@s{#1}{\csqBQ}{}}%
+  \eappto\csq@tempa{%
+    {\expandafter\noexpand\csname csq@saved@\number`#1\endcsname
+     \noexpand\pdfstringdefWarn{\string#1}}{}}%
+  \csq@tempa
+  \csq@validate{#2}
+    {\csq@addbspecial@ii@s{\number`#1}{#2}{#3}{#4}}
+    {\csq@addbspecial@ii@u{\number`#1}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@i@u#1#2#3#4{%
+  \begingroup
+  \def\csq@tempa{\endgroup\csq@addspecial@i@u{#1}{\csqBQ}{}}%
+  \eappto\csq@tempa{%
+    {\expandafter\noexpand\csname csq@saved@\csq@number{#1}\endcsname
+     \noexpand\pdfstringdefWarn{\csq@utfprint{#1}}}{}}%
+  \csq@tempa
+  \csq@validate{#2}
+    {\csq@addbspecial@ii@s{\csq@number{#1}}{#2}{#3}{#4}}
+    {\csq@addbspecial@ii@u{\csq@number{#1}}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@ii@s#1#2#3#4{%
+  \csq@addspecial@i@s{#2}{\csqBQsep}{}{}{}%
+  \begingroup
+  \let\csq@tempa\@empty
+  \def\csq@tempb{{#1}}%
+  \uccode`\~=`#2\relax
+  \uppercase{\appto\csq@tempb{{~}}}%
+  \appto\csq@tempb{{#3}{#4}}%
+  \csq@validate{#3}
+    {\expandafter\def\expandafter\csq@tempa
+     \expandafter{\expandafter\csq@addbspecial@iii@s\csq@tempb}}
+    {\expandafter\def\expandafter\csq@tempa
+     \expandafter{\expandafter\csq@addbspecial@iii@u\csq@tempb}}%
+  \expandafter\endgroup\csq@tempa}
+
+\def\csq@addbspecial@ii@u#1#2#3#4{%
+  \csq@addspecial@i@u{#2}{\csqBQsep}{}{}{}%
+  \csq@validate{#3}
+    {\csq@addbspecial@iii@s{#1}{#2}{#3}{#4}}
+    {\csq@addbspecial@iii@u{#1}{#2}{#3}{#4}}}
+
+\def\csq@addbspecial@iii@s#1#2#3#4{%
+  \csq@addspecial@i@s{#3}{\csqBQend}{}{}{}%
+  \begingroup
+  \def\csq@tempa{{#1}{#2}}%
+  \uccode`\~=`#3\relax
+  \uppercase{\appto\csq@tempa{~}}%
+  \appto\csq@tempa{{#4}}%
+  \expandafter\endgroup
+  \expandafter\csq@addbspecial@iv\csq@tempa}
+
+\def\csq@addbspecial@iii@u#1#2#3#4{%
+  \csq@addspecial@i@u{#3}{\csqBQend}{}{}{}%
+  \csq@addbspecial@iv{#1}{#2}{#3}{#4}}
+
+\def\csq@addbspecial@iv#1#2#3#4{%
+  \expandafter\csq@defbspecial
+  \expandafter{\csname csq@textdef@#1\endcsname}{#2}{#3}{#4}%
+  \expandafter\csq@defxbspecial
+  \expandafter{\csname csq@xtxtdef@#1\endcsname}{#4}}
+
+% Specials
+
+\newcommand*{\csqQQ}[1]{%
+  \csq@ifsafeactives
+    {\csuse{csq@string@#1}}
+    {\csq@iftypeset
+       {\ifbool{mmode}
+          {\csuse{csq@saved@#1}}
+          {\csuse{csq@textdef@#1}}}
+       {\csq@ifstrings
+          {\csuse{csq@string@#1}}
+          {\noexpand\csqQQ{#1}}}}}
+
+\newcommand*{\csqBQ}[1]{%
+  \csq@ifsafeactives
+    {\csuse{csq@string@#1}}
+    {\csq@iftypeset
+       {\ifbool{mmode}
+          {\csuse{csq@saved@#1}}
+          {\csq@ifnested
+             {\csq@err@nbquote}
+             {\csq@nbgobble{\csuse{csq@textdef@#1}}}}}
+       {\csq@ifstrings
+          {\csuse{csq@string@#1}}
+          {\noexpand\csqBQbeg{#1}}}}}
+
+\newcommand*{\csqBQbeg}[1]{%
+  \csq@ifsafeactives
+    {\csuse{csq@string@#1}}
+    {\csq@iftypeset
+       {\ifbool{mmode}
+          {\csuse{csq@saved@#1}}
+          {\csq@ifnested
+             {\csq@err@nbquote}
+             {\csq@nbgobble{\csuse{csq@xtxtdef@#1}}}}}
+       {\csq@ifstrings
+          {\csuse{csq@string@#1}}
+          {\noexpand\csqBQbeg{#1}}}}}
+
+\newcommand*{\csqBQsep}[1]{%
+  \csq@ifsafeactives
+    {\csuse{csq@string@#1}}
+    {\csq@iftypeset
+       {\csuse{csq@saved@#1}}
+       {\csq@ifstrings
+          {\csuse{csq@string@#1}}
+          {\noexpand\csqBQsep{#1}}}}}
+
+\newcommand*{\csqBQend}[1]{%
+  \csq@ifsafeactives
+    {\csuse{csq@string@#1}}
+    {\csq@iftypeset
+       {\csuse{csq@saved@#1}}
+       {\csq@ifstrings
+          {\csuse{csq@string@#1}}
+          {\noexpand\csqBQend{#1}}}}}
+
+\appto\csq@hook@hyperref{%
+  \def\csqQQ#1{\csuse{csq@pdfdef@#1}}%
+  \def\csqBQ#1{\csuse{csq@pdfdef@#1}}%
+  \def\csqBQbeg#1{\csuse{csq@pdfdef@#1}}%
+  \def\csqBQsep#1{\csuse{csq@saved@#1}}%
+  \def\csqBQend#1{\csuse{csq@saved@#1}}}
+
+% Define specials
+
+% {}{}
+
+\def\csq@edefspecial#1#2{%
+  \begingroup
+  \uccode`\~=`#1\relax
+  \uppercase{\endgroup\edef~}{#2}}
+
+% {}{}
+
+\def\csq@letspecial#1#2{%
+  \begingroup
+  \uccode`\~=`#1\relax
+  \uppercase{\def\csq@tempa{\endgroup\let~}}%
+  \expandafter\csq@tempa\csname#2\endcsname}
+
+% {}{}{}{}
+
+\def\csq@defbspecial#1#2#3#4{%
+  \long\def#1##1#3{\csq@bspecial@i{##1}{#2}{#4}}}
+
+% {}{}{}
+
+\long\def\csq@bspecial@i#1#2#3{%
+  \long\def\csq@bspecial@ii##1#2##2&{%
+    \ifblank{##2}
+      {#3{}{}{#1}}
+      {\csq@bspecial@iii#1&}}%
+  \long\def\csq@bspecial@iii##1#2##2&{%
+    #3{##2}{}{##1}}%
+  \csq@bspecial@ii#1#2&}
+
+% {}{}
+
+\def\csq@defxbspecial#1#2{%
+  \long\def#1##1\csqBQend##2{\csq@xbspecial@i{##1}{#2}}}
+
+% {}{}
+
+\long\def\csq@xbspecial@i#1#2{%
+  \long\def\csq@xbspecial@ii##1\csqBQsep##2&{%
+    \ifblank{##2}
+      {#2{}{}{#1}}
+      {\csq@xbspecial@iii#1&}}%
+  \long\def\csq@xbspecial@iii##1\csqBQsep##2##3&{%
+    #2{##3}{}{##1}}%
+  \csq@xbspecial@ii#1\csqBQsep&}
+
+% {}{}{}
+
+\def\csq@defpspecial#1#2#3{%
+  \begingroup
+  \uccode`\~=`#1\relax
+  \uppercase{\endgroup\def~##1~}{#2##1#3}}
+
+% {}{}{}
+
+\def\csq@defupspecial#1#2#3{%
+  \expandafter\def\csname u8:\csq@string{#1}\endcsname##1#1{#2##1#3}}
+
+% Validate user input
+
+% {}{}{}
+
+\def\csq@validate#1#2#3{%
+  \csq@ifutfchar{#1}
+    {\csq@ifvalidutf{#1}
+       {\ifcsundef{csq@special@\csq@number{#1}}
+           {#3}
+           {\csq@err@alloc}}
+       {\csq@err@utf}}
+    {\csq@ifvalidchar{#1}
+       {\ifcsundef{csq@special@\number`#1}
+          {#2}
+          {\csq@err@alloc}}
+       {\csq@err@char}}}
+
+% {}{}{}
+
+\def\csq@ifutfchar#1{%
+  \ifundef\@inpenc@undefined
+    {\@secondoftwo}
+    {\csq@ifutfenc}%
+  {\csq@ifsingle{#1}
+     {\ifnum`#1<128\relax
+        \expandafter\@secondoftwo
+      \else
+        \csq@err@utf
+        \expandafter\@gobbletwo
+      \fi}
+     {\@firstoftwo}}
+  {\csq@ifsingle{#1}
+     {\@secondoftwo}
+     {\csq@err@char
+      \@gobbletwo}}}
+
+\ifundef\inputencodingname
+  {\def\csq@ifutfenc{%
+     \csq@ifucs
+       {\csq@err@ucs\@secondoftwo}
+       {\begingroup
+        \def\@inpenc@undefined@##1{\def\inputencodingname{##1}}%
+        \@inpenc@undefined
+        \ifdefstring\inputencodingname{utf8}
+	  {\aftergroup\@firstoftwo}
+	  {\aftergroup\@secondoftwo}%
+        \endgroup}}}
+  {\def\csq@ifutfenc{%
+     \csq@ifucs
+       {\csq@err@ucs\@secondoftwo}
+       {\ifdefstring\inputencodingname{utf8}}}}
+
+% {}{}{}
+
+\long\def\csq@ifsingle#1{%
+  \ifblank{#1}
+    {\@secondoftwo}
+    {\expandafter\csq@ifsingle@i
+     \string#1&&\@secondoftwo\@firstoftwo:}}
+\long\def\csq@ifsingle@i#1#2#3#5#6:{#5}
+
+% {}{}{}
+
+\def\csq@ifvalidchar#1{%
+  \begingroup
+  \@tempswafalse
+  \ifnum\active=\catcode`#1\relax
+    \@tempswatrue
+  \else\ifnum12=\catcode`#1\relax
+    \@tempswatrue
+  \fi\fi
+  \if@tempswa
+    \csq@ifvalidchar@i{#1}%
+  \fi
+  \if@tempswa
+    \aftergroup\@firstoftwo
+  \else
+    \aftergroup\@secondoftwo
+  \fi
+  \endgroup}
+
+\def\csq@ifvalidchar@i#1{%
+  \def\break\fi##1\relax{\fi\@tempswafalse}%
+  \def\do##1{\ifnum`##1=`#1\relax\break\fi}%
+  \csq@resrvdchars\relax}
+
+\def\csq@resrvdchars{%
+  \do\[\do\]\do\*\do\@\do\~\do\-\do\`\do\'\do\.\do\,\do\;\do\:%
+  \do\!\do\?\do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9}
+
+% {}{}{}
+
+\def\csq@ifvalidutf#1{%
+  \ifblank{#1}{\@secondoftwo}{\csq@ifvalidutf@i#1&}}
+
+\def\csq@ifvalidutf@i#1#2&{%
+  \ifblank{#2}
+    {\@secondoftwo}% 0x00-0x7F handled elsewhere
+    {\csq@ifutfstart{#1}{\csq@ifvalidutf@ii#2&}{\@secondoftwo}}}
+
+\def\csq@ifvalidutf@ii#1#2&{%
+  \csq@ifutfnext{#1}
+    {\ifblank{#2}{\@firstoftwo}{\csq@ifvalidutf@ii#2&}}
+    {\@secondoftwo}}
+
+% 0xC0-0xFD, 0x80-0xBF, 0x80-0xBF, ...
+
+\def\csq@ifutfstart#1{%
+  \ifnum`#1>191\relax
+    \ifnum`#1<254\relax
+      \expandafter\expandafter
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\expandafter
+      \expandafter\@secondoftwo
+    \fi
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+\def\csq@ifutfnext#1{%
+  \ifnum`#1>127\relax
+    \ifnum`#1<192\relax
+      \expandafter\expandafter
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\expandafter
+      \expandafter\@secondoftwo
+    \fi
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+\def\csq@isvalid#1#2#3{#2}
+
+% User interface
+
+\newrobustcmd*{\MakeOuterQuote}[1]{%
+  \csq@addspecial{#1}{\csq@oqmark}
+    {\csq@pdf@ooqmark}{\csq@pdf@coqmark}}
+
+\newrobustcmd*{\MakeInnerQuote}[1]{%
+  \csq@addspecial{#1}{\csq@iqmark}
+    {\csq@pdf@oiqmark}{\csq@pdf@ciqmark}}
+
+\newrobustcmd*{\MakeAutoQuote}{%
+  \@ifstar
+    {\csq@mkaquote\csq@iqopen}
+    {\csq@mkaquote\csq@oqopen}}
+\def\csq@mkaquote#1#2#3{%
+  \csq@addspecial{#2}{#1}{\csq@pdf@ooqmark}{}%
+  \csq@addspecial{#3}{\csq@qclose}{\csq@pdf@coqmark}{}}
+
+\newrobustcmd*{\MakeForeignQuote}{%
+  \@ifstar
+    {\csq@mkfquote\csq@iqopen@i}
+    {\csq@mkfquote\csq@oqopen@i}}
+\def\csq@mkfquote#1#2#3#4{%
+  \csq@addspecial{#3}
+    {\csq@bqgroup\csq@lang{#2}#1}
+    {\csq@pdf@ooqmark}{}%
+  \csq@addspecial{#4}
+    {\csq@qclose@i{\csq@endlang}}
+    {\csq@pdf@coqmark}{}}
+
+\newrobustcmd*{\MakeHyphenQuote}{%
+  \@ifstar
+    {\csq@mkhquote\csq@iqopen@i}
+    {\csq@mkhquote\csq@oqopen@i}}
+\def\csq@mkhquote#1#2#3#4{%
+  \csq@addspecial{#3}
+    {\csq@bqgroup\csq@hyph{#2}#1}
+    {\csq@pdf@ooqmark}{}%
+  \csq@addspecial{#4}
+    {\csq@qclose@i{\csq@endhyph}}
+    {\csq@pdf@coqmark}{}}
+
+\newrobustcmd*{\MakeBlockQuote}[3]{%
+  \csq@addbspecial{#1}{#2}{#3}{\csq@bquote{}{}{\mkcitation}}}
+
+\newrobustcmd*{\MakeForeignBlockQuote}[4]{%
+  \csq@addbspecial{#2}{#3}{#4}%
+    {\csq@bquote{\csq@lang{#1}}{\csq@endlang}{\mkcitation}}}
+
+\newrobustcmd*{\MakeHyphenBlockQuote}[4]{%
+  \csq@addbspecial{#2}{#3}{#4}%
+    {\csq@bquote{\csq@hyph{#1}}{\csq@endhyph}{\mkcitation}}}
+
+\newrobustcmd*{\MakeHybridBlockQuote}[4]{%
+  \csq@addbspecial{#2}{#3}{#4}%
+    {\csq@bquote
+       {\iftoggle{csq@block}{\csq@lang}{\csq@hyph}{#1}}
+       {\iftoggle{csq@block}{\csq@endlang}{\csq@endhyph}}
+       {\mkcitation}}}
+
+\newrobustcmd*{\EnableQuotes}{}
+\newrobustcmd*{\DisableQuotes}{}
+\newrobustcmd*{\VerbatimQuotes}{}
+\newrobustcmd*{\DeleteQuotes}{\csq@mkdelete}
+
+\AtBeginDocument{%
+  \protected\def\EnableQuotes{\csq@mkenable}%
+  \protected\def\DisableQuotes{\csq@mkdisable}%
+  \protected\def\VerbatimQuotes{\csq@mkverbatim}}
+
+% Author interface
+
+\newrobustcmd*{\@enablequotes}{%
+  \toggletrue{csq@quiet}%
+  \csq@mkenable
+  \togglefalse{csq@quiet}}
+\newrobustcmd*{\@disablequotes}{%
+  \toggletrue{csq@quiet}%
+  \csq@mkdisable
+  \togglefalse{csq@quiet}}
+\newrobustcmd*{\@verbatimquotes}{%
+  \toggletrue{csq@quiet}%
+  \csq@mkverbatim
+  \togglefalse{csq@quiet}}
+\newrobustcmd*{\@deletequotes}{%
+  \toggletrue{csq@quiet}%
+  \csq@mkdelete
+  \togglefalse{csq@quiet}}
+
+%% Switch quote styles manually
+
+\newrobustcmd*{\setquotestyle}{%
+  \@ifstar
+    {\csq@resetqstyle}
+    {\@ifnextchar[%]
+       {\csq@setqstyle}
+       {\csq@setqstyle[]}}}
+
+\def\csq@setqstyle[#1]#2{%
+  \ifnum\csq@reset>\z@
+    \csq@info{Disabling multilingual quotes}%
+    \csq@reset\z@
+  \fi
+  \ifblank{#1}
+    {\DeclareQuoteAlias{#2}{default}}
+    {\DeclareQuoteAlias{#2/#1}{default}}}
+
+\def\csq@resetqstyle{%
+  \csq@info{Enabling multilingual quotes}%
+  \csq@reset\@ne}
+
+\AtEndPreamble{%
+  \def\csq@setqstyle[#1]#2{%
+    \ifnum\csq@reset=\@ne
+      \csq@info{Disabling multilingual quotes}%
+      \csq@reset\z@
+    \fi
+    \ifblank{#1}
+      {\csq@setstyle{#2}}
+      {\csq@setstyle{#2/#1}}}}
+
+%% Define quote styles
+
+\newrobustcmd*{\DeclareQuoteStyle}[2][]{%
+  \begingroup
+  \let\if@safe@actives\iftrue
+  \ifblank{#1}
+    {\edef\csq@tempa{#2}}
+    {\edef\csq@tempa{#2/#1}}%
+  \ifcsundef{csq@qstyle@\csq@tempa}
+    {}
+    {\csq@info{Redefining quotation style '\csq@tempa'}}%
+  \@ifnextchar[%]
+    {\csq@declareqstyle@i}
+    {\csq@declareqstyle@i[]}}
+
+\def\csq@declareqstyle@i[#1]{%
+  \csgdef{csq@qstyle@\csq@tempa}{%
+    \def\csq@thequote@oinit{%
+      \let\csq@themarker\csq@kernmarker#1}}%
+  \@ifnextchar[%]
+    {\csq@declareqstyle@ii}
+    {\csq@declareqstyle@ii[]}}
+
+\def\csq@declareqstyle@ii[#1]#2{%
+  \csgappto{csq@qstyle@\csq@tempa}{%
+    \def\csq@thequote@iinit{#1}%
+    \def\csq@thequote@oopen{#2}}%
+  \@ifnextchar[%]
+    {\csq@declareqstyle@iii}
+    {\csq@declareqstyle@iii[]}}
+
+\def\csq@declareqstyle@iii[#1]#2{%
+  \csgappto{csq@qstyle@\csq@tempa}{%
+    \def\csq@thequote@omiddle{#1}%
+    \def\csq@thequote@oclose{#2}}%
+  \@ifnextchar[%]
+    {\csq@declareqstyle@iv}
+    {\csq@declareqstyle@iv[]}}
+
+\def\csq@declareqstyle@iv[#1]#2{%
+  \ifblank{#1}
+    {\def\csq@thequote@kern{\z@}}
+    {\def\csq@thequote@kern{#1}}%
+  \csxappto{csq@qstyle@\csq@tempa}{%
+    \def\noexpand\csq@thequote@kern{\csq@thequote@kern}}%
+  \csgappto{csq@qstyle@\csq@tempa}{%
+    \def\csq@thequote@iopen{#2}}%
+  \@ifnextchar[%]
+    {\csq@declareqstyle@v}
+    {\csq@declareqstyle@v[]}}
+
+\def\csq@declareqstyle@v[#1]#2{%
+  \csgappto{csq@qstyle@\csq@tempa}{%
+    \def\csq@thequote@imiddle{#1}%
+    \def\csq@thequote@iclose{#2}}%
+  \endgroup}
+
+\@onlypreamble\DeclareQuoteStyle
+
+%% Define quote aliases
+
+\newrobustcmd*{\DeclareQuoteAlias}[3][]{%
+  \begingroup
+  \let\if@safe@actives\iftrue
+  \ifblank{#1}
+    {\edef\csq@tempa{#2}}
+    {\edef\csq@tempa{#2/#1}}%
+  \ifcsundef{csq@qstyle@\csq@tempa}
+    {\csq@error
+       {Quote style not defined}
+       {Define the style or alias '\csq@tempa' first}}
+    {\ifcsundef{csq@qstyle@#3}
+       {}
+       {\csq@info{Redefining alias '#3' -> '\csq@tempa'}}%
+     \csxdef{csq@qstyle@#3}{%
+       \noexpand\csuse{csq@qstyle@\csq@tempa}}}%
+  \endgroup}
+
+\@onlypreamble\DeclareQuoteAlias
+
+%% Define quotes for PDF strings
+
+\newrobustcmd*{\DeclarePlainStyle}[4]{%
+  \def\csq@pdf@ooqmark{#1}%
+  \def\csq@pdf@coqmark{#2}%
+  \def\csq@pdf@oiqmark{#3}%
+  \def\csq@pdf@ciqmark{#4}}
+
+\@onlypreamble\DeclarePlainStyle
+
+%% Define package options
+
+\newrobustcmd*{\DeclareQuoteOption}[1]{%
+  \define@key{csq}{#1}{\DeclareQuoteAlias[##1]{#1}{#1}}}
+
+\AtEndOfPackage{%
+  \protected\def\DeclareQuoteOption#1{%
+    \csq@warn@location\DeclareQuoteOption}}
+
+%% Space factor codes
+
+\newrobustcmd*{\DeclareQuoteGlyph}[2]{%
+  \csxappto{csq@sfcodes@#1}{\sfcode\detokenize{#2}=\z@}}
+
+%% Set defaults
+
+\newrobustcmd*{\SetBlockThreshold}[1]{%
+  \csq@tshold=#1\relax}
+
+\newrobustcmd*{\SetBlockEnvironment}[1]{%
+  \ifcsundef{#1}
+    {\csq@err@undef{#1}}
+    {\def\csq@blockenvironment{#1}}}
+
+\newrobustcmd*{\SetCiteCommand}[1]{%
+  \ifundef#1%
+    {\csq@err@undef{#1}}
+    {\def\csq@cite{#1}}}
+
+%% Interface for biblatex
+
+\newrobustcmd*{\@setquotesfcodes}{\csq@setsfcodes}
+
+\newcommand*{\@quotelevel}{}
+\let\@quotelevel\csq@qlevel
+
+\newcommand*{\@quotereset}{}
+\let\@quotereset\csq@reset
+
+\newcommand*{\@ifquotemarker}{%
+  \ifdim\lastskip=\csq@kernmarker\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+%% Author interface to auto quotes
+
+\newrobustcmd*{\openautoquote}{%
+  \ifbool{mmode}
+    {\csq@err@mmode\openautoquote}
+    {\csq@oqopen}}
+
+\newrobustcmd*{\closeautoquote}{%
+  \ifbool{mmode}
+    {\csq@err@mmode\closeautoquote}
+    {\csq@qclose}}
+
+\newrobustcmd*{\openinnerquote}{%
+  \ifbool{mmode}
+    {\csq@err@mmode\openinnerquote}
+    {\csq@iqopen}}
+
+\newrobustcmd*{\closeinnerquote}{%
+  \ifbool{mmode}
+    {\csq@err@mmode\closeinnerquote}
+    {\csq@qclose}}
+
+\appto\csq@hook@hyperref{%
+  \def\openautoquote{\csq@pdf@ooqmark}%
+  \def\closeautoquote{\csq@pdf@coqmark}%
+  \def\openinnerquote{\csq@pdf@oiqmark}%
+  \def\closeinnerquote{\csq@pdf@ciqmark}}
+
+%% Author interface to internal marks 
+
+\newrobustcmd*{\initoquote}{%
+  \csq@resetstyle
+  \csq@qlevel\@ne
+  \csq@init}
+
+\newrobustcmd*{\initiquote}{%
+  \csq@resetstyle
+  \csq@qlevel\tw@
+  \csq@init}
+
+\newrobustcmd*{\textooquote}{%
+  \csq@resetstyle
+  \csq@addkern@open
+  \let\csq@kernchar@i\csq@thequote@oopen
+  \csq@thequote@oopen
+  \csq@setmarker@open
+  \csq@fixkern}
+
+\newrobustcmd*{\textmoquote}{%
+  \csq@resetstyle
+  \csq@thequote@omiddle}
+
+\newrobustcmd*{\textcoquote}{%
+  \ifdim\lastkern=\csq@omitmarker
+  \else
+    \csq@resetstyle
+    \csq@addkern@close
+    \csq@thequote@oclose
+    \let\csq@kernchar@i\csq@thequote@oclose
+    \csq@setmarker@close
+    \expandafter\csq@fixkern
+  \fi}
+
+\newrobustcmd*{\textoiquote}{%
+  \csq@resetstyle
+  \csq@addkern@open
+  \let\csq@kernchar@i\csq@thequote@iopen
+  \csq@thequote@iopen
+  \csq@setmarker@open
+  \csq@fixkern}
+
+\newrobustcmd*{\textmiquote}{%
+  \csq@resetstyle
+  \csq@thequote@imiddle}
+
+\newrobustcmd*{\textciquote}{%
+  \ifdim\lastkern=\csq@omitmarker
+  \else
+    \csq@resetstyle
+    \csq@addkern@close
+    \csq@thequote@iclose
+    \let\csq@kernchar@i\csq@thequote@iclose
+    \csq@setmarker@close
+    \expandafter\csq@fixkern
+  \fi}
+
+%% Ellipses
+
+\newrobustcmd*{\textelp}{%
+  \begingroup
+  \@ifstar
+    {\@tempswatrue\csq@textelp}
+    {\@tempswafalse\csq@textelp}}
+
+\long\def\csq@textelp#1{%
+  \ifblank{#1}
+    {\endgroup\mktextelp}
+    {\expandafter\endgroup\if@tempswa
+       \expandafter\mktextinselp
+     \else
+       \expandafter\mktextelpins
+     \fi
+     {#1}}}
+
+\newrobustcmd*{\textins}{%
+  \@ifstar\mktextmod\mktextins}
+
+\newrobustcmd*{\textdel}{%
+  \mktextdel}
+
+\newcommand{\mktextelp}{[\textellipsis\unkern]}
+\newcommand{\mktextelpins}[1]{[\textellipsis\unkern] [#1]}
+\newcommand{\mktextinselp}[1]{[#1] [\textellipsis\unkern]}
+\newcommand{\mktextins}[1]{[#1]}
+\newcommand{\mktextmod}[1]{[#1]}
+\newcommand{\mktextdel}[1]{[]}
+
+%% Auxiliary commands for some styles
+
+% French
+
+\newrobustcmd*{\initfrenchquotes}{%
+  \let\csq@themarker\csq@omitmarker}
+
+\newrobustcmd*{\mkfrenchopenquote}[1]{%
+  \leavevmode#1\@frenchquotespace}
+
+\newrobustcmd*{\mkfrenchclosequote}[1]{%
+  \leavevmode\@frenchquotespace#1}
+
+\newcommand*{\@frenchquotespace}{%
+  \penalty\@M
+  \hskip 0.8\fontdimen2\font
+   plus  0.3\fontdimen3\font
+   minus 0.3\fontdimen4\font}
+
+\AtEndPreamble{%
+  \@ifpackageloaded{polyglossia}
+    {\@ifpackagelater{polyglossia}{2009/11/20}
+       {\let\@frenchquotespace\@empty}
+       {}}
+    {}}
+
+% German
+
+\newrobustcmd*{\fixligatures}{%
+  \ifhmode
+    \ifnum\spacefactor>3000
+      \kern0pt
+    \else
+      \ifnum\spacefactor=1007
+        \kern0pt
+      \else
+        \ifnum\spacefactor=1008
+          \kern0pt
+        \fi
+      \fi
+    \fi
+  \fi}
+
+% Special styles
+
+\DeclareQuoteStyle{debug}
+  {\textbf{[\number\@quotelevel]}}
+  [\textbf{[\number\@quotelevel]}]
+  {\textbf{[\number\@quotelevel]}}
+  {\textbf{[\number\@quotelevel]}}
+  [\textbf{[\number\@quotelevel]}]
+  {\textbf{[\number\@quotelevel]}}
+
+\DeclareQuoteStyle{fallback}
+  {\textbf{?}}
+  {\textbf{?}}
+  {\textbf{?}}
+  {\textbf{?}}
+
+%% Package options
+
+\newrobustcmd*{\ExecuteQuoteOptions}{\setkeys{csq}}
+\@onlypreamble\ExecuteQuoteOptions
+
+% Core options
+
+\define@key{csq}{strict}[true]{%
+  \ifstrequal{#1}{true}
+    {\csq@info{Enabling strict warnings}%
+     \let\csq@warnorerr\csq@warning@strict}
+    {\csq@info{Disabling strict warnings}%
+     \let\csq@warnorerr\csq@warning@loose}}
+
+\define@key{csq}{debug}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\csq@debug\csq@logdebug}
+    {\let\csq@debug\@gobble}}
+
+\define@key{csq}{autopunct}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\csq@autopunct\csq@allpunct}
+    {\let\csq@autopunct\@empty}}
+
+\define@key{csq}{style}{%
+  \csq@opt@autostyle@false
+  \DeclareQuoteAlias{#1}{default}}
+
+\define@key{csq}{autostyle}[true]{%
+  \ifcsdef{csq@opt@autostyle@#1}
+    {\csuse{csq@opt@autostyle@#1}}
+    {\csq@err@opt{autostyle=#1}}}
+\def\csq@opt@autostyle@false{%
+  \csq@info{Disabling multilingual quotes}%
+  \csq@reset\z@}
+\def\csq@opt@autostyle@true{%
+  \csq@info{Enabling multilingual quotes}%
+  \csq@reset\@ne}
+\def\csq@opt@autostyle@try{%
+  \csq@reset\tw@}
+\def\csq@opt@autostyle@once{%
+  \csq@reset\thr@@}
+\def\csq@opt@autostyle@tryonce{%
+  \csq@reset4\relax}
+
+\define@key{csq}{babel}[true]{%
+  \csq@info{%
+    Option 'babel' depreciated.\MessageBreak
+    Using 'autostyle'}%
+  \setkeys{csq}{autostyle=#1}}
+
+\define@key{csq}{maxlevel}{%
+  \ifnumless{#1}\tw@
+    {\csq@err@opt{maxlevel=#1}}
+    {\csq@maxlvl#1\relax}}
+
+\define@key{csq}{threshold}{%
+  \SetBlockThreshold{#1}}
+
+\define@key{csq}{thresholdtype}[lines]{%
+  \ifcsdef{csq@bcount@#1}%
+    {\def\csq@thresholdtype{#1}}
+    {\csq@err@opt{thresholdtype=#1}}}
+
+\define@key{csq}{parthreshold}[true]{%
+  \settoggle{csq@parthreshold}{#1}}
+
+\define@key{csq}{splitcomp}[true]{%
+  \ifstrequal{#1}{true}
+    {\let\csq@splitcomp\z@}
+    {\let\csq@splitcomp\@M}}
+
+\define@key{csq}{csdisplay}[true]{%
+  \setbool{csdisplay}{#1}}
+
+\define@key{csq}{version}{%
+  \ifdef\csq@getversion
+    {}
+    {\input{csq-compat.def}}%
+  \csq@getversion{#1}}
+
+% Initialize
+
+\setkeys{csq}{thresholdtype=lines,parthreshold,splitcomp=false}
+
+%% Initial setup
+
+% Provide 'quote' environment
+
+\ifundef\quote
+  {\csq@info{%
+     The 'quote' environment appears to be undefined.\MessageBreak
+     I'm defining a typical 'quote' environment now}
+   \def\quote{%
+     \list{}{\rightmargin\leftmargin}%
+     \item\relax}
+   \def\endquote{\endlist}}
+  {}
+
+% Deferred last minute setup
+
+\AtEndPreamble{%
+  \ifnumgreater\csq@reset\z@
+    {\csq@info{Checking for multilingual support..}%
+     \@ifpackageloaded{polyglossia}
+       {\csq@info{... found 'polyglossia' package}%
+	\def\csq@main@language{\xpg@main@language}%
+	\csq@hook@multilang}
+       {\@ifpackageloaded{babel}
+	  {\csq@info{... found 'babel' package}%
+           \def\csq@main@language{\bbl@main@language}%
+           \csq@hook@multilang}
+	  {\csq@info{... none found}%
+           \csq@hook@nomultilang}}}
+    {\@ifpackageloaded{polyglossia}
+       {}
+       {\@ifpackageloaded{babel}
+	  {}
+	  {\csq@hook@nomultilang}}}%
+  \undef\csq@hook@multilang
+  \undef\csq@hook@nomultilang
+  \@ifpackageloaded{hyperref}
+    {\expandafter\pdfstringdefDisableCommands
+     \expandafter{\csq@hook@hyperref}}
+    {}%
+  \undef\csq@hook@hyperref
+  \appto\@noligs{\@verbatimquotes}%
+  \@ifpackageloaded{verbatim}
+    {\addto@hook\every@verbatim{\@verbatimquotes}}
+    {}%
+  \@ifpackageloaded{fancyvrb}
+    {\appto\FV@CatCodes{\@verbatimquotes}}
+    {}%
+  \@ifpackageloaded{endnotes}
+    {\BlockquoteDisable{%
+       \renewcommand{\endnote}[2][]{%
+         \ifblank{#1}
+           {\endnotemark\relax}
+           {\endnotemark[#1]}}%
+       \renewcommand{\endnotetext}[2][]{}%
+       \let\addtoendnotes\@gobble}}
+    {}%
+  \ifdef\collect@body % amsmath
+    {\pretocmd\collect@body{\@disablequotes}
+       {}
+       {\csq@err@patch{'amsmath' package}}}
+    {}}
+
+\AtBeginDocument{%
+  \csq@setstyle{default}%
+  \csq@mkenable}
+
+% Restore catcodes
+
+\csq@catcodes
+\undef\csq@catcodes
+
+% Load predefined styles
+
+\input{csquotes.def}
+
+% Load configuration file
+
+\csq@info{Trying to load configuration file 'csquotes.cfg'..}
+\InputIfFileExists{csquotes.cfg}
+  {\csq@info{... configuration file loaded successfully}}
+  {\csq@info{... configuration file not used}}
+
+% Process options
+
+\DeclareOption*{%
+  \begingroup
+  \edef\csq@tempa{\endgroup
+    \noexpand\setkeys{csq}{\CurrentOption}}%
+  \csq@tempa}
+
+\ProcessOptions*
+
+\endinput

From 2dc1c8eccee138dc21a214ac3059505ee11691e4 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Sun, 1 Oct 2017 21:15:38 +1100
Subject: [PATCH 052/132] Added an extra dependency.

---
 etoolbox.sty | 1755 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 1755 insertions(+)
 create mode 100644 etoolbox.sty

diff --git a/etoolbox.sty b/etoolbox.sty
new file mode 100644
index 00000000..0b73840d
--- /dev/null
+++ b/etoolbox.sty
@@ -0,0 +1,1755 @@
+% Copyright (c) 2007-2011 Philipp Lehman.
+%           (c) 2015-2017 Joseph Wright
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3c or any later version.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{etoolbox}
+  [2017/01/02 v2.4 e-TeX tools for LaTeX (JAW)]
+
+\begingroup
+\@ifundefined{eTeXversion}
+  {\PackageError{etoolbox}
+     {Not running under e-TeX}
+     {This package requires e-TeX. Try compiling the document
+      with\MessageBreak 'elatex' instead of 'latex'. When using
+      pdfTeX, try 'pdfelatex'\MessageBreak instead of 'pdflatex'.
+      This is a fatal error. I'm aborting now.}%
+   \aftergroup\endinput}
+  {}
+\endgroup
+
+\ifdefined\extrafloats
+  \expandafter\@gobble
+\else
+  \expandafter\@firstofone
+\fi
+  {\RequirePackage{etex}}
+
+\def\etb@catcodes{\do\&\do\|\do\:\do\-\do\=\do\<\do\>}
+\def\do#1{\catcode\number`#1=\the\catcode`#1\relax}
+\edef\etb@catcodes{\etb@catcodes}
+\let\do\noexpand
+\AtEndOfPackage{\etb@catcodes\undef\etb@catcodes}
+
+\catcode`\&=3
+\catcode`\|=3
+\@makeother\:
+\@makeother\-
+\@makeother\=
+\@makeother\<
+\@makeother\>
+
+\protected\def\etb@error{\PackageError{etoolbox}}
+\protected\def\etb@warning{\PackageWarning{etoolbox}}
+\protected\def\etb@info{\PackageInfo{etoolbox}}
+\newcount\etb@tempcnta
+
+% {}[][]{}
+
+\newcommand*{\newrobustcmd}{}
+\protected\def\newrobustcmd{\@star@or@long\etb@new@command}
+
+\def\etb@new@command#1{\@testopt{\etb@newcommand#1}0}
+
+\def\etb@newcommand#1[#2]{%
+  \@ifnextchar[%]
+    {\etb@xargdef#1[#2]}
+    {\ifx\l@ngrel@x\relax
+       \let\l@ngrel@x\protected
+     \else
+       \protected\def\l@ngrel@x{\protected\long}%
+     \fi
+     \@argdef#1[#2]}}
+
+\long\def\etb@xargdef#1[#2][#3]#4{%
+  \@ifdefinable#1{%
+    \expandafter\protected
+    \expandafter\def
+    \expandafter#1%
+    \expandafter{%
+      \expandafter\@testopt
+      \csname\string#1\endcsname{#3}}%
+    \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}}
+
+% {}[][]{}
+
+\newrobustcmd*{\renewrobustcmd}{\@star@or@long\etb@renew@command}
+
+\def\etb@renew@command#1{%
+  \ifundef{#1}
+     {\etb@error{\string#1 undefined}\@ehc}
+     {}%
+  \let\@ifdefinable\@rc@ifdefinable
+  \etb@new@command#1}
+
+% {}[][]{}
+
+\newrobustcmd*{\providerobustcmd}{\@star@or@long\etb@provide@command}
+
+\def\etb@provide@command#1{%
+  \ifundef{#1}
+    {\def\reserved@a{\etb@new@command#1}}
+    {\def\reserved@a{\etb@renew@command\reserved@a}}%
+  \reserved@a}
+
+% {}
+
+\newrobustcmd*{\csshow}[1]{%
+  \begingroup\expandafter\endgroup
+  \expandafter\show\csname#1\endcsname}
+
+% {}
+
+\newcommand*{\csmeaning}[1]{%
+  \ifcsname #1\endcsname
+    \expandafter\meaning\csname #1\endcsname
+  \else
+    \detokenize{undefined}%
+  \fi}
+
+% {}{}{}
+
+\newcommand{\ifdef}[1]{%
+  \ifdefined#1%
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}
+
+\newcommand{\ifundef}[1]{%
+  \ifdefined#1%
+    \ifx#1\relax
+      \expandafter\expandafter
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\expandafter
+      \expandafter\@secondoftwo
+    \fi
+  \else
+    \expandafter\@firstoftwo
+  \fi}
+
+% {}{}{}
+
+\newcommand*{\ifcsdef}[1]{%
+  \ifcsname#1\endcsname
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}
+
+\newcommand*{\ifcsundef}[1]{%
+  \ifcsname#1\endcsname
+    \expandafter\ifx\csname#1\endcsname\relax
+      \expandafter\expandafter
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\expandafter
+      \expandafter\@secondoftwo
+    \fi
+  \else
+    \expandafter\@firstoftwo
+  \fi}
+
+% {}{}
+
+\newcommand{\ifdefmacro}{}
+\long\edef\ifdefmacro#1{%
+  \noexpand\expandafter\noexpand\etb@ifdefmacro
+  \noexpand\meaning#1\detokenize{macro}:&}
+\edef\etb@ifdefmacro{%
+  \def\noexpand\etb@ifdefmacro##1\detokenize{macro}:##2&}
+\etb@ifdefmacro{\notblank{#2}}
+
+% {}{}{}
+
+\newcommand*{\ifcsmacro}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdefmacro\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefprefix}[1]{%
+  \ifdefmacro{#1}
+    {\etb@ifdefprefix{#1}}
+    {\@secondoftwo}}
+\long\edef\etb@ifdefprefix#1{%
+  \noexpand\expandafter\noexpand\etb@ifdefprefix@i
+  \noexpand\meaning#1\detokenize{macro}:&}
+\edef\etb@ifdefprefix@i{%
+  \def\noexpand\etb@ifdefprefix@i##1\detokenize{macro}:##2&}
+\etb@ifdefprefix@i{\notblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcsprefix}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdefprefix\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefparam}{}
+\long\edef\ifdefparam#1{%
+  \noexpand\expandafter\noexpand\etb@ifdefparam
+  \noexpand\meaning#1\detokenize{macro}:->&}
+\edef\etb@ifdefparam{%
+  \def\noexpand\etb@ifdefparam##1\detokenize{macro}:##2->##3&}
+\etb@ifdefparam{\notblank{#2}}
+
+% {}{}{}
+
+\newcommand*{\ifcsparam}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdefparam\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefprotected}{}
+\long\edef\ifdefprotected#1{%
+  \noexpand\expandafter\noexpand\etb@ifdefprotected
+  \noexpand\meaning#1\string\protected&}
+\edef\etb@ifdefprotected{%
+  \def\noexpand\etb@ifdefprotected##1\string\protected##2&}
+\etb@ifdefprotected{\notblank{#2}}
+
+% {}{}{}
+
+\newcommand*{\ifcsprotected}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdefprotected\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}
+
+\newrobustcmd{\ifdefltxprotect}[1]{%
+  \begingroup
+  \edef\etb@resrvda{\string#1}%
+  \def\etb@resrvdb{#1}%
+  \edef\etb@resrvdb{\expandafter\strip@prefix\meaning\etb@resrvdb}%
+  \edef\etb@resrvda{%
+    \ifx\etb@resrvda\etb@resrvdb
+      \noexpand\x@protect
+      \noexpand#1%
+    \fi
+    \noexpand\protect\expandafter\noexpand
+    \csname\expandafter\@gobble\string#1 \endcsname}%
+  \expandafter\endgroup\ifx#1\etb@resrvda
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}
+
+\newrobustcmd*{\ifcsltxprotect}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdefltxprotect\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}{}
+
+\newcommand{\ifdefempty}[1]{%
+  \ifundef{#1}
+    {\@secondoftwo}
+    {\ifdefmacro{#1}
+       {\ifdefparam{#1}
+	  {\@secondoftwo}
+	  {\etb@ifdefempty{#1}}}
+       {\@secondoftwo}}}
+
+\def\etb@ifdefempty#1{%
+  \expandafter\expandafter
+  \expandafter\ifblank
+  \expandafter\expandafter
+  \expandafter{%
+  \expandafter\strip@prefix\meaning#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcsempty}[1]{%
+  \ifcsundef{#1}
+    {\@secondoftwo}
+    {\expandafter\ifdefparam\csname#1\endcsname
+       {\@secondoftwo}
+       {\expandafter\etb@ifdefempty\csname#1\endcsname}}}
+
+% {}{}{}
+
+\newcommand{\ifdefvoid}[1]{%
+  \ifundef{#1}
+    {\@firstoftwo}
+    {\ifdefmacro{#1}
+       {\ifdefparam{#1}
+	  {\@secondoftwo}
+	  {\etb@ifdefempty{#1}}}
+       {\@secondoftwo}}}
+
+% {}{}{}
+
+\newcommand*{\ifcsvoid}[1]{%
+  \ifcsundef{#1}
+    {\@firstoftwo}
+    {\expandafter\ifdefparam\csname#1\endcsname
+       {\@secondoftwo}
+       {\expandafter\etb@ifdefempty\csname#1\endcsname}}}
+
+% {}{}{}{}
+
+\newcommand{\ifdefequal}[2]{%
+  \ifundef{#1}
+    {\@secondoftwo}
+    {\ifundef{#2}
+       {\@secondoftwo}
+       {\ifx#1#2%
+          \expandafter\@firstoftwo
+        \else
+          \expandafter\@secondoftwo
+        \fi}}}
+
+% {}{}{}{}
+
+\newcommand*{\ifcsequal}[2]{%
+  \ifcsundef{#1}
+    {\@secondoftwo}
+    {\ifcsundef{#2}
+       {\@secondoftwo}
+       {\expandafter\ifx
+        \csname#1\expandafter\endcsname
+        \csname#2\endcsname
+          \expandafter\@firstoftwo
+        \else
+          \expandafter\@secondoftwo
+        \fi}}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifdefstrequal}[2]{%
+  \ifdefmacro{#1}
+    {\ifdefmacro{#2}
+       {\begingroup
+	\edef\etb@tempa{\expandafter\strip@prefix\meaning#1}%
+	\edef\etb@tempb{\expandafter\strip@prefix\meaning#2}%
+	\ifx\etb@tempa\etb@tempb
+	  \aftergroup\@firstoftwo
+	\else
+	  \aftergroup\@secondoftwo
+	\fi
+	\endgroup}
+       {\@secondoftwo}}
+    {\@secondoftwo}}
+
+% {}{}{}{}
+
+\newcommand*{\ifcsstrequal}[2]{%
+  \ifcsundef{#1}
+    {\@secondoftwo}
+    {\ifcsundef{#2}
+       {\@secondoftwo}
+       {\expandafter\ifdefstrequal
+        \csname#1\expandafter\endcsname
+	\csname#2\endcsname}}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifdefstring}[2]{%
+  \ifdefmacro{#1}
+    {\begingroup
+     \edef\etb@tempa{\expandafter\strip@prefix\meaning#1}%
+     \edef\etb@tempb{\detokenize{#2}}%
+     \ifx\etb@tempa\etb@tempb
+       \aftergroup\@firstoftwo
+     \else
+       \aftergroup\@secondoftwo
+     \fi
+     \endgroup}
+    {\@secondoftwo}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifcsstring}[2]{%
+  \ifcsundef{#1}
+    {\@secondoftwo}
+    {\expandafter\ifdefstring\csname#1\endcsname{#2}}}
+
+% {}{}
+
+\newcommand{\ifdefcounter}[1]{\etb@ifcounter#1&}
+\long\def\etb@ifcounter#1#2&{%
+  \ifx\count#1%
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\etb@ifcounter@i\meaning#1:%
+  \fi}
+\edef\etb@ifcounter@i#1:#2\fi{\noexpand\fi
+  \noexpand\etb@ifcounter@ii#1\string\count&}
+\edef\etb@ifcounter@ii{%
+  \def\noexpand\etb@ifcounter@ii##1\string\count##2&}
+\etb@ifcounter@ii{\ifblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcscounter}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdefcounter\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}{}
+
+\newcommand*{\ifltxcounter}[1]{%
+  \ifcsdef{c@#1}
+    {\expandafter\ifdefcounter\csname c@#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdeflength}[1]{\etb@iflength#1&}
+\long\def\etb@iflength#1#2&{%
+  \ifx\skip#1%
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\etb@iflength@i\meaning#1:%
+  \fi}
+\edef\etb@iflength@i#1:#2\fi{\noexpand\fi
+  \noexpand\etb@iflength@ii#1\string\skip&}
+\edef\etb@iflength@ii{%
+  \def\noexpand\etb@iflength@ii##1\string\skip##2&}
+\etb@iflength@ii{\ifblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcslength}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdeflength\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}
+
+\newcommand{\ifdefdimen}[1]{\etb@ifdimen#1&}
+\long\def\etb@ifdimen#1#2&{%
+  \ifx\dimen#1%
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\etb@ifdimen@i\meaning#1:%
+  \fi}
+\edef\etb@ifdimen@i#1:#2\fi{\noexpand\fi
+  \noexpand\etb@ifdimen@ii#1\string\dimen&}
+\edef\etb@ifdimen@ii{%
+  \def\noexpand\etb@ifdimen@ii##1\string\dimen##2&}
+\etb@ifdimen@ii{\ifblank{#1}}
+
+% {}{}{}
+
+\newcommand*{\ifcsdimen}[1]{%
+  \ifcsdef{#1}
+    {\expandafter\ifdefdimen\csname#1\endcsname}
+    {\@secondoftwo}}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifstrequal}[2]{%
+  \begingroup
+  \edef\etb@tempa{\detokenize{#1}}%
+  \edef\etb@tempb{\detokenize{#2}}%
+  \ifx\etb@tempa\etb@tempb
+    \aftergroup\@firstoftwo
+  \else
+    \aftergroup\@secondoftwo
+  \fi
+  \endgroup}
+
+% {}{}{}
+
+\newcommand{\ifstrempty}[1]{%
+  \expandafter\ifx\expandafter&\detokenize{#1}&%
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}
+
+\newcommand{\ifblank}[1]{% from expl3
+  \expandafter\ifx\expandafter\relax\detokenize\expandafter{\@gobble#1?}\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+\newcommand{\notblank}[1]{%
+  \expandafter\ifx\expandafter\relax\detokenize\expandafter{\@gobble#1?}\relax
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi}
+
+% {}{}{}{}{}
+
+\newcommand*{\ifnumcomp}[3]{%
+  \ifnum\numexpr#1\relax#2\numexpr#3\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}{}
+
+\newcommand*{\ifnumequal}[1]{%
+  \ifnumcomp{#1}=}
+
+\newcommand*{\ifnumgreater}[1]{%
+  \ifnumcomp{#1}>}
+
+\newcommand*{\ifnumless}[1]{%
+  \ifnumcomp{#1}<}
+
+% {}{}{}
+
+\newcommand*{\ifnumodd}[1]{%
+  \ifodd\numexpr#1\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}{}{}
+
+\newcommand*{\ifdimcomp}[3]{%
+  \ifdim\dimexpr#1\relax#2\dimexpr#3\relax
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}{}
+
+\newcommand*{\ifdimequal}[1]{%
+  \ifdimcomp{#1}=}
+
+\newcommand*{\ifdimgreater}[1]{%
+  \ifdimcomp{#1}>}
+
+\newcommand*{\ifdimless}[1]{%
+  \ifdimcomp{#1}<}
+
+% {}{}{}
+
+\newcommand{\ifboolexpe}[1]{%
+  \etb@be@beg\etb@be@bgroup#1(&\etb@be@end}
+
+\let\etb@be@true\@empty
+\def\etb@be@false{-\@ne}
+
+\def\etb@be@beg{%
+  \ifnum\numexpr\z@\ifnum\numexpr\z@}
+
+\def\etb@be@end{%
+  <\z@
+    \expandafter\etb@be@false
+  \fi
+  <\z@
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi}
+
+\long\def\etb@be@bgroup#1(#2&{%
+  \etb@be@egroup#1)&%
+  \ifblank{#2}
+    {}
+    {\etb@be@beg
+     \etb@be@bgroup#2&}}
+
+\long\def\etb@be@egroup#1)#2&{%
+  \etb@be@and#1and&%
+  \ifblank{#2}
+    {}
+    {\etb@be@end\etb@be@true\etb@be@false
+     \etb@be@egroup#2&}}
+
+\long\def\etb@be@and#1and#2&{%
+  \etb@be@or#1or&%
+  \ifblank{#2}
+    {}
+    {<\z@
+       \expandafter\@firstofone
+     \else
+       \expandafter\@gobble
+     \fi
+     {=\z@\fi\ifnum\numexpr\m@ne}%
+     \ifnum\numexpr\z@
+     \etb@be@and#2&}}
+
+\long\def\etb@be@or#1or#2&{%
+  \etb@be@not#1not&%
+  \ifblank{#2}
+    {}
+    {<\z@
+       \expandafter\@secondoftwo
+     \else
+       \expandafter\@firstoftwo
+     \fi
+     {=\z@\fi\ifnum\numexpr\z@
+      \ifnum\numexpr\@ne}
+     {=\z@\fi\ifnum\numexpr\z@
+      \ifnum\numexpr\z@}%
+     \etb@be@or#2&}}
+
+\long\def\etb@be@not#1not#2&{%
+  \etb@be@togl#1togl&%
+  \ifblank{#2}
+    {}
+    {>\z@
+       \expandafter\@firstoftwo
+     \else
+       \expandafter\@secondoftwo
+     \fi
+     {\unless\ifnum\numexpr\m@ne}
+     {\unless\ifnum\numexpr\z@}%
+     \etb@be@not#2&}}
+
+\long\def\etb@be@togl#1togl#2&{%
+  \etb@be@bool#1bool&%
+  \ifblank{#2}
+    {}
+    {\etb@be@togl@i#2&}}
+
+\long\def\etb@be@togl@i#1#2&{%
+  \ifcsdef{etb@tgl@#1}
+    {\csname etb@tgl@#1\endcsname\etb@be@true\etb@be@false}
+    {\etb@be@err{Toggle '#1' undefined}{}}%
+  \etb@be@togl#2&}
+
+\long\def\etb@be@bool#1bool#2&{%
+  \etb@be@test#1test&%
+  \ifblank{#2}
+    {}
+    {\etb@be@bool@i#2&}}
+
+\long\def\etb@be@bool@i#1#2&{%
+  \ifcsundef{if#1}
+    {\etb@be@err{Boolean '#1' undefined}{}}
+    {\csname if#1\endcsname
+     \else
+       \etb@be@false
+     \fi}%
+  \etb@be@bool#2&}
+
+\long\def\etb@be@test#1test#2&{%
+  \ifblank{#1}
+    {}
+    {\etb@be@err{The invalid part is: '\detokenize{#1}'}{}}%
+  \ifblank{#2}
+    {}
+    {\etb@be@test@i#2&}}
+
+\long\def\etb@be@test@i#1#2&{%
+  #1\etb@be@true\etb@be@false
+  \etb@be@test#2&}
+
+\long\def\etb@be@err#1#2{%
+  \expandafter\ifnum\the\numexpr
+    \expandafter\ifnum\the\currentiftype=-3
+      \expandafter\thr@@
+    \else
+      \expandafter\currentiftype
+    \fi
+  =\thr@@
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {=\z@\fi
+   \etb@be@err{#1}{#2\ifnum\numexpr\m@ne}}
+  {\etb@err@expr{#1}#2}}
+
+% {}{}{}
+
+\newrobustcmd{\ifboolexpr}[1]{\etb@boolexpr{#1}}
+
+\long\def\etb@boolexpr#1{%
+  \begingroup
+  \let\etb@br@neg\@firstoftwo
+  \etb@tempcnta\z@
+  \etb@br@beg
+  \etb@br@bgroup#1(&%
+  \etb@br@end
+  \etb@br@eval}
+
+\def\etb@br@beg{%
+  \begingroup
+  \let\etb@br@neg\@firstoftwo
+  \etb@tempcnta\z@}
+
+\def\etb@br@end{%
+  \etb@br@eval\etb@br@true\etb@br@false}
+
+\def\etb@br@eval{%
+  \ifnum\etb@tempcnta<\z@
+    \aftergroup\@secondoftwo
+  \else
+    \aftergroup\@firstoftwo
+  \fi
+  \endgroup}
+
+\def\etb@br@true{%
+  \advance\etb@tempcnta\etb@br@neg\z@\m@ne
+  \let\etb@br@neg\@firstoftwo}
+
+\def\etb@br@false{%
+  \advance\etb@tempcnta\etb@br@neg\m@ne\z@
+  \let\etb@br@neg\@firstoftwo}
+
+\long\def\etb@br@bgroup#1(#2&{%
+  \etb@br@egroup#1)&%
+  \ifblank{#2}
+    {}
+    {\etb@br@beg
+     \etb@br@bgroup#2&}}
+
+\long\def\etb@br@egroup#1)#2&{%
+  \etb@br@and#1and&%
+  \ifblank{#2}
+    {}
+    {\etb@br@end
+     \etb@br@egroup#2&}}
+
+\long\def\etb@br@and#1and#2&{%
+  \etb@br@or#1or&%
+  \ifblank{#2}
+    {}
+    {\ifnum\etb@tempcnta<\z@
+       \etb@tempcnta\m@ne
+     \else
+       \etb@tempcnta\z@
+     \fi
+     \etb@br@and#2&}}
+
+\long\def\etb@br@or#1or#2&{%
+  \etb@br@not#1not&%
+  \ifblank{#2}
+    {}
+    {\ifnum\etb@tempcnta<\z@
+       \etb@tempcnta\z@
+     \else
+       \etb@tempcnta\@ne
+     \fi
+     \etb@br@or#2&}}
+
+\long\def\etb@br@not#1not#2&{%
+  \etb@br@togl#1togl&%
+  \ifblank{#2}
+    {}
+    {\let\etb@br@neg\@secondoftwo
+     \etb@br@not#2&}}
+
+\long\def\etb@br@togl#1togl#2&{%
+  \etb@br@bool#1bool&%
+  \ifblank{#2}
+    {}
+    {\etb@br@togl@i#2&}}
+
+\long\def\etb@br@togl@i#1#2&{%
+  \ifcsdef{etb@tgl@#1}
+    {\csname etb@tgl@#1\endcsname\etb@br@true\etb@br@false}
+    {\etb@err@expr{Toggle '#1' undefined}\etb@br@false}%
+  \etb@br@togl#2&}
+
+\long\def\etb@br@bool#1bool#2&{%
+  \etb@br@test#1test&%
+  \ifblank{#2}
+    {}
+    {\etb@br@bool@i#2&}}
+
+\long\def\etb@br@bool@i#1#2&{%
+  \ifcsundef{if#1}
+    {\etb@err@expr{Boolean '#1' undefined}\etb@br@false}
+    {\csname if#1\endcsname
+       \etb@br@true
+     \else
+       \etb@br@false
+     \fi}%
+  \etb@br@bool#2&}
+
+\long\def\etb@br@test#1test#2&{%
+  \ifblank{#1}
+    {}
+    {\etb@err@expr{The invalid part is: '\detokenize{#1}'}}%
+  \ifblank{#2}
+    {}
+    {\etb@br@test@i#2&}}
+
+\long\def\etb@br@test@i#1#2&{%
+  \ignorespaces#1\etb@br@true\etb@br@false
+  \etb@br@test#2&}
+
+\long\def\etb@err@expr#1{%
+  \etb@error
+    {Invalid boolean expression}
+    {#1.}}
+
+% {}{}
+
+\newrobustcmd{\whileboolexpr}[2]{%
+  \etb@boolexpr{#1}{#2\whileboolexpr{#1}{#2}}{}}
+
+% {}{}
+
+\newrobustcmd{\unlessboolexpr}[2]{%
+  \etb@boolexpr{#1}{}{#2\unlessboolexpr{#1}{#2}}}
+
+% {}
+
+\newcommand{\expandonce}[1]{%
+  \unexpanded\expandafter{#1}}
+
+% {}
+
+\newcommand*{\csexpandonce}[1]{%
+  \expandafter\expandonce\csname#1\endcsname}
+
+% {}
+
+\newcommand*{\protecting}{}
+\def\protecting#{%
+  \ifx\protect\@typeset@protect
+    \etb@protecting\@firstofone
+  \fi
+  \ifx\protect\@unexpandable@protect
+    \etb@protecting\etb@unexpandable
+  \fi
+  \ifx\protect\noexpand
+    \etb@protecting\unexpanded
+  \fi
+  \ifx\protect\string
+    \etb@protecting\detokenize
+  \fi
+  \relax\@firstofone}
+
+\def\etb@protecting#1#2\relax\@firstofone{\fi#1}
+\long\def\etb@unexpandable#1{\unexpanded{\protecting{#1}}}
+
+% {}
+
+\newrobustcmd*{\csdef}[1]{\expandafter\def\csname#1\endcsname}
+\newrobustcmd*{\csedef}[1]{\expandafter\edef\csname#1\endcsname}
+\newrobustcmd*{\csgdef}[1]{\expandafter\gdef\csname#1\endcsname}
+\newrobustcmd*{\csxdef}[1]{\expandafter\xdef\csname#1\endcsname}
+\newrobustcmd*{\protected@csedef}{\etb@protected\csedef}
+\newrobustcmd*{\protected@csxdef}{\etb@protected\csxdef}
+
+\def\etb@protected{%
+  \let\@@protect\protect
+  \let\protect\@unexpandable@protect
+  \afterassignment\restore@protect}
+
+% {}{}
+
+\newrobustcmd{\cslet}[2]{%
+  \expandafter\let\csname#1\endcsname#2}
+
+% {}{}
+
+\newrobustcmd{\letcs}[2]{%
+  \ifcsdef{#2}
+    {\expandafter\let\expandafter#1\csname#2\endcsname}
+    {\undef#1}}
+
+% {}{}
+
+\newrobustcmd*{\csletcs}[2]{%
+  \ifcsdef{#2}
+    {\expandafter\let
+     \csname#1\expandafter\endcsname
+     \csname#2\endcsname}
+    {\csundef{#1}}}
+
+% {}
+
+\newcommand*{\csuse}[1]{%
+  \ifcsname#1\endcsname
+    \csname#1\expandafter\endcsname
+  \fi}
+
+% {}
+
+\newrobustcmd{\undef}[1]{\let#1\etb@undefined}
+
+% {}
+
+\newrobustcmd*{\csundef}[1]{\cslet{#1}\etb@undefined}
+
+% {}{}
+
+\newrobustcmd{\appto}[2]{%
+  \ifundef{#1}
+    {\edef#1{\unexpanded{#2}}}
+    {\edef#1{\expandonce#1\unexpanded{#2}}}}
+\newrobustcmd{\eappto}[2]{%
+  \ifundef{#1}
+    {\edef#1{#2}}
+    {\edef#1{\expandonce#1#2}}}
+\newrobustcmd{\gappto}[2]{%
+  \ifundef{#1}
+    {\xdef#1{\unexpanded{#2}}}
+    {\xdef#1{\expandonce#1\unexpanded{#2}}}}
+\newrobustcmd{\xappto}[2]{%
+  \ifundef{#1}
+    {\xdef#1{#2}}
+    {\xdef#1{\expandonce#1#2}}}
+
+\newrobustcmd*{\protected@eappto}{\etb@protected\eappto}
+\newrobustcmd*{\protected@xappto}{\etb@protected\xappto}
+
+% {}{}
+
+\newrobustcmd{\preto}[2]{%
+  \ifundef{#1}
+    {\edef#1{\unexpanded{#2}}}
+    {\edef#1{\unexpanded{#2}\expandonce#1}}}
+\newrobustcmd{\epreto}[2]{%
+  \ifundef{#1}
+    {\edef#1{#2}}
+    {\edef#1{#2\expandonce#1}}}
+\newrobustcmd{\gpreto}[2]{%
+  \ifundef{#1}
+    {\xdef#1{\unexpanded{#2}}}
+    {\xdef#1{\unexpanded{#2}\expandonce#1}}}
+\newrobustcmd{\xpreto}[2]{%
+  \ifundef{#1}
+    {\xdef#1{#2}}
+    {\xdef#1{#2\expandonce#1}}}
+
+\newrobustcmd*{\protected@epreto}{\etb@protected\epreto}
+\newrobustcmd*{\protected@xpreto}{\etb@protected\xpreto}
+
+% {}{}
+
+\newrobustcmd*{\csappto}[1]{\expandafter\appto\csname#1\endcsname}
+\newrobustcmd*{\cseappto}[1]{\expandafter\eappto\csname#1\endcsname}
+\newrobustcmd*{\csgappto}[1]{\expandafter\gappto\csname#1\endcsname}
+\newrobustcmd*{\csxappto}[1]{\expandafter\xappto\csname#1\endcsname}
+\newrobustcmd*{\protected@cseappto}{\etb@protected\cseappto}
+\newrobustcmd*{\protected@csxappto}{\etb@protected\csxappto}
+
+% {}{}
+
+\newrobustcmd*{\cspreto}[1]{\expandafter\preto\csname#1\endcsname}
+\newrobustcmd*{\csepreto}[1]{\expandafter\epreto\csname#1\endcsname}
+\newrobustcmd*{\csgpreto}[1]{\expandafter\gpreto\csname#1\endcsname}
+\newrobustcmd*{\csxpreto}[1]{\expandafter\xpreto\csname#1\endcsname}
+\newrobustcmd*{\protected@csepreto}{\etb@protected\csepreto}
+\newrobustcmd*{\protected@csxpreto}{\etb@protected\csxpreto}
+
+% {}{}
+
+\newrobustcmd*{\numdef}[2]{%
+  \ifundef#1{\let#1\z@}{}%
+  \edef#1{\the\numexpr#2}}
+\newrobustcmd*{\numgdef}[2]{%
+  \ifundef#1{\let#1\z@}{}%
+  \xdef#1{\the\numexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csnumdef}[1]{%
+  \expandafter\numdef\csname#1\endcsname}
+\newrobustcmd*{\csnumgdef}[1]{%
+  \expandafter\numgdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\dimdef}[2]{%
+  \ifundef#1{\let#1\z@}{}%
+  \edef#1{\the\dimexpr#2}}
+\newrobustcmd*{\dimgdef}[2]{%
+  \ifundef#1{\let#1\z@}{}%
+  \xdef#1{\the\dimexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csdimdef}[1]{%
+  \expandafter\dimdef\csname#1\endcsname}
+\newrobustcmd*{\csdimgdef}[1]{%
+  \expandafter\dimgdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\gluedef}[2]{%
+  \ifundef#1{\let#1\z@skip}{}%
+  \edef#1{\the\glueexpr#2}}
+\newrobustcmd*{\gluegdef}[2]{%
+  \ifundef#1{\let#1\z@skip}{}%
+  \xdef#1{\the\glueexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csgluedef}[1]{%
+  \expandafter\gluedef\csname#1\endcsname}
+\newrobustcmd*{\csgluegdef}[1]{%
+  \expandafter\gluegdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\mudef}[2]{%
+  \ifundef#1{\def#1{0mu}}{}%
+  \edef#1{\the\muexpr#2}}
+\newrobustcmd*{\mugdef}[2]{%
+  \ifundef#1{\let#1\z@}{}%
+  \xdef#1{\the\muexpr#2}}
+
+% {}{}
+
+\newrobustcmd*{\csmudef}[1]{%
+  \expandafter\mudef\csname#1\endcsname}
+\newrobustcmd*{\csmugdef}[1]{%
+  \expandafter\mugdef\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd*{\defcounter}[2]{%
+  \ifcsundef{c@#1}
+    {\etb@noglobal\@nocounterr{#1}}%
+    {\csname c@#1\endcsname\numexpr#2\relax}}
+
+% {}{}
+
+\newrobustcmd*{\deflength}[2]{%
+  \ifundef{#1}
+    {\etb@noglobal\etb@err@nolen{#1}}%
+    {#1\glueexpr#2\relax}}
+
+\protected\def\etb@err@nolen#1{%
+  \etb@error{Length '\string#1' undefined}\@eha}
+
+% {}
+
+\newrobustcmd*{\newbool}[1]{%
+  \expandafter\@ifdefinable\csname if#1\endcsname{%
+    \expandafter\newif\csname if#1\endcsname}}
+
+% {}
+
+\newrobustcmd*{\providebool}[1]{%
+  \ifcsundef{if#1}
+    {\expandafter\newif\csname if#1\endcsname}
+    {\begingroup
+     \edef\@tempa{\expandafter\meaning\csname if#1\endcsname}%
+     \ifx\@tempa\etb@isfalse
+     \else
+       \ifx\@tempa\etb@istrue
+       \else
+         \etb@error{\@backslashchar if#1 not a boolean}\@eha
+       \fi
+     \fi
+     \endgroup}}
+
+% {}{|}
+
+\newrobustcmd*{\setbool}[2]{%
+  \ifcsundef{if#1}
+    {\etb@noglobal\etb@err@nobool{#1}}
+    {\ifcsundef{#1#2}
+       {\etb@noglobal\etb@err@boolval{#2}}
+       {\csname#1#2\endcsname}}}
+
+% {}
+
+\newrobustcmd*{\booltrue}[1]{%
+  \ifcsundef{if#1}
+    {\etb@noglobal\etb@err@nobool{#1}}
+    {\csname#1true\endcsname}}
+
+% {}
+
+\newrobustcmd*{\boolfalse}[1]{%
+  \ifcsundef{if#1}
+    {\etb@noglobal\etb@err@nobool{#1}}
+    {\csname#1false\endcsname}}
+
+\edef\etb@istrue{\meaning\iftrue}
+\edef\etb@isfalse{\meaning\iffalse}
+\protected\def\etb@noglobal{\let\relax\relax}
+
+% {}{}
+
+\newcommand*{\ifbool}[1]{%
+  \ifcsundef{if#1}
+    {\etb@err@nobool{#1}\@gobbletwo}
+    {\csname if#1\endcsname
+       \expandafter\@firstoftwo
+     \else
+       \expandafter\@secondoftwo
+     \fi}}
+
+% {}{}
+
+\newcommand*{\notbool}[1]{%
+  \ifcsundef{if#1}
+    {\etb@err@nobool{#1}\@gobbletwo}
+    {\csname if#1\endcsname
+       \expandafter\@secondoftwo
+     \else
+       \expandafter\@firstoftwo
+     \fi}}
+
+\protected\def\etb@err@nobool#1{%
+  \etb@error{Boolean '\@backslashchar if#1' undefined}\@eha}
+
+\def\etb@err@boolval#1{%
+  \etb@error
+    {Invalid boolean value '#1'}
+    {Valid boolean values are 'true' and 'false'.}}
+
+% {}
+
+\newrobustcmd*{\newtoggle}[1]{%
+  \ifcsdef{etb@tgl@#1}
+    {\etb@error{Toggle '#1' already defined}\@eha}
+    {\cslet{etb@tgl@#1}\@secondoftwo}}
+
+% {}
+
+\newrobustcmd*{\providetoggle}[1]{%
+  \ifcsdef{etb@tgl@#1}
+    {}
+    {\cslet{etb@tgl@#1}\@secondoftwo}}
+
+% {}{|}
+
+\newrobustcmd*{\settoggle}[2]{%
+  \ifcsdef{etb@tgl@#1}
+    {\ifcsdef{etb@toggle#2}
+       {\csletcs{etb@tgl@#1}{etb@toggle#2}}
+       {\etb@noglobal\etb@err@boolval{#2}}}
+    {\etb@noglobal\etb@err@notoggle{#1}}}
+
+% {}
+
+\newrobustcmd*{\toggletrue}[1]{%
+  \ifcsdef{etb@tgl@#1}
+    {\cslet{etb@tgl@#1}\etb@toggletrue}
+    {\etb@noglobal\etb@err@notoggle{#1}}}
+
+% {}
+
+\newrobustcmd*{\togglefalse}[1]{%
+  \ifcsdef{etb@tgl@#1}
+    {\cslet{etb@tgl@#1}\etb@togglefalse}
+    {\etb@noglobal\etb@err@notoggle{#1}}}
+
+\let\etb@toggletrue\@firstoftwo
+\let\etb@togglefalse\@secondoftwo
+
+% {}{}
+
+\newcommand*{\iftoggle}[1]{%
+  \ifcsdef{etb@tgl@#1}
+    {\csname etb@tgl@#1\endcsname}
+    {\etb@err@notoggle{#1}\@gobbletwo}}
+
+% {}{}
+
+\newcommand*{\nottoggle}[1]{%
+  \ifcsdef{etb@tgl@#1}
+    {\csname etb@tgl@#1\endcsname\@secondoftwo\@firstoftwo}
+    {\etb@err@notoggle{#1}\@gobbletwo}}
+
+\protected\def\etb@err@notoggle#1{%
+  \etb@error{Toggle '#1' undefined}\@eha}
+
+% {}{}
+
+\protected\def\etb@ifscanable#1{%
+  \begingroup
+  \edef\etb@resrvda{%
+    \def\noexpand\etb@resrvda####1\detokenize{macro}:####2->####3&{%
+      ####1\def\string\etb@resrvda####2{####3}}%
+    \edef\noexpand\etb@resrvda{\noexpand\etb@resrvda\meaning#1&}}%
+  \etb@resrvda
+  \makeatletter
+  \endlinechar\m@ne
+  \scantokens\expandafter{\etb@resrvda}%
+  \expandafter\endgroup\ifx#1\etb@resrvda
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+
+% {}{}{}
+
+\protected\long\def\etb@ifpattern#1#2{%
+  \begingroup
+  \edef\etb@resrvda{%
+    \def\noexpand\etb@resrvda####1\detokenize{#2}####2&{%
+      \endgroup\noexpand\noexpand\noexpand\ifblank{####2}}%
+    \edef\noexpand\etb@resrvda{\noexpand\etb@resrvda
+      \expandafter\strip@prefix\meaning#1\detokenize{#2}&}%
+    \noexpand\etb@resrvda}%
+  \etb@resrvda\@secondoftwo\@firstoftwo}
+
+% {}{}
+
+\protected\long\def\etb@ifhashcheck#1{%
+  \begingroup
+  \edef\etb@resrvda{\detokenize{#1}}%
+  \expandafter\endgroup
+  \expandafter\etb@ifhashcheck@i\meaning\etb@resrvda&}
+
+\edef\etb@ifhashcheck@i#1&{%
+  \noexpand\expandafter
+  \noexpand\etb@ifhashcheck@ii
+  \noexpand\strip@prefix#1\string#\string#&}
+
+\edef\etb@ifhashcheck@ii{%
+  \def\noexpand\etb@ifhashcheck@ii##1\string#\string###2&}
+\etb@ifhashcheck@ii{\ifblank{#2}}
+
+% {}
+
+\newrobustcmd*{\robustify}[1]{%
+  \ifundef{#1}
+    {\etb@error{\string#1 undefined}\@eha}
+    {\ifdefmacro{#1}
+       {\ifdefltxprotect{#1}
+          {\letcs\etb@resrvda{\expandafter\@gobble\string#1 }%
+           \@tempswatrue}
+          {\let\etb@resrvda#1%
+           \@tempswafalse}%
+        \ifdefparam\etb@resrvda
+          {\etb@ifscanable\etb@resrvda
+             {\etb@robustify\etb@resrvda
+              \let#1\etb@resrvda}
+             {\etb@error{Failed to robustify \string#1}
+                {The command is special and cannot be
+                 handled by \string\robustify.}%
+              \@tempswafalse}}
+          {\protected\edef#1{\expandonce\etb@resrvda}}%
+        \if@tempswa
+          \csundef{\expandafter\@gobble\string#1 }%
+        \fi
+        \undef\etb@resrvda}
+       {\etb@error{\string#1 not a macro}\@eha}}}
+
+\def\etb@robustify#1{%
+  \begingroup
+  \edef\etb@resrvdb{%
+    \def\noexpand\etb@resrvdb####1\detokenize{macro}:####2->####3&{%
+      \protected####1\def\string#1\space####2{####3}}%
+    \edef\noexpand\etb@resrvdb{%
+      \noexpand\etb@resrvdb\meaning#1&}}%
+  \etb@resrvdb
+  \etb@patchcmd@scantoks\etb@resrvdb}
+
+%  {}{}{}
+% *{}{}
+
+\newrobustcmd{\ifpatchable}{%
+  \etb@dbg@trce\ifpatchable
+  \begingroup
+  \@makeother\#%
+  \@ifstar\etb@ifpatchable@i\etb@ifpatchable}
+
+\long\def\etb@ifpatchable#1#2{%
+  \endgroup
+  \etb@dbg@init#1%
+  \ifundef{#1}
+    {\etb@dbg@fail{def}\@secondoftwo}
+    {\etb@dbg@info{def}%
+     \ifdefmacro{#1}
+       {\etb@dbg@info{mac}%
+        \etb@ifscanable{#1}
+          {\etb@ifhashcheck{#2}
+             {\etb@dbg@info{tok}%
+              \etb@ifpattern#1{#2}
+                 {\etb@dbg@info{pat}%
+                  \etb@dbg@info{pos}\@firstoftwo}
+                 {\etb@dbg@fail{pat}\@secondoftwo}}
+             {\etb@dbg@fail{hsh}\@secondoftwo}}
+          {\etb@dbg@fail{tok}\@secondoftwo}}
+       {\etb@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\etb@ifpatchable@i#1{%
+  \endgroup
+  \etb@dbg@init#1%
+  \ifundef{#1}
+    {\etb@dbg@fail{def}\@secondoftwo}
+    {\etb@dbg@info{def}%
+     \ifdefmacro{#1}
+       {\etb@dbg@info{mac}%
+        \ifdefparam{#1}
+          {\etb@dbg@info{prm}%
+           \etb@ifscanable{#1}
+             {\etb@dbg@info{tok}%
+              \etb@dbg@info{pos}\@firstoftwo}
+             {\etb@dbg@fail{tok}\@secondoftwo}}
+          {\etb@dbg@info{prl}%
+           \ifdefprotected{#1}
+             {\etb@dbg@info{pro}}
+             {}%
+           \etb@dbg@info{pos}\@firstoftwo}}
+       {\etb@dbg@fail{mac}\@secondoftwo}}}
+
+% []{}{}{}{}{}
+
+\newrobustcmd*{\patchcmd}{%
+  \etb@dbg@trce\patchcmd
+  \begingroup
+  \@makeother\#%
+  \etb@patchcmd}
+
+\newcommand{\etb@patchcmd}[4][########1]{%
+  \etb@ifpatchable#2{#3}
+    {\etb@dbg@succ{ret}%
+     \begingroup
+     \edef\etb@resrvda{%
+       \def\noexpand\etb@resrvda####1\detokenize{macro:}####2->####3&{%
+         #1\def\string\etb@resrvda\space####2{\noexpand\etb@resrvdb####3&}}%
+       \def\noexpand\etb@resrvdb####1\detokenize{#3}####2&{%
+         ####1\detokenize{#4}####2}%
+       \edef\noexpand\etb@resrvda{%
+         \noexpand\etb@resrvda\meaning#2&}}%
+     \etb@resrvda
+     \etb@patchcmd@scantoks\etb@resrvda
+     \let#2\etb@resrvda
+     \undef\etb@resrvda
+     \@firstoftwo}%
+    {\@secondoftwo}}
+
+\def\etb@patchcmd@scantoks#1{%
+  \edef\etb@resrvda{\endgroup
+    \endlinechar\m@ne
+    \unexpanded{\makeatletter\scantokens}{#1}%
+    \endlinechar\the\endlinechar\relax
+    \catcode\number`\@=\the\catcode`\@\relax}%
+  \etb@resrvda}
+
+% {}{}{}{}
+
+\newrobustcmd*{\apptocmd}{%
+  \etb@dbg@trce\apptocmd
+  \begingroup
+  \@makeother\#%
+  \etb@hooktocmd\etb@append}
+
+\newrobustcmd*{\pretocmd}{%
+  \etb@dbg@trce\pretocmd
+  \begingroup
+  \@makeother\#%
+  \etb@hooktocmd\etb@prepend}
+
+\long\def\etb@hooktocmd#1#2#3{%
+  \endgroup
+  \etb@dbg@init#2%
+  \ifundef{#2}
+    {\etb@dbg@fail{def}\@secondoftwo}
+    {\etb@dbg@info{def}%
+     \ifdefmacro{#2}
+       {\etb@dbg@info{mac}%
+        \ifdefparam{#2}
+          {\etb@dbg@info{prm}%
+           \etb@ifscanable{#2}
+             {\etb@ifhashcheck{#3}
+                {\etb@dbg@info{tok}%
+                 \etb@dbg@succ{ret}%
+                 \etb@hooktocmd@i#1#2{#3}%
+                 \@firstoftwo}
+                {\etb@dbg@fail{hsh}\@secondoftwo}}
+             {\etb@dbg@fail{tok}\@secondoftwo}}
+          {\etb@dbg@info{prl}%
+           \ifdefprotected{#2}
+             {\etb@dbg@info{pro}%
+              \etb@dbg@succ{red}%
+              \protected}
+             {\etb@dbg@succ{red}}%
+           \edef#2{#1{\expandonce#2}{\unexpanded{#3}}}%
+           \@firstoftwo}}
+       {\etb@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\etb@hooktocmd@i#1#2#3{%
+  \begingroup
+  \edef\etb@resrvda{%
+    \def\noexpand\etb@resrvda####1\detokenize{macro}:####2->####3&{%
+      ####1\def\string\etb@resrvda\space####2{#1{####3}{\detokenize{#3}}}}%
+    \edef\noexpand\etb@resrvda{%
+      \noexpand\etb@resrvda\meaning#2&}}%
+  \etb@resrvda
+  \etb@patchcmd@scantoks\etb@resrvda
+  \let#2\etb@resrvda
+  \undef\etb@resrvda}
+
+\long\def\etb@append#1#2{#1#2}
+\long\def\etb@prepend#1#2{#2#1}
+
+\newrobustcmd*{\tracingpatches}{%
+  \etb@info{Enabling tracing}%
+  \input{etoolbox.def}%
+  \global\let\tracingpatches\relax}
+\@onlypreamble\tracingpatches
+
+\let\etb@dbg@trce\@gobble
+\let\etb@dbg@init\@gobble
+\let\etb@dbg@info\@gobble
+\let\etb@dbg@succ\@gobble
+\let\etb@dbg@fail\@gobble
+
+% {}
+
+\newcommand{\rmntonum}[1]{%
+  \ifblank{#1}
+    {}
+    {\expandafter\etb@rti@end\number\numexpr
+     \expandafter\etb@rti@prs\detokenize{#1}&\relax}}
+
+\def\etb@rti@prs#1#2{%
+  \ifx%
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {#1#2}
+  {\ifx%
+     \expandafter\@firstoftwo
+   \else
+     \expandafter\@secondoftwo
+   \fi
+   {\etb@rti@chk#1+\etb@rti@num#1#2}
+   {\etb@rti@chk#1\etb@rti@chk#2%
+    \ifnum\etb@rti@num#1<\etb@rti@num#2 %
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\@secondoftwo
+    \fi
+    {+\etb@rti@num#2-\etb@rti@num#1\etb@rti@prs}
+    {+\etb@rti@num#1\etb@rti@prs#2}}}}
+
+\def\etb@rti@chk#1{%
+  \ifcsname etb@rmn@#1\endcsname
+  \else
+    \expandafter\etb@rti@brk
+  \fi}
+
+\def\etb@rti@brk#1&{+\z@&-1}
+\def\etb@rti@end#1\relax{\ifblank{#2}{#1}{#2}}
+\def\etb@rti@num#1{\csname etb@rmn@#1\endcsname}
+
+\chardef\etb@rmn@i=1
+\chardef\etb@rmn@I=1
+\chardef\etb@rmn@v=5
+\chardef\etb@rmn@V=5
+\chardef\etb@rmn@x=10
+\chardef\etb@rmn@X=10
+\chardef\etb@rmn@l=50
+\chardef\etb@rmn@L=50
+\chardef\etb@rmn@c=100
+\chardef\etb@rmn@C=100
+\mathchardef\etb@rmn@d=500
+\mathchardef\etb@rmn@D=500
+\mathchardef\etb@rmn@m=1000
+\mathchardef\etb@rmn@M=1000
+
+% {}{}{}
+
+\newcommand{\ifrmnum}[1]{%
+  \ifblank{#1}
+    {\@secondoftwo}
+    {\expandafter\etb@ifr@prs\detokenize{#1}\relax}}
+
+\def\etb@ifr@prs#1{%
+  \ifx\relax#1%
+    \expandafter\@firstoftwo
+  \else
+    \ifcsname etb@rmn@#1\endcsname
+      \expandafter\expandafter
+      \expandafter\etb@ifr@prs
+    \else
+      \expandafter\expandafter
+      \expandafter\etb@ifr@brk
+    \fi
+  \fi}
+
+\def\etb@ifr@brk#1\relax{\@secondoftwo}
+
+% <*>{}{}
+
+\newrobustcmd*{\DeclareListParser}{%
+  \@ifstar
+    {\etb@defparser\etb@defparser@arg}
+    {\etb@defparser\etb@defparser@do}}
+
+\def\etb@defparser#1#2#3{%
+  \@ifdefinable#2{#1{#2}{#3}}}
+
+\def\etb@defparser@do#1#2{%
+  \begingroup
+  \edef\@tempa{\endgroup
+    \long\def\noexpand#1####1{%
+      \expandafter\noexpand
+      \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+      \space####1\noexpand#2&}%
+    \long\csdef{etb@lst@\expandafter\@gobble\string#1}####1\noexpand#2####2&{%
+      \noexpand\etb@listitem\noexpand\do{####1}%
+      \noexpand\ifblank{####2}
+        {\noexpand\listbreak}
+        {\expandafter\noexpand
+         \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+	 \space####2}&}}%
+  \@tempa}
+
+\def\etb@defparser@arg#1#2{%
+  \begingroup
+  \edef\@tempa{\endgroup
+    \long\def\noexpand#1####1####2{%
+      \expandafter\noexpand
+      \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+      {####1}\space####2\noexpand#2&}%
+    \long\csdef{etb@lst@\expandafter\@gobble\string#1}####1####2\noexpand#2####3&{%
+      \noexpand\etb@listitem{####1}{####2}%
+      \noexpand\ifblank{####3}
+        {\noexpand\listbreak}
+        {\expandafter\noexpand
+         \csname etb@lst@\expandafter\@gobble\string#1\endcsname
+	 {####1}\space####3}&}}%
+  \@tempa}
+
+\long\def\etb@listitem#1#2{%
+  \ifblank{#2}
+    {}
+    {\expandafter\etb@listitem@i
+     \expandafter{\@firstofone#2}{#1}}}
+\long\def\etb@listitem@i#1#2{#2{#1}}
+
+\newcommand*{\listbreak}{}
+\long\def\listbreak#1&{}
+
+% {,,...} => \do{}\do{}...
+
+\DeclareListParser{\docsvlist}{,}
+
+% {}{,,...} => {}{}...
+
+\DeclareListParser*{\forcsvlist}{,}
+
+% {}{}
+
+\newrobustcmd{\listadd}[2]{%
+  \ifblank{#2}{}{\appto#1{#2|}}}
+\newrobustcmd{\listeadd}[2]{%
+  \begingroup
+  \edef\etb@tempa{\endgroup\noexpand\ifblank{#2}}%
+  \etb@tempa{}{\eappto#1{#2|}}}
+\newrobustcmd{\listgadd}[2]{%
+  \ifblank{#2}{}{\gappto#1{#2|}}}
+\newrobustcmd{\listxadd}[2]{%
+  \begingroup
+  \edef\etb@tempa{\endgroup\noexpand\ifblank{#2}}%
+  \etb@tempa{}{\xappto#1{#2|}}}
+
+% {}{}
+
+\newrobustcmd{\listcsadd}[1]{%
+  \expandafter\listadd\csname#1\endcsname}
+\newrobustcmd{\listcseadd}[1]{%
+  \expandafter\listeadd\csname#1\endcsname}
+\newrobustcmd{\listcsgadd}[1]{%
+  \expandafter\listgadd\csname#1\endcsname}
+\newrobustcmd{\listcsxadd}[1]{%
+  \expandafter\listxadd\csname#1\endcsname}
+
+% {}{}
+
+\newrobustcmd{\listremove}[2]{%
+  \etb@listremove{#1}{#2}\def}
+\newrobustcmd{\listgremove}[2]{%
+  \etb@listremove{#1}{#2}\gdef}
+
+\protected\long\def\etb@listremove#1#2#3{%
+  \ifblank{#2}
+    {}
+    {\ifinlist{#2}{#1}{%
+     \begingroup
+     \def\etb@tempa##1|#2|##2&{\endgroup
+       \expandafter#3\expandafter#1\expandafter{\@gobble##1|##2}}%
+    \expandafter\etb@tempa\expandafter|#1&}{}}%
+}
+
+% {}{}
+
+\newrobustcmd{\listcsremove}[1]{%
+  \expandafter\listremove\csname#1\endcsname}
+\newrobustcmd{\listcsgremove}[1]{%
+  \expandafter\listgremove\csname#1\endcsname}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifinlist}[2]{%
+  \begingroup
+  \def\etb@tempa##1|#1|##2&{\endgroup
+    \ifblank{##2}\@secondoftwo\@firstoftwo}%
+  \expandafter\etb@tempa\expandafter|#2|#1|&}
+
+\newrobustcmd{\xifinlist}[1]{%
+  \begingroup
+  \edef\etb@tempa{\endgroup\ifinlist{#1}}%
+  \etb@tempa}
+
+% {}{}{}{}
+
+\newrobustcmd{\ifinlistcs}[2]{%
+  \expandafter\etb@ifinlistcs@i\csname #2\endcsname{#1}}
+\long\def\etb@ifinlistcs@i#1#2{\ifinlist{#2}{#1}}
+
+\newrobustcmd{\xifinlistcs}[1]{%
+  \begingroup
+  \edef\etb@tempa{\endgroup\ifinlistcs{#1}}%
+  \etb@tempa}
+
+% {}{} => {}{}...
+
+\newcommand*{\forlistloop}[2]{%
+  \expandafter\etb@forlistloop\expandafter{#2}{#1}}
+
+\long\def\etb@forlistloop#1#2{\etb@forlistloop@i{#2}#1|&}
+
+\long\def\etb@forlistloop@i#1#2|#3&{%
+  \ifblank{#2}
+    {}
+    {#1{#2}}%
+  \ifblank{#3}
+    {\listbreak}
+    {\etb@forlistloop@i{#1}#3}%
+  &}
+
+% {}{} => {}{}...
+
+\newcommand*{\forlistcsloop}[2]{%
+  \expandafter\expandafter\expandafter\etb@forlistloop
+  \expandafter\expandafter\expandafter{\csname#2\endcsname}{#1}}
+
+% {} => \do{}\do{}...
+
+\newcommand*{\dolistloop}{\forlistloop\do}
+
+% {} => \do{}\do{}...
+
+\newcommand*{\dolistcsloop}{\forlistcsloop\do}
+
+% {}
+
+\newrobustcmd*{\AtEndPreamble}{\gappto\@endpreamblehook}
+\newcommand*{\@endpreamblehook}{}
+
+\preto\document{%
+  \endgroup
+  \let\AtEndPreamble\@firstofone
+  \@endpreamblehook
+  \protected\def\AtEndPreamble{\@notprerr\@gobble}%
+  \undef\@endpreamblehook
+  \begingroup}
+
+% {}
+
+\newrobustcmd*{\AfterPreamble}{\AtBeginDocument}
+\AtEndPreamble{\let\AfterPreamble\@firstofone}
+
+% {}
+
+\newrobustcmd*{\AfterEndPreamble}{\gappto\@afterendpreamblehook}
+\newcommand*{\@afterendpreamblehook}{}
+
+\appto\document{%
+  \let\AfterEndPreamble\@firstofone
+  \@afterendpreamblehook
+  \protected\def\AfterEndPreamble{\@notprerr\@gobble}%
+  \undef\@afterendpreamblehook
+  \ignorespaces}
+
+\AtEndDocument{\let\AfterEndPreamble\@gobble}
+
+% {}
+
+\newrobustcmd*{\AfterEndDocument}{\gappto\@afterenddocumenthook}
+\newcommand*{\@afterenddocumenthook}{}
+
+\patchcmd\enddocument
+  {\deadcycles}
+  {\let\AfterEndDocument\@firstofone
+   \@afterenddocumenthook
+   \deadcycles}
+  {}
+  {\AtEndDocument{%
+     \let\etb@@end\@@end
+     \def\@@end{%
+       \let\AfterEndDocument\@firstofone
+       \@afterenddocumenthook
+       \etb@@end}}}
+
+% {}{}
+
+\newrobustcmd{\AtBeginEnvironment}[1]{%
+  \csgappto{@begin@#1@hook}}
+
+\patchcmd\begin
+  {\csname #1\endcsname}
+  {\csuse{@begin@#1@hook}%
+   \csname #1\endcsname}
+  {}
+  {\etb@warning{%
+     Patching '\string\begin' failed!\MessageBreak
+     '\string\AtBeginEnvironment' will not work\@gobble}}
+
+% {}{}
+
+\newrobustcmd{\AtEndEnvironment}[1]{%
+  \csgappto{@end@#1@hook}}
+
+\patchcmd\end
+  {\csname end#1\endcsname}
+  {\csuse{@end@#1@hook}%
+   \csname end#1\endcsname}
+  {}
+  {\etb@warning{%
+     Patching '\string\end' failed!\MessageBreak
+     '\string\AtEndEnvironment' will not work\@gobble}}
+
+% {}{}
+
+\newrobustcmd{\BeforeBeginEnvironment}[1]{%
+  \csgappto{@beforebegin@#1@hook}}
+
+\pretocmd\begin
+  {\csuse{@beforebegin@#1@hook}}
+  {}
+  {\etb@warning{%
+     Patching '\string\begin' failed!\MessageBreak
+     '\string\BeforeBeginEnvironment' will not work\@gobble}}
+
+% {}{}
+
+\newrobustcmd{\AfterEndEnvironment}[1]{%
+  \csgappto{@afterend@#1@hook}}
+
+\patchcmd\end
+  {\if@ignore}
+  {\csuse{@afterend@#1@hook}%
+   \if@ignore}
+  {}
+  {\etb@warning{%
+     Patching '\string\end' failed!\MessageBreak
+     '\string\AfterEndEnvironment' will not work\@gobble}}
+
+\endinput

From ea030f9e27b630c499b7efcf3c964296b1faa9d7 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Sun, 1 Oct 2017 21:32:17 +1100
Subject: [PATCH 053/132] Added extra files for csquotes.

---
 csq-compat.def | 103 ++++++++++
 csquotes.cfg   | 247 ++++++++++++++++++++++++
 csquotes.def   | 512 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 862 insertions(+)
 create mode 100644 csq-compat.def
 create mode 100644 csquotes.cfg
 create mode 100644 csquotes.def

diff --git a/csq-compat.def b/csq-compat.def
new file mode 100644
index 00000000..2b253ddc
--- /dev/null
+++ b/csq-compat.def
@@ -0,0 +1,103 @@
+\ProvidesFile{csq-compat.def}
+  [2017/03/11 v5.2b csquotes backwards compatibility (JAW)]
+
+\def\csq@getversion#1{%
+  \expandafter\csq@getversion@i
+  \expandafter{\csq@vertonum#1\relax}}
+
+\def\csq@getversion@i#1{%
+  \ifcsdef{csq@version@#1}
+    {\csq@info{Enabling v\csq@numtover#1\relax\space mode}%
+     \csuse{csq@version@#1}}
+    {\ifnumless{#1+1}\csq@version
+       {\expandafter\csq@getversion@i
+        \expandafter{\the\numexpr#1+1}}
+       {\expandafter\csq@getversion@i
+        \expandafter{\csq@version}}}}
+
+\def\csq@vertonum#1.#2\relax{#1#2}
+\def\csq@numtover#1#2\relax{#1.#2}
+
+\csdef{csq@version@\csq@version}{%
+  \DeclareAutoPunct{.,;:!?}%
+  \renewcommand{\mktextquote}[6]{##1##2##4##3##6##5}%
+  \renewcommand{\mkblockquote}[4]{##1##2##4##3}%
+  \renewcommand{\mkbegdispquote}[2]{}%
+  \renewcommand{\mkenddispquote}[2]{##2##1}%
+  \renewcommand{\mkcitation}[1]{\space(##1)}%
+  \ifdef\csq@leg@DeclarePlainStyle
+    {\let\DeclarePlainStyle\csq@leg@DeclarePlainStyle
+     \undef\csq@leg@DeclarePlainStyle}
+    {}}
+
+\csdef{csq@version@44}{%
+  \DeclareAutoPunct{}%
+  \providecommand*{\ifstringblank}{\ifblank}%
+  \providecommand*{\ifquotepunct}{\ifpunct}%
+  \providecommand*{\ifquoteterm}{\ifterm}%
+  \providecommand*{\ifquotecomma}{\ifpunctmark{,}}%
+  \providecommand*{\ifquotesemicolon}{\ifpunctmark{;}}%
+  \providecommand*{\ifquotecolon}{\ifpunctmark{:}}%
+  \providecommand*{\ifquoteperiod}{\ifpunctmark{.}}%
+  \providecommand*{\ifquoteexclam}{\ifpunctmark{!}}%
+  \providecommand*{\ifquotequestion}{\ifpunctmark{?}}%
+  \providecommand*{\setblockthreshold}{\SetBlockThreshold}%
+  \providecommand*{\setblockenvironment}{\SetBlockEnvironment}%
+  \providecommand*{\RestoreQuotes}{\EnableQuotes}%
+  \providecommand*{\@restorequotes}{\@enablequotes}%
+  \providecommand*{\cquote}{\textcquote}%
+  \providecommand*{\foreigncquote}{\foreigntextcquote}%
+  \providecommand*{\hyphencquote}{\hyphentextcquote}%
+  \providecommand*{\mkpretextpunct}[1]{}%
+  \providecommand*{\mkmidtextpunct}[1]{}%
+  \providecommand*{\mkfintextpunct}[1]{##1}%
+  \providecommand*{\mkpreblockpunct}[1]{}%
+  \providecommand*{\mkmidblockpunct}[1]{}%
+  \providecommand*{\mkfinblockpunct}[1]{##1}%
+  \providecommand*{\mkpredisppunct}[1]{}%
+  \providecommand*{\mkmiddisppunct}[1]{}%
+  \providecommand*{\mkfindisppunct}[1]{##1}%
+  \providecommand*{\quotetext}{}%
+  \let\endquotetext\@empty
+  \providecommand*{\quoteblock}{}%
+  \let\endquoteblock\@empty
+  \renewcommand{\mktextquote}[6]{%
+    ##1\quotetext##2\endquotetext\mkpretextpunct{##4}%
+    ##3\mkmidtextpunct{##4}##6\mkfintextpunct{##4}##5}
+  \renewcommand{\mkblockquote}[4]{%
+    \quoteblock##1\endquoteblock\mkpreblockpunct{##2}%
+    \mkmidblockpunct{##2}##4\mkfinblockpunct{##2}##3}
+  \renewcommand{\mkbegdispquote}[2]{\quoteblock}
+  \renewcommand{\mkenddispquote}[2]{%
+    \endquoteblock\mkpredisppunct{##1}%
+    \mkmiddisppunct{##1}##2\mkfindisppunct{##1}}%
+  \renewcommand{\mkcitation}[1]{\space(##1)}%
+  \ifdef\csq@leg@DeclarePlainStyle
+    {\let\DeclarePlainStyle\csq@leg@DeclarePlainStyle
+     \undef\csq@leg@DeclarePlainStyle}
+    {}}
+
+\csdef{csq@version@36}{%
+  \csuse{csq@version@44}%
+  \providecommand{\blockcite}[1]{\space(##1)}%
+  \renewcommand*{\mkcitation}{\blockcite}%
+  \ifdef\csq@leg@DeclarePlainStyle
+    {\let\DeclarePlainStyle\csq@leg@DeclarePlainStyle
+     \undef\csq@leg@DeclarePlainStyle}
+    {}}
+
+\csdef{csq@version@30}{%
+  \csuse{csq@version@36}%
+  \ifdef\csq@leg@DeclarePlainStyle
+    {}
+    {\let\csq@leg@DeclarePlainStyle\DeclarePlainStyle
+     \renewrobustcmd*{\DeclarePlainStyle}[2]{%
+       \csq@leg@DeclarePlainStyle{##1}{##1}{##2}{##2}}}}
+
+\csdef{csq@version@29}{%
+  \csq@error
+    {Incompatible version}
+    {Backwards compatibility with versions
+     prior to 3.0 not supported}}
+
+\endinput
diff --git a/csquotes.cfg b/csquotes.cfg
new file mode 100644
index 00000000..321b8a0d
--- /dev/null
+++ b/csquotes.cfg
@@ -0,0 +1,247 @@
+\ProvidesFile{csquotes.cfg}
+
+% Put your definitions here.
+
+\endinput
+
+% What follows are examples of what you will typically do in this
+% file. Note that you need to move the examples above \endinput if
+% you want to try them out.
+
+% PRESETTING PACKAGE OPTIONS
+
+% Use \ExecuteQuoteOptions to preset package options if you are not
+% satisfied with the built-in defaults. Options given here will be
+% processed before any options specified in the document preamble,
+% so you can still override them in the preamble.
+
+\ExecuteQuoteOptions{strict=true,autostyle=try}
+
+% CHANGING THE DEFAULT PARAMETERS
+
+% Even if you modify the package defaults here, all preset values
+% may still be changed in the document preamble as usual. The
+% following values are the built-in package defaults:
+
+\SetBlockEnvironment{quote}
+\SetBlockThreshold{3}
+\SetCiteCommand{\cite}
+
+% SETTING UP A NEW QUOTE STYLE
+
+% Here's an example of a new quote style with several variants (look
+% up \DeclareQuoteStyle in the manual for all the details):
+
+\DeclareQuoteStyle[quotes]{example}%     [variant]{style}
+  {\textquotedblleft}%                   opening outer mark
+  {\textquotedblright}%                  closing outer mark
+  {\textquoteleft}%                      opening inner mark
+  {\textquoteright}%                     closing inner mark
+\DeclareQuoteStyle[quotes*]{example}
+  {\quotedblbase}
+  {\textquotedblright}
+  [0.1em]%                               kern adjoining marks
+  {\quotesinglbase}
+  {\textquoteright}
+\DeclareQuoteStyle[everypar]{example}
+  {\guillemotleft}
+  [\guilsinglleft]%                      middle outer mark
+  {\guillemotright}
+  {\textquotedblleft}
+  [\textquoteleft]%                      middle inner mark
+  {\textquotedblright}
+
+% Defining the default variant of the style:
+
+\DeclareQuoteAlias[quotes]{example}{example}
+
+% Defining a second-level alias:
+
+\DeclareQuoteAlias{example}{demo}
+
+% Adding a package option for the style:
+
+\DeclareQuoteOption{example}
+
+% DEFINING SHORT COMMAND NAMES
+
+% The names of all macros which csquotes provides by default are
+% rather verbose. They are meant to be self-explanatory. You may
+% find names like \hyphentextquote a bit too verbose, however,
+% especially if you use them frequently. It is very easy to define
+% shorter command names on top of the verbose ones. The trick is to
+% exclude the arguments such that the short definition is a simple
+% pointer to the full name:
+%
+%    \newcommand*{\htquote}{\hyphentextquote}
+%
+% Here are a few useful shorthands:
+
+\newcommand*{\tquote}{\textquote}
+\newcommand*{\tcquote}{\textcquote}
+
+\newcommand*{\bquote}{\blockquote}
+\newcommand*{\bcquote}{\blockcquote}
+
+% You can even include language switches in the definition of the
+% short command form:
+%
+%    \newcommand*{\usquote}{\hyphentextquote{american}}
+%
+% That, however, will not work as expected if you try to use the
+% starred version because
+%
+%    \usquote*{quotation}
+%
+% will not yield
+%
+%    \hyphentextquote*{american}{quotation}
+%
+% but rather
+%
+%    \hyphentextquote{american}*{quotation}
+%
+% which is invalid syntax. The following little macro takes care of
+% that. If you prefix a definition which consists of a macro name
+% and one argument with \@checkstar, it will check if the starred
+% version of the command was requested and rearrange the syntax
+% accordingly:
+
+\newrobustcmd*{\@checkstar}[2]{%
+  \@ifstar{#1*{#2}}{#1{#2}}}
+
+% If we define our \usquote shorthand like that:
+%
+%    \newcommand*{\usquote}{\@checkstar\hyphentextquote{american}}
+%
+% then
+%
+%    \usquote*{quotation}
+%
+% will correctly yield
+%
+%    \hyphentextquote*{american}{quotation}
+%
+% Here are a few useful shorthands:
+
+\newrobustcmd*{\dequote}{%
+  \@checkstar\hyphenquote{german}}
+\newrobustcmd*{\frquote}{%
+  \@checkstar\hyphenquote{french}}
+\newrobustcmd*{\ukquote}{%
+  \@checkstar\hyphenquote{british}}
+\newrobustcmd*{\usquote}{%
+  \@checkstar\hyphenquote{american}}
+
+\newrobustcmd*{\detquote}{%
+  \@checkstar\hyphentextquote{german}}
+\newrobustcmd*{\frtquote}{%
+  \@checkstar\hyphentextquote{french}}
+\newrobustcmd*{\uktquote}{%
+  \@checkstar\hyphentextquote{british}}
+\newrobustcmd*{\ustquote}{%
+  \@checkstar\hyphentextquote{american}}
+
+\newrobustcmd*{\debquote}{%
+  \@checkstar\hyphenblockquote{german}}
+\newrobustcmd*{\frbquote}{%
+  \@checkstar\hyphenblockquote{french}}
+\newrobustcmd*{\ukbquote}{%
+  \@checkstar\hyphenblockquote{british}}
+\newrobustcmd*{\usbquote}{%
+  \@checkstar\hyphenblockquote{american}}
+
+\newrobustcmd*{\detcquote}{%
+  \@checkstar\hyphentextcquote{german}}
+\newrobustcmd*{\frtcquote}{%
+  \@checkstar\hyphentextcquote{french}}
+\newrobustcmd*{\uktcquote}{%
+  \@checkstar\hyphentextcquote{british}}
+\newrobustcmd*{\ustcquote}{%
+  \@checkstar\hyphentextcquote{american}}
+
+\newrobustcmd*{\debcquote}{%
+  \@checkstar\hyphenblockcquote{german}}
+\newrobustcmd*{\frbcquote}{%
+  \@checkstar\hyphenblockcquote{french}}
+\newrobustcmd*{\ukbcquote}{%
+  \@checkstar\hyphenblockcquote{british}}
+\newrobustcmd*{\usbcquote}{%
+  \@checkstar\hyphenblockcquote{american}}
+
+% It is also possible to define shorter environment names. In this
+% case, the opening part of the environment definition should be the
+% verbose environment name with a backslash; the closing definition
+% should be the verbose name preceded by 'end' plus a backslash:
+
+\newenvironment*{dquote}
+  {\displayquote}
+  {\enddisplayquote}
+
+\newenvironment*{dcquote}
+  {\displaycquote}
+  {\enddisplaycquote}
+
+% Short environment definitions may also include language switches.
+% In this case, the language name is included in the opening part of
+% the environment definition. Here are a few useful examples:
+
+\newenvironment*{dedquote}
+  {\hyphendisplayquote{german}}
+  {\endhyphendisplayquote}
+\newenvironment*{frdquote}
+  {\hyphendisplayquote{french}}
+  {\endhyphendisplayquote}
+\newenvironment*{ukdquote}
+  {\hyphendisplayquote{british}}
+  {\endhyphendisplayquote}
+\newenvironment*{usdquote}
+  {\hyphendisplayquote{american}}
+  {\endhyphendisplayquote}
+
+\newenvironment*{dedcquote}
+  {\hyphendisplaycquote{german}}
+  {\endhyphendisplaycquote}
+\newenvironment*{frdcquote}
+  {\hyphendisplaycquote{french}}
+  {\endhyphendisplaycquote}
+\newenvironment*{ukdcquote}
+  {\hyphendisplaycquote{british}}
+  {\endhyphendisplaycquote}
+\newenvironment*{usdcquote}
+  {\hyphendisplaycquote{american}}
+  {\endhyphendisplaycquote}
+
+% DEFINING ENVIRONMENTS FOR PARAGRAPH QUOTATIONS
+
+% Here are some alternative environments for paragraph quotations
+% (block and display). The first one decreases the font size of
+% the 'quote' environment by one step:
+
+\RequirePackage{relsize}
+
+\newenvironment*{smallquote}
+  {\quote\smaller}
+  {\endquote}
+
+\SetBlockEnvironment{smallquote}
+
+% This environment forces indentation after all paragraph quotations:
+
+\newenvironment*{paraquote}
+  {\begingroup\quote}
+  {\endquote\endgroup}
+
+\SetBlockEnvironment{paraquote}
+
+% The last environment combines the previous ones:
+
+\RequirePackage{relsize}
+
+\newenvironment*{smallparaquote}
+  {\begingroup\quote\smaller}
+  {\endquote\endgroup}
+
+\SetBlockEnvironment{smallparaquote}
+
+\endinput
diff --git a/csquotes.def b/csquotes.def
new file mode 100644
index 00000000..c7f8530b
--- /dev/null
+++ b/csquotes.def
@@ -0,0 +1,512 @@
+\ProvidesFile{csquotes.def}
+  [2017/03/11 v5.2b csquotes generic definitions (JAW)]
+
+% Set defaults
+
+\ExecuteQuoteOptions{autostyle=tryonce,autopunct,maxlevel=2,threshold=3,thresholdtype=lines}
+\SetBlockEnvironment{quote}
+\SetCiteCommand{\cite}
+
+% Predefined backend styles
+
+\DeclareQuoteStyle[quotes]{austrian}% verified
+  {\quotedblbase}
+  {\textquotedblleft}
+  [0.05em]
+  {\quotesinglbase}
+  {\fixligatures\textquoteleft}
+\DeclareQuoteStyle[guillemets]{austrian}% verified
+  {\guillemotright}
+  {\guillemotleft}
+  [0.025em]
+  {\guilsinglright}
+  {\guilsinglleft}
+\DeclareQuoteStyle[quotes]{croatian}% verified
+  {\quotedblbase}
+  {\textquotedblright}
+  [0.05em]% unsure
+  {\quotesinglbase}
+  {\textquoteright}
+\DeclareQuoteStyle[guillemets]{croatian}% verified
+  {\guillemotright}
+  {\guillemotleft}
+  [0.025em]
+  {\quotesinglbase}
+  {\textquoteright}
+\DeclareQuoteStyle[guillemets*]{croatian}% verified
+  {\guillemotleft}
+  {\guillemotright}
+  [0.025em]
+  {\quotesinglbase}
+  {\textquoteright}
+\DeclareQuoteStyle{czech} 
+  {\quotedblbase}
+  {\textquotedblleft}
+  [0.025em]
+  {\quotesinglbase}
+  {\fixligatures\textquoteleft}
+\DeclareQuoteStyle[quotes]{danish}
+  {\quotedblbase}
+  {\textquotedblleft}
+  [0.05em]
+  {\textquoteright}
+  {\textquoteright}
+\DeclareQuoteStyle[guillemets]{danish}
+  {\guillemotright}
+  {\guillemotleft}
+  {\textquoteleft}
+  {\textquoteright}
+\DeclareQuoteStyle[topquotes]{danish}
+  {\textquotedblleft}
+  {\textquotedblright}
+  [0.05em]
+  {\textquoteleft}
+  {\textquoteright}
+\DeclareQuoteStyle{dutch}
+  {\quotedblbase}
+  {\textquotedblright}
+  [0.05em]
+  {\quotesinglbase}% unsure
+  {\textquoteright}% unsure
+\DeclareQuoteStyle[american]{english}% verified
+  {\textquotedblleft}
+  {\textquotedblright}
+  [0.05em]
+  {\textquoteleft}
+  {\textquoteright}
+\DeclareQuoteStyle[british]{english}% verified
+  {\textquoteleft}
+  {\textquoteright}
+  [0.05em]
+  {\textquotedblleft}
+  {\textquotedblright}
+\DeclareQuoteStyle{finnish}% verified
+  {\textquotedblright}
+  {\textquotedblright}
+  [0.05em]
+  {\textquoteright}
+  {\textquoteright}
+\DeclareQuoteStyle[quotes]{french}
+  {\mkfrenchopenquote{\guillemotleft}}
+  {\mkfrenchclosequote{\guillemotright}}
+  {\textquotedblleft}
+  {\textquotedblright}
+\DeclareQuoteStyle[quotes*]{french}
+  {\mkfrenchopenquote{\guillemotleft}}
+  {\mkfrenchclosequote{\guillemotright}}
+  {\mkfrenchopenquote{\textquotedblleft}}
+  {\mkfrenchclosequote{\textquotedblright}}
+\DeclareQuoteStyle[guillemets]{french}
+  [\initfrenchquotes]
+  {\mkfrenchopenquote{\guillemotleft}}
+  [\mkfrenchopenquote{\guillemotleft}]
+  {\mkfrenchclosequote{\guillemotright}}
+  {\mkfrenchopenquote{\guillemotleft}}
+  [\mkfrenchopenquote{\guillemotleft}]
+  {\mkfrenchclosequote{\guillemotright}}
+\DeclareQuoteStyle[guillemets*]{french}
+  [\initfrenchquotes]
+  {\mkfrenchopenquote{\guillemotleft}}
+  [\mkfrenchopenquote{\guillemotright}]
+  {\mkfrenchclosequote{\guillemotright}}
+  {\mkfrenchopenquote{\guillemotleft}}
+  [\mkfrenchopenquote{\guillemotright}]
+  {\mkfrenchclosequote{\guillemotright}}
+\DeclareQuoteStyle[quotes]{german}% verified
+  {\quotedblbase}
+  {\textquotedblleft}
+  [0.05em]
+  {\quotesinglbase}
+  {\fixligatures\textquoteleft}
+\DeclareQuoteStyle[guillemets]{german}% verified
+  {\guillemotright}
+  {\guillemotleft}
+  [0.025em]
+  {\guilsinglright}
+  {\guilsinglleft}
+\DeclareQuoteStyle[swiss]{german}% verified
+  {\guillemotleft}
+  {\guillemotright}
+  [0.025em]
+  {\guilsinglleft}
+  {\guilsinglright}
+\DeclareQuoteStyle{greek}% verified
+  {\guillemotleft}
+  {\guillemotright}
+  {\textquotedblleft} 
+  {\textquotedblright}
+\DeclareQuoteStyle{icelandic}
+  {\quotedblbase}
+  {\textquotedblleft}
+  [0.05em]
+  {\quotesinglbase}
+  {\fixligatures\textquoteleft}
+\DeclareQuoteStyle[quotes]{italian}
+  {\textquotedblleft}
+  {\textquotedblright}
+  [0.05em]
+  {\textquoteleft}
+  {\textquoteright}
+\DeclareQuoteStyle[guillemets]{italian}
+  {\guillemotleft}
+  {\guillemotright}
+  [0.025em]
+  {\textquotedblleft}
+  {\textquotedblright}
+\DeclareQuoteStyle[guillemets]{norwegian}
+  {\guillemotleft}
+  {\guillemotright}
+  [0.025em]
+  {\guilsinglleft}
+  {\guilsinglright}
+\DeclareQuoteStyle[quotes]{norwegian}
+  {\quotedblbase}
+  {\textquotedblright}
+  [0.05em]
+  {\quotesinglbase}
+  {\textquoteright}
+\DeclareQuoteStyle[brazilian]{portuguese}% verified
+  {\textquotedblleft}
+  {\textquotedblright}
+  [0.05em]
+  {\textquoteleft}
+  {\textquoteright}
+\DeclareQuoteStyle[portuguese]{portuguese}% unsure
+  {\guillemotleft}
+  {\guillemotright}
+  [0.05em]
+  {\textquotedblleft}
+  {\textquotedblright}
+\DeclareQuoteStyle{russian}% verified
+  {\guillemotleft}
+  {\guillemotright}
+  {\quotedblbase}
+  {\textquotedblleft}
+\DeclareQuoteStyle[mexican]{spanish}
+  {\textquotedblleft}
+  {\textquotedblright}
+  [0.05em]
+  {\textquoteleft}
+  {\textquoteright}
+\DeclareQuoteStyle{slovak} 
+  {\quotedblbase}
+  {\textquotedblleft}
+  [0.025em]
+  {\quotesinglbase}
+  {\fixligatures\textquoteleft}
+\DeclareQuoteStyle[spanish]{spanish}% verified
+  {\guillemotleft}
+  [\guillemotright]
+  {\guillemotright}
+  [0.025em]
+  {\textquotedblleft}
+  [\textquotedblright]
+  {\textquotedblright}
+\DeclareQuoteStyle[quotes]{swedish}% verified
+  {\textquotedblright}
+  {\textquotedblright}
+  [0.05em]
+  {\textquoteright}
+  {\textquoteright}
+\DeclareQuoteStyle[guillemets]{swedish}% verified
+  {\guillemotright}
+  {\guillemotright}
+  [0.025em]
+  {\guilsinglright}
+  {\guilsinglright}
+\DeclareQuoteStyle[guillemets*]{swedish}% verified
+  {\guillemotright}
+  {\guillemotleft}
+  [0.025em]
+  {\guilsinglright}
+  {\guilsinglleft}
+
+% Plain style for PDF strings
+
+\DeclarePlainStyle{"}{"}{'}{'}
+
+% Default style
+
+\DeclareQuoteAlias[american]{english}{default}
+
+% Predefined aliases
+
+\DeclareQuoteAlias[quotes]{austrian}{austrian}
+\DeclareQuoteAlias[quotes]{croatian}{croatian}
+\DeclareQuoteAlias[quotes]{danish}{danish}
+\DeclareQuoteAlias[american]{english}{american}
+\DeclareQuoteAlias[american]{english}{canadian}
+\DeclareQuoteAlias[american]{english}{english}
+\DeclareQuoteAlias[british]{english}{british}
+\DeclareQuoteAlias[british]{english}{australian}% unsure
+\DeclareQuoteAlias[british]{english}{newzealand}% unsure
+\DeclareQuoteAlias[quotes]{french}{french}
+\DeclareQuoteAlias[quotes]{german}{german}
+\DeclareQuoteAlias[swiss]{german}{swiss}
+\DeclareQuoteAlias[swiss]{german}{swissgerman}
+\DeclareQuoteAlias[guillemets]{italian}{italian}
+\DeclareQuoteAlias[guillemets]{norwegian}{norwegian}
+\DeclareQuoteAlias[brazilian]{portuguese}{brazilian}
+\DeclareQuoteAlias[portuguese]{portuguese}{portuguese}
+\DeclareQuoteAlias[mexican]{spanish}{mexican}
+\DeclareQuoteAlias[spanish]{spanish}{spanish}
+\DeclareQuoteAlias[quotes]{swedish}{swedish}
+
+% Babel aliases
+
+\DeclareQuoteAlias{american}{USenglish}
+\DeclareQuoteAlias{american}{usenglish}
+\DeclareQuoteAlias{brazilian}{brazil}
+\DeclareQuoteAlias{british}{UKenglish}
+\DeclareQuoteAlias{british}{ukenglish}
+\DeclareQuoteAlias{german}{ngerman}
+\DeclareQuoteAlias{austrian}{naustrian}
+\DeclareQuoteAlias{swissgerman}{nswissgerman}
+\DeclareQuoteAlias{norwegian}{norsk}
+\DeclareQuoteAlias{norwegian}{nynorsk}
+\DeclareQuoteAlias{portuguese}{portuges}
+
+% Language options
+
+\DeclareQuoteOption{austrian}
+\DeclareQuoteOption{danish}
+\DeclareQuoteOption{english}
+\DeclareQuoteOption{french}
+\DeclareQuoteOption{german}
+\DeclareQuoteOption{icelandic}
+\DeclareQuoteOption{italian}
+\DeclareQuoteOption{norwegian}
+\DeclareQuoteOption{portuguese}
+\DeclareQuoteOption{spanish}
+\DeclareQuoteOption{swedish}
+
+% Register quotation marks (per output encoding)
+
+\DeclareQuoteGlyph{OT1}{34}%  = \textquotedblright
+\DeclareQuoteGlyph{OT1}{39}%  = \textquoteright
+\DeclareQuoteGlyph{OT1}{92}%  = \textquotedblleft
+\DeclareQuoteGlyph{OT1}{96}%  = \textquoteleft
+
+\DeclareQuoteGlyph{OT2}{34}%  = \textquotedbl
+\DeclareQuoteGlyph{OT2}{39}%  = \textquoteright
+\DeclareQuoteGlyph{OT2}{60}%  = \guillemotleft
+\DeclareQuoteGlyph{OT2}{62}%  = \guillemotright
+\DeclareQuoteGlyph{OT2}{96}%  = \textquoteleft
+%\DeclareQuoteGlyph{OT2}{91}% = [[ ligature = \guillemotleft
+%\DeclareQuoteGlyph{OT2}{93}% = ]] ligature = \guillemotright
+
+\DeclareQuoteGlyph{OT4}{34}%  = \textquotedblright
+\DeclareQuoteGlyph{OT4}{39}%  = \textquoteright
+\DeclareQuoteGlyph{OT4}{92}%  = \textquotedblleft
+\DeclareQuoteGlyph{OT4}{96}%  = \textquoteleft
+\DeclareQuoteGlyph{OT4}{174}% = \guillemotleft
+\DeclareQuoteGlyph{OT4}{175}% = \guillemotright
+\DeclareQuoteGlyph{OT4}{255}% = \quotedblbase
+
+\DeclareQuoteGlyph{T1}{13}%   = \quotesinglbase
+\DeclareQuoteGlyph{T1}{14}%   = \guilsinglleft
+\DeclareQuoteGlyph{T1}{15}%   = \guilsinglright
+\DeclareQuoteGlyph{T1}{16}%   = \textquotedblleft
+\DeclareQuoteGlyph{T1}{17}%   = \textquotedblright
+\DeclareQuoteGlyph{T1}{18}%   = \quotedblbase
+\DeclareQuoteGlyph{T1}{19}%   = \guillemotleft
+\DeclareQuoteGlyph{T1}{20}%   = \guillemotright
+\DeclareQuoteGlyph{T1}{34}%   = \textquotedbl
+\DeclareQuoteGlyph{T1}{39}%   = \textquoteright
+\DeclareQuoteGlyph{T1}{96}%   = \textquoteleft
+%\DeclareQuoteGlyph{T1}{60}%  = << ligature = \guillemotleft
+%\DeclareQuoteGlyph{T1}{62}%  = >> ligature = \guillemotright
+
+\DeclareQuoteGlyph{LY1}{34}%  = \textquotedbl
+\DeclareQuoteGlyph{LY1}{39}%  = \textquoteright
+\DeclareQuoteGlyph{LY1}{96}%  = \textquoteleft
+\DeclareQuoteGlyph{LY1}{129}% = \textquotesingle
+\DeclareQuoteGlyph{LY1}{130}% = \quotesinglbase
+\DeclareQuoteGlyph{LY1}{132}% = \quotedblbase
+\DeclareQuoteGlyph{LY1}{139}% = \guilsinglleft
+\DeclareQuoteGlyph{LY1}{147}% = \textquotedblleft
+\DeclareQuoteGlyph{LY1}{148}% = \textquotedblright
+\DeclareQuoteGlyph{LY1}{155}% = \guilsinglright
+\DeclareQuoteGlyph{LY1}{171}% = \guillemotleft
+\DeclareQuoteGlyph{LY1}{187}% = \guillemotright
+
+\DeclareQuoteGlyph{LGR}{28}%  = \textquoteleft
+\DeclareQuoteGlyph{LGR}{29}%  = \textquoteright
+\DeclareQuoteGlyph{LGR}{123}% = \guillemotleft
+\DeclareQuoteGlyph{LGR}{125}% = \guillemotright
+
+\DeclareQuoteGlyph{T2A}{16}%  = \textquotedblleft
+\DeclareQuoteGlyph{T2A}{17}%  = \textquotedblright
+\DeclareQuoteGlyph{T2A}{34}%  = \textquotedbl
+\DeclareQuoteGlyph{T2A}{39}%  = \textquoteright
+\DeclareQuoteGlyph{T2A}{96}%  = \textquoteleft
+\DeclareQuoteGlyph{T2A}{189}% = \quotedblbase
+\DeclareQuoteGlyph{T2A}{190}% = \guillemotleft
+\DeclareQuoteGlyph{T2A}{191}% = \guillemotright
+%\DeclareQuoteGlyph{T2A}{60}% = << ligature = \guillemotleft
+%\DeclareQuoteGlyph{T2A}{62}% = >> ligature = \guillemotright
+
+\DeclareQuoteGlyph{T2B}{16}%  = \textquotedblleft
+\DeclareQuoteGlyph{T2B}{17}%  = \textquotedblright
+\DeclareQuoteGlyph{T2B}{34}%  = \textquotedbl
+\DeclareQuoteGlyph{T2B}{39}%  = \textquoteright
+\DeclareQuoteGlyph{T2B}{96}%  = \textquoteleft
+\DeclareQuoteGlyph{T2B}{189}% = \quotedblbase
+\DeclareQuoteGlyph{T2B}{190}% = \guillemotleft
+\DeclareQuoteGlyph{T2B}{191}% = \guillemotright
+%\DeclareQuoteGlyph{T2B}{60}% = << ligature = \guillemotleft
+%\DeclareQuoteGlyph{T2B}{62}% = >> ligature = \guillemotright
+
+\DeclareQuoteGlyph{T2C}{16}%  = \textquotedblleft
+\DeclareQuoteGlyph{T2C}{17}%  = \textquotedblright
+\DeclareQuoteGlyph{T2C}{34}%  = \textquotedbl
+\DeclareQuoteGlyph{T2C}{39}%  = \textquoteright
+\DeclareQuoteGlyph{T2C}{96}%  = \textquoteleft
+\DeclareQuoteGlyph{T2C}{189}% = \quotedblbase
+\DeclareQuoteGlyph{T2C}{190}% = \guillemotleft
+\DeclareQuoteGlyph{T2C}{191}% = \guillemotright
+%\DeclareQuoteGlyph{T2C}{60}% = << ligature = \guillemotleft
+%\DeclareQuoteGlyph{T2C}{62}% = >> ligature = \guillemotright
+
+\DeclareQuoteGlyph{X2}{16}%   = \textquotedblleft
+\DeclareQuoteGlyph{X2}{17}%   = \textquotedblright
+\DeclareQuoteGlyph{X2}{34}%   = \textquotedbl
+\DeclareQuoteGlyph{X2}{39}%   = \textquoteright
+\DeclareQuoteGlyph{X2}{96}%   = \textquoteleft
+\DeclareQuoteGlyph{X2}{189}%  = \quotedblbase
+\DeclareQuoteGlyph{X2}{190}%  = \guillemotleft
+\DeclareQuoteGlyph{X2}{191}%  = \guillemotright
+%\DeclareQuoteGlyph{X2}{60}%  = << ligature = \guillemotleft
+%\DeclareQuoteGlyph{X2}{62}%  = >> ligature = \guillemotright
+
+\DeclareQuoteGlyph{LCY}{13}%  = \textquotesingle
+\DeclareQuoteGlyph{LCY}{34}%  = \textquotedbl
+\DeclareQuoteGlyph{LCY}{39}%  = \textquoteright
+\DeclareQuoteGlyph{LCY}{96}%  = \textquoteleft
+\DeclareQuoteGlyph{LCY}{253}% = \guillemotleft
+\DeclareQuoteGlyph{LCY}{254}% = \guillemotright
+\DeclareQuoteGlyph{LCY}{255}% = \quotedblbase
+%\DeclareQuoteGlyph{LCY}{60}% = << ligature = \guillemotleft
+%\DeclareQuoteGlyph{LCY}{62}% = >> ligature = \guillemotright
+
+% Unicode (for XeTeX)
+\DeclareQuoteGlyph{EU1}{"0022}% = neutral quot. mark, double              = \textquotedbl
+\DeclareQuoteGlyph{EU1}{"0027}% = neutral quot. mark, single              = \textquotesingle
+\DeclareQuoteGlyph{EU1}{"00AB}% = angle quot. mark, left-pointing double  = \guillemotleft
+\DeclareQuoteGlyph{EU1}{"00BB}% = angle quot. mark, right-pointing double = \guillemotright
+\DeclareQuoteGlyph{EU1}{"2018}% = comma quot. mark, single turned         = \textquoteleft
+\DeclareQuoteGlyph{EU1}{"2019}% = comma quot. mark, single                = \textquoteright
+\DeclareQuoteGlyph{EU1}{"201A}% = comma quot. mark, low single            = \quotesinglbase
+\DeclareQuoteGlyph{EU1}{"201B}% = comma quot. mark, single reversed       = n/a
+\DeclareQuoteGlyph{EU1}{"201C}% = comma quot. mark, double turned         = \textquotedblleft
+\DeclareQuoteGlyph{EU1}{"201D}% = comma quot. mark, double                = \textquotedblright
+\DeclareQuoteGlyph{EU1}{"201E}% = comma quot. mark, low double            = \quotedblbase
+\DeclareQuoteGlyph{EU1}{"201F}% = comma quot. mark, double reversed       = n/a
+\DeclareQuoteGlyph{EU1}{"2039}% = angle quot. mark, left-pointing single  = \guilsinglleft
+\DeclareQuoteGlyph{EU1}{"203A}% = angle quot. mark, right-pointing single = \guilsinglright
+
+% Unicode (for LuaTeX)
+\DeclareQuoteGlyph{EU2}{"0022}% = neutral quot. mark, double              = \textquotedbl
+\DeclareQuoteGlyph{EU2}{"0027}% = neutral quot. mark, single              = \textquotesingle
+\DeclareQuoteGlyph{EU2}{"00AB}% = angle quot. mark, left-pointing double  = \guillemotleft
+\DeclareQuoteGlyph{EU2}{"00BB}% = angle quot. mark, right-pointing double = \guillemotright
+\DeclareQuoteGlyph{EU2}{"2018}% = comma quot. mark, single turned         = \textquoteleft
+\DeclareQuoteGlyph{EU2}{"2019}% = comma quot. mark, single                = \textquoteright
+\DeclareQuoteGlyph{EU2}{"201A}% = comma quot. mark, low single            = \quotesinglbase
+\DeclareQuoteGlyph{EU2}{"201B}% = comma quot. mark, single reversed       = n/a
+\DeclareQuoteGlyph{EU2}{"201C}% = comma quot. mark, double turned         = \textquotedblleft
+\DeclareQuoteGlyph{EU2}{"201D}% = comma quot. mark, double                = \textquotedblright
+\DeclareQuoteGlyph{EU2}{"201E}% = comma quot. mark, low double            = \quotedblbase
+\DeclareQuoteGlyph{EU2}{"201F}% = comma quot. mark, double reversed       = n/a
+\DeclareQuoteGlyph{EU2}{"2039}% = angle quot. mark, left-pointing single  = \guilsinglleft
+\DeclareQuoteGlyph{EU2}{"203A}% = angle quot. mark, right-pointing single = \guilsinglright
+
+% Unicode (2016/02/01 ownards)
+\DeclareQuoteGlyph{TU}{"0022}% = neutral quot. mark, double              = \textquotedbl
+\DeclareQuoteGlyph{TU}{"0027}% = neutral quot. mark, single              = \textquotesingle
+\DeclareQuoteGlyph{TU}{"00AB}% = angle quot. mark, left-pointing double  = \guillemotleft
+\DeclareQuoteGlyph{TU}{"00BB}% = angle quot. mark, right-pointing double = \guillemotright
+\DeclareQuoteGlyph{TU}{"2018}% = comma quot. mark, single turned         = \textquoteleft
+\DeclareQuoteGlyph{TU}{"2019}% = comma quot. mark, single                = \textquoteright
+\DeclareQuoteGlyph{TU}{"201A}% = comma quot. mark, low single            = \quotesinglbase
+\DeclareQuoteGlyph{TU}{"201B}% = comma quot. mark, single reversed       = n/a
+\DeclareQuoteGlyph{TU}{"201C}% = comma quot. mark, double turned         = \textquotedblleft
+\DeclareQuoteGlyph{TU}{"201D}% = comma quot. mark, double                = \textquotedblright
+\DeclareQuoteGlyph{TU}{"201E}% = comma quot. mark, low double            = \quotedblbase
+\DeclareQuoteGlyph{TU}{"201F}% = comma quot. mark, double reversed       = n/a
+\DeclareQuoteGlyph{TU}{"2039}% = angle quot. mark, left-pointing single  = \guilsinglleft
+\DeclareQuoteGlyph{TU}{"203A}% = angle quot. mark, right-pointing single = \guilsinglright
+
+
+\endinput
+
+% Auxiliary commands for some styles
+
+% The \fixligatures command used in the above styles is provided
+% by csquotes.sty. It is used as follows:
+%
+%       \fixligatures\textquoteleft
+%
+% and will suppress the ligatures
+%
+%       ?` -> \textquestiondown
+% and
+%       !` -> \textexclamdown
+%
+% in T1 encoding.
+
+% \initfrenchquotes is also provided by csquotes.sty. This command
+% is intended for use in the 'outer initialization' argument of
+% \DeclareQuoteStyle. It will enable a feature which replaces two
+% adjoining marks at the end of a quotation by a single one. This is
+% required by some styles which use the same quotation marks on both
+% the outer and the inner level. If enabled, you get:
+%
+%        <>
+%
+% instead of
+%
+%        <> >>
+%
+% That is, if two nested quotations end simultaneously, the second
+% closing mark is omitted.
+
+% The commands \mkfrenchopenquote and \mkfrenchclosequote are
+% intended for spaced-out quotation marks as used in French. They
+% are employed as follows:
+%
+%       \mkfrenchopenquote{\guillemotleft}
+%       \mkfrenchclosequote{\guillemotright}
+%
+% and will use a command called \@frenchquotespace to space out the
+% quotation marks. The default spacing is:
+%
+%       \penalty\@M
+%       \hskip 0.8\fontdimen2\font
+%        plus  0.3\fontdimen3\font
+%        minus 0.3\fontdimen4\font
+%
+% This is similar to what the \og and \fg commands of babel's
+% french.ldf use. It yields a stretchable space whose natural size
+% is the interword space of the current font multiplied by 0.8. The
+% stretch component is the interword stretch of the current font
+% multiplied by 0.3, and the shrink component is the interword
+% shrink of the current font multiplied by 0.3.
+%
+% If you prefer a full interword space, redefine \@frenchquotespace
+% as follows:
+%
+%       \renewcommand*{\@frenchquotespace}{%
+%         \penalty\@M
+%         \hskip\fontdimen2\font\relax}
+%
+% or:
+%
+%       \renewcommand*{\@frenchquotespace}{%
+%         \penalty\@M\space}
+%
+% In either case, the difference to the default values is so subtle,
+% you will hardly notice it in most cases.
+%
+% Don't forget to add the penalty if you redefine \@frenchquotespace!
+% You certainly don't want to allow a linebreak at that point.

From 0f8d6b68888b0715d5646dfc0c6bf1d5bb82539a Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Sun, 1 Oct 2017 21:48:31 +1100
Subject: [PATCH 054/132] Add tabu.sty dependency.

---
 tabu.sty | 2557 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 2557 insertions(+)
 create mode 100644 tabu.sty

diff --git a/tabu.sty b/tabu.sty
new file mode 100644
index 00000000..3c18755d
--- /dev/null
+++ b/tabu.sty
@@ -0,0 +1,2557 @@
+%%
+%% This is file `tabu.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tabu.dtx  (with options: `package')
+%% 
+%% This is a generated file.
+%% Copyright (FC) 2010-2011 - lppl
+%% 
+%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars
+%% 
+%% **********************************************************************************************
+%% \begin{tabu}               { preamble } => default target: \linewidth or \linegoal
+%% \begin{tabu} to     { preamble } => target specified
+%% \begin{tabu} spread { preamble } => target relative to the ``natural width''
+%% 
+%%  tabu works in text and in math modes.
+%% 
+%%  X columns: automatic width ajustment + horizontal and vertical alignment
+%%  \begin{tabu}   { X[4c] X[1c] X[-2ml]  }
+%% 
+%%  Horizontal lines and / or leaders:
+%%         \hline\hline                          => double horizontal line
+%%         \firsthline\hline                     => for nested tabulars
+%%         \lasthline\hline                      => for nested tabulars
+%%         \tabucline[line spec]{column-column}  => ``funny'' lines (dash/leader)
+%%  Automatic lines / leaders :
+%%         \everyrow{\hline\hline}
+%% 
+%%  Vertical lines and / or leaders:
+%%  \begin{tabu}   { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] }
+%%  \begin{tabu}   { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] }
+%% 
+%%  Fixed vertical spacing adjustment:
+%%         \extrarowheight=     \extrarowdepth=
+%%    or:     \extrarowsep=               => may be prefixed by \global
+%% 
+%%  Dynamic vertical spacing adjustment:
+%%       \abovetabulinesep=  \belowtabulinesep=
+%%   or:      \tabulinesep=               => may be prefixed by \global
+%% 
+%%  delarray.sty shortcuts: in math and text modes
+%%  \begin{tabu} ....        \({ preamble }\)
+%% 
+%%  Algorithms reports:
+%%            \tracingtabu=1             \tracingtabu=2
+%% 
+%% **********************************************************************************************
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%% 
+%% This work consists of the main source file tabu.dtx
+%% and the derived files
+%%    tabu.sty, tabu.pdf, tabu.ins
+%% 
+%% tabu : Flexible LaTeX tabulars
+%% lppl copyright 2010-2011 by FC 
+%% 
+
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{tabu}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC)]
+\RequirePackage{array}[2008/09/09]
+\RequirePackage{varwidth}[2009/03/30]
+\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined}
+\let\tabu@AtEnd\@empty
+\def\TMP@EnsureCode#1={%
+    \edef\tabu@AtEnd{\tabu@AtEnd
+                     \catcode#1 \the\catcode#1}%
+    \catcode#1=%
+}% \TMP@EnsureCode
+\TMP@EnsureCode 33 = 12 % !
+\TMP@EnsureCode 58 = 12 % : (for siunitx)
+\TMP@EnsureCode124 = 12 % |
+\TMP@EnsureCode 36 =  3 % $ = math shift
+\TMP@EnsureCode 38 =  4 % & = tab alignmment character
+\TMP@EnsureCode 32 = 10 % space
+\TMP@EnsureCode 94 =  7 % ^
+\TMP@EnsureCode 95 =  8 % _
+%% Constants --------------------------------------------------------
+\newcount \c@taburow        \def\thetaburow {\number\c@taburow}
+\newcount \tabu@nbcols
+\newcount \tabu@cnt
+\newcount \tabu@Xcol
+\let\tabu@start \@tempcnta
+\let\tabu@stop  \@tempcntb
+\newcount \tabu@alloc  \tabu@alloc=\m@ne
+\newcount \tabu@nested
+\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc}
+\newdimen \tabu@target
+\newdimen \tabu@spreadtarget
+\newdimen \tabu@naturalX
+\newdimen \tabucolX
+\let\tabu@DELTA \@tempdimc
+\let\tabu@thick \@tempdima
+\let\tabu@on    \@tempdimb
+\let\tabu@off   \@tempdimc
+\newdimen \tabu@Xsum
+\newdimen \extrarowdepth
+\newdimen \abovetabulinesep
+\newdimen \belowtabulinesep
+\newdimen \tabustrutrule      \tabustrutrule \z@
+\newtoks \tabu@thebody
+\newtoks \tabu@footnotes
+\newsavebox \tabu@box
+\newsavebox \tabu@arstrutbox
+\newsavebox \tabu@hleads
+\newsavebox \tabu@vleads
+\newif \iftabu@colortbl
+\newif \iftabu@siunitx
+\newif \iftabu@measuring
+\newif \iftabu@spread
+\newif \iftabu@negcoef
+\newif \iftabu@everyrow
+\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue}
+\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse}
+\newif \iftabu@long
+\newif \iftabuscantokens
+\def\tabu@rescan {\tabu@verbatim \scantokens  }
+%% Utilities (for internal usage) -----------------------------------
+\def\tabu@gobblespace #1  {#1}
+\def\tabu@gobbletoken #1#2{#1}
+\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex}
+\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble
+                  \else\ifx \@sptoken\@let@token
+                    \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX
+                  \fi\fi
+}% \tabu@gobblex
+\def\tabu@X{^^J}
+{\obeyspaces
+\global\let\tabu@spxiii= % saves an active space (for \ifx)
+\gdef\tabu@@spxiii{ }}
+\def\tabu@ifenvir {% only for \multicolumn
+    \expandafter\tabu@if@nvir\csname\@currenvir\endcsname
+}% \tabu@ifenvir
+\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else
+                              \ifx\longtabu#1first\else
+                              second\fi\fi oftwo\endcsname
+}% \tabu@ifenvir
+\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi}
+{\catcode`\&=3
+\gdef\tabu@strtrim  #1{% #1 = control sequence to trim
+    \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi
+            \let\tabu@c@l@r \@empty       \let#1\@empty
+    \else   \expandafter  \tabu@trimspaces  #1\@nnil
+    \fi
+}% \tabu@strtrim
+\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }%
+\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&}
+\gdef\tabu@lastspace #1{\def #3{#1}%
+    \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi
+    \tabu@trimspaces #1\@nnil}
+}% \catcode
+\def\tabu@sanitizearg #1#2{{%
+    \csname \ifcsname if@safe@actives\endcsname         % 
+                      @safe@activestrue\else
+                      relax\fi       \endcsname
+    \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2%
+    \expandafter}\expandafter\def\expandafter#2\expandafter{#2}%
+}% \tabu@sanitizearg
+\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}%
+    \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!!
+}% \tabu@textbar
+\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi}
+\def\tabu@everyrow@egroup{%
+    \iftabu@everyrow \expandafter \endgroup \the\toks@
+    \else            \ifnum0=`{\fi}%
+    \fi
+}% \tabu@everyrow@egroup
+\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule
+    height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+    depth  \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+    width  \z@}%
+}% \tabu@arstrut
+\def\tabu@rearstrut {%
+    \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax
+    \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth  \relax
+    \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima
+            \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi
+        \tabu@mkarstrut
+    \fi
+}% \tabu@rearstrut
+\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi}
+\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox
+    \hbox to\z@{\hbox to\z@{\hss
+    {\tabu@DBG{cyan}\vrule
+    height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+    depth  \z@
+    width  \tabustrutrule}\kern-\tabustrutrule
+    {\tabu@DBG{pink}\vrule
+    height \z@
+    depth  \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+    width \tabustrutrule}}}%
+}% \tabu@DBG@arstrut
+\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@
+                                                              \@nextchar}}%
+\def\tabu@savedecl{\ifcat$\d@llarend\else
+       \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode
+}% \tabu@savedecl
+\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@}
+\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k }
+\let\tabu@trialh@@k \@empty
+\def\tabu@nowrite #1#{{\afterassignment}\toks@}
+\let\tabu@write\write
+\let\tabu@immediate\immediate
+\def\tabu@WRITE{\begingroup
+   \def\immediate\write{\aftergroup\endgroup
+                  \tabu@immediate\tabu@write}%
+}% \tabu@WRITE
+\expandafter\def\expandafter\tabu@GenericError\expandafter{%
+                      \expandafter\tabu@WRITE\GenericError}
+\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}}
+\def\tabu@noxfootnote [#1]{\@gobble}
+\def\tabu@nocolor #1#{\@gobble}
+\newcommand*\tabu@norowcolor[2][]{}
+\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}%
+                          \futurelet\@let@token \tabu@m@ybesiunitx}
+\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {%
+    \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi
+    \tabu@temp}% \tabu@m@ybesiunitx
+}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname
+\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}%
+%% Fixed vertical spacing adjustment: \extrarowsep ------------------
+\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}%
+    \iftabu@everyrow    \aftergroup\tabu@Gextra
+    \else               \aftergroup\tabu@n@Gextra
+    \fi
+    \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra
+}% \extrarowsep
+\def\tabu@extra {\@ifnextchar_%
+    {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}
+    {\ifx ^\@let@token \def\tabu@temp{%
+            \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}%
+    \else   \let\tabu@temp \@empty
+            \afterassignment \tabu@setextrasep \extrarowdepth
+    \fi \tabu@temp}%
+}% \tabu@extra
+\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@extr@ #1#2{\@ifnextchar^%
+    {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}
+    {\ifx _\@let@token \def\tabu@temp{%
+            \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}%
+    \else   \let\tabu@temp \@empty
+            \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+    \fi \tabu@temp}%
+}% \tabu@extr@
+\def\tabu@setextrasep {\extrarowheight=\extrarowdepth
+    \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+}% \tabu@setextrasep
+\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi}
+\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi}
+\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra}
+\let\tabu@C@extra \z@
+\let\tabu@G@extra \@empty
+%% Dynamic vertical spacing adjustment: \tabulinesep ----------------
+\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}%
+    \iftabu@everyrow    \aftergroup\tabu@Glinesep
+    \else               \aftergroup\tabu@n@Glinesep
+    \fi
+    \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep
+}% \tabulinesep
+\def\tabu@linesep {\@ifnextchar_%
+    {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}
+    {\ifx ^\@let@token \def\tabu@temp{%
+            \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}%
+     \else  \let\tabu@temp \@empty
+            \afterassignment \tabu@setlinesep \abovetabulinesep
+     \fi \tabu@temp}%
+}% \tabu@linesep
+\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@sets@p #1#2{\@ifnextchar^%
+    {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}
+    {\ifx _\@let@token \def\tabu@temp{%
+            \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}%
+    \else   \let\tabu@temp \@empty
+            \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+    \fi \tabu@temp}%
+}% \tabu@sets@p
+\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep
+    \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+}% \tabu@setlinesep
+\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi}
+\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi}
+\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep}
+\let\tabu@C@linesep \z@
+\let\tabu@G@linesep \@empty
+%% \global\extrarowsep  and  \global\tabulinesep  -------------------
+\def\tabu@Gsave #1#2#3#4{\xdef#1{#1%
+    \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}%
+}% \tabu@Gsave
+\def\tabu@Grestore#1#2{%
+    \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax
+    \ifcat$\the\toks\currentgrouplevel$\else
+        \global\let#1\@empty \global\let#2\z@
+        \the\toks\currentgrouplevel
+    \fi
+}% \tabu@Grestore
+%% Setting code for every row ---------------------------------------
+\newcommand*\everyrow{\tabu@everyrow@bgroup
+                      \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop
+}% \everyrow
+\def\tabu@evrstartstop {\@ifnextchar^%
+    {\afterassignment \tabu@evrstartstop \tabu@stop=}%
+    {\ifx ^\@let@token
+            \afterassignment\tabu@evrstartstop \tabu@start=%
+     \else  \afterassignment\tabu@everyr@w     \toks@
+     \fi}%
+}% \tabu@evrstartstop
+\def\tabu@everyr@w {%
+    \xdef\tabu@everyrow{%
+        \noexpand\tabu@everyrowfalse
+        \let\noalign \relax
+        \noexpand\tabu@rowfontreset
+        \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors
+        \let\noexpand\tabu@docline \noexpand\tabu@docline@evr
+        \the\toks@
+        \noexpand\tabu@evrh@@k
+        \noexpand\tabu@rearstrut
+        \global\advance\c@taburow \@ne}%
+    \iftabu@everyrow \toks@\expandafter
+        {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}%
+    \else \xdef\tabu@evr@G{\the\toks@}%
+    \fi
+    \tabu@everyrow@egroup
+}% \tabu@everyr@w
+\def\tabu@evr {\def\tabu@evrh@@k}         % for internal use only
+\tabu@evr{}
+%% line style and leaders -------------------------------------------
+\newcommand*\newtabulinestyle [1]{%
+    {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}%
+}% \newtabulinestyle
+\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}%
+    \tabu@sanitizearg {#1}\@tempa
+    \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi
+    \global\expandafter\let
+        \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi
+}% \tabu@newlinestyle
+\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}%
+    \iftabu@everyrow
+        \toks@\expandafter{\expandafter \def \expandafter
+                    \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}%
+        \gdef\tabu@ls@{\tabu@ls@L}%
+    \else
+        \global\let\tabu@ls@G \tabu@thestyle
+        \gdef\tabu@ls@{\tabu@ls@G}%
+    \fi
+    \tabu@everyrow@egroup
+}% \tabulinestyle
+\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor}
+\def\tabu@rulecolor #1{\toks@{}%
+    \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1%
+                                                    \tabu@temp
+                                                 \tabu@rulearc
+}% \tabu@rulecolor
+\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp
+    \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}%
+    \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}%
+    \fi
+    \tabu@temp
+}% \tabu@ruledrsc@
+\def\tabu@ruledrsc@   #1#{\tabu@rule@drsc@ {#1}}
+\def\tabu@rule@drsc@ #1#2{%
+    \iftabu@everyrow
+        \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}%
+        \else        \toks@{\def\CT@drsc@{\color #1{#2}}}%
+        \fi
+    \else
+        \ifx \\#1#2\\\global\let\CT@drsc@ \relax
+        \else        \gdef\CT@drsc@{\color #1{#2}}%
+        \fi
+    \fi
+    \tabu@rulearc
+}% \tabu@rule@drsc@
+\def\tabu@rulearc    #1#{\tabu@rule@arc@ {#1}}
+\def\tabu@rule@arc@ #1#2{%
+    \iftabu@everyrow
+        \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}%
+        \else        \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}%
+        \fi
+        \toks@\expandafter{\the\toks@
+            \let\tabu@arc@L  \CT@arc@
+            \let\tabu@drsc@L \CT@drsc@
+            \ignorespaces}%
+    \else
+        \ifx \\#1#2\\\gdef\CT@arc@{}%
+        \else        \gdef\CT@arc@{\color #1{#2}}%
+        \fi
+        \global\let\tabu@arc@G  \CT@arc@
+        \global\let\tabu@drsc@G \CT@drsc@
+    \fi
+    \tabu@everyrow@egroup
+}% \tabu@rule@arc@
+\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1}
+\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}}
+\def\tabu@rowc@lors #1#2#3{%
+    \toks@{}\@defaultunits \count@      =\number0#2\relax \@nnil
+            \@defaultunits \tabu@start  =\number0#1\relax \@nnil
+    \ifnum \count@<\tw@ \count@=\tw@ \fi
+    \advance\tabu@start \m@ne
+    \ifnum \tabu@start<\z@ \tabu@start \z@ \fi
+    \tabu@rowcolorseries #3\in@..\in@ \@nnil
+}% \tabu@rowcolors
+\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {%
+    \ifx \in@#1\relax
+        \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}%
+        \else   \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@
+        \fi
+    \else
+        \ifx \\#2\\\tabu@rowcolorserieserror \fi
+        \tabu@sanitizearg{#1}\tabu@temp
+        \tabu@sanitizearg{#2}\@tempa
+        \advance\count@ \m@ne
+    \iftabu@everyrow
+        \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{%
+            \ifnum ##2=\c@taburow
+                \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi
+            \ifnum \c@taburow<##2 \else
+                \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@
+                    \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+                \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+                \rowcolor{tabu@rc@\the\tabu@nested}\fi}%
+        }\edef\x{\noexpand\tabu@rc@           {\the\count@}
+                                          {\the\tabu@start}
+                                               {\tabu@temp}
+                                                  {\@tempa}%
+                }\x
+        \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}%
+        \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}%
+    \else   % inside \noalign
+        \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}%
+        \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}%
+        \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+        \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}%
+        \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{%
+            \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne
+                \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+            \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+            \rowcolor{tabu@rc@\the\tabu@nested}}%
+        }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x
+        \global\let\tabu@rc@G \tabu@rc@
+    \fi
+    \fi
+    \tabu@everyrow@egroup
+}% \tabu@rowcolorseries
+\tabuDisableCommands {\let\tabu@rc@ \@empty }
+\def\tabu@rowcolorserieserror {\PackageError{tabu}
+    {Invalid syntax for \string\taburowcolors
+    \MessageBreak Please look at the documentation!}\@ehd
+}% \tabu@rowcolorserieserror
+\newcommand*\tabureset {%
+    \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@
+    \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}%
+}% \tabureset
+%% Parsing the line styles ------------------------------------------
+\def\tabu@getline #1{\begingroup
+    \csname \ifcsname if@safe@actives\endcsname         % 
+                      @safe@activestrue\else
+                      relax\fi       \endcsname
+    \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa
+    \let\tabu@thestyle \relax
+    \ifcsname tabu@linestyle@\@tempa \endcsname
+            \edef\tabu@thestyle{\endgroup
+                \def\tabu@thestyle{\expandafter\noexpand
+                    \csname tabu@linestyle@\@tempa\endcsname}%
+            }\tabu@thestyle
+    \else   \expandafter\tabu@definestyle \tabu@temp \@nil
+    \fi
+}% \tabu@getline
+\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter
+    \tabu@thick \maxdimen  \tabu@on \maxdimen   \tabu@off \maxdimen
+    \let\tabu@c@lon \@undefined  \let\tabu@c@loff \@undefined
+    \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs
+            \def\tabu@temp{\tabu@getparam{thick}}%
+    \else   \def\tabu@temp{\tabu@getparam{thick}\maxdimen}%
+    \fi
+    {%
+        \let\tabu@ \relax
+        \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-))
+        \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}%
+                        \expandafter}\expandafter
+                                \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-)
+    \def\;{\def\:}%
+    \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10)
+    \let\tabu@ \tabu@getcolor    \:%    all arguments are ready now ;-)
+    \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi
+    \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi
+    \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty        \fi
+    \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen
+                                  \tabu@on \tabulineon        \fi\fi
+    \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen
+                                  \tabu@off \tabulineoff      \fi\fi
+    \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi
+            \in@true    % 
+    \else   \in@false   % 
+    \fi
+    \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}%
+    \else                       \edef\tabu@thick{\the\tabu@thick}%
+    \fi
+    \edef \tabu@thestyle ##1##2{\endgroup
+        \def\tabu@thestyle{%
+            \ifin@  \noexpand\tabu@leadersstyle {\tabu@thick}
+                                                {\the\tabu@on}{##1}
+                                                {\the\tabu@off}{##2}%
+            \else   \noexpand\tabu@rulesstyle
+                            {##1\vrule width \tabu@thick}%
+                            {##1\leaders \hrule height \tabu@thick \hfil}%
+            \fi}%
+    }\expandafter \expandafter
+        \expandafter \tabu@thestyle \expandafter
+            \expandafter \expandafter
+                {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}%
+}% \tabu@definestyle
+{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active
+    \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}}
+    \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space}
+}% \catcode
+\def\tabu@oxiii #1{%
+    \ifcase  \ifx n#1\z@ \else
+             \ifx f#1\@ne\else
+             \tw@       \fi\fi
+          \expandafter\tabu@onxiii
+    \or   \expandafter\tabu@ofxiii
+    \else o%
+    \fi#1}%
+\def\tabu@onxiii #1#2{%
+    \ifcase  \ifx  !#2\tw@          \else
+             \ifcat.\noexpand#2\z@  \else
+             \ifx \tabu@spxiii#2\@ne\else
+             \tw@               \fi\fi\fi
+          \tabu@getparam{on}#2\expandafter\@gobble
+    \or   \expandafter\tabu@onxiii    % (space is active)
+    \else o\expandafter\@firstofone
+    \fi{#1#2}}%
+\def\tabu@ofxiii #1#2{%
+    \ifx #2f\expandafter\tabu@offxiii
+    \else   o\expandafter\@firstofone
+    \fi{#1#2}}
+\def\tabu@offxiii #1#2{%
+    \ifcase \ifx  !#2\tw@           \else
+            \ifcat.\noexpand#2\z@   \else
+            \ifx\tabu@spxiii#2\@ne  \else
+            \tw@                \fi\fi\fi
+          \tabu@getparam{off}#2\expandafter\@gobble
+    \or   \expandafter\tabu@offxiii   % (space is active)
+    \else o\expandafter\@firstofone
+    \fi{#1#2}}
+\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=}
+\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef
+    \ifx \tabu@#1\else   % no more spec
+        \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi
+}% \tabu@getcolor
+\def\tabu@getc@l@r #1\tabu@ {%
+    \def\tabu@temp{#1}\tabu@strtrim \tabu@temp
+    \ifx \tabu@temp\@empty
+    \else%\ifcsname \string\color@\tabu@temp \endcsname  % if the color exists
+        \ifx \tabu@theparam \tabu@off   \let\tabu@c@loff \tabu@c@l@r
+        \else                           \let\tabu@c@lon  \tabu@c@l@r
+        \fi
+    %\else \tabu@warncolour{\tabu@temp}%
+    \fi%\fi
+    \tabu@ % next spec
+}% \tabu@getc@l@r
+\def\tabu@warncolour #1{\PackageWarning{tabu}
+    {Color #1 is not defined. Default color used}%
+}% \tabu@warncolour
+\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}%
+    \ifx \tabu@leaders\tabu@leaders@G \else
+                \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi
+}% \tabu@leadersstyle
+\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined
+        \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}%
+}% \tabu@rulesstyle
+%% The leaders boxes ------------------------------------------------
+\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+    {\let\color \tabu@color % => during trials ->  \color = \tabu@nocolor
+    {%                      %    but the leaders boxes should have colors !
+    \def\@therule{\vrule}\def\@thick{height}\def\@length{width}%
+    \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}%
+    \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}%
+    \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+    \global\let\tabu@thehleaders \tabu@theleaders
+    }%
+    {%
+    \def\@therule{\hrule}\def\@thick{width}\def\@length{height}%
+    \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}%
+    \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}%
+    \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+    \global\let\tabu@thevleaders \tabu@theleaders
+    }%
+    \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}%
+    }%
+}% \tabu@LEADERS
+\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@}
+\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+    \global\setbox \tabu@leads=\@box{%
+        {#3\tabu@therule{#1}{#2}}%
+        \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi
+        {#3\tabu@therule{#1}{#2}}}%
+    \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss
+        {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}%
+    \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {%
+        {##1\tabu@therule{#1}{#2}}%
+        \xleaders \copy\tabu@leads \@ss
+        \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}%
+    }\tabu@theleaders{#3}%
+}% \tabu@l@@d@rs
+%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ----------
+\newcommand*\tabu {\tabu@longfalse
+    \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}%
+    \else  \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi
+    \expandafter\let\csname tabu*\endcsname \tabu
+    \expandafter\def\csname endtabu*\endcsname{\endtabu}%
+    \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {tabu}
+\let\tabu@tabular \tabular % 
+\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu}
+\newcommand*\longtabu {\tabu@longtrue
+   \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi
+   \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}%
+   \LTchunksize=\@M
+   \expandafter\let\csname tabu*\endcsname \tabu
+   \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}%
+   \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts }
+   \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {longtabu}
+\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu}
+\def\tabu@nolongtabu{\PackageError{tabu}
+   {longtabu requires the longtable package}\@ehd}
+%% Read the target and  then : \tabular or \@array ------------------
+\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget }
+\def\tabu@sett@rget {\tabu@target \z@
+   \ifcase \ifx \bgroup\@let@token   \z@  \else
+           \ifx \@sptoken\@let@token \@ne \else
+           \if t\@let@token          \tw@ \else
+           \if s\@let@token          \thr@@\else
+           \z@\fi\fi\fi\fi
+         \expandafter\tabu@begin
+   \or   \expandafter\tabu@gobblespace\expandafter\tabu@settarget
+   \or   \expandafter\tabu@to
+   \or   \expandafter\tabu@spread
+   \fi
+}% \tabu@sett@rget
+\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget}
+\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget}
+\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target }
+\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget }
+\def\tabu@linegoalt@rget {%
+   \ifx \tabu@temp\LNGL@setlinegoal
+        \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal
+   \tabu@begin
+}% \tabu@linegoalt@rget
+\def\tabu@begin #1#{%
+    \iftabu@measuring \expandafter\tabu@nestedmeasure \fi
+    \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty
+    \else                   \edef\tabu@halignto{\tabu@halignto\the\tabu@target}%
+    \fi
+    \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil
+}% \tabu@begin
+\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup
+   \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}%
+   \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }%
+}% \tabu@tabu@
+\def\tabu@nestedmeasure {%
+    \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax
+            \tabu@spreadtrue
+    \else   \begingroup \iffalse{\fi \ifnum0=`}\fi
+            \toks@{}\def\tabu@stack{b}%
+            \expandafter\tabu@collectbody\expandafter\tabu@quickrule
+                                         \expandafter\endgroup
+    \fi
+}% \tabu@nestedmeasure
+\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target}
+%% \tabu@setup  \tabu@init  \tabu@indent
+\def\tabu@setup{\tabu@alloc@
+    \ifcase \tabu@nested
+        \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@
+            \let\tabu@afterendpar \par
+        \fi\fi\fi
+        \def\tabu@aligndefault{c}\tabu@init \tabu@indent
+    \else       % 
+        \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth
+    \fi
+    \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined
+    \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}%
+    \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu...
+              \let\@endpbox   \tabu@endpbox   % idem "    "    "    "    "    "
+              \let\@tabarray  \tabu@tabarray  % idem "    "    "    "    "    "
+    \tabu@setcleanup \tabu@setreset
+}% \tabu@setup
+\def\tabu@init{\tabu@starttimer \tabu@measuringfalse
+    \edef\tabu@hfuzz  {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}%
+    \let\firsthline    \tabu@firsthline   \let\lasthline      \tabu@lasthline
+    \let\firstline     \tabu@firstline    \let\lastline       \tabu@lastline
+    \let\hline         \tabu@hline        \let\@xhline        \tabu@xhline
+    \let\color         \tabu@color        \let\@arstrutbox    \tabu@arstrutbox
+    \iftabu@colortbl\else\let\LT@@hline   \tabu@LT@@hline \fi
+    \tabu@trivlist     %
+    \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext
+    \let\@xfootnote    \tabu@xfootnote    \let\centering      \tabu@centering
+    \let\raggedright   \tabu@raggedright  \let\raggedleft     \tabu@raggedleft
+    \let\tabudecimal   \tabu@tabudecimal  \let\Centering      \tabu@Centering
+    \let\RaggedRight   \tabu@RaggedRight  \let\RaggedLeft     \tabu@RaggedLeft
+    \let\justifying    \tabu@justifying   \let\rowfont        \tabu@rowfont
+    \let\fbox          \tabu@fbox         \let\color@b@x      \tabu@color@b@x
+    \let\tabu@@everycr \everycr           \let\tabu@@everypar \everypar
+    \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok  \tabu@prepnext@tok
+    \let\tabu@multicolumnORI\multicolumn  \let\multicolumn    \tabu@multicolumn
+    \let\tabu@startpbox \@startpbox      % for nested tabu inside longtabu pfff !!!
+    \let\tabu@endpbox   \@endpbox        % idem  "    "    "    "    "    "    "
+    \let\tabu@tabarray  \@tabarray       % idem  "    "    "    "    "    "    "
+    \tabu@adl@fix      \let\endarray      \tabu@endarray %  colortbl & arydshln (delarray)
+    \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi
+}% \tabu@init
+\def\tabu@indent{% correction for indentation
+    \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget
+    \everypar\expandafter{%
+        \the\everypar\everypar\expandafter{\the\everypar}%
+            \setbox\z@=\lastbox
+            \ifdim\wd\z@>\z@ \edef\tabu@thetarget
+                {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi
+            \box\z@}%
+    \fi\fi
+}% \tabu@indent
+\def\tabu@setcleanup {% saves last global assignments
+    \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax
+        \def\tabu@aftergroupcleanup{%
+                \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}%
+    \else
+        \def\tabu@aftergroupcleanup{%
+                \aftergroup\aftergroup\aftergroup\tabu@cleanup
+                \let\tabu@aftergroupcleanup \relax}%
+    \fi
+    \let\tabu@arc@Gsave         \tabu@arc@G
+    \let\tabu@arc@G             \tabu@arc@L   % 
+    \let\tabu@drsc@Gsave        \tabu@drsc@G
+    \let\tabu@drsc@G            \tabu@drsc@L  % 
+    \let\tabu@ls@Gsave          \tabu@ls@G
+    \let\tabu@ls@G              \tabu@ls@L    % 
+    \let\tabu@rc@Gsave          \tabu@rc@G
+    \let\tabu@rc@G              \tabu@rc@L    % 
+    \let\tabu@evr@Gsave         \tabu@evr@G
+    \let\tabu@evr@G             \tabu@evr@L   % 
+    \let\tabu@celllalign@save   \tabu@celllalign
+    \let\tabu@cellralign@save   \tabu@cellralign
+    \let\tabu@cellleft@save     \tabu@cellleft
+    \let\tabu@cellright@save    \tabu@cellright
+    \let\tabu@@celllalign@save  \tabu@@celllalign
+    \let\tabu@@cellralign@save  \tabu@@cellralign
+    \let\tabu@@cellleft@save    \tabu@@cellleft
+    \let\tabu@@cellright@save   \tabu@@cellright
+    \let\tabu@rowfontreset@save \tabu@rowfontreset
+    \let\tabu@@rowfontreset@save\tabu@@rowfontreset
+    \let\tabu@rowfontreset      \@empty
+    \edef\tabu@alloc@save      {\the\tabu@alloc}%   restore at \tabu@reset
+    \edef\c@taburow@save       {\the\c@taburow}%
+    \edef\tabu@naturalX@save   {\the\tabu@naturalX}%
+    \let\tabu@naturalXmin@save  \tabu@naturalXmin
+    \let\tabu@naturalXmax@save  \tabu@naturalXmax
+    \let\tabu@mkarstrut@save    \tabu@mkarstrut
+    \edef\tabu@clarstrut{%
+        \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax
+        \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax
+        \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}%
+}% \tabu@setcleanup
+\def\tabu@cleanup {\begingroup
+    \globaldefs\@ne         \tabu@everyrowtrue
+    \let\tabu@arc@G         \tabu@arc@Gsave
+    \let\CT@arc@            \tabu@arc@G
+    \let\tabu@drsc@G        \tabu@drsc@Gsave
+    \let\CT@drsc@           \tabu@drsc@G
+    \let\tabu@ls@G          \tabu@ls@Gsave
+    \let\tabu@ls@           \tabu@ls@G
+    \let\tabu@rc@G          \tabu@rc@Gsave
+    \let\tabu@rc@           \tabu@rc@G
+    \let\CT@do@color        \relax
+    \let\tabu@evr@G         \tabu@evr@Gsave
+    \let\tabu@celllalign    \tabu@celllalign@save
+    \let\tabu@cellralign    \tabu@cellralign@save
+    \let\tabu@cellleft      \tabu@cellleft@save
+    \let\tabu@cellright     \tabu@cellright@save
+    \let\tabu@@celllalign   \tabu@@celllalign@save
+    \let\tabu@@cellralign   \tabu@@cellralign@save
+    \let\tabu@@cellleft     \tabu@@cellleft@save
+    \let\tabu@@cellright    \tabu@@cellright@save
+    \let\tabu@rowfontreset  \tabu@rowfontreset@save
+    \let\tabu@@rowfontreset \tabu@@rowfontreset@save
+    \tabu@naturalX         =\tabu@naturalX@save
+    \let\tabu@naturalXmax   \tabu@naturalXmax@save
+    \let\tabu@naturalXmin   \tabu@naturalXmin@save
+    \let\tabu@mkarstrut     \tabu@mkarstrut@save
+    \c@taburow             =\c@taburow@save
+    \ifcase \tabu@nested    \tabu@alloc \m@ne\fi
+    \endgroup               % 
+    \ifcase \tabu@nested
+        \the\tabu@footnotes \global\tabu@footnotes{}%
+        \tabu@afterendpar   \tabu@elapsedtime
+    \fi
+    \tabu@clarstrut
+    \everyrow\expandafter   {\tabu@evr@G}%
+}% \tabu@cleanup
+\let\tabu@afterendpar \relax
+\def\tabu@setreset {%
+    \edef\tabu@savedparams {%         \relax for \tabu@message@save
+        \ifmmode \col@sep \the\arraycolsep
+        \else    \col@sep \the\tabcolsep \fi    \relax
+        \arrayrulewidth   \the\arrayrulewidth   \relax
+        \doublerulesep    \the\doublerulesep    \relax
+        \extratabsurround \the\extratabsurround \relax
+        \extrarowheight   \the\extrarowheight   \relax
+        \extrarowdepth    \the\extrarowdepth    \relax
+        \abovetabulinesep \the\abovetabulinesep \relax
+        \belowtabulinesep \the\belowtabulinesep \relax
+        \def\noexpand\arraystretch{\arraystretch}%
+        \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}%
+    \begingroup
+        \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu
+        \ifx \tabu@arc@L\relax  \else \tabu@setsave \tabu@arc@L \fi
+        \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi
+        \tabu@setsave \tabu@ls@L      \tabu@setsave \tabu@evr@L
+        \expandafter \endgroup \expandafter
+            \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena
+                \let\tabu@arc@G  \tabu@arc@L
+                \let\tabu@drsc@G \tabu@drsc@L
+                \let\tabu@ls@G   \tabu@ls@L
+                \let\tabu@rc@G   \tabu@rc@L
+                \let\tabu@evr@G  \tabu@evr@L}%
+    \def\tabu@reset{\tabu@savedparams
+        \tabu@everyrowtrue  \c@taburow \z@
+        \let\CT@arc@        \tabu@arc@L
+        \let\CT@drsc@       \tabu@drsc@L
+        \let\tabu@ls@       \tabu@ls@L
+        \let\tabu@rc@       \tabu@rc@L
+        \global\tabu@alloc  \tabu@alloc@save
+        \everyrow\expandafter{\tabu@evr@L}}%
+}% \tabu@reset
+\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}}
+\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}}
+%% The Rewritting Process -------------------------------------------
+\def\tabu@newcolumntype #1{%
+    \expandafter\tabu@new@columntype
+        \csname NC@find@\string#1\expandafter\endcsname
+        \csname NC@rewrite@\string#1\endcsname
+        {#1}%
+}% \tabu@newcolumntype
+\def\tabu@new@columntype #1#2#3{%
+    \def#1##1#3{\NC@{##1}}%
+    \let#2\relax \newcommand*#2%
+}% \tabu@new@columntype
+\def\tabu@privatecolumntype #1{%
+    \expandafter\tabu@private@columntype
+        \csname NC@find@\string#1\expandafter\endcsname
+        \csname NC@rewrite@\string#1\expandafter\endcsname
+        \csname tabu@NC@find@\string#1\expandafter\endcsname
+        \csname tabu@NC@rewrite@\string#1\endcsname
+        {#1}%
+}% \tabu@privatecolumntype
+\def\tabu@private@columntype#1#2#3#4{%
+    \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}%
+    \tabu@new@columntype#3#4%
+}% \tabu@private@columntype
+\let\tabu@privatecolumns \@empty
+\newcommand*\tabucolumn [1]{\expandafter \def \expandafter
+    \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns
+                                          \NC@do #1}}%
+\let\tabu@highprioritycolumns \@empty
+%% The  |  ``column'' : rewriting process --------------------------
+\tabu@privatecolumntype |{\tabu@rewritevline}
+\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}%
+                \expandafter \NC@find \tabu@rewritten}
+\def\tabu@lines #1{%
+    \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi
+    \NC@list\expandafter{\the\NC@list \NC@do #1}%
+}% \tabu@lines@
+\def\tabu@vlinearg #1{%
+    \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}%
+    \else\tabu@getline {#1}%
+    \fi
+    \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}%
+    }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}%
+    \expandafter \tabu@keepls \tabu@thestyle \@nil
+}% \tabu@vlinearg
+\def\tabu@keepls #1\@nil{%
+    \ifcat $\@cdr #1\@nil $%
+    \ifx \relax#1\else
+    \ifx \tabu@ls@#1\else
+        \let#1\relax
+        \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+                \tabu@savels\noexpand#1}\fi\fi\fi
+}% \tabu@keepls
+\def\tabu@thevline {\begingroup
+    \ifdefined\tabu@leaders
+        \setbox\@tempboxa=\vtop to\dimexpr
+                      \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}%
+        \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox
+        \box\@tempboxa
+    \else
+                \tabu@thevrule
+    \fi             \endgroup
+}% \tabu@thevline
+\def\tabu@savels #1{%
+    \expandafter\let\csname\string#1\endcsname #1%
+    \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset
+                                                    \tabu@resetls#1}}%
+\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}%
+%% \multicolumn inside tabu environment -----------------------------
+\tabu@newcolumntype \tabu@rewritemulticolumn{%
+    \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group
+    \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+    \tabu@savedecl
+    \tabu@privatecolumns
+    \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}%
+    \let\tabu@savels \relax
+    \NC@find
+}% \tabu@rewritemulticolumn
+\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup}
+\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI}
+\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup
+    \tabu@everyrowtrue
+    \NC@list{\NC@do \tabu@rewritemulticolumn}%
+    \expandafter\@gobbletwo % gobbles \multispan{#1}
+         \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}%
+                {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi
+                {#3}}%
+}% \tabu@multic@lumn
+%% The X column(s): rewriting process -----------------------------
+\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}}
+\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten }
+\def\tabu@siunitx   #1{\@ifnextchar \bgroup
+                     {\tabu@rewriteX@Ss{#1}}
+                      {\tabu@nosiunitx{#1}}}
+\def\tabu@rewriteX@Ss #1#2{\@temptokena{}%
+    \@defaultunits \let\tabu@temp =#2\relax\@nnil
+    \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi
+        \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}%
+            }\expandafter\NC@find \the\@temptokena \relax
+        }\expandafter\NC@rewrite@S \@gobble #2\relax
+    \else \tabu@siunitxerror
+    \fi
+    \expandafter \NC@find \tabu@rewritten
+}% \tabu@rewriteX@Ss
+\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column !
+        \MessageBreak X column can only embed siunitx S or s columns}\@ehd
+}% \tabu@siunitxerror
+\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}%
+    \iftabu@measuring
+    \else \tabu@measuringtrue % first X column found in the preamble
+        \let\@halignto \relax   \let\tabu@halignto \relax
+        \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@
+        \else          \tabu@spreadtarget \z@ \fi
+        \ifdim \tabu@target=\z@
+                \setlength\tabu@target \tabu@thetarget
+                \tabu@message{\tabu@message@defaulttarget}%
+        \else   \tabu@message{\tabu@message@target}\fi
+    \fi
+}% \tabu@rewriteX
+\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax
+                                \def\tabu@rewritten{l}}
+\def\tabu@Xarg #1#2#3{%
+   \advance\tabu@Xcol \@ne      \let\tabu@Xlcr  \@empty
+   \let\tabu@Xdisp    \@empty   \let\tabu@Xmath \@empty
+    \ifx\\#1\\%    
+         \def\tabu@rewritten{p}\tabucolX \p@        % 
+    \else
+         \let\tabu@rewritten \@empty   \let\tabu@temp \@empty  \tabucolX \z@
+         \tabu@Xparse {}#1\relax
+    \fi
+    \tabu@Xrewritten{#2}{#3}%
+}% \tabu@Xarg
+\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest}
+\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}}
+\def\tabu@Xtest{%
+   \ifcase \ifx \relax\@let@token \z@ \else
+           \if ,\@let@token \m@ne\else
+           \if p\@let@token 1\else
+           \if m\@let@token 2\else
+           \if b\@let@token 3\else
+           \if l\@let@token 4\else
+           \if c\@let@token 5\else
+           \if r\@let@token 6\else
+           \if j\@let@token 7\else
+           \if L\@let@token 8\else
+           \if C\@let@token 9\else
+           \if R\@let@token 10\else
+           \if J\@let@token 11\else
+           \ifx \@sptoken\@let@token 12\else
+           \if .\@let@token 13\else
+           \if -\@let@token 13\else
+           \ifcat $\@let@token 14\else
+           15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+   \or \tabu@Xtype {p}%
+   \or \tabu@Xtype {m}%
+   \or \tabu@Xtype {b}%
+   \or \tabu@Xalign \raggedright\relax
+   \or \tabu@Xalign \centering\relax
+   \or \tabu@Xalign \raggedleft\relax
+   \or \tabu@Xalign \tabu@justify\relax
+   \or \tabu@Xalign \RaggedRight\raggedright
+   \or \tabu@Xalign \Centering\centering
+   \or \tabu@Xalign \RaggedLeft\raggedleft
+   \or \tabu@Xalign \justifying\tabu@justify
+   \or \expandafter \tabu@Xparsespace
+   \or \expandafter \tabu@Xcoef
+   \or \expandafter \tabu@Xm@th
+   \or \tabu@Xcoef{}%
+   \else\expandafter \tabu@Xparse
+   \fi
+}% \tabu@Xtest
+\def\tabu@Xalign #1#2{%
+    \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu}
+       {Duplicate horizontal alignment specification}\fi
+    \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax
+    \else       \def\tabu@Xlcr{#2}\let#2\relax\fi
+    \expandafter\tabu@Xparse
+}% \tabu@Xalign
+\def\tabu@Xtype #1{%
+    \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu}
+            {Duplicate vertical alignment specification}\fi
+    \def\tabu@rewritten{#1}\expandafter\tabu@Xparse
+}% \tabu@Xtype
+\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}%
+    \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi
+}% \tabu@Xcoef
+\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@
+    \tabu@Xparse{}%
+}% \tabu@Xc@ef
+\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp}
+\def\tabu@Xd@sp{\let\tabu@Xmath=$%
+    \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}%
+            \expandafter\tabu@Xparse
+    \else   \expandafter\tabu@Xparse\expandafter{\expandafter}%
+    \fi
+}% \tabu@Xd@sp
+\def\tabu@Xrewritten {%
+   \ifx  \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi
+   \ifdim \tabucolX<\z@         \tabu@negcoeftrue
+   \else\ifdim \tabucolX=\z@    \tabucolX \p@
+   \fi\fi
+   \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}%
+   \edef\tabu@Xcoefs{\tabu@Xcoefs    \tabu@      \tabu@temp}%
+   \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{%
+        >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}%
+                    \tabu@rewritten {\tabu@hsize \tabu@temp}%
+        <{##2\ifx$\tabu@Xmath$\fi}}%
+   }\tabu@rewritten
+}% \tabu@Xrewritten
+\def\tabu@hsize #1#2{%
+    \ifdim #2\p@<\z@
+        \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else
+        \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi
+        \fi
+   \else #2\tabucolX
+   \fi
+}% \tabu@hsize
+%% \usetabu  and  \preamble: rewritting process ---------------------
+\tabu@privatecolumntype \usetabu [1]{%
+    \ifx\\#1\\\tabu@saveerr{}\else
+        \@ifundefined{tabu@saved@\string#1}
+            {\tabu@saveerr{#1}}
+            {\let\tabu@rewriteX \tabu@rewriteXrestore
+             \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}%
+    \fi
+}% \NC@rewrite@\usetabu
+\tabu@privatecolumntype \preamble [1]{%
+    \ifx\\#1\\\tabu@saveerr{}\else
+        \@ifundefined{tabu@saved@\string#1}
+            {\tabu@saveerr{#1}}
+            {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}%
+    \fi
+}% \NC@rewrite@\preamble
+%% Controlling the rewritting process -------------------------------
+\tabu@newcolumntype \tabu@rewritefirst{%
+    \iftabu@long    \aftergroup \tabu@longpream  % 
+    \else           \aftergroup \tabu@pream
+    \fi
+    \let\tabu@          \relax      \let\tabu@hsize     \relax
+    \let\tabu@Xcoefs    \@empty     \let\tabu@savels    \relax
+    \tabu@Xcol          \z@         \tabu@cnt           \tw@
+    \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse
+    \global\setbox\@arstrutbox \box\@arstrutbox
+    \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+    \NC@list\expandafter{\the\NC@list \NC@do X}%
+    \iftabu@siunitx     % 
+            \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi
+    \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}%
+    \expandafter\def\expandafter\tabu@NC@list\expandafter{%
+                    \the\expandafter\NC@list \tabu@NC@list}%    % * | X S 
+    \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu
+                         \expandafter \NC@do \expandafter\preamble
+                         \the\NC@list \NC@do \tabu@rewritemiddle
+                                      \NC@do \tabu@rewritelast}%
+    \tabu@savedecl
+    \tabu@privatecolumns
+    \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle
+}% NC@rewrite@\tabu@rewritefirst
+\tabu@newcolumntype \tabu@rewritemiddle{%
+    \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast
+}% \NC@rewrite@\tabu@rewritemiddle
+\tabu@newcolumntype \tabu@rewritelast{%
+    \ifx \tabu@temp\tabu@prev   \advance\tabu@cnt \m@ne
+            \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle
+                                               \NC@do \tabu@rewritelast}%
+    \else \let\tabu@prev\tabu@temp
+    \fi
+    \ifcase \tabu@cnt   \expandafter\tabu@endrewrite
+    \else               \expandafter\NC@find \expandafter\tabu@rewritemiddle
+    \fi
+}% \NC@rewrite@\tabu@rewritelast
+%% Choosing the strategy --------------------------------------------
+\def\tabu@endrewrite {%
+    \let\tabu@temp \NC@find
+    \ifx \@arrayright\relax \let\@arrayright \@empty  \fi
+    \count@=%
+        \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print
+             \iftabu@measuring
+                \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+                    \tabu@target        \csname tabu@\the\tabu@nested.T\endcsname
+                    \tabucolX           \csname tabu@\the\tabu@nested.X\endcsname
+                    \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}%
+             \fi
+        \else\iftabu@measuring        4       % X columns
+                \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer
+                    \tabu@target        \the\tabu@target
+                    \tabu@spreadtarget  \the\tabu@spreadtarget}%
+                    \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}%
+                    \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}%
+                 \let\tabu@Xcoefs \relax
+             \else\ifcase\tabu@nested \thr@@  % outer, no X
+                                      \global\let\tabu@afterendpar \relax
+                  \else               \@ne    % inner, no X, outer in mode 1 or 2
+                  \fi
+                  \ifdefined\tabu@usetabu
+                  \else \ifdim\tabu@target=\z@
+                  \else \let\tabu@temp \tabu@extracolsep
+                  \fi\fi
+             \fi
+        \fi
+    \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}%
+    \tabu@temp
+}% \tabu@endrewrite
+\def\tabu@extracolsep{\@defaultunits    \expandafter\let
+    \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil
+    \ifx \tabu@temp\@sptoken
+        \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep
+    \else
+        \edef\tabu@temp{\noexpand\NC@find
+            \if |\noexpand\tabu@temp        @%
+            \else\if !\noexpand\tabu@temp   @%
+            \else                           !%
+            \fi\fi
+            {\noexpand\extracolsep\noexpand\@flushglue}}%
+    \fi
+    \tabu@temp
+}% \tabu@extrac@lsep
+%% Implementing the strategy ----------------------------------------
+\long\def\tabu@pream #1\@preamble {%
+    \let\tabu@ \tabu@@  \tabu@mkpreambuffer     \tabu@aftergroupcleanup
+    \NC@list\expandafter {\tabu@NC@list}%    in case of nesting...
+    \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi
+    \let\tabu@savedpreamble \@preamble
+    \global\let\tabu@elapsedtime \relax
+    \tabu@thebody ={#1\tabu@aftergroupcleanup}%
+    \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody
+                                                \@preamble}%
+    \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+    \tabu@select
+}% \tabu@pream
+\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{%
+    \let\tabu@ \tabu@@  \tabu@mkpreambuffer     \tabu@aftergroupcleanup
+    \NC@list\expandafter {\tabu@NC@list}%    in case of nesting...
+    \let\tabu@savedpreamble \@preamble
+    \global\let\tabu@elapsedtime \relax
+    \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}%
+    \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+    \tabu@select
+}% \tabu@longpream
+\def\tabu@select {%
+    \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi
+    \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi
+    \ifcase \count@
+        \global\let\tabu@elapsedtime \relax
+        \tabu@seteverycr
+        \expandafter \tabuthepreamble       % vertical adjustment (inheritated from outer)
+    \or      % exit in vertical measure + struts per cell because no X and outer in mode 3
+        \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+        \def\tabu@cellralign{\tabu@verticalspacing}%
+        \tabu@seteverycr
+        \expandafter \tabuthepreamble
+    \or                            % exit without measure because no X and outer in mode 4
+        \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+        \tabu@seteverycr
+        \expandafter \tabuthepreamble
+    \else                                   % needs trials
+        \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+        \tabu@savecounters
+        \expandafter \tabu@setstrategy
+    \fi
+}% \tabu@select
+\def\tabu@@ {\gdef\tabu@mkpreambuffer}
+%% Protections to set up before trials ------------------------------
+\def\tabu@setstrategy {\begingroup  % 
+    \tabu@trialh@@k    \tabu@cnt    \z@  % number of trials
+    \hbadness          \@M          \let\hbadness          \@tempcnta
+    \hfuzz             \maxdimen    \let\hfuzz             \@tempdima
+    \let\write         \tabu@nowrite\let\GenericError      \tabu@GenericError
+    \let\savetabu      \@gobble     \let\tabudefaulttarget \linewidth
+    \let\@footnotetext \@gobble     \let\@xfootnote        \tabu@xfootnote
+    \let\color         \tabu@nocolor\let\rowcolor          \tabu@norowcolor
+    \let\tabu@aftergroupcleanup \relax % only after the last trial
+    \tabu@mkpreambuffer
+    \ifnum \count@>\thr@@ \let\@halignto \@empty  \tabucolX@init
+                          \def\tabu@lasttry{\m@ne\p@}\fi
+    \begingroup \iffalse{\fi \ifnum0=`}\fi
+        \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi %
+                                  \tabu@collectbody \tabu@strategy %
+}% \tabu@setstrategy
+\def\tabu@savecounters{%
+    \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}%
+    \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax
+}% \tabu@savecounters
+\def\tabucolX@init {%  \tabucolX <= \tabu@target / (sum coefs > 0)
+    \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs
+    \ifdim \dimen@>\z@
+        \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax
+        \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+    \fi
+}% \tabucolX@init
+\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum
+    \ifdim #2\p@>\z@ #2\p@  \advance\dimen@ #2\p@
+    \else           -#2\p@  \tabu@negcoeftrue
+                            \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax
+                            \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+                            \tabu@wddef{#1}{0pt}%
+    \fi
+}% \tabu@Xinit
+%% Collecting the environment body ----------------------------------
+\long\def\tabu@collectbody #1#2\end #3{%
+    \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}%
+    \ifx \tabu@stack\@empty
+        \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}%
+                \def\tabu@end@envir{\end{#3}}%
+                \iftabuscantokens
+                    \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}%
+                    \else        \def\tabu@endenvir {\let\endarray \@empty
+                                                     \end{#3}\tabu@gobbleX}%
+                    \fi
+                \else           \def\tabu@endenvir  {\end{#3}}\fi}%
+        \let\tabu@collectbody \tabu@endofcollect
+    \else\def\tabu@temp{#3}%
+        \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }%
+        \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}%
+        \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}%
+        \else \toks@\expandafter{\the\toks@ #2\end{#3}}%
+        \fi\fi\fi
+    \fi
+    \tabu@collectbody{#1}%
+}% \tabu@collectbody
+\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}%
+\def\tabu@endofcollect #1{\ifnum0=`{}\fi
+                          \expandafter\endgroup \the\toks@  #1%
+}% \tabu@endofcollect
+%% The trials: switching between strategies -------------------------
+\def\tabu@strategy {\relax  % stops \count@ assignment !
+    \ifcase\count@          % case 0 = print with vertical adjustment (outer is finished)
+        \expandafter \tabu@endoftrials
+    \or                     % case 1 = exit in vertical measure (outer in mode 3)
+        \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}%
+        \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}%
+        \expandafter \tabu@endoftrials
+    \or                     % case 2 = exit with a rule replacing the table (outer in mode 4)
+        \expandafter \tabu@quickend
+    \or                     % case 3 = outer is in mode 3 because of no X
+        \begingroup
+            \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+            \def\tabu@cellralign{\tabu@verticalspacing}%
+            \expandafter \tabu@measuring
+    \else                   % case 4 = horizontal measure
+        \begingroup
+            \global\let\tabu@elapsedtime \tabu@message@etime
+            \long\def\multicolumn##1##2##3{\multispan{##1}}%
+            \let\tabu@startpboxORI \@startpbox
+            \iftabu@spread
+                    \def\tabu@naturalXmax {\z@}%
+                    \let\tabu@naturalXmin \tabu@naturalXmax
+                    \tabu@evr{\global\tabu@naturalX \z@}%
+                    \let\@startpbox \tabu@startpboxmeasure
+            \else\iftabu@negcoef
+                    \let\@startpbox \tabu@startpboxmeasure
+            \else   \let\@startpbox \tabu@startpboxquick
+            \fi\fi
+            \expandafter \tabu@measuring
+    \fi
+}% \tabu@strategy
+\def\tabu@measuring{\expandafter \tabu@trial \expandafter
+                                                \count@ \the\count@ \tabu@endtrial
+}% \tabu@measuring
+\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi}
+\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+    \ifx \tabu@savecounters\relax \else
+                \let\tabu@savecounters \relax \tabu@clckpt \fi
+    $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+       \expandafter{\expandafter \tabuthepreamble
+                         \the\tabu@thebody
+                         \csname tabu@adl@endtrial\endcsname
+                         \endarray}$\egroup             % got \tabu@box
+}% \tabu@shorttrial
+\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+    \ifx \tabu@savecounters\relax \else
+                \let\tabu@savecounters \relax \tabu@clckpt \fi
+    \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+       \expandafter{\expandafter \tabuthepreamble
+                         \the\tabu@thebody
+                         \tabuendlongtrial}\egroup      % got \tabu@box
+}% \tabu@longtrial
+\def\tabuendlongtrial{% no @ allowed for \scantokens
+    \LT@echunk  \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne
+                \LT@get@widths
+}% \tabuendlongtrial
+\def\tabu@adl@endtrial{% 
+    \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails !
+\def\tabu@seteverycr {\tabu@reset
+    \everycr \expandafter{\the\everycr  \tabu@everycr}%
+    \let\everycr \tabu@noeverycr                      % 
+}% \tabu@seteverycr
+\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@}
+\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr}
+\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi}
+\def\tabu@endoftrials {%
+    \iftabuscantokens   \expandafter\@firstoftwo
+    \else               \expandafter\@secondoftwo
+    \fi
+        {\expandafter \tabu@closetrialsgroup \expandafter
+         \tabu@rescan \expandafter{%
+                    \expandafter\tabuthepreamble
+                        \the\expandafter\tabu@thebody
+                                    \iftabu@long \else \endarray \fi}}
+        {\expandafter\tabu@closetrialsgroup \expandafter
+                    \tabuthepreamble
+                        \the\tabu@thebody}%
+                                        \tabu@endenvir      % Finish !
+}% \tabu@endoftrials
+\def\tabu@closetrialsgroup {%
+    \toks@\expandafter{\tabu@endenvir}%
+    \edef\tabu@bufferX{\endgroup
+        \tabucolX       \the\tabucolX
+        \tabu@target    \the\tabu@target
+        \tabu@cnt       \the\tabu@cnt
+        \def\noexpand\tabu@endenvir{\the\toks@}%
+        %Quid de \@halignto = \tabu@halignto ??
+    }% \tabu@bufferX
+    \tabu@bufferX
+    \ifcase\tabu@nested % print out (outer in mode 0)
+        \global\tabu@cnt \tabu@cnt
+        \tabu@evr{\tabu@verticaldynamicadjustment}%
+        \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty
+        \let\@finalstrut \tabu@finalstrut
+    \else               % vertical measure of nested tabu
+        \tabu@evr{\tabu@verticalinit}%
+        \tabu@celllalign@def{\tabu@verticalmeasure}%
+        \def\tabu@cellralign{\tabu@verticalspacing}%
+    \fi
+    \tabu@clckpt \let\@halignto \tabu@halignto
+    \let\@halignto \@empty
+    \tabu@seteverycr
+    \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@
+        \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts)
+    \fi\fi
+}% \tabu@closetrialsgroup
+\def\tabu@quickend {\expandafter \endgroup \expandafter
+                        \tabu@target \the\tabu@target \tabu@quickrule
+                        \let\endarray \relax \tabu@endenvir
+}% \tabu@quickend
+\def\tabu@endtrial {\relax      % stops \count@ assignment !
+    \ifcase \count@ \tabu@err   % case 0 = impossible here
+    \or             \tabu@err   % case 1 = impossible here
+    \or             \tabu@err   % case 2 = impossible here
+    \or                         % case 3 = outer goes into mode 0
+        \def\tabu@bufferX{\endgroup}\count@ \z@
+    \else                       % case 4 = outer goes into mode 3
+        \iftabu@spread  \tabu@spreadarith % inner into mode 1 (outer in mode 3)
+        \else           \tabu@arith       %              or 2 (outer in mode 4)
+        \fi
+        \count@=%
+            \ifcase\tabu@nested     \thr@@  % outer goes into mode 3
+            \else\iftabu@measuring  \tw@    % outer is in mode 4
+            \else                   \@ne    % outer is in mode 3
+            \fi\fi
+        \edef\tabu@bufferX{\endgroup
+                           \tabucolX        \the\tabucolX
+                           \tabu@target     \the\tabu@target}%
+    \fi
+    \expandafter \tabu@bufferX \expandafter
+                                    \count@ \the\count@  \tabu@strategy
+}% \tabu@endtrial
+\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}}
+%% The algorithms: compute the widths / stop or go on ---------------
+\def\tabu@arithnegcoef {%
+    \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs
+}% \tabu@arithnegcoef
+\def\tabu@arith@negcoef #1#2{%
+    \ifdim #2\p@>\z@    \advance\dimen@     #2\p@       % saturated by definition
+                        \advance\@tempdima  #2\tabucolX
+    \else
+        \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated
+                        \advance\dimen@     -#2\p@
+                        \advance\@tempdima  -#2\tabucolX
+        \else
+                        \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised
+                        \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised
+                        \advance\dimen@     -#2\p@ % saturated (natural width = tabu@target)
+                        \fi
+        \fi
+    \fi
+}% \tabu@arith@negcoef
+\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@
+    \ifdim \@tempdima=\z@
+        \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}%
+    \else
+        \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2}
+                    *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}%
+    \fi
+}% \tabu@givespace
+\def\tabu@arith {\advance\tabu@cnt \@ne
+    \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi
+    \tabu@arithnegcoef
+    \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % 
+    \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax
+    \tabu@message{\tabu@message@arith}%
+    \ifdim \tabu@DELTA <\tabu@hfuzz
+        \ifdim \tabu@DELTA<\z@          % wd (tabu)<\tabu@target ?
+            \let\tabu@ \tabu@givespace \tabu@Xcoefs
+            \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message
+        \else   % already converged: nothing to do but nearly impossible...
+        \fi
+        \tabucolX \maxdimen
+        \tabu@measuringfalse
+    \else                               % need for narrower X columns
+        \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax
+        \tabu@measuringtrue
+        \@whilesw \iftabu@measuring\fi {%
+            \advance\tabu@cnt \@ne
+            \tabu@arithnegcoef
+            \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here
+            \tabu@message{\tabu@header
+                \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+                \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@
+                \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+                \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+                \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else
+                \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@
+                \fi}%
+            \ifdim -\tabu@DELTA<\tabu@hfuzz
+                \advance\@tempdima \@tempdimb % for message
+                \tabu@measuringfalse
+            \else
+                \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax
+            \fi
+        }%
+    \fi
+    \tabu@message{\tabu@message@reached}%
+    \edef\tabu@bufferX{\endgroup \tabu@cnt    \the\tabu@cnt
+                                 \tabucolX    \the\tabucolX
+                                 \tabu@target \the\tabu@target}%
+}% \tabu@arith
+\def\tabu@spreadarith {%
+    \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs
+    \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}%
+    \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax
+    \iftabu@measuring
+        \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+        \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}%
+    \else
+        \tabu@message{\tabu@message@spreadarith}%
+        \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target
+            \tabu@message{(tabu) spread
+                \ifdim \@tempdimc>\tabu@target useless here: default target used%
+                \else too large: reduced to fit default target\fi.}%
+        \else
+            \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+            \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}%
+        \fi
+        \begingroup \let\tabu@wddef \@gobbletwo
+            \@tempdimb \@tempdima
+            \tabucolX@init
+            \tabu@arithnegcoef
+            \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax
+        \expandafter\endgroup \expandafter\tabucolX \the\tabucolX
+        \tabu@arith
+    \fi
+}% \tabu@spreadarith
+\def\tabu@spread@arith #1#2{%
+    \ifdim #2\p@>\z@ \advance\dimen@ #2\p@
+    \else            \advance\@tempdima \tabu@wd{#1}\relax
+    \fi
+}% \tabu@spread@arith
+%% Reporting in the .log file ---------------------------------------
+\def\tabu@message@defaulttarget{%
+    \ifnum\tabu@nested=\z@^^J(tabu) Default target:
+    \ifx\tabudefaulttarget\linewidth    \string\linewidth
+        \ifdim \tabu@thetarget=\linewidth \else
+            -\the\dimexpr\linewidth-\tabu@thetarget\fi  =
+    \else\ifx\tabudefaulttarget\linegoal\string\linegoal=
+    \fi\fi
+    \else (tabu) Default target (nested): \fi
+    \the\tabu@target \on@line
+    \ifnum\tabu@nested=\z@ , page \the\c@page\fi}
+\def\tabu@message@target {^^J(tabu) Target specified:
+   \the\tabu@target \on@line, page \the\c@page}
+\def\tabu@message@arith {\tabu@header
+    \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+    \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@
+    \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+    \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+    \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else
+    \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@
+    \fi
+}% \tabu@message@arith
+\def\tabu@message@spreadarith {\tabu@spreadheader
+   \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@
+   \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@
+   \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@
+   \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@
+   \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target
+                  \else  \@tempdimc+\tabu@spreadtarget \fi
+                  {}{}{}{}{}\@@}
+\def\tabu@message@negcoef #1#2{
+    \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]:
+    \space width = \tabu@wd {#1}
+        \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname
+    \ifdim -\tabu@pt#2\tabucolX<\tabu@target
+    < \number-\rem@pt#2 X
+    = \the\dimexpr -\tabu@pt#2\tabucolX \relax
+    \else
+    <= \the\tabu@target\space < \number-\rem@pt#2 X\fi}
+\def\tabu@message@reached{\tabu@header
+     ******* Reached Target:
+            hfuzz = \tabu@hfuzz\on@line\space *******}
+\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}%
+    \tabu@message{(tabu)\tabu@spaces Time elapsed during measure:
+    \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec
+    \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime)
+    -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax
+    *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space
+                                        cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}}
+\def\tabu@message@verticalsp {%
+    \ifdim \@tempdima>\tabu@ht
+        \ifdim \@tempdimb>\tabu@dp
+        \expandafter\expandafter\expandafter\string\tabu@ht =
+            \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@
+        \expandafter\expandafter\expandafter\string\tabu@dp =
+            \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J%
+        \else
+        \expandafter\expandafter\expandafter\string\tabu@ht =
+            \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J%
+        \fi
+    \else\ifdim \@tempdimb>\tabu@dp
+        \tabu@spaces\tabu@spaces\tabu@spaces
+        \expandafter\expandafter\expandafter\string\tabu@dp =
+            \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi
+    \fi
+}% \tabu@message@verticalsp
+\edef\tabu@spaces{\@spaces}
+\def\tabu@strippt{\expandafter\tabu@pt\the}
+{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}}
+\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr}
+\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt}
+\def\do #1{%
+    \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{%
+    \ifnum##1<10 #1 #1\else
+    \ifnum##1<100 #1 \else
+    \ifnum##1<\@m #1\fi\fi\fi
+    ##1.##2##3##4##5##6##7##8#1}%
+    \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }%
+    \def\tabu@titles{\ifnum \tabu@nested=\z@
+      (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target
+                  #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}%
+    \def\tabu@spreadheader{%
+      (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min.
+                                                      #1 New Target^^J%
+      (tabu) sprd}
+    \def\tabu@message@save {\begingroup
+        \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@}
+        \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt
+                                                     \dimexpr####1\p@{ }{ }}}%
+        \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}%
+        \let\CT@arc@ \relax \let\@preamble \@gobble
+        \let\tabu@savedpream  \@firstofone
+        \let\tabu@savedparams \@firstofone
+        \def\tabu@target ####1\relax   {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}%
+        \def\tabucolX ####1\relax      {(tabu) X columns width#1 = \x{####1}^^J}%
+        \def\tabu@nbcols ####1\relax   {(tabu) Number of columns: \z{####1}^^J}%
+        \def\tabu@aligndefault    ####1{(tabu) Default alignment: #1 #1 ####1^^J}%
+        \def\col@sep ####1\relax       {(tabu) column sep #1 #1 #1 = \x{####1}^^J}%
+        \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}%
+        \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}%
+        \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}%
+        \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}%
+        \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}%
+        \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }%
+        \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}%
+        \def\arraystretch         ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}%
+        \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}%
+        \def\tabu@arc@L           ####1{(tabu) taburulecolor #1 #1 = ####1^^J}%
+        \def\tabu@drsc@L          ####1{(tabu) tabudoublerulecolor=  ####1^^J}%
+        \def\tabu@evr@L           ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}%
+        \def\tabu@ls@L            ####1{(tabu) line style = \detokenize{####1}^^J}%
+        \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}%
+        \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}%
+        \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo
+        \tabu@message{%
+         (tabu) \string\savetabu{\tabu@temp}: \on@line^^J%
+         \tabu@usetabu \@nil^^J}%
+        \endgroup}
+}\do{ }
+%% Measuring the natural width (varwidth) - store the results -------
+\def\tabu@startpboxmeasure #1{\bgroup   % entering \vtop
+    \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}%
+    \ifodd 1\ifx \tabu@temp\@empty 0 \else      % starts with \tabu@hsize ?
+            \iftabu@spread           \else      % if spread -> measure
+            \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure
+        \let\@startpbox \tabu@startpboxORI      % restore immediately (nesting)
+        \tabu@measuringtrue                     % for the quick option...
+        \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi
+        \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target
+                                        \tabu@target=\tabu@temp\tabucolX \fi\fi
+        \setbox\tabu@box  \hbox \bgroup
+            \begin{varwidth}\tabu@target
+                \let\FV@ListProcessLine \tabu@FV@ListProcessLine  % \hbox to natural width...
+                \narrowragged \arraybackslash \parfillskip \@flushglue
+                \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi
+                \bgroup \aftergroup\tabu@endpboxmeasure
+                \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi
+    \else \expandafter\@gobble
+                            \tabu@startpboxquick{#1}% \@gobble \bgroup
+    \fi
+}% \tabu@startpboxmeasure
+\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty
+                                          \bgroup\color@begingroup}
+\def\tabu@endpboxmeasure {%
+    \@finalstrut \@arstrutbox
+                    \end{varwidth}\egroup    % 
+    \ifdim \tabu@temp\p@ <\z@   % neg coef
+        \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box
+            \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}%
+            \tabu@debug{\tabu@message@endpboxmeasure}%
+        \fi
+    \else                       % spread coef>0
+        \global\advance \tabu@naturalX \wd\tabu@box
+        \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax
+        \ifdim \tabu@naturalXmax <\tabu@naturalX
+            \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi
+        \ifdim \tabu@naturalXmin <\@tempdima
+            \xdef\tabu@naturalXmin {\the\@tempdima}\fi
+    \fi
+   \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target
+}% \tabu@endpboxmeasure
+\def\tabu@wddef #1{\expandafter\xdef
+                   \csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@wd    #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd
+    \the\tabu@Xcol. X[\tabu@temp]:
+    target = \the\tabucolX \space
+    \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol
+    =\tabu@wd\tabu@Xcol
+}% \tabu@message@endpboxmeasure
+\def\tabu@startpboxquick {\bgroup
+    \let\@startpbox \tabu@startpboxORI  % restore immediately
+    \let\tabu \tabu@quick               % \begin is expanded before...
+    \expandafter\@gobble \@startpbox    % gobbles \bgroup
+}% \tabu@startpboxquick
+\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi
+    \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick
+}% \tabu@quick
+\def\tabu@endquick {%
+    \ifodd 1\ifx\tabu@end@envir\tabu@endtabu  \else
+            \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax
+            \endgroup
+    \else   \let\endtabu \relax
+            \tabu@end@envir
+    \fi
+}% \tabu@quick
+\def\tabu@endtabu   {\end{tabu}}
+\def\tabu@endtabus  {\end{tabu*}}
+%% Measuring the heights and depths - store the results -------------
+\def\tabu@verticalmeasure{\everypar{}%
+    \ifnum \currentgrouptype>12         % 14=semi-simple, 15=math shift group
+        \setbox\tabu@box =\hbox\bgroup
+            \let\tabu@verticalspacing \tabu@verticalsp@lcr
+            \d@llarbegin                % after \hbox ...
+    \else
+        \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop
+                        \else\ifnum\currentgrouptype=12\vcenter
+                        \else\vbox\fi\fi}%
+        \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup
+            \let\tabu@verticalspacing \tabu@verticalsp@pmb
+    \fi
+}% \tabu@verticalmeasure
+\def\tabu@verticalsp@lcr{%
+    \d@llarend \egroup       % 
+    \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+    \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+        \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+    \ifdim \tabu@ht<\@tempdima    \tabu@htdef{\the\@tempdima}\fi
+    \ifdim \tabu@dp<\@tempdimb    \tabu@dpdef{\the\@tempdimb}\fi
+    \noindent\vrule height\@tempdima depth\@tempdimb
+}% \tabu@verticalsp@lcr
+\def\tabu@verticalsp@pmb{% inserts struts as needed
+    \par \expandafter\egroup
+            \expandafter$\expandafter
+                    \egroup \expandafter
+                            \@tempdimc \the\prevdepth
+    \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+    \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+        \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+    \ifdim \tabu@ht<\@tempdima    \tabu@htdef{\the\@tempdima}\fi
+    \ifdim \tabu@dp<\@tempdimb    \tabu@dpdef{\the\@tempdimb}\fi
+    \let\@finalstrut \@gobble
+    \hrule height\@tempdima depth\@tempdimb width\hsize
+%%    \box\tabu@box
+}% \tabu@verticalsp@pmb
+
+\def\tabu@verticalinit{%
+    \ifnum \c@taburow=\z@ \tabu@rearstrut \fi       % after \tabu@reset !
+    \advance\c@taburow \@ne
+    \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}%
+    \advance\c@taburow \m@ne
+}% \tabu@verticalinit
+\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@ht                      {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@dp                      {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@verticaldynamicadjustment {%
+    \advance\c@taburow \@ne
+        \extrarowheight \dimexpr\tabu@ht - \ht\strutbox
+        \extrarowdepth  \dimexpr\tabu@dp - \dp\strutbox
+        \let\arraystretch \@empty
+    \advance\c@taburow \m@ne
+}% \tabu@verticaldynamicadjustment
+\def\tabuphantomline{\crcr \noalign{%
+    {\globaldefs \@ne
+        \setbox\@arstrutbox     \box\voidb@x
+        \let\tabu@@celllalign   \tabu@celllalign
+        \let\tabu@@cellralign   \tabu@cellralign
+        \let\tabu@@cellleft     \tabu@cellleft
+        \let\tabu@@cellright    \tabu@cellright
+        \let\tabu@@thevline     \tabu@thevline
+        \let\tabu@celllalign    \@empty
+        \let\tabu@cellralign    \@empty
+        \let\tabu@cellright     \@empty
+        \let\tabu@cellleft      \@empty
+        \let\tabu@thevline      \relax}%
+    \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}%
+    \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr
+        \noalign{\tabu@rearstrut
+            {\globaldefs\@ne
+                \let\tabu@celllalign \tabu@@celllalign
+                \let\tabu@cellralign \tabu@@cellralign
+                \let\tabu@cellleft   \tabu@@cellleft
+                \let\tabu@cellright  \tabu@@cellright
+                \let\tabu@thevline   \tabu@@thevline}}}%
+    \expandafter}\the\toks@
+}% \tabuphantomline
+%% \firsthline and \lasthline corrections ---------------------------
+\def\tabu@firstline {\tabu@hlineAZ  \tabu@firsthlinecorrection     {}}
+\def\tabu@firsthline{\tabu@hlineAZ  \tabu@firsthlinecorrection \hline}
+\def\tabu@lastline  {\tabu@hlineAZ  \tabu@lasthlinecorrection      {}}
+\def\tabu@lasthline {\tabu@hlineAZ  \tabu@lasthlinecorrection  \hline}
+\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument)
+    \noalign{\ifnum0=`}\fi
+    {\CT@arc@\hrule height\arrayrulewidth}%
+    \futurelet \tabu@temp \tabu@xhline
+}% \tabu@hline
+\def\tabu@xhline{%
+    \ifx \tabu@temp \hline
+        {\ifx \CT@drsc@\relax \vskip
+         \else\ifx \CT@drsc@\@empty \vskip
+         \else \CT@drsc@\hrule height
+         \fi\fi
+         \doublerulesep}%
+    \fi
+    \ifnum0=`{\fi}%
+}% \tabu@xhline
+\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@
+    \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}%
+    \tabu@hlineAZsurround
+}% \tabu@hlineAZ
+\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{%
+    \extratabsurround #1\let\tabucline \tabucline@scan
+    \let\hline     \tabu@hlinescan \let\firsthline \hline
+    \let\cline     \tabu@clinescan \let\lasthline  \hline
+    \expandafter \futurelet \expandafter \tabu@temp
+                \expandafter \tabu@nexthlineAZ \tabu@temp
+}% \tabu@hlineAZsurround
+\def\tabu@hlinescan   {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline}
+\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}}
+\def\tabucline@scan{\@testopt \tabucline@sc@n {}}
+\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}}
+\def\tabu@nexthlineAZ{%
+    \ifx \tabu@temp\hline \else
+    \ifx \tabu@temp\cline \else
+    \ifx \tabu@temp\tabucline \else
+         \tabu@hlinecorrection
+    \fi\fi\fi
+}% \tabu@nexthlineAZ
+\def\tabu@xhlineAZ #1{%
+    \toks@\expandafter{\the\toks@ #1}%
+    \@tempdimc \tabu@thick                  % The last line width
+    \ifcase\count@ \@tempdimb \tabu@thick   % The first line width
+    \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax
+    \fi
+    \advance\count@ \@ne    \futurelet \tabu@temp \tabu@nexthlineAZ
+}% \tabu@xhlineAZ
+\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1
+    \@tempdima \dimexpr \ht\@arstrutbox+\dimen@
+    \edef\firsthline{%      
+        \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+                    height \the\dimexpr\@tempdima+\extratabsurround
+                    depth  \dp\@arstrutbox
+                    width  \tabustrutrule}\hss}\cr
+        \noalign{\vskip -\the\dimexpr   \@tempdima+\@tempdimb
+                                        +\dp\@arstrutbox \relax}%
+        \the\toks@
+   }\ifnum0=`{\fi
+            \expandafter}\firsthline % we are then !
+}% \tabu@firsthlinecorrection
+\def\tabu@lasthlinecorrection{%
+    \@tempdima \dimexpr  \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc
+    \edef\lasthline{%   
+        \the\toks@
+        \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}%
+        \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+                    depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@
+                                       +\extratabsurround-\@tempdimc
+                    height \z@
+                    width \tabustrutrule}\hss}\cr
+    }\ifnum0=`{\fi
+            \expandafter}\lasthline % we are then !
+}% \tabu@lasthlinecorrection
+\def\tabu@LT@@hline{%
+    \ifx\LT@next\hline
+        \global\let\LT@next \@gobble
+        \ifx \CT@drsc@\relax
+            \gdef\CT@LT@sep{%
+                \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}%
+        \else
+            \gdef\CT@LT@sep{%
+                \multispan\LT@cols{%
+                \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}%
+        \fi
+    \else
+        \global\let\LT@next\empty
+        \gdef\CT@LT@sep{%
+            \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}%
+    \fi
+    \ifnum0=`{\fi}%
+    \multispan\LT@cols
+        {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+    \CT@LT@sep
+    \multispan\LT@cols
+        {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+    \noalign{\penalty\@M}%
+    \LT@next
+}% \tabu@LT@@hline
+%% Horizontal lines : \tabucline ------------------------------------
+\let\tabu@start \@tempcnta
+\let\tabu@stop  \@tempcntb
+\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline}
+\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}%
+   \ifnum \tabu@stop<\z@   \toks@{}%
+   \else \tabu@clinearg{#1}\tabu@thestyle
+        \edef\tabucline{\toks@{%
+            \ifnum \tabu@start>\z@ \omit
+                  \tabu@multispan\tabu@start {\span\omit}&\fi
+            \omit \tabu@multispan\tabu@stop {\span\omit}%
+                                        \tabu@thehline\cr
+        }}\tabucline
+        \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}%
+    \fi
+    \futurelet \tabu@temp \tabu@xcline
+}% \tabu@cline
+\def\tabu@clinearg #1{%
+    \ifx\\#1\\\let\tabu@thestyle \tabu@ls@
+    \else \@defaultunits \expandafter\let\expandafter\@tempa
+                                    \romannumeral-`\0#1\relax \@nnil
+        \ifx \hbox\@tempa           \tabu@clinebox{#1}%
+        \else\ifx \box\@tempa       \tabu@clinebox{#1}%
+        \else\ifx \vbox\@tempa      \tabu@clinebox{#1}%
+        \else\ifx \vtop\@tempa      \tabu@clinebox{#1}%
+        \else\ifx \copy\@tempa      \tabu@clinebox{#1}%
+        \else\ifx \leaders\@tempa   \tabu@clineleads{#1}%
+        \else\ifx \cleaders\@tempa  \tabu@clineleads{#1}%
+        \else\ifx \xleaders\@tempa  \tabu@clineleads{#1}%
+        \else\tabu@getline {#1}%
+        \fi\fi\fi\fi\fi\fi\fi\fi
+    \fi
+}% \tabu@clinearg
+\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}}
+\def\tabu@clineleads #1{%
+    \let\tabu@thestyle \relax \let\tabu@leaders \@undefined
+    \gdef\tabu@thehrule{#1}}
+\def\tabu@thehline{\begingroup
+    \ifdefined\tabu@leaders
+            \noexpand\tabu@thehleaders
+    \else   \noexpand\tabu@thehrule
+    \fi            \endgroup
+}% \tabu@thehline
+\def\tabu@xcline{%
+    \ifx \tabu@temp\tabucline
+        \toks@\expandafter{\the\toks@ \noalign
+        {\ifx\CT@drsc@\relax \vskip
+         \else \CT@drsc@\hrule height
+         \fi
+         \doublerulesep}}%
+    \fi
+    \tabu@docline
+}% \tabu@xcline
+\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@}
+\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}%
+              \ifnum0=`{\fi}\aftergroup\tabu@doclineafter}
+\def\tabu@multispan #1#2{%
+    \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan
+    \else                   \expandafter\@gobbletwo
+    \fi  {#1-1}{#2}%
+}% \tabu@multispan
+\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil}
+\def\tabu@start@stop #1-#2\@nnil{%
+   \@defaultunits   \tabu@start\number 0#1\relax    \@nnil
+   \@defaultunits   \tabu@stop \number 0#2\relax    \@nnil
+   \tabu@stop   \ifnum \tabu@start>\tabu@nbcols     \m@ne
+                \else\ifnum \tabu@stop=\z@          \tabu@nbcols
+                \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols
+                \else                               \tabu@stop
+                \fi\fi\fi
+   \advance\tabu@start \m@ne
+   \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi
+}% \tabu@start@stop
+%% Numbers: siunitx S columns  (and \tabudecimal) -------------------
+\def\tabu@tabudecimal #1{%
+    \def\tabu@decimal{#1}\@temptokena{}%
+    \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces
+    \tabu@scandecimal
+}% \tabu@tabudecimal
+\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@}
+\def\tabu@skipdecimal#1{#1\tabu@scandecimal}
+\def\tabu@getdecimal@ignorespaces{%
+    \ifcase 0\ifx\tabu@temp\ignorespaces\else
+             \ifx\tabu@temp\@sptoken1\else
+             2\fi\fi\relax
+            \let\tabu@getdecimal@ \tabu@getdecimal
+            \expandafter\tabu@skipdecimal
+    \or     \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal
+    \else   \expandafter\tabu@skipdecimal
+    \fi
+}% \tabu@getdecimal@ignorespaces
+\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}%
+                        \tabu@scandecimal}
+\def\do#1{%
+    \def\tabu@get@decimalspace#1{%
+        \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}%
+}\do{ }
+\let\tabu@@tabudecimal \tabu@tabudecimal
+\def\tabu@getdecimal{%
+   \ifcase    0\ifx 0\tabu@temp\else
+               \ifx 1\tabu@temp\else
+               \ifx 2\tabu@temp\else
+               \ifx 3\tabu@temp\else
+               \ifx 4\tabu@temp\else
+               \ifx 5\tabu@temp\else
+               \ifx 6\tabu@temp\else
+               \ifx 7\tabu@temp\else
+               \ifx 8\tabu@temp\else
+               \ifx 9\tabu@temp\else
+               \ifx .\tabu@temp\else
+               \ifx ,\tabu@temp\else
+               \ifx -\tabu@temp\else
+               \ifx +\tabu@temp\else
+               \ifx e\tabu@temp\else
+               \ifx E\tabu@temp\else
+               \ifx\tabu@cellleft\tabu@temp1\else
+               \ifx\ignorespaces\tabu@temp1\else
+               \ifx\@sptoken\tabu@temp2\else
+            3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+       \expandafter\tabu@get@decimal
+   \or \expandafter\tabu@skipdecimal
+   \or \expandafter\tabu@get@decimalspace
+   \else\expandafter\tabu@printdecimal
+   \fi
+}% \tabu@getdecimal
+\def\tabu@printdecimal{%
+    \edef\tabu@temp{\the\@temptokena}%
+    \ifx\tabu@temp\@empty\else
+    \ifx\tabu@temp\space\else
+        \expandafter\tabu@decimal\expandafter{\the\@temptokena}%
+    \fi\fi
+}% \tabu@printdecimal
+%% Verbatim inside X columns ----------------------------------------
+\def\tabu@verbatim{%
+    \let\verb \tabu@verb
+    \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd
+}% \tabu@verbatim
+\let\tabu@ltx@verb \verb
+\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb}
+\def\tabu@fancyvrb {%
+    \def\tabu@FV@DefineCheckEnd ##1{%
+        \def\tabu@FV@DefineCheckEnd{%
+            ##1% 
+            \let\FV@CheckEnd     \tabu@FV@CheckEnd
+            \let\FV@@CheckEnd    \tabu@FV@@CheckEnd
+            \let\FV@@@CheckEnd   \tabu@FV@@@CheckEnd
+            \edef\FV@EndScanning{%
+            \def\noexpand\next{\noexpand\end{\FV@EnvironName}}%
+                \global\let\noexpand\FV@EnvironName\relax
+                \noexpand\next}%
+            \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}%
+    }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd}
+}% \tabu@fancyvrb
+\def\tabu@FV@CheckEnd  #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil}
+\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}}
+\begingroup
+\catcode`\[1      \catcode`\]2
+\@makeother\{     \@makeother\}
+   \edef\x[\endgroup
+      \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3%
+   ]\x               \@nil{\def\@tempa{#2}\def\@tempb{#3}}
+\def\tabu@FV@ListProcessLine #1{%
+  \hbox {%to \hsize{%
+    \kern\leftmargin
+    \hbox {%to \linewidth{%
+      \FV@LeftListNumber
+      \FV@LeftListFrame
+      \FancyVerbFormatLine{#1}\hss
+%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on)
+%%      \FV@RightListFrame}%
+      \FV@RightListFrame
+      \FV@RightListNumber}%
+%% DG/SR modification end
+    \hss}}
+%% \savetabu --------------------------------------------------------
+\newcommand*\savetabu[1]{\noalign{%
+    \tabu@sanitizearg{#1}\tabu@temp
+    \ifx \tabu@temp\@empty  \tabu@savewarn{}{The tabu will not be saved}\else
+        \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwritting}}%
+        \ifdefined\tabu@restored \expandafter\let
+            \csname tabu@saved@\tabu@temp \endcsname \tabu@restored
+        \else {\tabu@save}%
+        \fi
+    \fi}%
+}% \savetabu
+\def\tabu@save {%
+    \toks0\expandafter{\tabu@saved@}%
+    \iftabu@negcoef
+        \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}%
+        \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi
+    \toks1\expandafter{\tabu@savedpream}%
+    \toks2\expandafter{\tabu@savedpreamble}%
+    \let\@preamble \relax
+    \let\tabu@savedpream \relax \let\tabu@savedparams \relax
+    \edef\tabu@preamble{%
+        \def\noexpand\tabu@aligndefault{\tabu@align}%
+        \def\tabu@savedparams {\noexpand\the\toks0}%
+        \def\tabu@savedpream  {\noexpand\the\toks1}}%
+    \edef\tabu@usetabu{%
+        \def\@preamble {\noexpand\the\toks2}%
+        \tabu@target \the\tabu@target \relax
+        \tabucolX    \the\tabucolX    \relax
+        \tabu@nbcols \the\tabu@nbcols \relax
+        \def\noexpand\tabu@aligndefault{\tabu@align}%
+        \def\tabu@savedparams {\noexpand\the\toks0}%
+        \def\tabu@savedpream  {\noexpand\the\toks1}}%
+    \let\tabu@aligndefault \relax \let\@sharp \relax
+    \edef\@tempa{\noexpand\tabu@s@ved
+                          {\tabu@usetabu}
+                         {\tabu@preamble}
+                            {\the\toks1}}\@tempa
+    \tabu@message@save
+}% \tabu@save
+\long\def\tabu@s@ved #1#2#3{%
+    \def\tabu@usetabu{#1}% 
+    \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{%
+        \ifodd ##1%     \usetabu
+            \tabu@measuringfalse \tabu@spreadfalse  % Just in case...
+            \gdef\tabu@usetabu {%
+                \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi
+                \global\let\tabu@usetabu \@undefined
+                \def\@halignto {to\tabu@target}%
+                #1%
+                \ifx \tabu@align\tabu@aligndefault@text
+                \ifnum \tabu@nested=\z@
+                       \let\tabu@align \tabu@aligndefault \fi\fi}%
+        \else     %     \preamble
+            \gdef\tabu@preamble {%
+                \global\let\tabu@preamble \@undefined
+                #2%
+                \ifx \tabu@align\tabu@aligndefault@text
+                \ifnum \tabu@nested=\z@
+                       \let\tabu@align \tabu@aligndefault \fi\fi}%
+        \fi
+        #3}%
+}% \tabu@s@ved
+\def\tabu@aligndefault@text {\tabu@aligndefault}%
+\def\tabu@warn@usetabu {\PackageWarning{tabu}
+    {Specifying a target with \string\usetabu\space is useless
+    \MessageBreak The target cannot be changed!}}
+\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi}
+\def\tabu@savewarn#1#2{\PackageInfo{tabu}
+    {User-name `#1' already used for \string\savetabu
+    \MessageBreak #2}}%
+\def\tabu@saveerr#1{\PackageError{tabu}
+    {User-name `#1' is unknown for \string\usetabu
+    \MessageBreak I cannot restore an unknown preamble!}\@ehd}
+%% \rowfont ---------------------------------------------------------
+\newskip \tabu@cellskip
+\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi
+                    {\ifnum0=`}\fi    \tabu@row@font}
+\newcommand*\tabu@row@font[2][]{%
+    \ifnum7=\currentgrouptype
+        \global\let\tabu@@cellleft    \tabu@cellleft
+        \global\let\tabu@@cellright   \tabu@cellright
+        \global\let\tabu@@celllalign  \tabu@celllalign
+        \global\let\tabu@@cellralign  \tabu@cellralign
+        \global\let\tabu@@rowfontreset\tabu@rowfontreset
+    \fi
+    \global\let\tabu@rowfontreset \tabu@rowfont@reset
+    \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}%
+    \ifcsname tabu@cell@#1\endcsname       % row alignment
+            \csname tabu@cell@#1\endcsname \fi
+    \ifnum0=`{\fi}% end of group / noalign group
+}% \rowfont
+\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}%
+\def\tabu@rowfont@reset{%
+    \global\let\tabu@rowfontreset \tabu@@rowfontreset
+    \global\let\tabu@cellleft     \tabu@@cellleft
+    \global\let\tabu@cellright    \tabu@@cellright
+    \global\let\tabu@cellfont     \@empty
+    \global\let\tabu@celllalign   \tabu@@celllalign
+    \global\let\tabu@cellralign   \tabu@@cellralign
+}% \tabu@@rowfontreset
+\let\tabu@rowfontreset \@empty     % overwritten \AtBeginDocument if colortbl
+%% \tabu@prepnext@tok -----------------------------------------------
+\newif \iftabu@cellright
+\def\tabu@prepnext@tok{%
+    \ifnum \count@<\z@   % 
+            \@tempcnta  \@M   % 
+            \tabu@nbcols\z@
+            \let\tabu@fornoopORI \@fornoop
+            \tabu@cellrightfalse
+    \else
+        \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left
+                \advance \tabu@nbcols \@ne
+                \iftabu@cellright % before-previous token is right and is finished
+                    \tabu@cellrightfalse % 
+                    \tabu@righttok
+                \fi
+                \tabu@lefttok
+        \or                     % (case 1) previous token is right
+                \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop
+        \else % special column: do not change the token
+                \iftabu@cellright    % before-previous token is right
+                    \tabu@cellrightfalse
+                    \tabu@righttok
+                \fi
+        \fi % \ifcase
+    \fi
+    \tabu@prepnext@tokORI
+}% \tabu@prepnext@tok
+\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@}
+\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{%
+    \ifx \in@#2\else
+        \let\@fornoop \tabu@fornoopORI
+        \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}%
+        \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}%
+        \expandafter\prepnext@tok
+    \fi
+}% \tabu@lastnoop
+\def\tabu@righttok{%
+    \advance \count@ \m@ne
+    \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}%
+    \advance \count@ \@ne
+}% \tabu@righttok
+\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign
+                                    \the\toks\count@ \tabu@cellleft}% after because of $
+}% \tabu@lefttok
+%% Neutralisation of glues ------------------------------------------
+\let\tabu@cellleft   \@empty
+\let\tabu@cellright  \@empty
+\tabu@celllalign@def{\tabu@cellleft}%
+\let\tabu@cellralign \@empty
+\def\tabu@cell@align #1#2#3{%
+    \let\tabu@maybesiunitx \toks@ \tabu@celllalign
+    \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}%
+    \toks@\expandafter{\tabu@cellralign #2}%
+    \xdef\tabu@cellralign{\the\toks@}%
+    \toks@\expandafter{\tabu@cellleft #3}%
+    \xdef\tabu@cellleft{\the\toks@}%
+}% \tabu@cell@align
+\def\tabu@cell@l{% force alignment to left
+   \tabu@cell@align
+      {\tabu@removehfil \raggedright \tabu@cellleft}% left
+      {\tabu@flush1\tabu@ignorehfil}%                 right
+      \raggedright
+}% \tabu@cell@l
+\def\tabu@cell@c{% force alignment to center
+   \tabu@cell@align
+      {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft}
+      {\tabu@flush{.5}\tabu@ignorehfil}
+      \centering
+}% \tabu@cell@c
+\def\tabu@cell@r{% force alignment to right
+   \tabu@cell@align
+      {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft}
+      \tabu@ignorehfil
+      \raggedleft
+}% \tabu@cell@r
+\def\tabu@cell@j{% force justification (for p, m, b columns)
+      \tabu@cell@align
+         {\tabu@justify\tabu@cellleft}
+         {}
+         \tabu@justify
+}% \tabu@cell@j
+\def\tabu@justify{%
+   \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip
+   \parfillskip\@flushglue
+}% \tabu@justify
+%% ragged2e settings
+\def\tabu@cell@L{% force alignment to left (ragged2e)
+   \tabu@cell@align
+      {\tabu@removehfil \RaggedRight \tabu@cellleft}
+      {\tabu@flush 1\tabu@ignorehfil}
+      \RaggedRight
+}% \tabu@cell@L
+\def\tabu@cell@C{% force alignment to center (ragged2e)
+   \tabu@cell@align
+      {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft}
+      {\tabu@flush{.5}\tabu@ignorehfil}
+      \Centering
+}% \tabu@cell@C
+\def\tabu@cell@R{% force alignment to right (ragged2e)
+   \tabu@cell@align
+      {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft}
+      \tabu@ignorehfil
+      \RaggedLeft
+}% \tabu@cell@R
+\def\tabu@cell@J{% force justification (ragged2e)
+   \tabu@cell@align
+      {\justifying \tabu@cellleft}
+      {}
+      \justifying
+}% \tabu@cell@J
+\def\tabu@flush#1{%
+    \iftabu@colortbl      % colortbl uses \hfill rather than \hfil
+        \hskip \ifnum13<\currentgrouptype \stretch{#1}%
+        \else  \ifdim#1pt<\p@ \tabu@cellskip
+        \else  \stretch{#1}
+        \fi\fi \relax
+    \else                % array.sty
+        \ifnum 13<\currentgrouptype
+                \hfil \hskip1sp \relax  \fi
+    \fi
+}% \tabu@flush
+\let\tabu@hfil  \hfil
+\let\tabu@hfill \hfill
+\let\tabu@hskip \hskip
+\def\tabu@removehfil{%
+    \iftabu@colortbl
+        \unkern \tabu@cellskip =\lastskip
+        \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip
+        \else \tabu@cellskip \z@skip
+        \fi
+    \else
+        \ifdim\lastskip=1sp\unskip\fi
+        \ifnum\gluestretchorder\lastskip =\@ne
+            \hfilneg % \hfilneg for array.sty but not for colortbl...
+        \fi
+    \fi
+}% \tabu@removehfil
+\def\tabu@ignorehfil{\aftergroup \tabu@nohfil}
+\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil
+   \def\hfil{\let\hfil \tabu@hfil}%   local to (alignment template) group
+}% \tabu@nohfil
+\def\tabu@colortblalignments {% if colortbl
+    \def\tabu@nohfil{%
+        \def\hfil  {\let\hfil \tabu@hfil}% local to (alignment template) group
+        \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff...
+        \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local
+}% \tabu@colortblalignments
+%% Taking care of footnotes and hyperfootnotes ----------------------
+\long\def\tabu@footnotetext #1{%
+   \edef\@tempa{\the\tabu@footnotes
+      \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}%
+   \global\tabu@footnotes\expandafter{\@tempa {#1}}}%
+\long\def\tabu@xfootnotetext [#1]#2{%
+   \global\tabu@footnotes\expandafter{\the\tabu@footnotes
+                               \footnotetext [{#1}]{#2}}}
+\let\tabu@xfootnote \@xfootnote
+\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }}
+\long\def\tabu@Hy@xfootnote [#1]{%
+   \begingroup
+      \value\@mpfn #1\relax
+      \protected@xdef \@thefnmark  {\thempfn}%
+   \endgroup
+   \@footnotemark \tabu@Hy@ftntxt {#1}%
+}% \tabu@Hy@xfootnote
+\long\def\tabu@Hy@ftntxt #1#2{%
+    \edef\@tempa{%
+        \the\tabu@footnotes
+        \begingroup
+            \value\@mpfn #1\relax
+            \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}%
+            \expandafter \noexpand \expandafter
+                \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}%
+    }%
+    \global\tabu@footnotes\expandafter{\@tempa {#2}%
+                                         \endgroup}%
+}% \tabu@Hy@ftntxt
+\long\def\tabu@Hy@footnotetext #1#2{%
+    \H@@footnotetext{%
+        \ifHy@nesting
+            \hyper@@anchor {#1}{#2}%
+        \else
+            \Hy@raisedlink{%
+                \hyper@@anchor {#1}{\relax}%
+            }%
+            \def\@currentHref {#1}%
+            \let\@currentlabelname \@empty
+            #2%
+        \fi
+    }%
+}% \tabu@Hy@footnotetext
+%% No need for \arraybackslash ! ------------------------------------
+\def\tabu@latextwoe {%
+\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@centering   \centering   \arraybackslash
+\tabu@temp \tabu@raggedleft  \raggedleft  \arraybackslash
+\tabu@temp \tabu@raggedright \raggedright \arraybackslash
+}% \tabu@latextwoe
+\def\tabu@raggedtwoe {%
+\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@Centering   \Centering   \arraybackslash
+\tabu@temp \tabu@RaggedLeft  \RaggedLeft  \arraybackslash
+\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash
+\tabu@temp \tabu@justifying  \justifying  \arraybackslash
+}% \tabu@raggedtwoe
+\def\tabu@normalcrbackslash{\let\\\@normalcr}
+\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{%
+                       \expandafter\tabu@normalcrbackslash \@trivlist}}
+%% Utilities: \fbox  \fcolorbox  and \tabudecimal -------------------
+\def\tabu@fbox      {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox}
+\def\tabu@beginfbox {\bgroup \kern\fboxsep
+                     \bgroup\aftergroup\tabu@endfbox}
+\def\tabu@endfbox   {\kern\fboxsep\egroup\egroup
+                     \@frameb@x\relax}
+\def\tabu@color@b@x #1#2{\leavevmode \bgroup
+    \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}%
+    \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox
+}% \tabu@color@b@x
+\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup
+       \aftergroup\tabu@endcolor@b@x \set@color}
+\def\tabu@endcolor@b@x {\kern\fboxsep \egroup
+    \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@
+    \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@
+    \tabu@docolor@b@x \egroup
+}% \tabu@endcolor@b@x
+%% Corrections (arydshln, delarray, colortbl) -----------------------
+\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray
+    \iftabu@colortbl
+        \ifdefined\adl@array  % 
+        \def\tabu@endarray{%
+            \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %
+            \@arrayright      % 
+            \gdef\@preamble{}}% 
+        \else                 % 
+        \def\tabu@endarray{%
+            \crcr \egroup \egroup    %
+            \@arrayright             % 
+            \gdef\@preamble{}\CT@end}%
+        \fi
+    \else
+        \ifdefined\adl@array  % 
+        \def\tabu@endarray{%
+            \adl@endarray \egroup \adl@arrayrestore \egroup %
+            \@arrayright      % 
+            \gdef\@preamble{}}% 
+    \else                   % 
+        \PackageWarning{tabu}
+        {\string\@arrayright\space is missing from the
+        \MessageBreak definition of \string\endarray.
+        \MessageBreak Comptability with delarray.sty is broken.}%
+    \fi\fi
+}% \tabu@fix@arrayright
+\def\tabu@adl@xarraydashrule #1#2#3{%
+     \ifnum\@lastchclass=\adl@class@start\else
+     \ifnum\@lastchclass=\@ne\else
+     \ifnum\@lastchclass=5 \else %  @-arg (class 5) and !-arg (class 1)
+             \adl@leftrulefalse \fi\fi           % must be treated the same
+     \fi
+     \ifadl@zwvrule\else \ifadl@inactive\else
+             \@addtopreamble{\vrule\@width\arrayrulewidth
+                     \@height\z@ \@depth\z@}\fi \fi
+     \ifadl@leftrule
+             \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}%
+                     {\number#1}#3}%
+     \else   \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}%
+                     {\number#2}#3}
+     \fi
+}% \tabu@adl@xarraydashrule
+\def\tabu@adl@act@endpbox {%
+    \unskip \ifhmode \nobreak \fi    \@finalstrut \@arstrutbox
+    \egroup \egroup
+    \adl@colhtdp \box\adl@box \hfil
+}% \tabu@adl@act@endpbox
+\def\tabu@adl@fix {%
+    \let\adl@xarraydashrule \tabu@adl@xarraydashrule %  arydshln
+    \let\adl@act@endpbox    \tabu@adl@act@endpbox    %  arydshln
+    \let\adl@act@@endpbox   \tabu@adl@act@endpbox    %  arydshln
+    \let\@preamerror        \@preamerr               %  arydshln
+}% \tabu@adl@fix
+%% Correction for longtable' \@startbox definition ------------------
+%%    => \everypar is ``missing'' : TeX should be in vertical mode
+\def\tabu@LT@startpbox #1{%
+    \bgroup
+        \let\@footnotetext\LT@p@ftntext
+        \setlength\hsize{#1}%
+        \@arrayparboxrestore
+        \everypar{%
+            \vrule \@height \ht\@arstrutbox \@width \z@
+            \everypar{}}%
+}% \tabu@LT@startpbox
+%% \tracingtabu  and  the package options ------------------
+\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}}
+\DeclareOption{linegoal}{%
+   \AtEndOfPackage{%
+      \RequirePackage{linegoal}[2010/12/07]%
+      \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX
+}}
+\DeclareOption{scantokens}{\tabuscantokenstrue}
+\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}}
+\def\tracingtabu {\begingroup\@ifnextchar=%
+    {\afterassignment\tabu@tracing\count@}
+    {\afterassignment\tabu@tracing\count@1\relax}}
+\def\tabu@tracing{\expandafter\endgroup
+    \expandafter\tabu@tr@cing \the\count@ \relax
+}% \tabu@tracing
+\def\tabu@tr@cing #1\relax {%
+    \ifnum#1>\thr@@ \let\tabu@tracinglines\message
+    \else           \let\tabu@tracinglines\@gobble
+    \fi
+    \ifnum#1>\tw@   \let\tabu@DBG        \tabu@@DBG
+                    \def\tabu@mkarstrut {\tabu@DBG@arstrut}%
+                    \tabustrutrule      1.5\p@
+    \else           \let\tabu@DBG        \@gobble
+                    \def\tabu@mkarstrut {\tabu@arstrut}%
+                    \tabustrutrule      \z@
+    \fi
+    \ifnum#1>\@ne   \let\tabu@debug      \message
+    \else           \let\tabu@debug      \@gobble
+    \fi
+    \ifnum#1>\z@
+        \let\tabu@message             \message
+        \let\tabu@tracing@save        \tabu@message@save
+        \let\tabu@starttimer          \tabu@pdftimer
+    \else
+        \let\tabu@message             \@gobble
+        \let\tabu@tracing@save        \@gobble
+        \let\tabu@starttimer          \relax
+    \fi
+}% \tabu@tr@cing
+%% Setup \AtBeginDocument
+\AtBeginDocument{\tabu@AtBeginDocument}
+\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined
+    \ifdefined\arrayrulecolor   \tabu@colortbltrue       % 
+                                \tabu@colortblalignments % different glues are used
+    \else                       \tabu@colortblfalse \fi
+    \ifdefined\CT@arc@ \else \let\CT@arc@  \relax \fi
+    \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi
+    \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@
+    \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname   % 
+            \expandafter\ifx
+                \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax
+            \tabu@siunitxtrue
+    \else   \let\tabu@maybesiunitx   \@firstofone                % 
+            \let\tabu@siunitx        \tabu@nosiunitx
+            \tabu@siunitxfalse
+    \fi
+    \ifdefined\adl@array        % 
+    \else     \let\tabu@adl@fix \relax
+              \let\tabu@adl@endtrial \@empty \fi
+    \ifdefined\longtable        % 
+    \else     \let\longtabu \tabu@nolongtabu \fi
+    \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi
+    \csname\ifcsname ifHy@hyperfootnotes\endcsname % 
+            ifHy@hyperfootnotes\else iffalse\fi\endcsname
+        \let\tabu@footnotetext \tabu@Hy@ftntext
+        \let\tabu@xfootnote    \tabu@Hy@xfootnote \fi
+    \ifdefined\FV@DefineCheckEnd% 
+            \tabu@fancyvrb  \fi
+    \ifdefined\color            % 
+        \let\tabu@color \color
+        \def\tabu@leavevmodecolor ##1{%
+            \def\tabu@leavevmodecolor {\leavevmode ##1}%
+        }\expandafter\tabu@leavevmodecolor\expandafter{\color}%
+    \else
+        \let\tabu@color           \tabu@nocolor
+        \let\tabu@leavevmodecolor \@firstofone \fi
+    \tabu@latextwoe
+    \ifdefined\@raggedtwoe@everyselectfont    % 
+        \tabu@raggedtwoe
+    \else
+        \let\tabu@cell@L \tabu@cell@l
+        \let\tabu@cell@R \tabu@cell@r
+        \let\tabu@cell@C \tabu@cell@c
+        \let\tabu@cell@J \tabu@cell@j   \fi
+    \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}%
+    \ifin@ \let\tabu@endarray \endarray
+    \else  \tabu@fix@arrayright \fi% 
+    \everyrow{}%
+}% \tabu@AtBeginDocument
+\def\tabu@warn@cellspace{%
+    \PackageWarning{tabu}{%
+                  Package cellspace has some limitations
+    \MessageBreak And redefines some macros of array.sty.
+    \MessageBreak Please use \string\tabulinesep\space to control
+    \MessageBreak vertical spacing of lines inside tabu environnement}%
+}% \tabu@warn@cellspace
+%% tabu Package initialisation
+\tabuscantokensfalse
+\let\tabu@arc@G         \relax
+\let\tabu@drsc@G        \relax
+\let\tabu@evr@G         \@empty
+\let\tabu@rc@G          \@empty
+\def\tabu@ls@G          {\tabu@linestyle@}%
+\let\tabu@@rowfontreset \@empty % 
+\let\tabu@@celllalign   \@empty
+\let\tabu@@cellralign   \@empty
+\let\tabu@@cellleft     \@empty
+\let\tabu@@cellright    \@empty
+\def\tabu@naturalXmin   {\z@}
+\def\tabu@naturalXmax   {\z@}
+\let\tabu@rowfontreset  \@empty
+\def\tabulineon {4pt}\let\tabulineoff \tabulineon
+\tabu@everyrowtrue
+\ifdefined\pdfelapsedtime                   % 
+        \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}%
+\else   \let\tabu@pdftimer \relax \let\tabu@message@etime \relax
+\fi
+\tracingtabu=\z@
+\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@
+\tabulinestyle{}
+\taburowcolors{}
+\let\tabudefaulttarget  \linewidth
+\ProcessOptions*                % \ProcessOptions* is quicker !
+\endinput
+%%
+%% End of file `tabu.sty'.

From 89e37164dfe4e75e39d001eae566b918d16cac11 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Sun, 1 Oct 2017 21:52:39 +1100
Subject: [PATCH 055/132] Add varwidth.sty.

---
 varwidth.sty | 318 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 318 insertions(+)
 create mode 100644 varwidth.sty

diff --git a/varwidth.sty b/varwidth.sty
new file mode 100644
index 00000000..5809254a
--- /dev/null
+++ b/varwidth.sty
@@ -0,0 +1,318 @@
+% varwidth.sty  v 0.92  Mar 2009  Donald Arseneau asnd@triumf.ca
+%
+% Copyright 2003-2004,2009 by Donald Arseneau (asnd@triumf.ca).
+% This software is released under the terms of the LaTeX Project Public 
+% License  (ftp://ctan.tug.org/tex-archive/macros/latex/base/lppl.txt).
+% (Essentially: Free to use, copy, distribute (sell) and change, but, if
+% changed, that fact must be clearly displayed to the user.)
+%
+% The varwidth environment is based on minipage, and takes the same
+% parameters, but the specified width is just a maximum value -- the
+% environment will be typeset with a narrower "natural" width if
+% possible.
+%
+% In a varwidth environment, paragraph line-breaks are chosen
+% according to the specified width, but each line is reset to 
+% match a narrower natural width, if there is one.
+%
+% The \narrowragged command works like \raggedright, but produces 
+% generally narrower lines in paragraphs, with more text in the last 
+% line (the lines have more-equal lengths).
+%
+% This version works fine, but there are still many questions about
+% how it would work best.  Should there be a version that avoids the
+% usual minipage formatting style?
+%
+% Numbered equations are not handled well, especially with leqno.
+% AMSmath environments have not been tried, and undoubtedly fail.
+%
+% To do:  Extend v-list wrappers to handle all e-TeX primitives.
+%         (pdfTeX too?)
+%         Capture marks and floats, propagating them out of the box
+%         Support numbered equations, including ams math.
+% 
+
+\ProvidesPackage{varwidth}[2009/03/30 ver 0.92; \space 
+    Variable-width minipages]
+
+\newcommand\narrowragged{\rightskip \z@ plus .25\hsize 
+  \@rightskip\rightskip \parfillskip\z@ plus .15\hsize
+  \sloppy }
+
+\newbox\@vwid@box
+
+% The varwidth environment is based on minipage, and takes the same
+% parameters, but the specified width is only a limit -- a narrower
+% natural width may be used.  \varwidth uses \minipage.
+
+\def\varwidth{\let\@minipagerestore\@vwid@setup \minipage}
+
+% Many things may appear on vertical lists that can't be re-processed,
+% so they have to be modified. 
+
+\def\@vwid@setup{%
+  % several things can't appear in vertical mode, so they may get 
+  % a \vbox wrapped around them.
+  \let\@bsphack\@vwid@bsphack % \label and others
+  \let\mark\@gobble % Marks disappear in minipages anyway
+  \let\special\@vwid@special % \color and others
+  \let\pdfliteral\@vwid@pdfliteral % \color and others
+  \let\addtocontents\@vwid@addtocontents % \addcontentsline
+  % Shifted boxes (\parshape,\hangindent) will have their shifts
+  % indicated in a separate box.
+  \let\@hangfrom\@vwid@hangfrom % hanging indents
+  \let\list\@vwid@list
+  \let\endtrivlist\@vwid@endtrivlist
+  \postdisplaypenalty\@vwid@posteqp
+  \predisplaypenalty\@vwid@preeqp
+  \def\@eqnnum{\aftergroup\@vwid@afterva\@@vwid@eqnnum}%
+  \global\@vwid@roff\z@  \global\@vwid@loff\z@
+  % Begin an inner minipage-like vertical box (in \@tempboxa)
+  \let\@minipagerestore\@@vwid@minipagerestore \@minipagerestore
+  \setbox\@tempboxa\vbox\bgroup\begingroup
+  % Flag the top of the list
+  \penalty\@vwid@toppen
+}
+
+\let\@@vwid@minipagerestore\@minipagerestore
+
+%  At end of varwidth environment.
+\def\endvarwidth{\par\@@par
+   \unskip
+   % Handle minipage-style notes.
+   \ifvoid\@mpfootins\else
+     \vskip\skip\@mpfootins
+     \normalcolor
+     \@vwid@wrap\footnoterule
+     \unvbox\@mpfootins
+   \fi
+   \unskip
+   \@minipagefalse
+   \endgroup\egroup % got my \@tempboxa
+   %{\showoutput\showbox\@tempboxa}%
+   % in a discarded box, sift through list measuring max width.
+   \begingroup\setbox\z@\vbox\bgroup
+%\message{-------------------------------------------------------------}%
+%\message{First pass; hsize=\the\hsize...  }%{\tracingall\showlists}%%
+     \unvcopy\@tempboxa
+     \@tempdima-\maxdimen
+     \let\@vwid@resetb\@vwid@measure
+     \let\@vwid@append\relax
+     \sift@deathcycles\z@
+     \@vwid@sift
+     \xdef\@vwid@{\the\@tempdima}%
+   \egroup\endgroup
+   % Done measuring.  Now empty \@tempboxa onto current vertical list
+   % which is the contents of a minipage environment
+%\message{Got natural width \@vwid@ (compare \the\hsize) }%
+   \unvbox\@tempboxa
+   % Choose the natural width or the declared width, whichever is smaller.
+   \ifdim\@vwid@<\hsize
+     \hsize\@vwid@
+   \fi
+   % Go through the vertical list reboxing and moving everything into
+   % \@vwid@box; then spill \@vwid@box.  If the natural width is narrower,
+   \setbox\@vwid@box\vbox{}%
+   \sift@deathcycles\z@
+%\message{----------------------------------------------------------------}%
+%\message{Second pass; hsize=\the\hsize...  }%{\tracingall\showlists}%
+   \@vwid@sift
+%\message{After sifting:}%
+%{\showoutput\showbox\@vwid@box}%
+   \unvbox\@vwid@box
+   % end the minipage environment
+   \endminipage}
+
+%
+% Here are definitions for sifting through the vertical list, either
+% measuring things or reboxing them.  
+%
+% Penalties used as signals to the vertical-list processor:
+
+\mathchardef\@vwid@posteqp  17321 % Penalty below equations
+\mathchardef\@vwid@preeqp   17322 % Penalty above equations
+\mathchardef\@vwid@postnump 17323 % Penalty below numbered equations
+\mathchardef\@vwid@toppen   17324 % Penalty marking top of vertical list
+\mathchardef\@vwid@offsets  17325 % Penalty below special h-offsets box
+\mathchardef\@vwid@postw    17326 % Penalty below a \vbox-wrapped object
+
+\newcount\sift@deathcycles
+
+\def\@vwid@sift{%
+  \skip@\lastskip\unskip
+  \dimen@\lastkern\unkern
+  \count@\lastpenalty\unpenalty
+  \setbox\z@\lastbox
+%{\showoutput\showbox\z@}%
+  \ifvoid\z@ \advance\sift@deathcycles\@ne \else \sift@deathcycles\z@ \fi
+  \ifnum\sift@deathcycles>33 
+    \let\@vwid@sift\relax
+    \PackageWarning{varwidth}{Failed to reprocess entire contents}%
+  \fi
+%\message{\the\sift@deathcycles: skip \the\skip@; kern \the\dimen@; penalty \the\count@. }%
+%\ifhbox\z@\setbox99\hbox to0pt{\unhcopy\z@}\fi  % = message
+  \ifnum\count@=\@vwid@preeqp \@vwid@eqmodefalse\fi
+%\ifnum\count@=\@vwid@preeqp \message{End equation mode. }\fi
+  \ifnum\count@=\@vwid@posteqp \@vwid@eqmodetrue\fi
+%\ifnum\count@=\@vwid@posteqp\message{Begin equation mode. }\fi
+%\if@vwid@eqmode {\showoutput\showbox\z@}\fi
+  \ifnum\count@=\@vwid@toppen % finished
+    \let\@vwid@sift\relax
+  \else\ifnum\count@=\@vwid@offsets
+    \@vwid@setoffsets
+  \else
+    \ifnum\count@=\@vwid@postw
+    \else
+      \@vwid@resetb % reset box \z@ or measure it
+    \fi
+    \@vwid@append
+  \fi\fi
+  \@vwid@sift}
+
+\def\@vwid@setoffsets{%
+ \setbox\z@=\hbox{\unhbox\z@
+  \global\@vwid@roff\lastkern\unkern
+  \global\@vwid@loff\lastkern\unkern}%
+%\message{Set offsets to \the\@vwid@loff,  \the\@vwid@roff. }%
+}
+
+\def\@vwid@append{% Append contents of box \z@ and glue to \@vwid@box
+  \setbox\@vwid@box\vbox{%
+    \unvbox\z@
+    \ifdim\dimen@=\z@\else \kern\dimen@ \fi
+    \vskip\skip@
+    \unvbox\@vwid@box
+  }%{\tracingall\showbox\@vwid@box}%
+}
+
+%  reset box \z@ to \hsize, applying shifts, and wrap in vbox
+%  Don't worry about numbered equations because we won't get
+%  here if there are any.
+\def\@vwid@resetb{%
+  \setbox\z@\vbox\bgroup
+    \ifvoid\z@
+    \else
+       \ifvbox\z@
+         \box\z@
+       \else % \hbox
+         \@tempdima\hsize
+         \advance\@tempdima-\@vwid@roff
+         \advance\@tempdima-\@vwid@loff
+         \advance\@tempdima-\p@
+%\message{Test if \the\wd\z@ > \the\@tempdima, }%
+         \ifdim\wd\z@>\@tempdima % full-width line; rebox it
+%\message{An ordinary line or alignment. (\the\wd\z@ > \the\@tempdima) }%
+            \hbox to\hsize
+              {\kern\@vwid@loff \unhbox\z@ \kern\@vwid@roff}%
+         \else % an equation or direct \hbox
+           \if@vwid@eqmode % re-center unnumbered equations
+%\message{A centered equation hsize=\the\hsize. }%
+              \hbox to\hsize
+                {\hskip\@vwid@loff\@plus1fil
+                 \unhbox\z@ \hskip\@vwid@roff\@plus1fil}%
+           \else % plain narrow \hbox; leave it as-is
+%\message{Plain narrow box}%
+              \box\z@
+    \fi\fi\fi\fi
+  \egroup}
+
+
+% Measure a line (in box \z@) and keep a running tally of the
+% widest natural width in \@tempdima
+
+\def\@vwid@measure{%
+  \ifvoid\z@
+  \else
+    % numbered equations not part of alignments can't be reset,
+    % so force retention of full width.
+    \ifnum\count@=\@vwid@postnump \ifdim\wd\z@<\linewidth
+      \ifdim\@tempdima<\linewidth \@tempdima\linewidth \fi
+    \fi\fi
+    \ifhbox\z@
+      \setbox\z@=\hbox
+        {\kern\@vwid@loff \unhbox\z@ \kern\@vwid@roff}%
+    \fi
+    \ifdim\wd\z@>\@tempdima \@tempdima\wd\z@ \fi
+  \fi}
+
+\newdimen\@vwid@loff
+\newdimen\@vwid@roff
+
+\let\@@bsphack\@bsphack
+\let\@@esphack\@esphack
+\let\@@Esphack\@Esphack
+
+\def\@vwid@bsphack{\@@bsphack
+  \ifx\@vwid@wrap\@firstofone
+    \bgroup
+  \else
+    \ifvmode
+      \setbox\@vwid@box \vbox\bgroup \vbox\bgroup
+      \let\@vwid@wrap\@firstofone
+      \def\@esphack{\@vwid@esphack\@@esphack}%
+      \def\@Esphack{\@vwid@esphack\@@Esphack}%
+    \fi
+  \fi}
+
+\def\@vwid@esphack{\egroup
+  \ifx\@vwid@wrap\@firstofone\else
+    \egroup % end outer box
+    \unvbox\@vwid@box % put inner box on list without lineskip
+    \penalty\@vwid@postw
+  \fi}
+
+% \vbox Wrapper for misc vlist items
+\long\def\@vwid@wrap{\relax
+  \ifvmode\expandafter\@vwid@dowrap \else \expandafter\@firstofone \fi}
+\long\def\@vwid@dowrap#1{%
+  \setbox\@vwid@box \vbox{\vbox{\let\@vwid@wrap\@firstofone
+    #1}\penalty\@vwid@postw
+  }\unvbox\@vwid@box }
+
+\let\@@vwid@special\special
+\let\@@vwid@pdfliteral\pdfliteral
+\let\@@vwid@addtocontents\addtocontents
+\let\@@vwid@list\list
+\let\@@vwid@endtrivlist\endtrivlist
+\let\@@vwid@eqnnum\@eqnnum
+
+\long\def\@vwid@special#1{\@vwid@wrap{\@@vwid@special{#1}}}
+\long\def\@vwid@pdfliteral#1{\@vwid@wrap{\@@vwid@pdfliteral{#1}}}
+\long\def\@vwid@addtocontents#1#2{\@vwid@wrap{\@@vwid@addtocontents{#1}{#2}}}
+
+\long\def\@vwid@hangfrom#1{\par
+  \setbox\@tempboxa\hbox{{#1}}%
+  \setbox\@vwid@box \vbox{\hbox{\kern\z@ \kern\z@
+   }\penalty\@vwid@offsets}\unvbox\@vwid@box
+  \def\par{\relax\ifhmode\unskip\fi
+    \vadjust{\hbox{\kern\hangindent\kern\z@}\penalty\@vwid@offsets}%
+    \@restorepar\par}%
+  \hangindent \wd\@tempboxa\noindent\box\@tempboxa}
+
+\def\@vwid@list{\@vwid@setlist\@@vwid@list}
+\def\@vwid@endtrivlist{\@vwid@setlist\@@vwid@endtrivlist}
+
+\def\@vwid@setlist{\relax\ifhmode \unskip\expandafter\vadjust\fi
+  {\setbox\@vwid@box \vbox{\hbox{%
+    \advance\hsize-\linewidth \advance\hsize-\@totalleftmargin
+    \kern\@totalleftmargin  \kern\hsize}%
+    \penalty\@vwid@offsets}%
+   \unvbox\@vwid@box}}
+
+\newif\if@vwid@eqmode
+
+\def\@vwid@afterva{\vadjust{\penalty\@vwid@postnump}}
+
+%  Should I do this? ...
+
+\@ifundefined{newcolumntype}{}{%
+ \@ifundefined{NC@rewrite@V}{
+ \newcolumntype{V}[1]{%
+   >{\begin{varwidth}[t]{#1}\narrowragged\let\\\tabularnewline}%
+   l%
+   <{\@finalstrut\@arstrutbox\end{varwidth}}}
+ }{}
+}
+
+% V 0.91  Always restack contents, even if width didn't change.
+% V 0.92  fix \special, \pdfliteral

From 8d9841c67aa261d43e62417935ff8dea2fcbb064 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Sun, 1 Oct 2017 21:58:49 +1100
Subject: [PATCH 056/132] Trying to fix an error in build on l. 2111.

---
 Paper.tex | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index a96754ad..e632ef05 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -35,7 +35,7 @@
 %https://stackoverflow.com/a/1919447/7438857
 
 % Tabu seems more flexible, and generally better.
-\usepackage{tabu}
+\usepackage{tabu} %requires array.
 
 \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref}
 % "hyperref loads the url package internally. Use \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} to pass the option to the url package when it is loaded by hyperref. This avoids any package option clashes." Source: . 
@@ -2090,8 +2090,8 @@ \section{Ethash}\label{app:ethash}
 \subsection{Definitions}
 We employ the following definitions:
 
-\begin{tabularx}{\textwidth}{lrX}
-%\begin{tabu}{X[,l]X[,r]X[,l]} 
+%\begin{tabularx}{\textwidth}{lrX}
+\begin{tabu}{X[,l]X[,r]X[,l]} 
 \toprule
 Name & Value & Description \hypertarget{Jwordbytes}{ \\
 \midrule 
@@ -2107,8 +2107,8 @@ \subsection{Definitions}
 $J_{\mathrm{cacherounds}}$ & 3 & This is the number of rounds in cache production.}\hypertarget{Jaccesses}{\\
 $J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.}\\
 \bottomrule
-%\end{tabu}
-\end{tabularx}
+\end{tabu}
+%\end{tabularx}
 
 \subsection{Size of dataset and cache}
 The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$  and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number.

From 1a8b43bf1f82a369b7d3f0aa5a1c958f6bd58853 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Sun, 1 Oct 2017 22:28:19 +1100
Subject: [PATCH 057/132] Trying to get build to pass.

---
 Paper.tex | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index e632ef05..6a07333c 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1,6 +1,9 @@
 \documentclass[9pt,oneside]{amsart}
 \usepackage{cancel}
 %\usepackage{tweaklist}
+\usepackage[utf8]{inputenc}
+\DeclareUnicodeCharacter{C3}{\"{e}}
+\DeclareUnicodeCharacter{AD}{\Huge [ICI]}
 \usepackage{xspace}
 \usepackage{graphicx}
 \usepackage{multicol}
@@ -61,8 +64,6 @@
 % https://tex.stackexchange.com/a/59131/143781
 % 
 
-\usepackage[utf8]{inputenc}
-
 %\usepackage{glossaries}
 
 \input{Version.tex}
@@ -2093,10 +2094,10 @@ \subsection{Definitions}
 %\begin{tabularx}{\textwidth}{lrX}
 \begin{tabu}{X[,l]X[,r]X[,l]} 
 \toprule
-Name & Value & Description \hypertarget{Jwordbytes}{ \\
+Name & Value & Description \hypertarget{Jwordbytes}{\\
 \midrule 
-$J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word. }\hypertarget{Jdatasetinit}{ \\
-$J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{ \\
+$J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.}\hypertarget{Jdatasetinit}{\\
+$J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{\\
 $J_{\mathrm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch. }\hypertarget{Jcacheinit}{\\
 $J_{\mathrm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.}\hypertarget{Jcachegrowth}{\\
 $J_{\mathrm{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch.}\hypertarget{Jepoch}{\\

From a680e16b26d41de0e56f3c41c65caa13f7e4ae8f Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 17:32:16 +1100
Subject: [PATCH 058/132] Removed e with Umlaut to see if it will still build
 successfully.

---
 Biblio.bib | 3 ++-
 Paper.tex  | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index 28699a78..40e0f03b 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,10 +1,11 @@
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
 	note = "Unable to be archived by the Wayback Machine",
-	author = {{Guido Bertoni and Joan Daemen and Michaël Peeters and Gilles Van Assche and Ronny Van Keer}},
+	author = {{Guido Bertoni and Joan Daemen and Michael Peeters and Gilles Van Assche and Ronny Van Keer}},
 	title = {{KECCAK}},
 	year = "2017",
 }
+%Michaël
 
 @misc{KeccakWikipedia,
 	url = "https://en.wikipedia.org/wiki/SHA-3",
diff --git a/Paper.tex b/Paper.tex
index 6a07333c..19d773e6 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2,8 +2,8 @@
 \usepackage{cancel}
 %\usepackage{tweaklist}
 \usepackage[utf8]{inputenc}
-\DeclareUnicodeCharacter{C3}{\"{e}}
-\DeclareUnicodeCharacter{AD}{\Huge [ICI]}
+%This character renders, so this shouldn't be needed\DeclareUnicodeCharacter{C3}{\"{e}}
+%For testing \DeclareUnicodeCharacter{AD}{\Huge [ICI]}
 \usepackage{xspace}
 \usepackage{graphicx}
 \usepackage{multicol}

From e59017c40cc4b98fc1d429c62a222f8dd30f6773 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 18:03:47 +1100
Subject: [PATCH 059/132] Minor edits after l. 2086 to 2111 for build to pass.

---
 Paper.tex | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 19d773e6..722d5768 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2,8 +2,8 @@
 \usepackage{cancel}
 %\usepackage{tweaklist}
 \usepackage[utf8]{inputenc}
-%This character renders, so this shouldn't be needed\DeclareUnicodeCharacter{C3}{\"{e}}
-%For testing \DeclareUnicodeCharacter{AD}{\Huge [ICI]}
+%This character renders, so this shouldn't be needed: \DeclareUnicodeCharacter{C3}{\"{e}}
+%For testing: \DeclareUnicodeCharacter{AD}{\Huge [ICI]}
 \usepackage{xspace}
 \usepackage{graphicx}
 \usepackage{multicol}
@@ -2087,7 +2087,7 @@ \section{Genesis Block}\label{app:genesis}
 
 The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values.
 
-\section{Ethash}\label{app:ethash}
+\section{Ethash} \label{app:ethash}
 \subsection{Definitions}
 We employ the following definitions:
 

From 135ae47f1ff3d205de71879fa251f6043fc5cd7f Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 18:15:25 +1100
Subject: [PATCH 060/132] l. 2095 to 2111 retyping in case of copy paste
 causing the build error.

---
 Paper.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index 722d5768..78493098 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2092,7 +2092,7 @@ \subsection{Definitions}
 We employ the following definitions:
 
 %\begin{tabularx}{\textwidth}{lrX}
-\begin{tabu}{X[,l]X[,r]X[,l]} 
+\begin{tabu}{X[,l]X[,r]X[,l]}
 \toprule
 Name & Value & Description \hypertarget{Jwordbytes}{\\
 \midrule 

From 289ecebb3448bdb2cb0e6266bd23ef3a397e2df1 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 18:23:12 +1100
Subject: [PATCH 061/132] actually typing e with umlaut.

---
 Biblio.bib | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index 40e0f03b..2231fd5c 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,11 +1,10 @@
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
 	note = "Unable to be archived by the Wayback Machine",
-	author = {{Guido Bertoni and Joan Daemen and Michael Peeters and Gilles Van Assche and Ronny Van Keer}},
+	author = {{Guido Bertoni and Joan Daemen and Michaẽl Peeters and Gilles Van Assche and Ronny Van Keer}},
 	title = {{KECCAK}},
 	year = "2017",
 }
-%Michaël
 
 @misc{KeccakWikipedia,
 	url = "https://en.wikipedia.org/wiki/SHA-3",

From 5402b97ffdaaf62761fc1ec31d2d4ede29f33888 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 18:27:26 +1100
Subject: [PATCH 062/132] l. 2095 to 2111 retyping and deleting unnecesary
 white space in case copy and paste is causing a build error, plus changing
 hypertarget captions (shouldn't make a difference, but just in case).

---
 Paper.tex | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 78493098..f777abab 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2094,19 +2094,19 @@ \subsection{Definitions}
 %\begin{tabularx}{\textwidth}{lrX}
 \begin{tabu}{X[,l]X[,r]X[,l]}
 \toprule
-Name & Value & Description \hypertarget{Jwordbytes}{\\
-\midrule 
-$J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.}\hypertarget{Jdatasetinit}{\\
-$J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. }\hypertarget{Jdatasetgrowth}{\\
-$J_{\mathrm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch. }\hypertarget{Jcacheinit}{\\
-$J_{\mathrm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.}\hypertarget{Jcachegrowth}{\\
-$J_{\mathrm{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch.}\hypertarget{Jepoch}{\\
-$J_{\mathrm{epoch}}$ & 30000 & This is the blocks per epoch.}\hypertarget{Jmixbytes}{\\
-$J_{\mathrm{mixbytes}}$ & 128 & This is the mix length in bytes.}\hypertarget{Jhashbytes}{\\
-$J_{\mathrm{hashbytes}}$ & 64 & This is the hash length in bytes.}\hypertarget{Jparents}{\\
-$J_{\mathrm{parents}}$ & 256 & This is the number of parents of each dataset element.}\hypertarget{Jcacherounds}{\\
-$J_{\mathrm{cacherounds}}$ & 3 & This is the number of rounds in cache production.}\hypertarget{Jaccesses}{\\
-$J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.}\\
+Name & Value & Description \hypertarget{Jwordbytes}{}\\
+\midrule
+$J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.}\hypertarget{Jdatasetinit}{}\\
+$J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{}\\
+$J_{\mathrm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch. \hypertarget{Jcacheinit}{}\\
+$J_{\mathrm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.\hypertarget{Jcachegrowth}{}\\
+$J_{\mathrm{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch.\hypertarget{Jepoch}{}\\
+$J_{\mathrm{epoch}}$ & 30000 & This is the blocks per epoch.\hypertarget{Jmixbytes}{}\\
+$J_{\mathrm{mixbytes}}$ & 128 & This is the mix length in bytes.\hypertarget{Jhashbytes}{}\\
+$J_{\mathrm{hashbytes}}$ & 64 & This is the hash length in bytes.\hypertarget{Jparents}{}\\
+$J_{\mathrm{parents}}$ & 256 & This is the number of parents of each dataset element.\hypertarget{Jcacherounds}{}\\
+$J_{\mathrm{cacherounds}}$ & 3 & This is the number of rounds in cache production.\hypertarget{Jaccesses}{}\\
+$J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.\\
 \bottomrule
 \end{tabu}
 %\end{tabularx}

From ebde5a8b1814c515bcae72efafd3cd3c48d04e4f Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 18:33:52 +1100
Subject: [PATCH 063/132] Deleting extra }

---
 Paper.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index f777abab..2266a9ee 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2096,7 +2096,7 @@ \subsection{Definitions}
 \toprule
 Name & Value & Description \hypertarget{Jwordbytes}{}\\
 \midrule
-$J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.}\hypertarget{Jdatasetinit}{}\\
+$J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.\hypertarget{Jdatasetinit}{}\\
 $J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{}\\
 $J_{\mathrm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch. \hypertarget{Jcacheinit}{}\\
 $J_{\mathrm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.\hypertarget{Jcachegrowth}{}\\

From c0ec571b3867734893a3f3cb36ecb3d99fbd07aa Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 18:41:06 +1100
Subject: [PATCH 064/132] This file on Github renders e with umlaut as e with a
 tilde after using Compose + ~ + e

Changed to e, but I think this has already been tried. But there's no point having it if the character doesn't render correctly.
---
 Biblio.bib | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Biblio.bib b/Biblio.bib
index 2231fd5c..0a708ff3 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,7 +1,7 @@
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
 	note = "Unable to be archived by the Wayback Machine",
-	author = {{Guido Bertoni and Joan Daemen and Michaẽl Peeters and Gilles Van Assche and Ronny Van Keer}},
+	author = {{Guido Bertoni and Joan Daemen and Michael Peeters and Gilles Van Assche and Ronny Van Keer}},
 	title = {{KECCAK}},
 	year = "2017",
 }

From 2039bfa0e035d32b335fc6f0565f51c59ea5649e Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 18:47:12 +1100
Subject: [PATCH 065/132] Copied and pasted a formula with tiny in math mode to
 l. 2109 to see if it will pick up in the Travis CI build.

---
 Paper.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index 2266a9ee..0faa33d2 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2106,7 +2106,7 @@ \subsection{Definitions}
 $J_{\mathrm{hashbytes}}$ & 64 & This is the hash length in bytes.\hypertarget{Jparents}{}\\
 $J_{\mathrm{parents}}$ & 256 & This is the number of parents of each dataset element.\hypertarget{Jcacherounds}{}\\
 $J_{\mathrm{cacherounds}}$ & 3 & This is the number of rounds in cache production.\hypertarget{Jaccesses}{}\\
-$J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.\\
+$J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$\\
 \bottomrule
 \end{tabu}
 %\end{tabularx}

From ca7a3be0cedf57089823f24f03e84032ed6ebc51 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 19:35:59 +1100
Subject: [PATCH 066/132] Copied and pasted a formula with tiny in math mode to
 l. 2088 to see if it will pick up in the Travis CI build.

---
 Paper.tex | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 0faa33d2..2e153dff 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2085,19 +2085,19 @@ \section{Genesis Block}\label{app:genesis}
 
 Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the \hyperlink{H c}{beneficiary address}, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the \hyperlink{H b}{log bloom}, a 2048-bit sequence of all zeros; $2^{17}$ refers to the \hyperlink{H d}{difficulty}; the \hyperlink{H t}{transaction trie root}, \hyperlink{H e}{receipt trie root}, \hyperlink{H g}{gas used}, \hyperlink{H i}{block number} and \hyperlink{H x}{extradata} are all $0$ (listed in the order of decimal zeros in the above sequence), being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the \hyperlink{block nonce}{nonce}. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in \hyperlink{rlp}{RLP}, both empty lists.
 
-The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values.
+The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values.$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$
 
-\section{Ethash} \label{app:ethash}
+\section{Ethash}\label{app:ethash}
 \subsection{Definitions}
 We employ the following definitions:
 
 %\begin{tabularx}{\textwidth}{lrX}
 \begin{tabu}{X[,l]X[,r]X[,l]}
 \toprule
-Name & Value & Description \hypertarget{Jwordbytes}{}\\
+Name & Value & Description \hypertarget{Jwordbytes}{} \\
 \midrule
 $J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.\hypertarget{Jdatasetinit}{}\\
-$J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{}\\
+$J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{} \\
 $J_{\mathrm{datasetgrowth}}$ & $2^{23}$ & This is the dataset growth per epoch. \hypertarget{Jcacheinit}{}\\
 $J_{\mathrm{cacheinit}}$ & $2^{24}$ & This is the bytes in the cache at genesis.\hypertarget{Jcachegrowth}{}\\
 $J_{\mathrm{cachegrowth}}$ & $2^{17}$ & This is the cache growth per epoch.\hypertarget{Jepoch}{}\\
@@ -2106,7 +2106,7 @@ \subsection{Definitions}
 $J_{\mathrm{hashbytes}}$ & 64 & This is the hash length in bytes.\hypertarget{Jparents}{}\\
 $J_{\mathrm{parents}}$ & 256 & This is the number of parents of each dataset element.\hypertarget{Jcacherounds}{}\\
 $J_{\mathrm{cacherounds}}$ & 3 & This is the number of rounds in cache production.\hypertarget{Jaccesses}{}\\
-$J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$\\
+$J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.\\
 \bottomrule
 \end{tabu}
 %\end{tabularx}

From f0a4d4210069f49b28434670a72908a6a512c3ef Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 19:41:14 +1100
Subject: [PATCH 067/132] Copied and pasted a formula with tiny in math mode to
 l. 2097 to see if it will pick up in the Travis CI build.

---
 Paper.tex | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 2e153dff..283a30a4 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2085,11 +2085,11 @@ \section{Genesis Block}\label{app:genesis}
 
 Where $0_{256}$ refers to the parent hash, a 256-bit hash which is all zeroes; $0_{160}$ refers to the \hyperlink{H c}{beneficiary address}, a 160-bit hash which is all zeroes; $0_{2048}$ refers to the \hyperlink{H b}{log bloom}, a 2048-bit sequence of all zeros; $2^{17}$ refers to the \hyperlink{H d}{difficulty}; the \hyperlink{H t}{transaction trie root}, \hyperlink{H e}{receipt trie root}, \hyperlink{H g}{gas used}, \hyperlink{H i}{block number} and \hyperlink{H x}{extradata} are all $0$ (listed in the order of decimal zeros in the above sequence), being equivalent to the empty byte array. The sequences of both ommers and transactions are empty and represented by $()$. $\mathtt{\tiny KEC}\big( (42) \big)$ refers to the Keccak hash of a byte array of length one whose first and only byte is of value 42, used for the \hyperlink{block nonce}{nonce}. $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ value refers to the hash of the ommer lists in \hyperlink{rlp}{RLP}, both empty lists.
 
-The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values.$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$
+The proof-of-concept series includes a development premine, making the state root hash some value $stateRoot$. Also \hyperlink{H s}{$time$} will be set to the initial timestamp of the genesis block. The latest documentation should be consulted for those values.
 
 \section{Ethash}\label{app:ethash}
 \subsection{Definitions}
-We employ the following definitions:
+We employ the following definitions:$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$
 
 %\begin{tabularx}{\textwidth}{lrX}
 \begin{tabu}{X[,l]X[,r]X[,l]}

From 6a7445ff28e640ec7dc06ab2581efd6fb015c149 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 19:45:10 +1100
Subject: [PATCH 068/132] Copied and pasted a formula with tiny in math mode to
 l. 2097 to see if it will pick up in the Travis CI build.

---
 Paper.tex | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 283a30a4..2ef93e36 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2089,12 +2089,12 @@ \section{Genesis Block}\label{app:genesis}
 
 \section{Ethash}\label{app:ethash}
 \subsection{Definitions}
-We employ the following definitions:$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$
+We employ the following definitions:
 
 %\begin{tabularx}{\textwidth}{lrX}
 \begin{tabu}{X[,l]X[,r]X[,l]}
 \toprule
-Name & Value & Description \hypertarget{Jwordbytes}{} \\
+Name & Value & Description $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ \hypertarget{Jwordbytes}{} \\
 \midrule
 $J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.\hypertarget{Jdatasetinit}{}\\
 $J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{} \\

From 7f60648fc879660d51fb764571243184bf44038d Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 19:52:06 +1100
Subject: [PATCH 069/132] Changing tabu to tabularx

---
 Paper.tex | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 2ef93e36..064facbb 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2091,10 +2091,10 @@ \section{Ethash}\label{app:ethash}
 \subsection{Definitions}
 We employ the following definitions:
 
-%\begin{tabularx}{\textwidth}{lrX}
-\begin{tabu}{X[,l]X[,r]X[,l]}
+%\begin{tabu}{X[,l]X[,r]X[,l]}
+\begin{tabularx}{\textwidth}{lrX}
 \toprule
-Name & Value & Description $\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ \hypertarget{Jwordbytes}{} \\
+Name & Value & Description \hypertarget{Jwordbytes}{} \\
 \midrule
 $J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.\hypertarget{Jdatasetinit}{}\\
 $J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{} \\
@@ -2108,8 +2108,8 @@ \subsection{Definitions}
 $J_{\mathrm{cacherounds}}$ & 3 & This is the number of rounds in cache production.\hypertarget{Jaccesses}{}\\
 $J_{\mathrm{accesses}}$ & 64 & This is the number of accesses in a hashimoto loop.\\
 \bottomrule
-\end{tabu}
-%\end{tabularx}
+\end{tabularx}
+%\end{tabu}
 
 \subsection{Size of dataset and cache}
 The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$  and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number.

From ee1a0c04bb5638b3f2af61c221c197ad695ffbc7 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 19:57:45 +1100
Subject: [PATCH 070/132] =?UTF-8?q?Retyping=20lines=202095=E2=80=932096,?=
 =?UTF-8?q?=20math=20with=20tiny=20at=20beginning=20of=20l.=202097.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Paper.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index 064facbb..1cff0d4a 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2094,7 +2094,7 @@ \subsection{Definitions}
 %\begin{tabu}{X[,l]X[,r]X[,l]}
 \begin{tabularx}{\textwidth}{lrX}
 \toprule
-Name & Value & Description \hypertarget{Jwordbytes}{} \\
+$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ Name & Value & Description \hypertarget{Jwordbytes}{} \\
 \midrule
 $J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.\hypertarget{Jdatasetinit}{}\\
 $J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{} \\

From 777497264ba35496316bd3689004eab9b4683cfe Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Mon, 2 Oct 2017 20:05:25 +1100
Subject: [PATCH 071/132] Deleting the maths used for testing

---
 Paper.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index 1cff0d4a..064facbb 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2094,7 +2094,7 @@ \subsection{Definitions}
 %\begin{tabu}{X[,l]X[,r]X[,l]}
 \begin{tabularx}{\textwidth}{lrX}
 \toprule
-$\mathtt{\tiny KEC}\big(\mathtt{\tiny RLP}\big( () \big)\big)$ Name & Value & Description \hypertarget{Jwordbytes}{} \\
+Name & Value & Description \hypertarget{Jwordbytes}{} \\
 \midrule
 $J_{\mathrm{wordbytes}}$ & 4  & This is the bytes in a word.\hypertarget{Jdatasetinit}{}\\
 $J_{\mathrm{datasetinit}}$ & $2^{30}$ & This is the bytes in the dataset at genesis. \hypertarget{Jdatasetgrowth}{} \\

From df3494de89f3ba91f8af5867e45f93c62ae96109 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 12:45:51 +1100
Subject: [PATCH 072/132] Definition of e in signing transactions

---
 Paper.tex | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index 064facbb..2a81a851 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1458,11 +1458,12 @@ \section{Signing Transactions}\label{app:signing}
 We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \footnote{For the former citation, refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.} %(assuming that the former is for signature generation and the latter is for signature verification)
 \begin{eqnarray}
 \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\
+\ e = \mathtt{\small HASH}(m) \\
 \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\
 \mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64}
 \end{eqnarray}
 
-Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range)\hypertarget{v}{. It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.}
+Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). $e$ is the hash of the message $m$, using some cryptographic hash function such as SHA-3.\hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
 
 \newcommand{\slimit}{\ensuremath{\text{s-limit}}}
 

From 47b796cf83777624b345d287d874fa9bb752785a Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 12:58:39 +1100
Subject: [PATCH 073/132] Added a definition for e in signing transactions and
 moved the footnote to the reference note field.

---
 Biblio.bib | 2 +-
 Paper.tex  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index 0a708ff3..ca3e020d 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -75,7 +75,7 @@ @misc{ECDSAWikipedia
 
 @misc{ECDSAcerticom,
 	url = "http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf",
-	note = "\url{https://web.archive.org/save/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf}.",
+	note = "\url{https://web.archive.org/save/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf}. Refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.",
 	title = {{The Elliptic Curve Digital Signature Algorithm (ECDSA)}},
 	publisher = {{Certicom Research}},
 	location = "Canada",
diff --git a/Paper.tex b/Paper.tex
index 2a81a851..3259e5ad 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1455,10 +1455,10 @@ \section{Signing Transactions}\label{app:signing}
 
 It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}.
 
-We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}. \footnote{For the former citation, refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.} %(assuming that the former is for signature generation and the latter is for signature verification)
+We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}.
 \begin{eqnarray}
 \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\
-\ e = \mathtt{\small HASH}(m) \\
+\ e & \equiv & \mathtt{\small HASH}(m) \\
 \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\
 \mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64}
 \end{eqnarray}

From bbf6453b958c174dd60d243623b36e93b51fbfaf Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 13:08:02 +1100
Subject: [PATCH 074/132] Comment out \usepackage[utf8]{inputenc}

---
 Paper.tex | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index 3259e5ad..d9fd3fa3 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1,7 +1,8 @@
 \documentclass[9pt,oneside]{amsart}
 \usepackage{cancel}
 %\usepackage{tweaklist}
-\usepackage[utf8]{inputenc}
+%\usepackage[utf8]{inputenc}
+%Commenting out as per this suggestion: https://tex.stackexchange.com/questions/4268/inputenc-error-unicode-char-u8-error-while-trying-to-write-a-degree-symbol#comment936894_4268. The Travis CI build shows that TeX live is loaded which should include XeTeX
 %This character renders, so this shouldn't be needed: \DeclareUnicodeCharacter{C3}{\"{e}}
 %For testing: \DeclareUnicodeCharacter{AD}{\Huge [ICI]}
 \usepackage{xspace}

From 474be739313957db0884e08905a3cbdfa770ae23 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 15:04:52 +1100
Subject: [PATCH 075/132] Michael in Keccak, changed e to e with umlaut

---
 Biblio.bib | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Biblio.bib b/Biblio.bib
index ca3e020d..e8aa4f5c 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,7 +1,7 @@
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
 	note = "Unable to be archived by the Wayback Machine",
-	author = {{Guido Bertoni and Joan Daemen and Michael Peeters and Gilles Van Assche and Ronny Van Keer}},
+	author = {{Guido Bertoni and Joan Daemen and Michaẽl Peeters and Gilles Van Assche and Ronny Van Keer}},
 	title = {{KECCAK}},
 	year = "2017",
 }

From 32a3b6dc1968293cef5cdc2e820b38271ce48348 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 15:09:28 +1100
Subject: [PATCH 076/132] Typo no space

---
 Paper.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index d9fd3fa3..ac31258d 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1464,7 +1464,7 @@ \section{Signing Transactions}\label{app:signing}
 \mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64}
 \end{eqnarray}
 
-Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). $e$ is the hash of the message $m$, using some cryptographic hash function such as SHA-3.\hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
+Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). $e$ is the hash of the message $m$, using some cryptographic hash function such as SHA-3. \hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
 
 \newcommand{\slimit}{\ensuremath{\text{s-limit}}}
 

From e10c483eaba3622499fe302dc88ae0d5655851a2 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 15:41:45 +1100
Subject: [PATCH 077/132] e was with a tilde not an umlaut. Updated hypertarget
 for T w.

---
 Biblio.bib | 2 +-
 Paper.tex  | 9 ++++-----
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index e8aa4f5c..d4e197c8 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,7 +1,7 @@
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
 	note = "Unable to be archived by the Wayback Machine",
-	author = {{Guido Bertoni and Joan Daemen and Michaẽl Peeters and Gilles Van Assche and Ronny Van Keer}},
+	author = {{Guido Bertoni and Joan Daemen and Michaël Peeters and Gilles Van Assche and Ronny Van Keer}},
 	title = {{KECCAK}},
 	year = "2017",
 }
diff --git a/Paper.tex b/Paper.tex
index ac31258d..e67ade5a 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2,7 +2,6 @@
 \usepackage{cancel}
 %\usepackage{tweaklist}
 %\usepackage[utf8]{inputenc}
-%Commenting out as per this suggestion: https://tex.stackexchange.com/questions/4268/inputenc-error-unicode-char-u8-error-while-trying-to-write-a-degree-symbol#comment936894_4268. The Travis CI build shows that TeX live is loaded which should include XeTeX
 %This character renders, so this shouldn't be needed: \DeclareUnicodeCharacter{C3}{\"{e}}
 %For testing: \DeclareUnicodeCharacter{AD}{\Huge [ICI]}
 \usepackage{xspace}
@@ -293,8 +292,8 @@ \subsection{The Transaction} \label{subsec:transaction}
 \item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_\mathbf{p}$.}\hypertarget{T g}{
 \item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathbf{g}$.}\hypertarget{T t}{
 \item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathbf{t}$.}\hypertarget{T v}{
-\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathbf{v}$.}
-\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally \hyperlink{T w}{$T_\mathbf{w}$}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}. This is expanded in Appendix \ref{app:signing}.
+\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathbf{v}$.}\hypertarget{T w}{
+\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_\mathbf{w}$}}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}. This is expanded in Appendix \ref{app:signing}.
 \end{description}
 
 Additionally, a contract creation transaction contains:
@@ -1464,7 +1463,7 @@ \section{Signing Transactions}\label{app:signing}
 \mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64}
 \end{eqnarray}
 
-Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). $e$ is the hash of the message $m$, using some cryptographic hash function such as SHA-3. \hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
+Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). $e$ is the hash of the message $m$, using some cryptographic hash function such as SHA-3.\hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
 
 \newcommand{\slimit}{\ensuremath{\text{s-limit}}}
 
@@ -1494,7 +1493,7 @@ \section{Signing Transactions}\label{app:signing}
 h(T) & \equiv & \mathtt{\small KEC}( L_S(T) )
 \end{eqnarray}
 
-\hypertarget{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as:
+\hyperlink{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as:
 \begin{eqnarray}
 G(T, p_r) \equiv T \quad \text{except:} \\
 (\hyperlink{T w}{T_\mathbf{w}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r)

From f5f867763cab507d2d5b981d39762fa1405f6620 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 15:53:32 +1100
Subject: [PATCH 078/132] =?UTF-8?q?Uncommenting=20\usepackage[utf8]{inpute?=
 =?UTF-8?q?nc}=20so=20that=20=C3=AB=20shows=20in=20the=20PDF.=20Fixing=20d?=
 =?UTF-8?q?efinition=20of=20e=20in=20signing=20transactions=20to=20cross-r?=
 =?UTF-8?q?eference=20to=20h(T).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Paper.tex | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index e67ade5a..9a6421df 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1,7 +1,7 @@
 \documentclass[9pt,oneside]{amsart}
 \usepackage{cancel}
 %\usepackage{tweaklist}
-%\usepackage[utf8]{inputenc}
+\usepackage[utf8]{inputenc}
 %This character renders, so this shouldn't be needed: \DeclareUnicodeCharacter{C3}{\"{e}}
 %For testing: \DeclareUnicodeCharacter{AD}{\Huge [ICI]}
 \usepackage{xspace}
@@ -1458,12 +1458,12 @@ \section{Signing Transactions}\label{app:signing}
 We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}.
 \begin{eqnarray}
 \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\
-\ e & \equiv & \mathtt{\small HASH}(m) \\
+\ e & \equiv & \hyperlink{h T}{h(T)} \\
 \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\
 \mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64}
 \end{eqnarray}
 
-Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). $e$ is the hash of the message $m$, using some cryptographic hash function such as SHA-3.\hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
+Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). \hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
 
 \newcommand{\slimit}{\ensuremath{\text{s-limit}}}
 
@@ -1484,13 +1484,14 @@ \section{Signing Transactions}\label{app:signing}
 A(p_r) = \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSAPUBKEY}(p_r) \big) \big)
 \end{equation}
 
+\hypertarget{h T}{
 The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_\mathbf{r}$, $T_\mathbf{s}$ and $\hyperlink{T w}{T_\mathbf{w}}$:
 \begin{eqnarray}
 L_S(T) & \equiv & \begin{cases}
 (T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}) & \text{if} \; T_\mathbf{t} = 0\\
 (T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}) & \text{otherwise}
 \end{cases} \\
-h(T) & \equiv & \mathtt{\small KEC}( L_S(T) )
+h(T) & \equiv & \mathtt{\small KEC}( L_S(T) )}
 \end{eqnarray}
 
 \hyperlink{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as:

From 5cb2dfb4ca1df3a65bb789c614c449ea06055934 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 16:26:13 +1100
Subject: [PATCH 079/132] Added commented lines which cause my local build to
 fail.

---
 Paper.tex | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 9a6421df..ca6c0e00 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -2,7 +2,9 @@
 \usepackage{cancel}
 %\usepackage{tweaklist}
 \usepackage[utf8]{inputenc}
-%This character renders, so this shouldn't be needed: \DeclareUnicodeCharacter{C3}{\"{e}}
+%\DeclareUnicodeCharacter{00A0}{ }
+%\DeclareUnicodeCharacter{C3 ab}{"e}
+%\DeclareUnicodeCharacter{C3 bc}{"u}
 %For testing: \DeclareUnicodeCharacter{AD}{\Huge [ICI]}
 \usepackage{xspace}
 \usepackage{graphicx}
@@ -293,7 +295,7 @@ \subsection{The Transaction} \label{subsec:transaction}
 \item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathbf{g}$.}\hypertarget{T t}{
 \item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathbf{t}$.}\hypertarget{T v}{
 \item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathbf{v}$.}\hypertarget{T w}{
-\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_\mathbf{w}$}}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}. This is expanded in Appendix \ref{app:signing}.
+\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_\mathbf{w}$}}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}, respectively. This is expanded in Appendix \ref{app:signing}.
 \end{description}
 
 Additionally, a contract creation transaction contains:

From be435ed20abfcdaceef7687d3eb588a3d4bd52c8 Mon Sep 17 00:00:00 2001
From: James Ray <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 5 Oct 2017 16:38:05 +1100
Subject: [PATCH 080/132] Uncommenting \usepackage[utf8]{inputenc} again

It's perplexing that there is a difference between my local build and the repo Travis CI build, even though I have TeXLive installed.
---
 Paper.tex | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index ca6c0e00..39d9b2eb 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1,7 +1,9 @@
 \documentclass[9pt,oneside]{amsart}
 \usepackage{cancel}
 %\usepackage{tweaklist}
-\usepackage[utf8]{inputenc}
+
+%You don't use inputenc with XeTeX.
+%\usepackage[utf8]{inputenc}
 %\DeclareUnicodeCharacter{00A0}{ }
 %\DeclareUnicodeCharacter{C3 ab}{"e}
 %\DeclareUnicodeCharacter{C3 bc}{"u}

From 999610d532ada9cbefd2a855543963625ceecf03 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Fri, 6 Oct 2017 18:04:35 +1100
Subject: [PATCH 081/132] grammar difficulty

---
 Paper.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Paper.tex b/Paper.tex
index ca6c0e00..ccd134fb 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -525,7 +525,7 @@ \subsubsection{Block Header Validity}
 \hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s}
 \end{equation}
 
-This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced.
+This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation is required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced.
 
 The nonce of a block, $\hyperlink{H n}{H_\mathbf{n}}$, must satisfy the relations:
 \begin{equation}

From c6678a00cc7749831453986ad464dcfb76324a5d Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Fri, 6 Oct 2017 18:09:42 +1100
Subject: [PATCH 082/132] Updating hypertarget for H_d to direct to "The
 canonical difficulty of a block of header..."

---
 Paper.tex | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 3a0bb200..a7f3493a 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -354,7 +354,7 @@ \subsection{The Block} \label{ch:block}
 \item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}.
 \item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}.
 \item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}.
-\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarget{H d}{
+\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarlink{H d}{
 \item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{
 \item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{
 \item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathbf{l}$.}\hypertarget{H g}{
@@ -494,6 +494,7 @@ \subsubsection{Block Header Validity}
 \newcommand{\expdiffsymb}{\ensuremath{\epsilon}}
 \newcommand{\diffadjustment}{x}
 
+\hypertarget{H d}{
 The canonical difficulty of a block of header $H$ is defined as $D(H)$:
 \begin{equation}
 D(H) \equiv \begin{dcases}
@@ -513,7 +514,7 @@ \subsubsection{Block Header Validity}
 \end{equation}
 \begin{equation}
 \expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor
-\end{equation}
+\end{equation}}
 
 The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation:
 \begin{eqnarray}

From e55a5f624d73b8d0e750b6b381367c0177b3161c Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Fri, 6 Oct 2017 23:02:34 +1100
Subject: [PATCH 083/132] Biblio: moved dates to the note field, fixed author
 fields, added last  accessed (which also shows in the Wayback link), added
 filetea links for pages not able to be saved (or at least not properly) by
 the Wayback Machine. Removed some Wikipedia references, and I will remove
 more.

Paper.tex: added a note for the difficulty, with citations.
---
 Biblio.bib | 147 ++++++++++++++++++++++++++++++++++-------------------
 Paper.tex  |  19 ++++---
 2 files changed, 106 insertions(+), 60 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index d4e197c8..767efe32 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,43 +1,82 @@
+@misc{Multichain,
+	url = "https://www.multichain.com/blog/2015/07/bitcoin-vs-blockchain-debate/",
+	note ="Published on July 19, 2015, accessed 6 October 2017, \url{https://web.archive.org/web/20171006081849/https://www.multichain.com/blog/2015/07/bitcoin-vs-blockchain-debate/}",
+	publisher = "Multichain",
+	year = "2015",
+	author = "Gideon Greenspan",
+	title = "Ending the bitcoin vs blockchain debate",
+}
+
+%@misc{Moore,
+%	url = "https://en.wikipedia.org/wiki/Moore%27s_law",
+%	note = "Last modified on 3 October 2017, accessed 6 October 2017, \url{https://web.archive.org/web/20171006081450/https://en.wikipedia.org/wiki/Moore\%27s_law}",
+%	publisher = "Wikipedia",
+%	year = "2017",
+%	title = "Moore's law",
+%	editor = "Mycroft7"
+%}
+
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
-	note = "Unable to be archived by the Wayback Machine",
-	author = {{Guido Bertoni and Joan Daemen and Michaël Peeters and Gilles Van Assche and Ronny Van Keer}},
+	note = "Accessed 6 October 2017. Unable to be archived by the Wayback Machine.",
+	author = "Guido Bertoni and Joan Daemen and Michaël Peeters and Gilles Van Assche and Ronny Van Keer",
 	title = {{KECCAK}},
 	year = "2017",
 }
 
 @misc{KeccakWikipedia,
 	url = "https://en.wikipedia.org/wiki/SHA-3",
-	note = "\url{https://web.archive.org/web/20171001081722/https://en.wikipedia.org/wiki/SHA-3}",
+	note = "Last modified on 8 July 2016, accessed 17 September 2017, \url{https://web.archive.org/web/20171001081722/https://en.wikipedia.org/wiki/SHA-3}",
 	title = {{SHA-3}},
-	date = "17 September 2017",
+	year = "2017",
 }
 
 @misc{Mist,
 	url = "https://github.com/ethereum/mist/releases/tag/0.8.0",
-	note = "\url{https://web.archive.org/web/20170930071729/https://github.com/ethereum/mist/releases/tag/0.8.0}.",
-	author = {{Fabian Vogelsteller and Alex Van de Sande and Everton Fraga and Ramesh Nair and Luca Zeug}},
-	date = "8 July 2016",
+	note = "Published on 8 July 2016, accessed 30 September 2017, \url{https://web.archive.org/web/20170930071729/https://github.com/ethereum/mist/releases/tag/0.8.0}.",
+	author = "Fabian Vogelsteller and Alex Van de Sande and Everton Fraga and Ramesh Nair and Luca Zeug",
+	year = "2016",
 	publisher = "Github",
-	title = {[Mist release 0.8.0}},
+	title = "Mist release 0.8.0",
 }
 
 @misc{commitdateforEthash,
 	url = "https://github.com/ethereum/yellowpaper/commit/77a8cf2428ce245bf6e2c39c5e652ba58a278666#commitcomment-24644869",
-	note = {{Not able to be archived by the Wayback Machine, the saved page doesn't load showing the cited change and comment.}},
-	author = {{Christoph Jentzsch}},
-	date = "4 May 2015",
+	note = {{Last modified on 4 May 2015. Not able to be archived by the Wayback Machine, since the saved page doesn't load showing the cited change and comment. The change is available here: \url{https://filetea.me/#n3wZ23ZjyxVSxeDnCTlNZkznQ}}},
+	author = "Christoph Jentzsch",
+	year = "2015",
 	publisher = "Github",
 	title = "Commit date for Ethash",
 }
 
-@misc{ASICbitcoinwiki,
-	url = {{https://en.bitcoin.it/wiki/ASIC}.},
-	note = "\url{https://web.archive.org/web/20170929042224/https://en.bitcoin.it/wiki/ASIC}.",
-	title = {{ASIC}},
-	publisher = {{bitcoinwiki}},
-	date = "29 May 2015",	
-}
+@Inbook{Courtois2014,
+author="Courtois, Nicolas T.
+and Grajek, Marek
+and Naik, Rahul",
+editor="Kotulski, Zbigniew
+and Ksi{\k{e}}{\.{z}}opolski, Bogdan
+and Mazur, Katarzyna",
+title="Optimizing SHA256 in Bitcoin Mining",
+bookTitle="Cryptography and Security Systems: Third International Conference, CSS 2014, Lublin, Poland, September 22-24, 2014. Proceedings",
+year="2014",
+publisher="Springer Berlin Heidelberg",
+address="Berlin, Heidelberg",
+pages="131--144",
+abstract="Bitcoin is a ``crypto currency'', a decentralized electronic payment scheme based on cryptography. It implements a particular type of peer-to-peer payment system. Bitcoin depends on well-known cryptographic standards such as SHA-256. In this paper we revisit the cryptographic process which allows one to make money by producing new bitcoins. We reformulate this problem as a specific sort of Constrained Input Small Output (CISO) hashing problem and reduce the problem to a pure block cipher problem, cf. Fig. 1. We estimate the speed of this process and we show that the amortized cost of this process is less than it seems and it depends on a certain cryptographic constant which is estimated to be at most 1.89. These optimizations enable bitcoin miners to save countless millions of dollars per year in electricity bills.",
+isbn="978-3-662-44893-9",
+doi="10.1007/978-3-662-44893-9_12",
+url="https://doi.org/10.1007/978-3-662-44893-9_12"
+}
+
+	
+%@misc{ASICbitcoinwiki,
+%	url = "https://en.bitcoin.it/wiki/ASIC",
+%	note = "Last modified on 29 May 2015, accessed 17 September 2017, \url{https://web.archive.org/web/20170929042224/https://en.bitcoin.it/wiki/ASIC}.",
+%	title = {{ASIC}},
+%	publisher = {{bitcoinwiki}},
+%	year = "2015",
+%	author = "TheRealSteve",
+%}
 
 @book{ASICSmithMJS,
 	title = {{Application-Specific Integrated Circuits}},
@@ -45,37 +84,37 @@ @book{ASICSmithMJS
 	publisher = "Addison-Wesley",
 	year = "1997",
 	ISBN = "0201500221",
-	note = "Available here: \url{https://www.slideshare.net/nhKhanhNguyn/michael-john-sebastian-smith-applicationspecific-integrated-circuitsaddisonwesley-professional-1997-1} with the archive: \url{https://web.archive.org/save/https://www.slideshare.net/nhKhanhNguyn/michael-john-sebastian-smith-applicationspecific-integrated-circuitsaddisonwesley-professional-1997-1}. A preview is available at \url{https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}, with the archive: 
+	note = "Available here: \url{https://www.slideshare.net/nhKhanhNguyn/michael-john-sebastian-smith-applicationspecific-integrated-circuitsaddisonwesley-professional-1997-1}, which is not able to be archived by the Wayback Machine, but is available here: \url{https://filetea.me/#n3wO8DL3jr9RyGrFrKuCyozKg}. A preview is also available at \url{https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}, with the archive: 
 \url{https://web.archive.org/web/20170929041938/https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}.",
 }
 
-@misc{ASICWiki,
-	url = "https://en.wikipedia.org/wiki/Application-specific_integrated_circuit",
-	note = "\url{https://web.archive.org/web/20170929032958/https://en.wikipedia.org/wiki/Application-specific_integrated_circuit}.",
-	title = "Application-specific integrated circuit",
-	publisher = "Wikipedia",
-	date = "3 July 2017",
-}
+%@misc{ASICWiki,
+%	url = "https://en.wikipedia.org/wiki/Application-specific_integrated_circuit",
+%	note = "Last modified on 3 July 2017, accessed 29 September 2017, \url{https://web.archive.org/web/20170929032958/https://en.wikipedia.org/wiki/Application-specific_integrated_circuit}.",
+%	title = "Application-specific integrated circuit",
+%	publisher = "Wikipedia",
+%	year = "2017",
+%} Wikipedia is not ideal for citing and there is another citation, ASICSmithMJS
 
 @misc{LatticeOrder,
 	url = "https://en.wikipedia.org/wiki/Lattice_(order)",
-	note = "\url{https://web.archive.org/save/https://en.wikipedia.org/wiki/Lattice_(order)}.",
+	note = "Last modified on 1 August 2017, accessed 16 September 2017, \url{https://web.archive.org/save/https://en.wikipedia.org/wiki/Lattice_(order)}.",
 	title = {{Lattice (order)}},
 	publisher = "Wikipedia",
-	date = "1 August 2017",
+	year = "2017",
 }
 
 @misc{ECDSAWikipedia,
 	url = "https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm",
-	note = "\url{https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm}.",
+	note = "Last modified on 12 September 2017, accessed 16 September 2017, \url{https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm}.",
 	title = {{Elliptic Curve Digital Signature Algorithm}},
 	publisher = "Wikipedia",
-	date = "12 September 2017",
+	year = "2017",
 }
 
 @misc{ECDSAcerticom,
 	url = "http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf",
-	note = "\url{https://web.archive.org/save/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf}. Refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.",
+	note = "Accessed 21 September 2017, \url{https://web.archive.org/web/20170921160141/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf}. Refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.",
 	title = {{The Elliptic Curve Digital Signature Algorithm (ECDSA)}},
 	publisher = {{Certicom Research}},
 	location = "Canada",
@@ -85,25 +124,26 @@ @misc{ECDSAcerticom
 
 @misc{secp256k1BitcoinWiki2016,
 	url = "https://en.bitcoin.it/wiki/Secp256k1",
-	note = "\url{https://web.archive.org/web/20170916032105/https://en.bitcoin.it/wiki/Secp256k1}.",
+	note = "The author and editor names are taken from the history of contributions. Last modified on 4 August 2016, accessed 16 September 2017, \url{https://web.archive.org/web/20170916032105/https://en.bitcoin.it/wiki/Secp256k1}.",
 	title = {{Secp256k1}},
-	publisher = {{bitcoinwiki}},
-	date = {{4 August 2016}},
+	year = "2016",
+	author = "Casascius",
+	editor = "Theymos",
 }
 
 @misc{secp256k1StackExchange2014,
 	url = "https://bitcoin.stackexchange.com/a/21911/48875",
-	note = "\url{https://web.archive.org/web/20170916031457/https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like/21911}.",
+	note = "Accessed 16 September 2017,\url{https://web.archive.org/web/20170916031457/https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like/21911}.",
 	author = "Pieter Wuille",
-	title = {{What does the curve used in Bitcoin, secp256k1, look like?}},
+	title = {{"What does the curve used in Bitcoin, secp256k1, look like?"}},
 	year = "2014",
 	publisher = {{Bitcoin Stack Exchange}},
 }
 
 @misc{npmElectrum2017,
-	url = {{https://www.npmjs.com/package/electrum}},
+	url = "https://www.npmjs.com/package/electrum",
 	note = {{\url{https://web.archive.org/save/https://www.npmjs.com/package/electrum}.}},
-	author = {Arnaud, Pierre and Schroeter, Mathieu and Le Barbare, Sam},
+	author = "Arnaud, Pierre and Schroeter, Mathieu and Le Barbare, Sam",
 	title = {{Electrum}},
 	year = {{2017}},
 }
@@ -117,7 +157,7 @@ @misc{cryptoeprint:2013:881
 }
 
 @InCollection{gura2004comparing,
-	url = {{https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}},
+	url = "https://www.iacr.org/archive/ches2004/31560117/31560117.pdf",
 	note = {{\url{https://web.archive.org/web/20170810035057/https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}.}},
 	BookTitle = {{Cryptographic Hardware and Embedded Systems-CHES 2004}},
 	Publisher = {{Springer}},
@@ -135,7 +175,7 @@ @InProceedings{laurie2004proof
 }
 
 @Misc{vishnumurthy03karma:a,
-    url = {{https://www.cs.cornell.edu/people/egs/papers/karma.pdf}},
+    url = "https://www.cs.cornell.edu/people/egs/papers/karma.pdf",
     note = {{\url{https://web.archive.org/web/20170810031834/https://www.cs.cornell.edu/people/egs/papers/karma.pdf}.}},
     author = {Vishnumurthy, Vivek and Chandrakumar, Sangeeth and Gün Sirer, Emin},
     title = {KARMA: A Secure Economic Framework for Peer-to-Peer Resource Sharing},
@@ -143,7 +183,7 @@ @Misc{vishnumurthy03karma:a
 }
 
 @InProceedings{dwork92pricingvia,
-    url = {{http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}},
+    url = "http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf",
     note = {{\url{https://web.archive.org/web/20170810035254/http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}.}},
     author = {Cynthia Dwork and Moni Naor},
     title = {Pricing via processing or combatting junk mail},
@@ -153,7 +193,7 @@ @InProceedings{dwork92pricingvia
 }
 
 @Article{nakamoto2008bitcoin,
-	url = {{http://nakamotoinstitute.org/bitcoin/}},
+	url = "http://nakamotoinstitute.org/bitcoin/",
 	author = {Nakamoto, Satoshi},
 	title = {{Bitcoin: A peer-to-peer electronic cash system}},
 	journal = {{Consulted}},
@@ -163,7 +203,7 @@ @Article{nakamoto2008bitcoin
 }
 
 @Misc{sprankel2013technical,
-	url = {{http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}},
+	url = "http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf",
 	note = {{\url{https://web.archive.org/web/20170810025028/http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}.}},
 	author = {Sprankel, Simon},
 	title = {{Technical Basis of Digital Currencies}},
@@ -171,7 +211,7 @@ @Misc{sprankel2013technical
 }
 
 @Article{aron2012bitcoin,
-	url = {{http://www.sciencedirect.com/science/article/pii/S0262407912601055}},
+	url = "http://www.sciencedirect.com/science/article/pii/S0262407912601055",
 	Publisher = {{Elsevier}},
 	author = {Aron, Jacob},
 	title = {{BitCoin software finds new life}},
@@ -183,7 +223,7 @@ @Article{aron2012bitcoin
 }
 
 @article{mastercoin2013willett,
-	url = {{https://github.com/mastercoin-MSC/spec}},
+	url = "https://github.com/mastercoin-MSC/spec",
 	note = {{\url{https://web.archive.org/web/20170810035927/https://github.com/OmniLayer/spec}.}},
 	author = {Willett, J. R.},
 	title = {{MasterCoin Complete Specification}},
@@ -191,7 +231,7 @@ @article{mastercoin2013willett
 }
 
 @article{colouredcoins2012rosenfeld,
-	url = {{https://bitcoil.co.il/BitcoinX.pdf}},
+	url = "https://bitcoil.co.il/BitcoinX.pdf",
 	note = {{Test: \url{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}.}},
 	author = {Meni Rosenfeld},
 	title = {{Overview of Colored Coins}},
@@ -199,7 +239,7 @@ @article{colouredcoins2012rosenfeld
 }
 
 @incollection{boutellier2014pirates,
-	url = {{https://www.springer.com/gb/book/9783319040158}},
+	url = "https://www.springer.com/gb/book/9783319040158",
 	note = {{URL available at \url{http://wiki.erights.org/wiki/Documentation}. \url{https://web.archive.org/web/20170810040208/https://www.springer.com/gb/book/9783319040158}.}},
 	booktitle = {{Growth Through Innovation}},
 	publisher = {{Springer}},
@@ -210,7 +250,7 @@ @incollection{boutellier2014pirates
 }
 
 @Article{szabo1997formalizing,
-	url = {{http://firstmonday.org/ojs/index.php/fm/article/view/548}},
+	url = "http://firstmonday.org/ojs/index.php/fm/article/view/548",
 	note = {{\url{https://web.archive.org/web/20170810042659/http://firstmonday.org/ojs/index.php/fm/article/view/548}.}},
 	author = {Szabo, Nick},
 	title = {{Formalizing and securing relationships on public networks}},
@@ -221,7 +261,8 @@ @Article{szabo1997formalizing
 }
 
 @InProceedings{miller1997future,
-	url = {{https://drive.google.com/file/d/0Bw0VXJKBgYPMS0J2VGIyWWlocms/edit?usp=sharing}},
+	url = "https://drive.google.com/file/d/0Bw0VXJKBgYPMS0J2VGIyWWlocms/edit?usp=sharing",
+	note = "https://filetea.me/n3we8BhHZE5QYC8iVxcUE152Q",
 	BookTitle = {{paper delivered at the Extro 3 Conference (August 9)}},
 	author = {Miller, Mark},
 	title = {{The Future of Law}},
@@ -229,7 +270,7 @@ @InProceedings{miller1997future
 }
 
 @article{buterin2013ethereum,
-	url = {{https://github.com/ethereum/wiki/wiki/White-Paper}},
+	url = "https://github.com/ethereum/wiki/wiki/White-Paper",
 	author = {Vitalik Buterin},
 	title = {{Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform}},
 	year = {{2013}},
@@ -268,10 +309,12 @@ @article{lerner2014randmemohash
 }
 
 @article{FowlerNollVo1991FNVHash,
-	url = {{https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#cite_note-2}},
-	author = {Glenn Fowler, Landon Curt Noll, Phong Vo},
+	url = "https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#cite_note-2",
+	author = {Glenn Fowler and Landon Curt Noll and Phong Vo},
 	title = {{Fowler–Noll–Vo hash function}},
 	year = {{1991}},
 }
 
 % Style guide: \url{https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management}
+
+% About Wikipedia references: https://en.wikipedia.org/wiki/Wikipedia:Citing_Wikipedia and https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_as_a_Citable_Source#Final_Note. 
diff --git a/Paper.tex b/Paper.tex
index a7f3493a..0bb6d335 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -354,9 +354,9 @@ \subsection{The Block} \label{ch:block}
 \item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}.
 \item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}.
 \item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}.
-\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hypertarlink{H d}{
+\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hyperlink{H d}{
 \item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{
-\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathbf{i}$.}\hypertarget{H l}{
+\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathbf{i}$.}\hyperlink{H l}{
 \item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathbf{l}$.}\hypertarget{H g}{
 \item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathbf{g}$.}\hypertarget{H s}{
 \item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_\mathbf{s}$}.}\hypertarget{H x}{
@@ -443,7 +443,7 @@ \subsubsection{Holistic Validity}
 
 Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly.
 
-The values stemming from the computation of transactions, specifically the \hyperlink{Transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{stateR-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}.
+The values stemming from the computation of transactions, specifically the \hyperlink{Transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{state-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}.
 
 \subsubsection{Serialisation}
 
@@ -516,12 +516,15 @@ \subsubsection{Block Header Validity}
 \expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor
 \end{equation}}
 
+Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks, which also stabilises the time difference between blocks, as computation power becomes more efficient, \eg with Moore's Law (\cite{Multichain}, \cite{Moore}).
+
+\hypertarget{H l}{
 The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation:
 \begin{eqnarray}
 & & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\
 & & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\
 & & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000
-\end{eqnarray}
+\end{eqnarray}}
 
 \hyperlink{H s}{$H_\mathbf{s}$} is the timestamp of block $H$ and must fulfil the relation:
 \begin{equation}
@@ -1151,7 +1154,7 @@ \subsection{Mining Proof-of-Work} \label{ch:pow}
 
 Secondly, it should not be possible to make super-linear profits, and especially not so with a high initial barrier. Such a mechanism allows a well-funded adversary to gain a troublesome amount of the network's total mining power and as such gives them a super-linear reward (thus skewing distribution in their favour) as well as reducing the network security.
 
-One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task (\cite{ASICSmithMJS}, \cite{ASICWiki}). In Bitcoin's case the task is the SHA256 hash function (\cite{ASICbitcoinwiki}). While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet.
+One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task (\cite{ASICSmithMJS}, \cite{ASICWiki}). In Bitcoin's case the task is the SHA256 hash function (\cite{Courtois2014}). While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet.
 
 Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the \hyperlink{block nonce}{nonce} requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware''  for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum \textit{Frontier} and \textit{Homestead} we have chosen the first path.
 
@@ -1202,7 +1205,7 @@ \section{Conclusion} \label{ch:conclusion}
 
 \section{Acknowledgements}
 
-Many thanks to Aeron Buchanan for authoring the Homestead revisions, Christoph Jentzsch for authoring the Ethash algorithm and Yoichi Hirai for doing most of the EIP-150 changes. Important maintenance, useful corrections and suggestions were provided by a number of others from the Ethereum DEV organisation and Ethereum community at large including Gustav Simonsson, Pawe\l{} Bylica, Jutta Steiner, Nick Savers, Viktor Tr\'{o}n, Marko Simovic, Giacomo Tazzari and, of course, Vitalik Buterin.
+Many thanks to Aeron Buchanan for authoring the \textit{Homestead} revisions, Christoph Jentzsch for authoring the Ethash algorithm and Yoichi Hirai for doing most of the EIP-150 changes. Important maintenance, useful corrections and suggestions were provided by a number of others from the Ethereum DEV organisation and Ethereum community at large including Gustav Simonsson, Pawe\l{} Bylica, Jutta Steiner, Nick Savers, Viktor Tr\'{o}n, Marko Simovic, Giacomo Tazzari and, of course, Vitalik Buterin.
 
 \section{Availability}
 
@@ -1242,7 +1245,7 @@ \section{Terminology} \label{ch:Terminology}
 
 \item[App] An end-user-visible application hosted in the Ethereum Browser.
 
-\item[Ethereum Browser] (aka Ethereum Reference Client) A cross-platform GUI of an interface similar to a simplified browser (a la Chrome) that is able to host sandboxed applications whose backend is purely on the Ethereum protocol, which is known as Mist since 8 July 2016 (\cite{Mist}).
+\item[Ethereum Browser] (aka Ethereum Reference Client) A cross-platform GUI of an interface similar to a simplified browser (a la Chrome) that is able to host sandboxed applications whose backend is purely on the Ethereum protocol, which is known as Mist since 8 July 2016 (\citeauthor{Mist}).
 
 \item[Ethereum Virtual Machine] (aka EVM) The virtual machine that forms the key part of the execution model for an Account's associated EVM Code.
 
@@ -1548,7 +1551,7 @@ \section{Fee Schedule}\label{app:fees}
 $G_{\mathrm{exp}}$ & 10 & This is a partial payment for an {\small EXP} operation. \\
 $G_{\mathrm{expbyte}}$ & 50 & This is a partial payment when multiplied by $\lceil\log_{256}(exponent)\rceil$ for the {\small EXP} operation. \\
 $G_{\mathrm{memory}}$ & 3 & This is paid for every additional word when expanding memory. \hypertarget{Gtxcreate}{\\
-$G_{\mathrm{txcreate}}$ & 32000 & This is paid by all contract-creating transactions after the {\it Homestead transition}.}\hypertarget{Gtxdatazero}{\\
+$G_{\mathrm{txcreate}}$ & 32000 & This is paid by all contract-creating transactions after the {\textit{Homestead transition}}.}\hypertarget{Gtxdatazero}{\\
 $G_{\mathrm{txdatazero}}$ & 4 & This is paid for every zero byte of data or code for a transaction.}\hypertarget{Gtxdatanonzero}{ \\
 $G_{\mathrm{txdatanonzero}}$ & 68 & This is paid for every non-zero byte of data or code for a transaction.}\hypertarget{Gtransaction}{ \\
 $G_{\mathrm{Gtransaction}}$ & 21000 & This is paid for every transaction.} \\

From 54036a3d67d8dbcdfa8fd562245e1b79b5c05d5c Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Fri, 6 Oct 2017 23:16:38 +1100
Subject: [PATCH 084/132] Added a ref. for Moore's Law: THOMPSON200620.

---
 Biblio.bib | 27 ---------------------------
 Paper.tex  |  2 +-
 2 files changed, 1 insertion(+), 28 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index 767efe32..581c5f6f 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -7,15 +7,6 @@ @misc{Multichain
 	title = "Ending the bitcoin vs blockchain debate",
 }
 
-%@misc{Moore,
-%	url = "https://en.wikipedia.org/wiki/Moore%27s_law",
-%	note = "Last modified on 3 October 2017, accessed 6 October 2017, \url{https://web.archive.org/web/20171006081450/https://en.wikipedia.org/wiki/Moore\%27s_law}",
-%	publisher = "Wikipedia",
-%	year = "2017",
-%	title = "Moore's law",
-%	editor = "Mycroft7"
-%}
-
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
 	note = "Accessed 6 October 2017. Unable to be archived by the Wayback Machine.",
@@ -68,16 +59,6 @@ @Inbook{Courtois2014
 url="https://doi.org/10.1007/978-3-662-44893-9_12"
 }
 
-	
-%@misc{ASICbitcoinwiki,
-%	url = "https://en.bitcoin.it/wiki/ASIC",
-%	note = "Last modified on 29 May 2015, accessed 17 September 2017, \url{https://web.archive.org/web/20170929042224/https://en.bitcoin.it/wiki/ASIC}.",
-%	title = {{ASIC}},
-%	publisher = {{bitcoinwiki}},
-%	year = "2015",
-%	author = "TheRealSteve",
-%}
-
 @book{ASICSmithMJS,
 	title = {{Application-Specific Integrated Circuits}},
 	author = "Smith, Michael John Sebastian",
@@ -88,14 +69,6 @@ @book{ASICSmithMJS
 \url{https://web.archive.org/web/20170929041938/https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}.",
 }
 
-%@misc{ASICWiki,
-%	url = "https://en.wikipedia.org/wiki/Application-specific_integrated_circuit",
-%	note = "Last modified on 3 July 2017, accessed 29 September 2017, \url{https://web.archive.org/web/20170929032958/https://en.wikipedia.org/wiki/Application-specific_integrated_circuit}.",
-%	title = "Application-specific integrated circuit",
-%	publisher = "Wikipedia",
-%	year = "2017",
-%} Wikipedia is not ideal for citing and there is another citation, ASICSmithMJS
-
 @misc{LatticeOrder,
 	url = "https://en.wikipedia.org/wiki/Lattice_(order)",
 	note = "Last modified on 1 August 2017, accessed 16 September 2017, \url{https://web.archive.org/save/https://en.wikipedia.org/wiki/Lattice_(order)}.",
diff --git a/Paper.tex b/Paper.tex
index 0bb6d335..0100ad6c 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -516,7 +516,7 @@ \subsubsection{Block Header Validity}
 \expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor
 \end{equation}}
 
-Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks, which also stabilises the time difference between blocks, as computation power becomes more efficient, \eg with Moore's Law (\cite{Multichain}, \cite{Moore}).
+Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks, which also stabilises the time difference between blocks, as computation power becomes more efficient, \eg with Moore's Law (\cite{Multichain}, \cite{THOMPSON200620}).
 
 \hypertarget{H l}{
 The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation:

From d48dd68739ae95991d8e965789578ea1134880d3 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Sat, 14 Oct 2017 17:35:46 +1100
Subject: [PATCH 085/132] Removed unreliable references e.g. Wikipedia, Bitcoin
 wiki, Multichain blog post, and reworded the part on the difficulty level
 justification.

---
 Biblio.bib | 72 +++++++++++++++++-------------------------------------
 Paper.tex  | 10 ++++----
 2 files changed, 27 insertions(+), 55 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index 581c5f6f..f1ab4ca1 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,10 +1,14 @@
-@misc{Multichain,
-	url = "https://www.multichain.com/blog/2015/07/bitcoin-vs-blockchain-debate/",
-	note ="Published on July 19, 2015, accessed 6 October 2017, \url{https://web.archive.org/web/20171006081849/https://www.multichain.com/blog/2015/07/bitcoin-vs-blockchain-debate/}",
-	publisher = "Multichain",
-	year = "2015",
-	author = "Gideon Greenspan",
-	title = "Ending the bitcoin vs blockchain debate",
+@article{THOMPSON200620,
+title = "Moore's law: the future of Si microelectronics",
+journal = "Materials Today",
+volume = "9",
+number = "6",
+pages = "20 - 25",
+year = "2006",
+issn = "1369-7021",
+doi = "https://doi.org/10.1016/S1369-7021(06)71539-5",
+url = "http://www.sciencedirect.com/science/article/pii/S1369702106715395",
+author = "Scott E. Thompson and Srivatsan Parthasarathy"
 }
 
 @misc{Keccak,
@@ -15,13 +19,6 @@ @misc{Keccak
 	year = "2017",
 }
 
-@misc{KeccakWikipedia,
-	url = "https://en.wikipedia.org/wiki/SHA-3",
-	note = "Last modified on 8 July 2016, accessed 17 September 2017, \url{https://web.archive.org/web/20171001081722/https://en.wikipedia.org/wiki/SHA-3}",
-	title = {{SHA-3}},
-	year = "2017",
-}
-
 @misc{Mist,
 	url = "https://github.com/ethereum/mist/releases/tag/0.8.0",
 	note = "Published on 8 July 2016, accessed 30 September 2017, \url{https://web.archive.org/web/20170930071729/https://github.com/ethereum/mist/releases/tag/0.8.0}.",
@@ -69,20 +66,17 @@ @book{ASICSmithMJS
 \url{https://web.archive.org/web/20170929041938/https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}.",
 }
 
-@misc{LatticeOrder,
-	url = "https://en.wikipedia.org/wiki/Lattice_(order)",
-	note = "Last modified on 1 August 2017, accessed 16 September 2017, \url{https://web.archive.org/save/https://en.wikipedia.org/wiki/Lattice_(order)}.",
-	title = {{Lattice (order)}},
-	publisher = "Wikipedia",
-	year = "2017",
-}
-
-@misc{ECDSAWikipedia,
-	url = "https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm",
-	note = "Last modified on 12 September 2017, accessed 16 September 2017, \url{https://web.archive.org/web/20170916033830/https://en.wikipedia.org/wiki/Elliptic\_Curve\_Digital\_Signature\_Algorithm}.",
-	title = {{Elliptic Curve Digital Signature Algorithm}},
-	publisher = "Wikipedia",
-	year = "2017",
+@Book{zbMATH01748069,
+    Author = {B.A. {Davey} and H.A. {Priestley}},
+    Title = {{Introduction to lattices and order. 2nd ed.}},
+    Edition = {2nd ed.},
+    ISBN = {0-521-78451-4/pbk},
+    Pages = {xii + 298},
+    Year = {2002},
+    Publisher = {Cambridge: Cambridge University Press},
+    Language = {English},
+    MSC2010 = {06-01},
+    Zbl = {1002.06001}
 }
 
 @misc{ECDSAcerticom,
@@ -95,24 +89,6 @@ @misc{ECDSAcerticom
 	year = "2001",
 }
 
-@misc{secp256k1BitcoinWiki2016,
-	url = "https://en.bitcoin.it/wiki/Secp256k1",
-	note = "The author and editor names are taken from the history of contributions. Last modified on 4 August 2016, accessed 16 September 2017, \url{https://web.archive.org/web/20170916032105/https://en.bitcoin.it/wiki/Secp256k1}.",
-	title = {{Secp256k1}},
-	year = "2016",
-	author = "Casascius",
-	editor = "Theymos",
-}
-
-@misc{secp256k1StackExchange2014,
-	url = "https://bitcoin.stackexchange.com/a/21911/48875",
-	note = "Accessed 16 September 2017,\url{https://web.archive.org/web/20170916031457/https://bitcoin.stackexchange.com/questions/21907/what-does-the-curve-used-in-bitcoin-secp256k1-look-like/21911}.",
-	author = "Pieter Wuille",
-	title = {{"What does the curve used in Bitcoin, secp256k1, look like?"}},
-	year = "2014",
-	publisher = {{Bitcoin Stack Exchange}},
-}
-
 @misc{npmElectrum2017,
 	url = "https://www.npmjs.com/package/electrum",
 	note = {{\url{https://web.archive.org/save/https://www.npmjs.com/package/electrum}.}},
@@ -287,7 +263,3 @@ @article{FowlerNollVo1991FNVHash
 	title = {{Fowler–Noll–Vo hash function}},
 	year = {{1991}},
 }
-
-% Style guide: \url{https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management}
-
-% About Wikipedia references: https://en.wikipedia.org/wiki/Wikipedia:Citing_Wikipedia and https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_as_a_Citable_Source#Final_Note. 
diff --git a/Paper.tex b/Paper.tex
index 0100ad6c..985d6c50 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -206,7 +206,7 @@ \section{Conventions}\label{ch:conventions}
 
 Functions operating on highly structured values are denoted with an upper-case greek letter, \eg \hyperlink{Upsilon}{$\Upsilon$}, the Ethereum state transition function.
 
-For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$}, the cost function for the \hyperlink{SSTORE}{\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest, rather than later releases (\cite{Keccak}, \cite{KeccakWikipedia})) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function.
+For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$}, the cost function for the \hyperlink{SSTORE}{\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest, rather than later releases (\cite{Keccak}) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function.
 
 Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg  \hyperlink{transaction nonce}{$T_\mathbf{n}$, denotes the nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components.
 
@@ -516,7 +516,7 @@ \subsubsection{Block Header Validity}
 \expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor
 \end{equation}}
 
-Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks, which also stabilises the time difference between blocks, as computation power becomes more efficient, \eg with Moore's Law (\cite{Multichain}, \cite{THOMPSON200620}).
+Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks. This is necessary to stabilise the time difference between blocks as  computation power becomes more efficient, with Moore's Law (\cite{THOMPSON200620}).
 
 \hypertarget{H l}{
 The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation:
@@ -1459,11 +1459,11 @@ \section{Precompiled Contracts}\label{app:precompiled}
 
 \section{Signing Transactions}\label{app:signing}
 
-The method of signing transactions is similar to the `Electrum style signatures' as defined by \cite{npmElectrum2017}, heading "Managing styles with Radium" in the bullet point list. This method utilises the SECP-256k1 curve as described by \cite{secp256k1BitcoinWiki2016} and \cite{secp256k1StackExchange2014}, and is implemented similarly to as described by \cite{gura2004comparing} on p. 9 of 15, para. 3.
+The method of signing transactions is similar to the `Electrum style signatures' as defined by \cite{npmElectrum2017}, heading "Managing styles with Radium" in the bullet point list. This method utilises the SECP-256k1 curve as described by \cite{Courtois2014}, and is implemented similarly to as described by \cite{gura2004comparing} on p. 9 of 15, para. 3.
 
 It is assumed that the sender has a valid private key $p_r$, which is a randomly selected positive integer (represented as a byte array of length 32 in big-endian form) in the range \hbox{$[1, \mathtt{\tiny secp256k1n} - 1]$}.
 
-We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom} and \cite{ECDSAWikipedia}.
+We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom}.
 \begin{eqnarray}
 \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\
 \ e & \equiv & \hyperlink{h T}{h(T)} \\
@@ -2278,7 +2278,7 @@ \section{List of mathematical symbols}\label{app:symbols}
 Symbol & Latex Command & Description \\
 \midrule
 \hypertarget{bigvee}{
-$\bigvee$ & \verb|\bigvee| & This is the least upper bound, supremum, or join of all elements operated on. Thus it is the greatest element of such elements (\cite{LatticeOrder}).}\\
+$\bigvee$ & \verb|\bigvee| & This is the least upper bound, supremum, or join of all elements operated on. Thus it is the greatest element of such elements (\cite{zbMATH01748069}).}\\
 \bottomrule
 \end{tabularx}
 

From 5c0d6b77e8f0dbe587d401dbd9435abfea1e73dc Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 19 Oct 2017 19:57:05 +1100
Subject: [PATCH 086/132] Hundreds of _\mathbf s replaced with _\mathrm

---
 Paper.tex | 748 +++++++++++++++++++++++++++---------------------------
 1 file changed, 374 insertions(+), 374 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 985d6c50..1138401f 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -148,7 +148,7 @@ \section{The Blockchain Paradigm} \label{ch:overview}
 
 Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally:\hypertarget{Upsilon}{}
 \begin{equation}
-\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_\mathbf{t}, T)
+\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_\mathrm{t}, T)
 \end{equation}
 
 where $\Upsilon$ is the Ethereum state transition function. In Ethereum, $\Upsilon$, together with $\boldsymbol{\sigma}$ are considerably more powerful then any existing comparable system; $\Upsilon$ allows components to carry out arbitrary computation, while $\boldsymbol{\sigma}$ allows components to store arbitrary state between transactions.
@@ -159,7 +159,7 @@ \section{The Blockchain Paradigm} \label{ch:overview}
 
 Formally, we expand to:
 \begin{eqnarray}
-\boldsymbol{\sigma}_{t+1} & \equiv & \hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}_\mathbf{t}, B) \\
+\boldsymbol{\sigma}_{t+1} & \equiv & \hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}_\mathrm{t}, B) \\
 B & \equiv & (..., (T_0, T_1, ...) ) \\
 \Pi(\boldsymbol{\sigma}, B) & \equiv & \hyperlink{Omega}{\Omega}(B, \hyperlink{Upsilon}{\Upsilon}(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...)
 \end{eqnarray}
@@ -208,7 +208,7 @@ \section{Conventions}\label{ch:conventions}
 
 For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$}, the cost function for the \hyperlink{SSTORE}{\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest, rather than later releases (\cite{Keccak}) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function.
 
-Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg  \hyperlink{transaction nonce}{$T_\mathbf{n}$, denotes the nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components.
+Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg  \hyperlink{transaction nonce}{$T_\mathrm{n}$, denotes the nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components.
 
 Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a \hyperlink{transaction nonce}{transaction nonce}. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation.
 
@@ -216,7 +216,7 @@ \section{Conventions}\label{ch:conventions}
 
 Throughout, we assume scalars are positive integers and thus belong to the set $\mathbb{P}$. The set of all byte sequences is $\mathbb{B}$, formally defined in Appendix \ref{app:rlp}. If such a set of sequences is restricted to those of a particular length, it is denoted with a subscript, thus the set of all byte sequences of length $32$ is named $\mathbb{B}_{32}$ and the set of all positive integers smaller than $2^{256}$ is named $\mathbb{P}_{256}$. This is formally defined in section \ref{ch:block}.
 
-Square brackets are used to index into and reference individual components or subsequences of sequences, \eg $\boldsymbol{\mu}_\mathbf{s}[0]$ denotes the first item on the machine's stack. For subsequences, ellipses are used to specify the intended range, to include elements at both limits, \eg $\boldsymbol{\mu}_\mathbf{m}[0..31]$ denotes the first 32 items of the machine's memory.
+Square brackets are used to index into and reference individual components or subsequences of sequences, \eg $\boldsymbol{\mu}_\mathrm{s}[0]$ denotes the first item on the machine's stack. For subsequences, ellipses are used to specify the intended range, to include elements at both limits, \eg $\boldsymbol{\mu}_\mathrm{m}[0..31]$ denotes the first 32 items of the machine's memory.
 
 In the case of the global state $\boldsymbol{\sigma}$, which is a sequence of accounts, themselves tuples, the square brackets are used to reference an individual account.
 
@@ -242,15 +242,15 @@ \subsection{World State} \label{ch:state}
 
 \begin{description}
 \hypertarget{account nonce}{}
-\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_\mathbf{n}$.
-\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_\mathbf{b}$.
-\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the  256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{s}$.
-\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_\mathbf{c}$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_\mathbf{c}$.
+\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_\mathrm{n}$.
+\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_\mathrm{b}$.
+\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the  256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_\mathrm{s}$.
+\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_\mathrm{c}$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_\mathrm{c}$.
 \end{description}
 
 Since I typically wish to refer not to the trie's root hash but to the underlying set of key/value pairs stored within, I define a convenient equivalence:
 \begin{equation}
-\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathbf{s})\big) \equiv \boldsymbol{\sigma}[a]_\mathbf{s}
+\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathrm{s})\big) \equiv \boldsymbol{\sigma}[a]_\mathrm{s}
 \end{equation}
 
 The collapse function for the set of key/value pairs in the trie, $L_I^*$, is defined as the \hyperlink{f*}{element-wise transformation} of the base function $L_I$, given as:
@@ -263,9 +263,9 @@ \subsection{World State} \label{ch:state}
 k \in \mathbb{B}_{32} \quad \wedge \quad v \in \mathbb{P}
 \end{equation}
 
-It shall be understood that $\boldsymbol{\sigma}[a]_\mathbf{s}$ is not a `physical' member of the account and does not contribute to its later serialisation.
+It shall be understood that $\boldsymbol{\sigma}[a]_\mathrm{s}$ is not a `physical' member of the account and does not contribute to its later serialisation.
 
-If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_\mathbf{c} = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account.
+If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_\mathrm{c} = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account.
 
 Thus we may define a world-state collapse function $L_S$:
 \begin{equation}
@@ -273,7 +273,7 @@ \subsection{World State} \label{ch:state}
 \end{equation}
 where
 \begin{equation}
-p(a) \equiv  \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_\mathbf{n}, \boldsymbol{\sigma}[a]_\mathbf{b}, \boldsymbol{\sigma}[a]_\mathbf{s}, \boldsymbol{\sigma}[a]_\mathbf{c}) \big) \big)
+p(a) \equiv  \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_\mathrm{n}, \boldsymbol{\sigma}[a]_\mathrm{b}, \boldsymbol{\sigma}[a]_\mathrm{s}, \boldsymbol{\sigma}[a]_\mathrm{c}) \big) \big)
 \end{equation}
 
 This function, $L_S$, is used alongside the trie function to provide a short identity (hash) of the world state. We assume:
@@ -282,7 +282,7 @@ \subsection{World State} \label{ch:state}
 \end{equation}
 \hypertarget{v x}{where $v$ is the account validity function:
 \begin{equation}
-\quad v(x) \equiv x_\mathbf{n} \in \mathbb{P}_{256} \wedge x_\mathbf{b} \in \mathbb{P}_{256} \wedge x_\mathbf{s} \in \mathbb{B}_{32} \wedge x_\mathbf{c} \in \mathbb{B}_{32}
+\quad v(x) \equiv x_\mathrm{n} \in \mathbb{P}_{256} \wedge x_\mathrm{b} \in \mathbb{P}_{256} \wedge x_\mathrm{s} \in \mathbb{B}_{32} \wedge x_\mathrm{c} \in \mathbb{B}_{32}
 }
 \end{equation}
 
@@ -292,18 +292,18 @@ \subsection{The Transaction} \label{subsec:transaction}
 
 \begin{description}
 \hypertarget{T n}{
-\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_\mathbf{n}$.}\hypertarget{T p}{
-\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_\mathbf{p}$.}\hypertarget{T g}{
-\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathbf{g}$.}\hypertarget{T t}{
-\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathbf{t}$.}\hypertarget{T v}{
-\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathbf{v}$.}\hypertarget{T w}{
-\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_\mathbf{w}$}}, \hyperlink{T r}{$T_\mathbf{r}$} and \hyperlink{T s}{$T_\mathbf{s}$}, respectively. This is expanded in Appendix \ref{app:signing}.
+\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_\mathrm{n}$.}\hypertarget{T p}{
+\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_\mathrm{p}$.}\hypertarget{T g}{
+\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathrm{g}$.}\hypertarget{T t}{
+\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathrm{t}$.}\hypertarget{T v}{
+\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathrm{v}$.}\hypertarget{T w}{
+\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_\mathrm{w}$}}, \hyperlink{T r}{$T_\mathrm{r}$} and \hyperlink{T s}{$T_\mathrm{s}$}, respectively. This is expanded in Appendix \ref{app:signing}.
 \end{description}
 
 Additionally, a contract creation transaction contains:
 
 \begin{description}
-\item[init] An unlimited size byte array specifying the EVM-code for the account initialisation procedure, formally $T_\mathbf{i}$.
+\item[init] An unlimited size byte array specifying the EVM-code for the account initialisation procedure, formally $T_\mathrm{i}$.
 \end{description}
 
 \textbf{init} is an EVM-code fragment; it returns the \textbf{body}, a second fragment of code that executes each time the account receives a message call (either through a transaction or due to the internal execution of code). \textbf{init} is executed only once at account creation and gets discarded immediately thereafter.
@@ -311,33 +311,33 @@ \subsection{The Transaction} \label{subsec:transaction}
 In contrast, a message call transaction contains:
 
 \begin{description}
-\item[data] An unlimited size byte array specifying the input data of the message call, formally $T_\mathbf{d}$.
+\item[data] An unlimited size byte array specifying the input data of the message call, formally $T_\mathrm{d}$.
 \end{description}
 
 
 \begin{equation}
-L_\mathbf{T}(T) \equiv \begin{cases}
-(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{if} \; T_\mathbf{t} = \varnothing\\
-(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) & \text{otherwise}
+L_\mathrm{T}(T) \equiv \begin{cases}
+(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{i}, \hyperlink{T w}{T_\mathrm{w}}, T_\mathrm{r}, T_\mathrm{s}) & \text{if} \; T_\mathrm{t} = \varnothing\\
+(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{d}, \hyperlink{T w}{T_\mathrm{w}}, T_\mathrm{r}, T_\mathrm{s}) & \text{otherwise}
 \end{cases}
 \end{equation}
 
-Here, we assume all components are interpreted by the RLP as integer values, with the exception of the arbitrary length byte arrays $T_\mathbf{i}$ and $T_\mathbf{d}$.
+Here, we assume all components are interpreted by the RLP as integer values, with the exception of the arbitrary length byte arrays $T_\mathrm{i}$ and $T_\mathrm{d}$.
 \begin{equation}
 \begin{array}[t]{lclclc}
-T_\mathbf{n} \in \mathbb{P}_{256} & \wedge & \hyperlink{T v}{T_\mathbf{v}} \in \mathbb{P}_{256} & \wedge & T_\mathbf{p} \in \mathbb{P}_{256} & \wedge \\
-T_\mathbf{g} \in \mathbb{P}_{256} & \wedge & \hyperlink{T w}{T_\mathbf{w}} \in \mathbb{P}_5 & \wedge & T_\mathbf{r} \in \mathbb{P}_{256} & \wedge \\
-T_\mathbf{s} \in \mathbb{P}_{256} & \wedge & T_\mathbf{d} \in \mathbb{B} & \wedge & T_\mathbf{i} \in \mathbb{B}
+T_\mathrm{n} \in \mathbb{P}_{256} & \wedge & \hyperlink{T v}{T_\mathrm{v}} \in \mathbb{P}_{256} & \wedge & T_\mathrm{p} \in \mathbb{P}_{256} & \wedge \\
+T_\mathrm{g} \in \mathbb{P}_{256} & \wedge & \hyperlink{T w}{T_\mathrm{w}} \in \mathbb{P}_5 & \wedge & T_\mathrm{r} \in \mathbb{P}_{256} & \wedge \\
+T_\mathrm{s} \in \mathbb{P}_{256} & \wedge & T_\mathrm{d} \in \mathbb{B} & \wedge & T_\mathrm{i} \in \mathbb{B}
 \end{array}
 \end{equation}
 where
 \begin{equation}
-\mathbb{P}_\mathbf{n} = \{ P: P \in \mathbb{P} \wedge P < 2^n \}
+\mathbb{P}_\mathrm{n} = \{ P: P \in \mathbb{P} \wedge P < 2^n \}
 \end{equation}
 
-The address hash $T_\mathbf{t}$ is slightly different: it is either a 20-byte address hash or, in the case of being a contract-creation transaction (and thus formally equal to $\varnothing$), it is the RLP empty byte sequence and thus the member of $\mathbb{B}_0$:
+The address hash $T_\mathrm{t}$ is slightly different: it is either a 20-byte address hash or, in the case of being a contract-creation transaction (and thus formally equal to $\varnothing$), it is the RLP empty byte sequence and thus the member of $\mathbb{B}_0$:
 \begin{equation}
-T_\mathbf{t} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_\mathbf{t} \neq \varnothing \\
+T_\mathrm{t} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_\mathrm{t} \neq \varnothing \\
 \mathbb{B}_{0} & \text{otherwise}\end{cases}
 \end{equation}
 
@@ -348,64 +348,64 @@ \subsection{The Block} \label{ch:block}
 %\textit{TODO: Introduce logs}
 
 \begin{description}\hypertarget{H p}{
-\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_\mathbf{p}$.}
-\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_\mathbf{o}}$.\hypertarget{H c}{
-\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block shall be transferred; formally $H_\mathbf{c}$.}
-\item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathbf{r}$}.
-\item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathbf{t}$}.
-\item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathbf{e}$}.
-\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathbf{b}.$}\hyperlink{H d}{
-\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathbf{d}$}.\hypertarget{H i}{
-\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathbf{i}$.}\hyperlink{H l}{
-\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathbf{l}$.}\hypertarget{H g}{
-\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathbf{g}$.}\hypertarget{H s}{
-\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_\mathbf{s}$}.}\hypertarget{H x}{
-\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_\mathbf{x}$.}\hypertarget{H m}{
-\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{m}$.}
+\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_\mathrm{p}$.}
+\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_\mathrm{o}}$.\hypertarget{H c}{
+\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block shall be transferred; formally $H_\mathrm{c}$.}
+\item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathrm{r}$}.
+\item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathrm{t}$}.
+\item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathrm{e}$}.
+\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathrm{b}.$}\hyperlink{H d}{
+\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathrm{d}$}.\hypertarget{H i}{
+\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathrm{i}$.}\hyperlink{H l}{
+\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathrm{l}$.}\hypertarget{H g}{
+\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathrm{g}$.}\hypertarget{H s}{
+\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_\mathrm{s}$}.}\hypertarget{H x}{
+\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_\mathrm{x}$.}\hypertarget{H m}{
+\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_\mathrm{m}$.}
 \hypertarget{block nonce}{\hypertarget{H n}{
-\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_\mathbf{n}$.}}
+\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_\mathrm{n}$.}}
 \end{description}
 \hypertarget{B U}{
-The other two components in the block are simply a list of ommer block headers (of the same format as above), $B_\mathbf{U}$, and a series of the transactions, $B_\mathbf{T}$. Formally, we can refer to a block $B$:
+The other two components in the block are simply a list of ommer block headers (of the same format as above), $B_\mathrm{U}$, and a series of the transactions, $B_\mathrm{T}$. Formally, we can refer to a block $B$:
 \begin{equation}
-B \equiv (B_H, B_\mathbf{T}, B_\mathbf{U})
+B \equiv (B_H, B_\mathrm{T}, B_\mathrm{U})
 \end{equation}}
 
 \hypertarget{Transaction Receipt}{\subsubsection{Transaction Receipt}}
 
 In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution.
-Each receipt, denoted $B_\mathbf{R}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_\mathbf{e}$}.
+Each receipt, denoted $B_\mathrm{R}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_\mathrm{e}$}.
 
 \hypertarget{R}{}
-The transaction receipt, $R$, is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathbf{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathbf{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathbf{b}$}:
+The transaction receipt, $R$, is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathrm{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathrm{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathrm{b}$}:
 \begin{equation}
-R \equiv (R_{\boldsymbol{\sigma}}, R_\mathbf{u}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}})
+R \equiv (R_{\boldsymbol{\sigma}}, R_\mathrm{u}, \hyperlink{R b}{R_\mathrm{b}}, \hyperlink{R l}{R_\mathrm{l}})
 \end{equation}
 
 The function $L_R$ trivially prepares a transaction receipt for being transformed into an RLP-serialised byte array:
 \begin{equation}
-L_R(R) \equiv (\mathtt{\small \hyperlink{trie}{TRIE}}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathbf{u}}, \hyperlink{R b}{R_\mathbf{b}}, \hyperlink{R l}{R_\mathbf{l}})
+L_R(R) \equiv (\mathtt{\small \hyperlink{trie}{TRIE}}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathrm{u}}, \hyperlink{R b}{R_\mathrm{b}}, \hyperlink{R l}{R_\mathrm{l}})
 \end{equation}
 thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a \hyperlink{trie}{trie} structure, the root of which forms the first item.
 
-We assert $\hyperlink{R u}{R_\mathbf{u}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_\mathbf{b}$}, is a hash of size 2048 bits (256 bytes):
+We assert $\hyperlink{R u}{R_\mathrm{u}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_\mathrm{b}$}, is a hash of size 2048 bits (256 bytes):
 \begin{equation}
-\hyperlink{R u}{R_\mathbf{u}} \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_\mathbf{b}} \in \mathbb{B}_{256}
+\hyperlink{R u}{R_\mathrm{u}} \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_\mathrm{b}} \in \mathbb{B}_{256}
 \end{equation}
 
-%Notably $B_\mathbf{T}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence.
+%Notably $B_\mathrm{T}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence.
 
-The log entries, $\hyperlink{R l}{R_\mathbf{l}}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_\mathbf{a}$, a series of 32-bytes log topics, $O_\mathbf{t}$ and some number of bytes of data, $O_\mathbf{d}$:
+The log entries, $\hyperlink{R l}{R_\mathrm{l}}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_\mathrm{a}$, a series of 32-bytes log topics, $O_\mathrm{t}$ and some number of bytes of data, $O_\mathrm{d}$:
 \begin{equation}
-O \equiv (O_\mathbf{a}, ({O_\mathbf{t}}_0, {O_\mathbf{t}}_1, ...), O_\mathbf{d})
+O \equiv (O_\mathrm{a}, ({O_\mathrm{t}}_0, {O_\mathrm{t}}_1, ...), O_\mathrm{d})
 \end{equation}
 \begin{equation}
-O_\mathbf{a} \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_\mathbf{t}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_\mathbf{d} \in \mathbb{B}
+O_\mathrm{a} \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_\mathrm{t}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_\mathrm{d} \in \mathbb{B}
 \end{equation}
 
 We define the Bloom filter function, $M$, to reduce a log entry into a single 256-byte hash:
 \begin{equation}
-M(O) \equiv \hyperlink{bigvee}{\bigvee}_{t \in \{O_\mathbf{a}\} \cup O_\mathbf{t}} \big( M_{3:2048}(t) \big)
+M(O) \equiv \hyperlink{bigvee}{\bigvee}_{t \in \{O_\mathrm{a}\} \cup O_\mathrm{t}} \big( M_{3:2048}(t) \big)
 \end{equation}
 
 where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence.\footnote{11 bits $= 2^{2048}$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence".} Formally:
@@ -420,14 +420,14 @@ \subsection{The Block} \label{ch:block}
 
 \subsubsection{Holistic Validity}
 
-We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathbf{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_\mathbf{r}$:
+We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathrm{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_\mathrm{r}$:
 \begin{equation}
 \begin{array}[t]{lclc}\hypertarget{H r}{
-H_\mathbf{r} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\
-H_\mathbf{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathbf{U}}))) & \wedge }\hypertarget{H t}{\\
-H_\mathbf{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathbf{T} \rVert, i \in \mathbb{P}: p(i, L_\mathbf{T}(B_\mathbf{T}[i]))\}) }& \wedge \hypertarget{H e}{\\
-H_\mathbf{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert \hyperlink{Transaction Receipt}{B_\mathbf{R}} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathbf{R}[i]))\}) & \wedge }\hypertarget{H b}{\hypertarget{r}{\\
-H_\mathbf{b} &\equiv& \hyperlink{bigvee}{\bigvee}_{\mathbf{r} \in B_\mathbf{R}} \big( \mathbf{r}_\mathbf{b} \big)}}
+H_\mathrm{r} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\
+H_\mathrm{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathrm{U}}))) & \wedge }\hypertarget{H t}{\\
+H_\mathrm{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathrm{T} \rVert, i \in \mathbb{P}: p(i, L_\mathrm{T}(B_\mathrm{T}[i]))\}) }& \wedge \hypertarget{H e}{\\
+H_\mathrm{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert \hyperlink{Transaction Receipt}{B_\mathrm{R}} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathrm{R}[i]))\}) & \wedge }\hypertarget{H b}{\hypertarget{r}{\\
+H_\mathrm{b} &\equiv& \hyperlink{bigvee}{\bigvee}_{\mathbf{r} \in B_\mathrm{R}} \big( \mathbf{r}_\mathrm{b} \big)}}
 \end{array}
 \end{equation}
 
@@ -438,23 +438,23 @@ \subsubsection{Holistic Validity}
 
 Furthermore:
 \begin{equation}
-\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_\mathbf{r}
+\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_\mathrm{r}
 \end{equation}
 
 Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly.
 
-The values stemming from the computation of transactions, specifically the \hyperlink{Transaction Receipt}{transaction receipts, $B_\mathbf{R}$}, and that defined through the transaction's \hyperlink{Pi}{state-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}.
+The values stemming from the computation of transactions, specifically the \hyperlink{Transaction Receipt}{transaction receipts, $B_\mathrm{R}$}, and that defined through the transaction's \hyperlink{Pi}{state-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}.
 
 \subsubsection{Serialisation}
 
 The function $L_B$ and $L_H$ are the preparation functions for a block and block header respectively. Much like the transaction receipt preparation function $L_R$, we assert the types and order of the structure for when the RLP transformation is required:
 \begin{eqnarray}
-\quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_\mathbf{p}}, \hyperlink{H o}{H_\mathbf{o}}, \hyperlink{H c}{H_\mathbf{c}}, \hyperlink{H r}{H_\mathbf{r}}, \hyperlink{H t}{H_\mathbf{t}}, \hyperlink{H e}{H_\mathbf{e}}, \hyperlink{H b}{H_\mathbf{b}}, \hyperlink{H d}{H_\mathbf{d}},\\ \hyperlink{H i}{H_\mathbf{i}}, \hyperlink{H l}{H_\mathbf{l}}, \hyperlink{H g}{H_\mathbf{g}}, \hyperlink{H s}{H_\mathbf{s}}, \hyperlink{H x}{H_\mathbf{x}}, \hyperlink{H m}{H_\mathbf{m}}, \hyperlink{H n}{H_\mathbf{n}} \; )\end{array} \\
-\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathbf{T}^*(B_\mathbf{T}), L_H^*(\hyperlink{B U}{B_\mathbf{U}}) \big)
+\quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_\mathrm{p}}, \hyperlink{H o}{H_\mathrm{o}}, \hyperlink{H c}{H_\mathrm{c}}, \hyperlink{H r}{H_\mathrm{r}}, \hyperlink{H t}{H_\mathrm{t}}, \hyperlink{H e}{H_\mathrm{e}}, \hyperlink{H b}{H_\mathrm{b}}, \hyperlink{H d}{H_\mathrm{d}},\\ \hyperlink{H i}{H_\mathrm{i}}, \hyperlink{H l}{H_\mathrm{l}}, \hyperlink{H g}{H_\mathrm{g}}, \hyperlink{H s}{H_\mathrm{s}}, \hyperlink{H x}{H_\mathrm{x}}, \hyperlink{H m}{H_\mathrm{m}}, \hyperlink{H n}{H_\mathrm{n}} \; )\end{array} \\
+\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathrm{T}^*(B_\mathrm{T}), L_H^*(\hyperlink{B U}{B_\mathrm{U}}) \big)
 \end{eqnarray}
 
 \hypertarget{f*}{
-With $L_\mathbf{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus:
+With $L_\mathrm{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus:
 \begin{equation}
 f^*\big( (x_0, x_1, ...) \big) \equiv \big( f(x_0), f(x_1), ... \big) \quad \text{for any function} \; f
 \end{equation}}
@@ -462,17 +462,17 @@ \subsubsection{Serialisation}
 The component types are defined thus:
 \begin{equation}
 \begin{array}[t]{lclclcl}
-\hyperlink{H p}{H_\mathbf{p}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H o}{H_\mathbf{o}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H c}{H_\mathbf{c}} \in \mathbb{B}_{20} & \wedge \\
-\hyperlink{H r}{H_\mathbf{r}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H t}{H_\mathbf{t}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H e}{H_\mathbf{e}} \in \mathbb{B}_{32} & \wedge \\
-H_\mathbf{b} \in \mathbb{B}_{256} & \wedge & \hyperlink{H d}{H_\mathbf{d}} \in \mathbb{P} & \wedge & \hyperlink{H i}{H_\mathbf{i}} \in \mathbb{P} & \wedge \\
-\hyperlink{H l}{H_\mathbf{l}} \in \mathbb{P} & \wedge & \hyperlink{H g}{H_\mathbf{g}} \in \mathbb{P} & \wedge & \hyperlink{H s}{H_\mathbf{s}} \in \mathbb{P}_{256} & \wedge \\
-\hyperlink{H x}{H_\mathbf{x}} \in \mathbb{B} & \wedge & \hyperlink{H m}{H_\mathbf{m}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H n}{H_\mathbf{n}} \in \mathbb{B}_{8}
+\hyperlink{H p}{H_\mathrm{p}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H o}{H_\mathrm{o}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H c}{H_\mathrm{c}} \in \mathbb{B}_{20} & \wedge \\
+\hyperlink{H r}{H_\mathrm{r}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H t}{H_\mathrm{t}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H e}{H_\mathrm{e}} \in \mathbb{B}_{32} & \wedge \\
+H_\mathrm{b} \in \mathbb{B}_{256} & \wedge & \hyperlink{H d}{H_\mathrm{d}} \in \mathbb{P} & \wedge & \hyperlink{H i}{H_\mathrm{i}} \in \mathbb{P} & \wedge \\
+\hyperlink{H l}{H_\mathrm{l}} \in \mathbb{P} & \wedge & \hyperlink{H g}{H_\mathrm{g}} \in \mathbb{P} & \wedge & \hyperlink{H s}{H_\mathrm{s}} \in \mathbb{P}_{256} & \wedge \\
+\hyperlink{H x}{H_\mathrm{x}} \in \mathbb{B} & \wedge & \hyperlink{H m}{H_\mathrm{m}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H n}{H_\mathrm{n}} \in \mathbb{B}_{8}
 \end{array}
 \end{equation}
 
 where
 \begin{equation}
-\mathbb{B}_\mathbf{n} = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \}
+\mathbb{B}_\mathrm{n} = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \}
 \end{equation}
 
 We now have a rigorous specification for the construction of a formal block structure. The RLP function $\texttt{\small RLP}$ (see Appendix \ref{app:rlp}) provides the canonical method for transforming this structure into a sequence of bytes ready for transmission over the wire or storage locally.
@@ -481,12 +481,12 @@ \subsubsection{Block Header Validity}
 
 We define $P(B_H)$ to be the parent block of $B$, formally:
 \begin{equation}
-P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = \hyperlink{H p}{H_\mathbf{p}}
+P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = \hyperlink{H p}{H_\mathrm{p}}
 \end{equation}
 
 The block number is the parent's block number incremented by one:
 \begin{equation}
-\hyperlink{H i}{H_\mathbf{i}} \equiv {{P(H)_H}_\mathbf{i}} + 1
+\hyperlink{H i}{H_\mathrm{i}} \equiv {{P(H)_H}_\mathrm{i}} + 1
 \end{equation}
 
 \newcommand{\mindifficulty}{D_0}
@@ -498,8 +498,8 @@ \subsubsection{Block Header Validity}
 The canonical difficulty of a block of header $H$ is defined as $D(H)$:
 \begin{equation}
 D(H) \equiv \begin{dcases}
-\mindifficulty & \text{if} \quad \hyperlink{H i}{H_\mathbf{i}} = 0\\
-\text{max}\!\left(\mindifficulty, {P(H)_H}_\mathbf{d} + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\
+\mindifficulty & \text{if} \quad \hyperlink{H i}{H_\mathrm{i}} = 0\\
+\text{max}\!\left(\mindifficulty, {P(H)_H}_\mathrm{d} + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\
 \end{dcases}
 \end{equation}
 where:
@@ -507,56 +507,56 @@ \subsubsection{Block Header Validity}
 \mindifficulty \equiv 131072
 \end{equation}
 \begin{equation}
-\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_\mathbf{d}}{2048}\right\rfloor
+\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_\mathrm{d}}{2048}\right\rfloor
 \end{equation}
 \begin{equation}
-\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{\hyperlink{H s}{H_\mathbf{s}} - {P(H)_H}_\mathbf{s}}{10}\right\rfloor, -99 \right)
+\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{\hyperlink{H s}{H_\mathrm{s}} - {P(H)_H}_\mathrm{s}}{10}\right\rfloor, -99 \right)
 \end{equation}
 \begin{equation}
-\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathbf{i}} \div 100000 \right\rfloor - 2 } \right\rfloor
+\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathrm{i}} \div 100000 \right\rfloor - 2 } \right\rfloor
 \end{equation}}
 
 Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks. This is necessary to stabilise the time difference between blocks as  computation power becomes more efficient, with Moore's Law (\cite{THOMPSON200620}).
 
 \hypertarget{H l}{
-The canonical gas limit $\hyperlink{H l}{H_\mathbf{l}}$ of a block of header $H$ must fulfil the relation:
+The canonical gas limit $\hyperlink{H l}{H_\mathrm{l}}$ of a block of header $H$ must fulfil the relation:
 \begin{eqnarray}
-& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\
-& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor \quad \wedge \\
-& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000
+& & \hyperlink{H l}{H_\mathrm{l}} < {P(H)_H}_\mathrm{l} + \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor \quad \wedge \\
+& & \hyperlink{H l}{H_\mathrm{l}} > {P(H)_H}_\mathrm{l} - \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor \quad \wedge \\
+& & \hyperlink{H l}{H_\mathrm{l}} \geqslant 125000
 \end{eqnarray}}
 
-\hyperlink{H s}{$H_\mathbf{s}$} is the timestamp of block $H$ and must fulfil the relation:
+\hyperlink{H s}{$H_\mathrm{s}$} is the timestamp of block $H$ and must fulfil the relation:
 \begin{equation}
-\hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s}
+\hyperlink{H s}{H_\mathrm{s}} > {P(H)_H}_\mathrm{s}
 \end{equation}
 
 This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation is required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced.
 
-The nonce of a block, $\hyperlink{H n}{H_\mathbf{n}}$, must satisfy the relations:
+The nonce of a block, $\hyperlink{H n}{H_\mathrm{n}}$, must satisfy the relations:
 \begin{equation}
-n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \wedge \quad m = \hyperlink{H m}{H_\mathbf{m}}
+n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \quad \wedge \quad m = \hyperlink{H m}{H_\mathrm{m}}
 \end{equation}
-with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$.
+with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d})$.
 
 \hypertarget{h cancel n}{}
-Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $\hyperlink{H d}{H_\mathbf{d}}$.
+Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $\hyperlink{H d}{H_\mathrm{d}}$.
 
 This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the \hyperlink{block nonce}{block nonce} must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers.
 
 Thus we are able to define the \hypertarget{BlockHeaderValidityFunction}{block header validity function $V(H)$}:\label{eq:BlockHeaderValidityFunction}
 \begin{eqnarray}
-V(H) & \equiv &  n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \wedge m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \\
-& & \hyperlink{H d}{H_\mathbf{d}} = D(H) \quad \wedge \\
-& & \hyperlink{H g}{H_\mathbf{g}} \le \hyperlink{H l}{H_\mathbf{l}}  \quad \wedge \\
-& & \hyperlink{H l}{H_\mathbf{l}} < {P(H)_H}_\mathbf{l} + \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor  \quad \wedge \\
-& & \hyperlink{H l}{H_\mathbf{l}} > {P(H)_H}_\mathbf{l} - \left\lfloor\frac{{P(H)_H}_\mathbf{l}}{1024}\right\rfloor  \quad \wedge \\
-& & \hyperlink{H l}{H_\mathbf{l}} \geqslant 125000  \quad \wedge \\
-& & \hyperlink{H s}{H_\mathbf{s}} > {P(H)_H}_\mathbf{s} \quad \wedge \\
-& & \hyperlink{H i}{H_\mathbf{i}} = {P(H)_H}_\mathbf{i} +1 \quad \wedge \\
-& & \lVert \hyperlink{H x}{H_\mathbf{x}} \rVert \le 32
+V(H) & \equiv &  n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \wedge m = \hyperlink{H m}{H_\mathrm{m}} \quad \wedge \\
+& & \hyperlink{H d}{H_\mathrm{d}} = D(H) \quad \wedge \\
+& & \hyperlink{H g}{H_\mathrm{g}} \le \hyperlink{H l}{H_\mathrm{l}}  \quad \wedge \\
+& & \hyperlink{H l}{H_\mathrm{l}} < {P(H)_H}_\mathrm{l} + \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor  \quad \wedge \\
+& & \hyperlink{H l}{H_\mathrm{l}} > {P(H)_H}_\mathrm{l} - \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor  \quad \wedge \\
+& & \hyperlink{H l}{H_\mathrm{l}} \geqslant 125000  \quad \wedge \\
+& & \hyperlink{H s}{H_\mathrm{s}} > {P(H)_H}_\mathrm{s} \quad \wedge \\
+& & \hyperlink{H i}{H_\mathrm{i}} = {P(H)_H}_\mathrm{i} +1 \quad \wedge \\
+& & \lVert \hyperlink{H x}{H_\mathrm{x}} \rVert \le 32
 \end{eqnarray}
-where $(n, m) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})$
+where $(n, m) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d})$
 
 Noting additionally that \textbf{extraData} must be at most 32 bytes.
 
@@ -592,10 +592,10 @@ \section{Transaction Execution} \label{ch:transactions}
 \subsection{Substate}
 Throughout transaction execution, we accrue certain information that is acted upon immediately following the transaction. We call this \textit{transaction substate}, and represent it as $A$, which is a tuple:
 \begin{equation}
-A \equiv (A_\mathbf{s}, A_\mathbf{l}, A_\mathbf{r})
+A \equiv (A_\mathrm{s}, A_\mathrm{l}, A_\mathrm{r})
 \end{equation}
 
-The tuple contents include $A_\mathbf{s}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_\mathbf{l}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_\mathbf{r}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs.
+The tuple contents include $A_\mathrm{s}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_\mathrm{l}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_\mathrm{r}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs.
 
 For brevity, we define the empty substate $A^0$ to have no self-destructs, no logs and a zero refund balance:
 \begin{equation}
@@ -605,18 +605,18 @@ \subsection{Substate}
 \subsection{Execution}
 We define intrinsic gas $g_0$, the amount of gas this transaction requires to be paid prior to execution, as follows:
 \begin{align}\hypertarget{g0}{
-g_0 \equiv {} & \sum_{i \in T_\mathbf{i}, T_\mathbf{d}} \begin{cases} \hyperlink{Gtxdatazero}{G_{\mathrm{txdatazero}}} & \text{if} \quad i = 0 \\ \hyperlink{Gtxdatanonzero}{G_{\mathrm{txdatanonzero}}} & \text{otherwise} \end{cases} \\
-{} & + \begin{cases} \hyperlink{Gtxcreate}{G_{\mathrm{txcreate}}} & \text{if} \quad T_\mathbf{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\
+g_0 \equiv {} & \sum_{i \in T_\mathrm{i}, T_\mathrm{d}} \begin{cases} \hyperlink{Gtxdatazero}{G_{\mathrm{txdatazero}}} & \text{if} \quad i = 0 \\ \hyperlink{Gtxdatanonzero}{G_{\mathrm{txdatanonzero}}} & \text{otherwise} \end{cases} \\
+{} & + \begin{cases} \hyperlink{Gtxcreate}{G_{\mathrm{txcreate}}} & \text{if} \quad T_\mathrm{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\
 {} & + \hyperlink{Gtransaction}{G_{\mathrm{transaction}}}
 }\end{align}
 
-where $T_\mathbf{i},T_\mathbf{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_{\mathrm{txcreate}}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}.
+where $T_\mathrm{i},T_\mathrm{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_{\mathrm{txcreate}}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}.
 
 %todo Explain g_d reason?
 
 The up-front cost $v_0$ is calculated as:
 \begin{equation}
-v_0 \equiv T_\mathbf{g} T_\mathbf{p} + \hyperlink{T v}{T_\mathbf{v}}
+v_0 \equiv T_\mathrm{g} T_\mathrm{p} + \hyperlink{T v}{T_\mathrm{v}}
 \end{equation}
 
 The validity is determined as:
@@ -624,65 +624,65 @@ \subsection{Execution}
 \begin{array}[t]{rcl}
 S(T) & \neq & \varnothing \quad \wedge \\
 \boldsymbol{\sigma}[S(T)] & \neq & \varnothing \quad \wedge \hypertarget{transaction nonce}{\\
-T_\mathbf{n} & = & \boldsymbol{\sigma}[S(T)]_\mathbf{n} \quad \wedge \\}
-g_0 & \leqslant & T_\mathbf{g} \quad \wedge \\
-v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_\mathbf{b} \quad \wedge \\
-T_\mathbf{g} & \leqslant & {B_H}_\mathbf{l} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_\mathbf{R})_\mathbf{u}}
+T_\mathrm{n} & = & \boldsymbol{\sigma}[S(T)]_\mathrm{n} \quad \wedge \\}
+g_0 & \leqslant & T_\mathrm{g} \quad \wedge \\
+v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_\mathrm{b} \quad \wedge \\
+T_\mathrm{g} & \leqslant & {B_H}_\mathrm{l} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_\mathrm{R})_\mathrm{u}}
 \end{array}
 \end{equation}
 
-Note the final condition; the sum of the transaction's gas limit, $T_\mathbf{g}$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathbf{R})_\mathbf{u}$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_\mathbf{l}$.
+Note the final condition; the sum of the transaction's gas limit, $T_\mathrm{g}$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathrm{R})_\mathrm{u}$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_\mathrm{l}$.
 
-The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_\mathbf{g}T_\mathbf{p}$. The gas available for the proceeding computation, $g$, is defined as $T_\mathbf{g} - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point.
+The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_\mathrm{g}T_\mathrm{p}$. The gas available for the proceeding computation, $g$, is defined as $T_\mathrm{g} - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point.
 
 We define the checkpoint state $\boldsymbol{\sigma}_0$:
 \begin{eqnarray}
 \boldsymbol{\sigma}_0 & \equiv & \boldsymbol{\sigma} \quad \text{except:} \\
 \boldsymbol{\sigma}_0[S(T)]_b & \equiv & \boldsymbol{\sigma}[S(T)]_b - T_g T_p \\%
-\boldsymbol{\sigma}_0[S(T)]_\mathbf{n} & \equiv & \boldsymbol{\sigma}[S(T)]_\mathbf{n} + 1
+\boldsymbol{\sigma}_0[S(T)]_\mathrm{n} & \equiv & \boldsymbol{\sigma}[S(T)]_\mathrm{n} + 1
 \end{eqnarray}
 
 Evaluating $\boldsymbol{\sigma}_P$ from $\boldsymbol{\sigma}_0$ depends on the transaction type; either contract creation or message call; we define the tuple of post-execution provisional state $\boldsymbol{\sigma}_P$, remaining gas $g'$ and substate $A$:
 \begin{equation}
 (\boldsymbol{\sigma}_P, g', A) \equiv \begin{cases}
-\Lambda(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}, 0) & \text{if} \quad T_\mathbf{t} = \varnothing \\
-\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_\mathbf{o}, &\\ \quad\quad T_\mathbf{t}, T_\mathbf{t}, g, T_\mathbf{p}, \hyperlink{T v}{T_\mathbf{v}}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}, 0) & \text{otherwise}
+\Lambda(\boldsymbol{\sigma}_0, S(T), T_\mathrm{o}, &\\ \quad\quad g, T_\mathrm{p}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{i}, 0) & \text{if} \quad T_\mathrm{t} = \varnothing \\
+\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_\mathrm{o}, &\\ \quad\quad T_\mathrm{t}, T_\mathrm{t}, g, T_\mathrm{p}, \hyperlink{T v}{T_\mathrm{v}}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{d}, 0) & \text{otherwise}
 \end{cases}
 \end{equation}
 
 where $g$ is the amount of gas remaining after deducting the basic amount required to pay for the existence of the transaction:
 \begin{equation}
-g \equiv T_\mathbf{g} - g_0
+g \equiv T_\mathrm{g} - g_0
 \end{equation}
-and $T_\mathbf{o}$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code.
+and $T_\mathrm{o}$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code.
 
 Note we use $\Theta_{3}$ to denote the fact that only the first three components of the function's value are taken; the final represents the message-call's output value (a byte array) and is unused in the context of transaction evaluation.
 
 After the message call or contract creation is processed, the state is finalised by determining the amount to be refunded, $g^*$ from the remaining gas, $g'$, plus some allowance from the refund counter, to the sender at the original rate.
 \begin{equation}
-g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_\mathbf{g} - g'}{2} \Big\rfloor, A_\mathbf{r} \}
+g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_\mathrm{g} - g'}{2} \Big\rfloor, A_\mathrm{r} \}
 \end{equation}
 
-The total refundable amount is the legitimately remaining gas $g'$, added to $A_\mathbf{r}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_\mathbf{g} - g'$.
+The total refundable amount is the legitimately remaining gas $g'$, added to $A_\mathrm{r}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_\mathrm{g} - g'$.
 
 The Ether for the gas is given to the miner, whose address is specified as the beneficiary of the present block $B$. So we define the pre-final state $\boldsymbol{\sigma}^*$ in terms of the provisional state $\boldsymbol{\sigma}_P$:
 \begin{eqnarray}
 \boldsymbol{\sigma}^* & \equiv & \boldsymbol{\sigma}_P \quad \text{except} \\
-\boldsymbol{\sigma}^*[S(T)]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[S(T)]_\mathbf{b} + g^* T_\mathbf{p} \\
-\boldsymbol{\sigma}^*[m]_\mathbf{b} & \equiv & \boldsymbol{\sigma}_P[m]_\mathbf{b} + (T_\mathbf{g} - g^*) T_\mathbf{p} \\
-m & \equiv & {B_H}_\mathbf{c}
+\boldsymbol{\sigma}^*[S(T)]_\mathrm{b} & \equiv & \boldsymbol{\sigma}_P[S(T)]_\mathrm{b} + g^* T_\mathrm{p} \\
+\boldsymbol{\sigma}^*[m]_\mathrm{b} & \equiv & \boldsymbol{\sigma}_P[m]_\mathrm{b} + (T_\mathrm{g} - g^*) T_\mathrm{p} \\
+m & \equiv & {B_H}_\mathrm{c}
 \end{eqnarray}
 
 The final state, $\boldsymbol{\sigma}'$, is reached after deleting all accounts that appear in the self-destruct set:
 \begin{eqnarray}
 \boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}^* \quad \text{except} \\
-\forall i \in A_\mathbf{s}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing
+\forall i \in A_\mathrm{s}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing
 \end{eqnarray}
 
 \hypertarget{Upsilong}{And finally, we specify $\Upsilon^g$, the total gas used in this transaction}\hypertarget{Upsilonl}{ and $\Upsilon^\mathbf{l}$, the logs created by this transaction:}
 \begin{eqnarray}
-\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_\mathbf{g} - \mathbf{g}' \\
-\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_\mathbf{l}
+\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_\mathrm{g} - \mathbf{g}' \\
+\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_\mathrm{l}
 \end{eqnarray}
 
 These are used to help define the \hyperlink{Transaction Receipt}{transaction receipt}.
@@ -698,7 +698,7 @@ \section{Contract Creation} \label{ch:create}
 
 The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$:
 \begin{equation}
-a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_\mathbf{n} - 1)\;\big)\Big)\Big)
+a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_\mathrm{n} - 1)\;\big)\Big)\Big)
 \end{equation}
 
 where $\mathtt{\tiny KEC}$ is the Keccak 256-bit hash function, $\mathtt{\tiny RLP}$ is the RLP encoding function, $\mathcal{B}_{a..b}(X)$ evaluates to binary value containing the bits of indices in the range $[a, b]$ of the binary data $X$ and $\boldsymbol{\sigma}[x]$ is the address state of $x$ or $\varnothing$ if none exists. Note we use one fewer than the \hyperlink{account nonce}{sender's nonce value}; we assert that we have incremented the sender account's nonce prior to this call, and so the value used is the sender's nonce at the beginning of the responsible transaction or VM operation.
@@ -709,14 +709,14 @@ \section{Contract Creation} \label{ch:create}
 \end{equation}
 \begin{eqnarray}
 \boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\
-\boldsymbol{\sigma}^*[s]_\mathbf{b} &\equiv& \boldsymbol{\sigma}[s]_\mathbf{b} - v
+\boldsymbol{\sigma}^*[s]_\mathrm{b} &\equiv& \boldsymbol{\sigma}[s]_\mathrm{b} - v
 \end{eqnarray}
 
 where $v'$ is the account's pre-existing value, in the event it was previously in existence:
 \begin{equation}
 v' \equiv \begin{cases}
 0 & \text{if} \quad \boldsymbol{\sigma}[a] = \varnothing\\
-\boldsymbol{\sigma}[a]_\mathbf{b} & \text{otherwise}
+\boldsymbol{\sigma}[a]_\mathrm{b} & \text{otherwise}
 \end{cases}
 \end{equation}
 
@@ -729,17 +729,17 @@ \section{Contract Creation} \label{ch:create}
 \end{equation}
 where $I$ contains the parameters of the execution environment as defined in section \ref{ch:model}, that is:
 \begin{eqnarray}
-I_\mathbf{a} & \equiv & a \\
-I_\mathbf{o} & \equiv & o \\
-I_\mathbf{p} & \equiv & p \\
-I_\mathbf{d} & \equiv & () \\
-I_\mathbf{s} & \equiv & s \\
-\hyperlink{I v}{I_\mathbf{v}} & \equiv & v \\
-I_\mathbf{b} & \equiv & \mathbf{i} \\
-I_\mathbf{e} & \equiv & e
+I_\mathrm{a} & \equiv & a \\
+I_\mathrm{o} & \equiv & o \\
+I_\mathrm{p} & \equiv & p \\
+I_\mathrm{d} & \equiv & () \\
+I_\mathrm{s} & \equiv & s \\
+\hyperlink{I v}{I_\mathrm{v}} & \equiv & v \\
+I_\mathrm{b} & \equiv & \mathbf{i} \\
+I_\mathrm{e} & \equiv & e
 \end{eqnarray}
 
-$I_\mathbf{d}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain.
+$I_\mathrm{d}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain.
 
 Code execution depletes gas, and gas may not go below zero, thus execution may exit before the code has come to a natural halting state. In this (and several other) exceptional cases we say an out-of-gas (OOG) exception has occurred: The evaluated state is defined as being the empty set, $\varnothing$, and the entire create operation should have no effect on the state, effectively leaving it as it was immediately prior to attempting the creation.
 
@@ -762,7 +762,7 @@ \section{Contract Creation} \label{ch:create}
 \quad \boldsymbol{\sigma}' &\equiv  \begin{cases}
 \boldsymbol{\sigma} & \text{if} \quad F \\
 \boldsymbol{\sigma}^{**} \quad \text{except:} & \\
-\quad\boldsymbol{\sigma}'[a]_\mathbf{c} = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise}
+\quad\boldsymbol{\sigma}'[a]_\mathrm{c} = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise}
 \end{cases} \\
 \nonumber \text{where} \\
 F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\  \mathbf{g}^{**} < \mathbf{c} \ \vee\  |\mathbf{o}| > 24576\big)
@@ -786,7 +786,7 @@ \section{Message Call} \label{ch:call}
 
 We define $\boldsymbol{\sigma}_1$, the first transitional state as the original state but with the value transferred from sender to recipient:
 \begin{equation}
-\boldsymbol{\sigma}_1[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}[s]_\mathbf{b} - v
+\boldsymbol{\sigma}_1[r]_\mathrm{b} \equiv \boldsymbol{\sigma}[r]_\mathrm{b} + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_\mathrm{b} \equiv \boldsymbol{\sigma}[s]_\mathrm{b} - v
 \end{equation}
 unless $s = r$.
 
@@ -795,7 +795,7 @@ \section{Message Call} \label{ch:call}
 \boldsymbol{\sigma}_1 \equiv \boldsymbol{\sigma}_1' \quad \text{except:} \\
 \end{equation}
 \begin{equation}
-\boldsymbol{\sigma}_1[s]_\mathbf{b} \equiv \boldsymbol{\sigma}_1'[s]_\mathbf{b} - v
+\boldsymbol{\sigma}_1[s]_\mathrm{b} \equiv \boldsymbol{\sigma}_1'[s]_\mathrm{b} - v
 \end{equation}
 \begin{equation}
 \text{and}\quad \boldsymbol{\sigma}_1' \equiv \boldsymbol{\sigma} \quad \text{except:} \\
@@ -803,11 +803,11 @@ \section{Message Call} \label{ch:call}
 \begin{equation}
 \begin{cases}
 \boldsymbol{\sigma}_1'[r] \equiv (v, 0, \mathtt{\tiny KEC}(()), \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing)) & \text{if} \quad \boldsymbol{\sigma}[r] = \varnothing \\
-\boldsymbol{\sigma}_1'[r]_\mathbf{b} \equiv \boldsymbol{\sigma}[r]_\mathbf{b} + v & \text{otherwise}
+\boldsymbol{\sigma}_1'[r]_\mathrm{b} \equiv \boldsymbol{\sigma}[r]_\mathrm{b} + v & \text{otherwise}
 \end{cases}
 \end{equation}
 
-The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_\mathbf{c}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$).
+The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_\mathrm{c}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$).
 
 \begin{eqnarray}
 \boldsymbol{\sigma}' & \equiv & \begin{cases}
@@ -824,17 +824,17 @@ \section{Message Call} \label{ch:call}
 \Xi_{\mathtt{RIP160}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 3 \\
 \Xi_{\mathtt{ID}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 4 \\
 \Xi(\boldsymbol{\sigma}_1, g, I) & \text{otherwise} \end{cases} \\
-I_\mathbf{a} & \equiv & r \\
-I_\mathbf{o} & \equiv & o \\
-I_\mathbf{p} & \equiv & p \\
-I_\mathbf{d} & \equiv & \mathbf{d} \\
-I_\mathbf{s} & \equiv & s \\
-\hyperlink{I v}{I_\mathbf{v}} & \equiv & \tilde{v} \\
-I_\mathbf{e} & \equiv & e \\
-\text{Let} \; \mathtt{\tiny KEC}(I_\mathbf{b}) & = & \boldsymbol{\sigma}[c]_\mathbf{c}
+I_\mathrm{a} & \equiv & r \\
+I_\mathrm{o} & \equiv & o \\
+I_\mathrm{p} & \equiv & p \\
+I_\mathrm{d} & \equiv & \mathbf{d} \\
+I_\mathrm{s} & \equiv & s \\
+\hyperlink{I v}{I_\mathrm{v}} & \equiv & \tilde{v} \\
+I_\mathrm{e} & \equiv & e \\
+\text{Let} \; \mathtt{\tiny KEC}(I_\mathrm{b}) & = & \boldsymbol{\sigma}[c]_\mathrm{c}
 \end{eqnarray}
 
-It is assumed that the client will have stored the pair $(\mathtt{\tiny KEC}(I_\mathbf{b}), I_\mathbf{b})$ at some point prior in order to make the determination of $I_\mathbf{b}$ feasible.
+It is assumed that the client will have stored the pair $(\mathtt{\tiny KEC}(I_\mathrm{b}), I_\mathrm{b})$ at some point prior in order to make the determination of $I_\mathrm{b}$ feasible.
 
 As can be seen, there are four exceptions to the usage of the general execution framework $\Xi$ for evaluation of the message call: these are four so-called `precompiled' contracts, meant as a preliminary piece of architecture that may later become \textit{native extensions}. The four contracts in addresses 1, 2, 3 and 4 execute the elliptic curve public key recovery function, the SHA2 256-bit hash scheme, the RIPEMD 160-bit hash scheme and the identity function respectively.
 
@@ -867,15 +867,15 @@ \subsection{Execution Environment}
 In addition to the system state $\boldsymbol{\sigma}$, and the remaining gas for computation $g$, there are several pieces of important information used in the execution environment that the execution agent must provide; these are contained in the tuple $I$:
 
 \begin{itemize}\hypertarget{I a}{
-\item $I_\mathbf{a}$, the address of the account which owns the code that is executing.}\hypertarget{I o}{
-\item $I_\mathbf{o}$, the sender address of the transaction that originated this execution.}\hypertarget{I p}{
-\item $I_\mathbf{p}$, the price of gas in the transaction that originated this execution.}\hypertarget{I d}{
-\item $I_\mathbf{d}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data.}\hypertarget{I s}{
-\item $I_\mathbf{s}$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender.}\hypertarget{I v}{
-\item $I_\mathbf{v}$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value.}\hypertarget{I b}{
-\item $I_\mathbf{b}$, the byte array that is the machine code to be executed.
+\item $I_\mathrm{a}$, the address of the account which owns the code that is executing.}\hypertarget{I o}{
+\item $I_\mathrm{o}$, the sender address of the transaction that originated this execution.}\hypertarget{I p}{
+\item $I_\mathrm{p}$, the price of gas in the transaction that originated this execution.}\hypertarget{I d}{
+\item $I_\mathrm{d}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data.}\hypertarget{I s}{
+\item $I_\mathrm{s}$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender.}\hypertarget{I v}{
+\item $I_\mathrm{v}$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value.}\hypertarget{I b}{
+\item $I_\mathrm{b}$, the byte array that is the machine code to be executed.
 \item $I_H$, the block header of the present block.}\hypertarget{I e}{
-\item $I_\mathbf{e}$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present).}
+\item $I_\mathrm{e}$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present).}
 \end{itemize}
 
 The execution model defines the function $\Xi$, which can compute the resultant state $\boldsymbol{\sigma}'$, the remaining gas $g'$, the accrued substate $A$ and the resultant output, $\mathbf{o}$, given these definitions. For the present context, we will defined it as:
@@ -896,13 +896,13 @@ \subsection{Execution Overview}
 \hypertarget{emptySequence}{}
 The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt.
 \begin{eqnarray}
-\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_\mathbf{g}, A, \mathbf{o}) \\
+\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_\mathrm{g}, A, \mathbf{o}) \\
 (\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\
-\boldsymbol{\mu}_\mathbf{g} & \equiv & \mathbf{g} \\
+\boldsymbol{\mu}_\mathrm{g} & \equiv & \mathbf{g} \\
 \boldsymbol{\mu}_{pc} & \equiv & 0 \\
-\boldsymbol{\mu}_\mathbf{m} & \equiv & (0, 0, ...) \\
-\boldsymbol{\mu}_\mathbf{i} & \equiv & 0 \\
-\boldsymbol{\mu}_\mathbf{s} & \equiv & ()
+\boldsymbol{\mu}_\mathrm{m} & \equiv & (0, 0, ...) \\
+\boldsymbol{\mu}_\mathrm{i} & \equiv & 0 \\
+\boldsymbol{\mu}_\mathrm{s} & \equiv & ()
 \end{eqnarray}
 \begin{equation}
 X\big( (\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \big) \equiv \begin{cases}
@@ -918,18 +918,18 @@ \subsection{Execution Overview}
 (a, b, c, d) \cdot e & \equiv & (a, b, c, d, e)
 \end{eqnarray}
 
-Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_\mathbf{g}$ from the resultant machine state $\boldsymbol{\mu}'$.
+Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_\mathrm{g}$ from the resultant machine state $\boldsymbol{\mu}'$.
 
 $X$ is thus cycled (recursively here, but implementations are generally expected to use a simple iterative loop) until either $Z$ becomes true indicating that the present state is exceptional and that the machine must be halted and any changes discarded or until $H$ becomes a series (rather than the empty set) indicating that the machine has reached a controlled halt.
 
 \subsubsection{Machine State}
-The machine state $\boldsymbol{\mu}$ is defined as the tuple $(g, pc, \mathbf{m}, i, \mathbf{s})$ which are the gas available, the program counter $pc \in \mathbb{P}_{256}$ , the memory contents, the active number of words in memory (counting continuously from position 0), and the stack contents. The memory contents $\boldsymbol{\mu}_\mathbf{m}$ are a series of zeroes of size $2^{256}$.
+The machine state $\boldsymbol{\mu}$ is defined as the tuple $(g, pc, \mathbf{m}, i, \mathbf{s})$ which are the gas available, the program counter $pc \in \mathbb{P}_{256}$ , the memory contents, the active number of words in memory (counting continuously from position 0), and the stack contents. The memory contents $\boldsymbol{\mu}_\mathrm{m}$ are a series of zeroes of size $2^{256}$.
 
 For the ease of reading, the instruction mnemonics, written in small-caps (\eg \space {\small ADD}), should be interpreted as their numeric equivalents; the full table of instructions and their specifics is given in Appendix \ref{app:vm}.
 
 For the purposes of defining $Z$, $H$ and $O$, we define $w$ as the current operation to be executed:
 \begin{equation}\label{eq:currentoperation}
-w \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathbf{b} \rVert \\
+w \equiv \begin{cases} I_\mathrm{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathrm{b} \rVert \\
 \text{\small STOP} & \text{otherwise}
 \end{cases}
 \end{equation}
@@ -942,11 +942,11 @@ \subsubsection{Exceptional Halting}
 \begin{equation}
 Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv
 \begin{array}[t]{l}
-\boldsymbol{\mu}_\mathbf{g} < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\
+\boldsymbol{\mu}_\mathrm{g} < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\
 \mathbf{\delta}_w = \varnothing \quad \vee \\
-\lVert\boldsymbol{\mu}_\mathbf{s}\rVert < \mathbf{\delta}_w \quad \vee \\
-( w \in \{ \text{\small JUMP}, \text{\small JUMPI} \} \quad \wedge \\ \quad \boldsymbol{\mu}_\mathbf{s}[0] \notin D(I_\mathbf{b}) ) \quad \vee \\
-\lVert\boldsymbol{\mu}_\mathbf{s}\rVert - \mathbf{\delta}_w + \mathbf{\alpha}_w > 1024 \quad
+\lVert\boldsymbol{\mu}_\mathrm{s}\rVert < \mathbf{\delta}_w \quad \vee \\
+( w \in \{ \text{\small JUMP}, \text{\small JUMPI} \} \quad \wedge \\ \quad \boldsymbol{\mu}_\mathrm{s}[0] \notin D(I_\mathrm{b}) ) \quad \vee \\
+\lVert\boldsymbol{\mu}_\mathrm{s}\rVert - \mathbf{\delta}_w + \mathbf{\alpha}_w > 1024 \quad
 \end{array}
 \end{equation}
 
@@ -998,8 +998,8 @@ \subsection{The Execution Cycle}
 \begin{eqnarray}
 O\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I)\big) & \equiv & (\boldsymbol{\sigma}', \boldsymbol{\mu}', A', I) \\
 \Delta & \equiv & \mathbf{\alpha}_w - \mathbf{\delta}_w \\
-\lVert\boldsymbol{\mu}'_\mathbf{s}\rVert & \equiv & \lVert\boldsymbol{\mu}_\mathbf{s}\rVert + \Delta \\
-\quad \forall x \in [\mathbf{\alpha}_w, \lVert\boldsymbol{\mu}'_\mathbf{s}\rVert): \boldsymbol{\mu}'_\mathbf{s}[x] & \equiv & \boldsymbol{\mu}_\mathbf{s}[x-\Delta]
+\lVert\boldsymbol{\mu}'_\mathrm{s}\rVert & \equiv & \lVert\boldsymbol{\mu}_\mathrm{s}\rVert + \Delta \\
+\quad \forall x \in [\mathbf{\alpha}_w, \lVert\boldsymbol{\mu}'_\mathrm{s}\rVert): \boldsymbol{\mu}'_\mathrm{s}[x] & \equiv & \boldsymbol{\mu}_\mathrm{s}[x-\Delta]
 \end{eqnarray}
 
 The gas is reduced by the instruction's gas cost and for most instructions, the program counter increments on each cycle, for the three exceptions, we assume a function $J$, subscripted by one of two instructions, which evaluates to the according value:
@@ -1014,8 +1014,8 @@ \subsection{The Execution Cycle}
 
 In general, we assume the memory, self-destruct set and system state don't change:
 \begin{eqnarray}
-\boldsymbol{\mu}'_\mathbf{m} & \equiv & \boldsymbol{\mu}_\mathbf{m} \\
-\boldsymbol{\mu}'_\mathbf{i} & \equiv & \boldsymbol{\mu}_\mathbf{i} \\
+\boldsymbol{\mu}'_\mathrm{m} & \equiv & \boldsymbol{\mu}_\mathrm{m} \\
+\boldsymbol{\mu}'_\mathrm{i} & \equiv & \boldsymbol{\mu}_\mathrm{i} \\
 A' & \equiv & A \\
 \boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}
 \end{eqnarray}
@@ -1030,11 +1030,11 @@ \section{Blocktree to Blockchain} \label{ch:ghost}
 
 Thus we define the total difficulty of block $B$ recursively as:
 \begin{eqnarray}
-B_\mathbf{t} & \equiv & B'_\mathbf{t} + B_\mathbf{d} \\
+B_\mathrm{t} & \equiv & B'_\mathrm{t} + B_\mathrm{d} \\
 B' & \equiv & P(B_H)
 \end{eqnarray}
 
-As such given a block $B$, $B_\mathbf{t}$ is its total difficulty, $B'$ is its parent block and $B_\mathbf{d}$ is its difficulty.
+As such given a block $B$, $B_\mathrm{t}$ is its total difficulty, $B'$ is its parent block and $B_\mathrm{d}$ is its difficulty.
 
 \section{Block Finalisation} \label{ch:finalisation}
 
@@ -1051,7 +1051,7 @@ \subsection{Ommer Validation}
 
 The validation of \hyperlink{ommerheaders}{ommer headers} means nothing more than verifying that each ommer header is both a valid header and satisfies the relation of $N$th-generation ommer to the present block where $N \leq 6$. The maximum of ommer headers is two. Formally:
 \begin{equation}
-\lVert \hyperlink{B U}{B_\mathbf{U}} \rVert \leqslant 2 \bigwedge_{U \in \hyperlink{B U}{B_\mathbf{U}}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6)
+\lVert \hyperlink{B U}{B_\mathrm{U}} \rVert \leqslant 2 \bigwedge_{U \in \hyperlink{B U}{B_\mathrm{U}}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6)
 \end{equation}
 
 where $k$ denotes the ``is-kin'' property:
@@ -1064,34 +1064,34 @@ \subsection{Ommer Validation}
 
 and $s$ denotes the ``is-sibling'' property:
 \begin{equation}
-s(U, H) \equiv (P(H) = P(U)\; \wedge \; H \neq U \; \wedge \; U \notin B(H)_\mathbf{U})
+s(U, H) \equiv (P(H) = P(U)\; \wedge \; H \neq U \; \wedge \; U \notin B(H)_\mathrm{U})
 \end{equation}
 where $B(H)$ is the block of the corresponding header $H$.
 
 \subsection{Transaction Validation}
 
-%where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_\mathbf{T}[i]$, and $g[i]$ the total gas used immediately after said transaction.
+%where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_\mathrm{T}[i]$, and $g[i]$ the total gas used immediately after said transaction.
 
-The given \textbf{gasUsed} must correspond faithfully to the transactions listed: \hyperlink{H g}{${B_H}_\mathbf{g}$}, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction:
+The given \textbf{gasUsed} must correspond faithfully to the transactions listed: \hyperlink{H g}{${B_H}_\mathrm{g}$}, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction:
 \begin{equation}
-\hyperlink{H g}{{B_H}_\mathbf{g}} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathbf{u}}
+\hyperlink{H g}{{B_H}_\mathrm{g}} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathrm{u}}
 \end{equation}
 
 \subsection{Reward Application}
 
-The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{block reward R b}{$R_\mathbf{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):}
+The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{block reward R b}{$R_\mathrm{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):}
 \begin{eqnarray}
 \Omega(B, \boldsymbol{\sigma}) & \equiv & \boldsymbol{\sigma}': \boldsymbol{\sigma}' = \boldsymbol{\sigma} \quad \text{except:} \\
-\boldsymbol{\sigma}'[\hyperlink{H c}{{B_H}_\mathbf{c}}]_\mathbf{b} & = & \boldsymbol{\sigma}[{B_H}_\mathbf{c}]_\mathbf{b} + (1 + \frac{\lVert \hyperlink{B U}{B_\mathbf{U}}\rVert}{32})\hyperlink{block reward R b}{R_\mathbf{b}} \\
-\forall_{U \in B_\mathbf{U}}: \\ \nonumber
- \boldsymbol{\sigma}'[U_\mathbf{c}]_\mathbf{b} & = & \boldsymbol{\sigma}[U_\mathbf{c}]_\mathbf{b} + (1 + \frac{1}{8} (U_\mathbf{i} - \hyperlink{H i}{{B_H}_\mathbf{i}})) \hyperlink{block reward R b}{R_\mathbf{b}}
+\boldsymbol{\sigma}'[\hyperlink{H c}{{B_H}_\mathrm{c}}]_\mathrm{b} & = & \boldsymbol{\sigma}[{B_H}_\mathrm{c}]_\mathrm{b} + (1 + \frac{\lVert \hyperlink{B U}{B_\mathrm{U}}\rVert}{32})\hyperlink{block reward R b}{R_\mathrm{b}} \\
+\forall_{U \in B_\mathrm{U}}: \\ \nonumber
+ \boldsymbol{\sigma}'[U_\mathrm{c}]_\mathrm{b} & = & \boldsymbol{\sigma}[U_\mathrm{c}]_\mathrm{b} + (1 + \frac{1}{8} (U_\mathrm{i} - \hyperlink{H i}{{B_H}_\mathrm{i}})) \hyperlink{block reward R b}{R_\mathrm{b}}
 \end{eqnarray}
 
 If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively.\hypertarget{block reward R b}{}
 
 We define the block reward as 5 Ether:
 \begin{equation}
-\text{Let} \quad R_\mathbf{b} = 5 \times 10^{18}
+\text{Let} \quad R_\mathrm{b} = 5 \times 10^{18}
 \end{equation}
 
 \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation}
@@ -1101,45 +1101,45 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation}
 \begin{equation}
 \Gamma(B) \equiv \begin{cases}
 \boldsymbol{\sigma}_0 & \text{if} \quad P(B_H) = \varnothing \\
-\boldsymbol{\sigma}_\mathbf{i}: \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\boldsymbol{\sigma}_\mathbf{i})) = {P(B_H)_H}_\mathbf{r} & \text{otherwise}
+\boldsymbol{\sigma}_\mathrm{i}: \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\boldsymbol{\sigma}_\mathrm{i})) = {P(B_H)_H}_\mathrm{r} & \text{otherwise}
 \end{cases}
 \end{equation}
 }
-Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathbf{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathbf{i}$; it is assumed that implementations will store this in the state database, which is trivial and efficient since the trie is by nature an immutable data structure.
+Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathrm{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathrm{i}$; it is assumed that implementations will store this in the state database, which is trivial and efficient since the trie is by nature an immutable data structure.
 \hypertarget{Phi}{
 And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$:}
 \begin{eqnarray}
 \Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\
-B'_\mathbf{n} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \\
-B'_\mathbf{m} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\
-B^* & \equiv & B \quad \text{except:} \quad {\hyperlink{Transaction Receipt}{B^*_\mathbf{r}}} = \hyperlink{r}{r}(\hyperlink{Pi}{\Pi}(\Gamma(B), B))
+B'_\mathrm{n} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \\
+B'_\mathrm{m} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\
+B^* & \equiv & B \quad \text{except:} \quad {\hyperlink{Transaction Receipt}{B^*_\mathrm{r}}} = \hyperlink{r}{r}(\hyperlink{Pi}{\Pi}(\Gamma(B), B))
 \end{eqnarray}
 With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}.
 
 As specified at the beginning of the present work, \hyperlink{Pi}{$\Pi$ is the state-transition function}, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined.
 
-\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathbf{l}$ and $\mathbf{R}[n]_\mathbf{u}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_\mathbf{b}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction):
+\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathrm{l}$ and $\mathbf{R}[n]_\mathrm{u}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_\mathrm{b}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction):
 \begin{equation}
-\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n]) & \text{otherwise} \end{cases}
+\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathrm{T}[n]) & \text{otherwise} \end{cases}
 \end{equation}
 
-In the case of \hyperlink{Transaction Receipt}{${B_\mathbf{R}}[n]_\mathbf{u}$}, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total:
+In the case of \hyperlink{Transaction Receipt}{${B_\mathrm{R}}[n]_\mathrm{u}$}, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total:
 \begin{equation}
-\mathbf{R}[n]_\mathbf{u} = \begin{cases} 0 & \text{if} \quad n < 0 \\
+\mathbf{R}[n]_\mathrm{u} = \begin{cases} 0 & \text{if} \quad n < 0 \\
 \begin{array}[b]{l}
-\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])\\ \quad + \mathbf{R}[n-1]_\mathbf{u}
+\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathrm{T}[n])\\ \quad + \mathbf{R}[n-1]_\mathrm{u}
 \end{array}
  & \text{otherwise} \end{cases}
 \end{equation}
 
-For $\mathbf{R}[n]_\mathbf{l}$, we utilise the \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} function that we conveniently defined in the transaction execution function.
+For $\mathbf{R}[n]_\mathrm{l}$, we utilise the \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} function that we conveniently defined in the transaction execution function.
 \begin{equation}
-\mathbf{R}[n]_\mathbf{l} =
-\hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathbf{T}[n])
+\mathbf{R}[n]_\mathrm{l} =
+\hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathrm{T}[n])
 \end{equation}
 
 \hypertarget{Pi}{
-Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathbf{R})_{\boldsymbol{\sigma}}$:
+Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathrm{R})_{\boldsymbol{\sigma}}$:
 \begin{equation}
 \Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{R sigma}{\mathbf{R})_{\boldsymbol{\sigma}}})
 \end{equation}}
@@ -1160,10 +1160,10 @@ \subsection{Mining Proof-of-Work} \label{ch:pow}
 
 More formally, the proof-of-work function takes the form of $\mathtt{PoW}$:
 \begin{equation}
-m = \hyperlink{H m}{H_\mathbf{m}} \quad \wedge \quad n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathbf{d}}} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathbf{n}, \mathbf{d})
+m = \hyperlink{H m}{H_\mathrm{m}} \quad \wedge \quad n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathrm{n}, \mathbf{d})
 \end{equation}
 
-Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathbf{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathbf{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being the \hyperlink{block nonce}{block nonce}, a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below.
+Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathrm{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathrm{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being the \hyperlink{block nonce}{block nonce}, a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below.
 \subsubsection{Ethash}
 Ethash is the PoW algorithm for Ethereum \textit{Frontier} and \textit{Homestead}. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms were drastically changed with R\&D from February 2015 until May 4 2015 (\cite{commitdateforEthash}). The general route that the algorithm takes is as follows:
 
@@ -1274,7 +1274,7 @@ \section{Recursive Length Prefix}\label{app:rlp}
 
 We define the RLP function as $\mathtt{\tiny RLP}$ through two sub-functions, the first handling the instance when the value is a byte array, the second when it is a sequence of further values:
 \begin{equation}
-\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_\mathbf{b}}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ \hyperlink{R l}{R_\mathbf{l}}(\mathbf{x}) & \text{otherwise} \end{cases}
+\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_\mathrm{b}}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ \hyperlink{R l}{R_\mathrm{l}}(\mathbf{x}) & \text{otherwise} \end{cases}
 \end{equation}
 
 If the value to be serialised is a byte-array, the RLP serialisation takes one of three forms:
@@ -1285,9 +1285,9 @@ \section{Recursive Length Prefix}\label{app:rlp}
 \item Otherwise, the output is equal to the input prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the input byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 183.
 \end{itemize}
 \hypertarget{R b}{
-Formally, we define $R_\mathbf{b}$:}
+Formally, we define $R_\mathrm{b}$:}
 \begin{eqnarray}
-R_\mathbf{b}(\mathbf{x}) & \equiv & \begin{cases}
+R_\mathrm{b}(\mathbf{x}) & \equiv & \begin{cases}
 \mathbf{x} & \text{if} \quad \lVert \mathbf{x} \rVert = 1 \wedge \mathbf{x}[0] < 128 \\
 (128 + \lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{else if} \quad \lVert \mathbf{x} \rVert < 56 \\
 \big(183 + \big\lVert \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{otherwise}
@@ -1305,9 +1305,9 @@ \section{Recursive Length Prefix}\label{app:rlp}
 \item Otherwise, the output is equal to the concatenated serialisations prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the concatenated serialisations byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 247.
 \end{itemize}
 \hypertarget{R l}{
-Thus we finish by formally defining $R_\mathbf{l}$:
+Thus we finish by formally defining $R_\mathrm{l}$:
 \begin{eqnarray}
-R_\mathbf{l}(\mathbf{x}) & \equiv & \begin{cases}
+R_\mathrm{l}(\mathbf{x}) & \equiv & \begin{cases}
 (192 + \lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{if} \quad \lVert s(\mathbf{x}) \rVert < 56 \\
 \big(247 + \big\lVert \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{otherwise}
 \end{cases} \\
@@ -1410,22 +1410,22 @@ \section{Precompiled Contracts}\label{app:precompiled}
 For each precompiled contract, we make use of a template function, $\Xi_{\mathtt{PRE}}$, which implements the out-of-gas checking.
 \begin{equation}
 \Xi_{\mathtt{PRE}}(\boldsymbol{\sigma}, g, I) \equiv \begin{cases}
-(\varnothing, 0, A^0, ()) & \text{if} \quad \mathbf{g} < \mathbf{g}_\mathbf{r} \\
-(\boldsymbol\sigma, \mathbf{g} - \mathbf{g}_\mathbf{r}, A^0, \mathbf{o}) & \text{otherwise}\end{cases}
+(\varnothing, 0, A^0, ()) & \text{if} \quad \mathbf{g} < \mathbf{g}_\mathrm{r} \\
+(\boldsymbol\sigma, \mathbf{g} - \mathbf{g}_\mathrm{r}, A^0, \mathbf{o}) & \text{otherwise}\end{cases}
 \end{equation}
 
-The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $\mathbf{g}_\mathbf{r}$, the gas requirements.
+The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $\mathbf{g}_\mathrm{r}$, the gas requirements.
 
 For the elliptic curve DSA recover VM execution function, we also define $\mathbf{d}$ to be the input data, well-defined for an infinite length by appending zeroes as required. Importantly in the case of an invalid signature ($\mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing$), then we have no output.
 \begin{eqnarray}
 \Xi_{\mathtt{ECREC}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathbf{r} &=& 3000\\
+\mathbf{g}_\mathrm{r} &=& 3000\\
 |\mathbf{o}| &=& \begin{cases} 0 & \text{if} \quad \mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing\\ 32 & \text{otherwise} \end{cases}\\
 \text{if} \quad |\mathbf{o}| = 32: &&\\
 \mathbf{o}[0..11] &=& 0 \\
 \mathbf{o}[12..31] &=& \mathtt{\tiny KEC}\big(\mathtt{\tiny ECDSARECOVER}(h, v, r, s)\big)[12..31] \quad \text{where:}\\
-\mathbf{d}[0..(|I_\mathbf{d}|-1)] &=& I_\mathbf{d}\\
-\mathbf{d}[|I_\mathbf{d}|..] &=& (0, 0, ...) \\
+\mathbf{d}[0..(|I_\mathrm{d}|-1)] &=& I_\mathrm{d}\\
+\mathbf{d}[|I_\mathrm{d}|..] &=& (0, 0, ...) \\
 h &=& \mathbf{d}[0..31]\\
 v &=& \mathbf{d}[32..63]\\
 r &=& \mathbf{d}[64..95]\\
@@ -1435,12 +1435,12 @@ \section{Precompiled Contracts}\label{app:precompiled}
 The two hash functions, RIPEMD-160 and SHA2-256 are more trivially defined as an almost pass-through operation. Their gas usage is dependent on the input data size, a factor rounded up to the nearest number of words.
 \begin{eqnarray}
 \Xi_{\mathtt{SHA256}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathbf{r} &=& 60 + 12\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\
-\mathbf{o}[0..31] &=& \mathtt{\tiny SHA256}(I_\mathbf{d})\\
+\mathbf{g}_\mathrm{r} &=& 60 + 12\Big\lceil \dfrac{|I_\mathrm{d}|}{32} \Big\rceil\\
+\mathbf{o}[0..31] &=& \mathtt{\tiny SHA256}(I_\mathrm{d})\\
 \Xi_{\mathtt{RIP160}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathbf{r} &=& 600 + 120\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\
+\mathbf{g}_\mathrm{r} &=& 600 + 120\Big\lceil \dfrac{|I_\mathrm{d}|}{32} \Big\rceil\\
 \mathbf{o}[0..11] &=& 0 \\
-\mathbf{o}[12..31] &=& \mathtt{\tiny RIPEMD160}(I_\mathbf{d})\\
+\mathbf{o}[12..31] &=& \mathtt{\tiny RIPEMD160}(I_\mathrm{d})\\
 \end{eqnarray}
 
 For the purposes here, we assume we have well-defined standard cryptographic functions for RIPEMD-160 and SHA2-256 of the form:
@@ -1452,8 +1452,8 @@ \section{Precompiled Contracts}\label{app:precompiled}
 Finally, the fourth contract, the identity function $\Xi_{\mathtt{ID}}$ simply defines the output as the input:
 \begin{eqnarray}
 \Xi_{\mathtt{ID}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathbf{r} &=& 15 + 3\Big\lceil \dfrac{|I_\mathbf{d}|}{32} \Big\rceil\\
-\mathbf{o} &=& I_\mathbf{d}
+\mathbf{g}_\mathrm{r} &=& 15 + 3\Big\lceil \dfrac{|I_\mathrm{d}|}{32} \Big\rceil\\
+\mathbf{o} &=& I_\mathrm{d}
 \end{eqnarray}
 
 
@@ -1493,11 +1493,11 @@ \section{Signing Transactions}\label{app:signing}
 \end{equation}
 
 \hypertarget{h T}{
-The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_\mathbf{r}$, $T_\mathbf{s}$ and $\hyperlink{T w}{T_\mathbf{w}}$:
+The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_\mathrm{r}$, $T_\mathrm{s}$ and $\hyperlink{T w}{T_\mathrm{w}}$:
 \begin{eqnarray}
 L_S(T) & \equiv & \begin{cases}
-(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{i}) & \text{if} \; T_\mathbf{t} = 0\\
-(T_\mathbf{n}, T_\mathbf{p}, T_\mathbf{g}, T_\mathbf{t}, \hyperlink{T v}{T_\mathbf{v}}, T_\mathbf{d}) & \text{otherwise}
+(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{i}) & \text{if} \; T_\mathrm{t} = 0\\
+(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{d}) & \text{otherwise}
 \end{cases} \\
 h(T) & \equiv & \mathtt{\small KEC}( L_S(T) )}
 \end{eqnarray}
@@ -1505,12 +1505,12 @@ \section{Signing Transactions}\label{app:signing}
 \hyperlink{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as:
 \begin{eqnarray}
 G(T, p_r) \equiv T \quad \text{except:} \\
-(\hyperlink{T w}{T_\mathbf{w}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r)
+(\hyperlink{T w}{T_\mathrm{w}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r)
 \end{eqnarray}}
 
 We may then define the sender function $S$ of the transaction as:
 \begin{equation}
-S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_\mathbf{w}}, T_\mathbf{r}, T_\mathbf{s}) \big) \big)
+S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_\mathrm{w}}, T_\mathrm{r}, T_\mathrm{s}) \big) \big)
 \end{equation}
 
 The assertion that the sender of a signed transaction equals the address of the signer should be self-evident:
@@ -1578,17 +1578,17 @@ \subsection{Gas Cost}
 The general gas cost function, $C$, is defined as:
 
 \begin{equation}
-C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_\mathbf{i})-C_{mem}(\boldsymbol{\mu}_\mathbf{i}) + \begin{cases}
+C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_\mathrm{i})-C_{mem}(\boldsymbol{\mu}_\mathrm{i}) + \begin{cases}
 C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SSTORE} \\
-G_{\mathrm{exp}} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] = 0 \\
-G_{\mathrm{exp}} + G_{\mathrm{expbyte}}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathbf{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathbf{s}[1] > 0 \\
-G_{\mathrm{verylow}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathbf{s}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\
-G_{\mathrm{extcode}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathbf{s}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1] & \text{if} \quad w = \text{\small LOG0} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG1} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+2G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG2} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+3G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG3} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathbf{s}[1]+4G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG4} \\
+G_{\mathrm{exp}} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathrm{s}[1] = 0 \\
+G_{\mathrm{exp}} + G_{\mathrm{expbyte}}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathrm{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathrm{s}[1] > 0 \\
+G_{\mathrm{verylow}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathrm{s}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\
+G_{\mathrm{extcode}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathrm{s}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1] & \text{if} \quad w = \text{\small LOG0} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG1} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+2G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG2} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+3G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG3} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+4G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG4} \\
 C_\text{\tiny CALL}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small CALL} \lor \text{\small CALLCODE} \lor \text{\small DELEGATECALL} \\
 \hyperlink{C tiny SELFDESTRUCT}{C_\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{selfdestruct}{\small SELFDESTRUCT}} \\
 G_{\mathrm{create}} & \text{if} \quad w = \text{\small CREATE}\\
@@ -1607,7 +1607,7 @@ \subsection{Gas Cost}
 \end{cases}
 \end{equation}
 \begin{equation}
-w \equiv \begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathbf{b} \rVert\\
+w \equiv \begin{cases} I_\mathrm{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathrm{b} \rVert\\
 \text{\small STOP} & \text{otherwise}
 \end{cases}
 \end{equation}
@@ -1633,9 +1633,9 @@ \subsection{Gas Cost}
 
 $W_{\mathrm{extcode}}$ = \{{\small EXTCODESIZE}\}
 
-Note the memory cost component, given as the product of $G_{\mathrm{memory}}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathbf{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes.
+Note the memory cost component, given as the product of $G_{\mathrm{memory}}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathrm{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes.
 
-Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_\mathbf{i}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal.
+Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_\mathrm{i}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal.
 
 Note also that $C_{mem}$ is the memory cost function (the expansion function being the difference between the cost before and after). It is a polynomial, with the higher-order coefficient divided and floored, and thus linear up to 724B of memory used, after which it costs substantially more.
 
@@ -1673,43 +1673,43 @@ \subsection{Instruction Set}
 \\
 \midrule
 0x01 & {\small ADD} & 2 & 1 & This is the addition operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1]$ \\
 \midrule
 0x02 & {\small MUL} & 2 & 1 & This is the multiplication operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] \times \boldsymbol{\mu}_\mathrm{s}[1]$ \\
 \midrule
 0x03 & {\small SUB} & 2 & 1 & This is the subtraction operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] - \boldsymbol{\mu}_\mathbf{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] - \boldsymbol{\mu}_\mathrm{s}[1]$ \\
 \midrule
 0x04 & {\small DIV} & 2 & 1 & This is the integer division operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \lfloor\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]\rfloor & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ \lfloor\boldsymbol{\mu}_\mathrm{s}[0] \div \boldsymbol{\mu}_\mathrm{s}[1]\rfloor & \text{otherwise}\end{cases}$  \\
 \midrule
 0x05 & {\small SDIV} & 2 & 1 & This is the signed integer division operation (truncated). \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ -2^{255} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = -2^{255} \wedge \quad \boldsymbol{\mu}_\mathbf{s}[1] = -1\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]) \lfloor |\boldsymbol{\mu}_\mathbf{s}[0] \div \boldsymbol{\mu}_\mathbf{s}[1]| \rfloor & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ -2^{255} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] = -2^{255} \wedge \quad \boldsymbol{\mu}_\mathrm{s}[1] = -1\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathrm{s}[0] \div \boldsymbol{\mu}_\mathrm{s}[1]) \lfloor |\boldsymbol{\mu}_\mathrm{s}[0] \div \boldsymbol{\mu}_\mathrm{s}[1]| \rfloor & \text{otherwise}\end{cases}$  \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 &&&& Note the overflow semantic when $-2^{255}$ is negated.\\
 \midrule
 0x06 & {\small MOD} & 2 & 1 & This is the modulo remainder operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \boldsymbol{\mu}_\mathbf{s}[0] \bmod \boldsymbol{\mu}_\mathbf{s}[1] & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ \boldsymbol{\mu}_\mathrm{s}[0] \bmod \boldsymbol{\mu}_\mathrm{s}[1] & \text{otherwise}\end{cases}$  \\
 \midrule
 0x07 & {\small SMOD} & 2 & 1 & This is the signed modulo remainder operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathbf{s}[0]) (|\boldsymbol{\mu}_\mathbf{s}[0]| \bmod |\boldsymbol{\mu}_\mathbf{s}[1]|) & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathrm{s}[0]) (|\boldsymbol{\mu}_\mathrm{s}[0]| \bmod |\boldsymbol{\mu}_\mathrm{s}[1]|) & \text{otherwise}\end{cases}$  \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 \midrule
 0x08 & {\small ADDMOD} & 3 & 1 & This is the modulo addition operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] = 0\\ (\boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1]) \mod \boldsymbol{\mu}_\mathrm{s}[2] & \text{otherwise}\end{cases}$  \\
 &&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\
 \midrule
 0x09 & {\small MULMOD} & 3 & 1 & This is the modulo multiplication operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] = 0\\ (\boldsymbol{\mu}_\mathbf{s}[0] \times \boldsymbol{\mu}_\mathbf{s}[1]) \mod \boldsymbol{\mu}_\mathbf{s}[2] & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] = 0\\ (\boldsymbol{\mu}_\mathrm{s}[0] \times \boldsymbol{\mu}_\mathrm{s}[1]) \mod \boldsymbol{\mu}_\mathrm{s}[2] & \text{otherwise}\end{cases}$  \\
 &&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\
 \midrule
 0x0a & {\small EXP} & 2 & 1 & This is the exponential operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0] ^ {\boldsymbol{\mu}_\mathbf{s}[1] }$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] ^ {\boldsymbol{\mu}_\mathrm{s}[1] }$ \\
 \midrule
 0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\
-&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{t} &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathbf{s}[0] + 1) \\ \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i} &\text{otherwise} \end{cases}$ \\
-\multicolumn{5}{l}{$\boldsymbol{\mu}_\mathbf{s}[x]_\mathbf{i}$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathbf{s}[x]$} \vspace{5pt} \\
+&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{t} &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathrm{s}[0] + 1) \\ \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i} &\text{otherwise} \end{cases}$ \\
+\multicolumn{5}{l}{$\boldsymbol{\mu}_\mathrm{s}[x]_\mathrm{i}$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathrm{s}[x]$} \vspace{5pt} \\
 \end{tabularx}
 
 \begin{tabularx}{\textwidth}{rlrrX}
@@ -1717,39 +1717,39 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{10s: Comparison \& Bitwise Logic Operations}} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x10 & {\small LT} & 2 & 1 & This is the less-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] < \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x11 & {\small GT} & 2 & 1 & This is the greater-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] > \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x12 & {\small SLT} & 2 & 1 & This is the signed less-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] < \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] < \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 \midrule
 0x13 & {\small SGT} & 2 & 1 & This is the signed greater-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] > \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 \midrule
 0x14 & {\small EQ} & 2 & 1 & This is the equality comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = \boldsymbol{\mu}_\mathbf{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] = \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x15 & {\small ISZERO} & 1 & 1 & This is the logical negation operation, also called the logical complement or the NOT operation. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x16 & {\small AND} & 2 & 1 & This is the bitwise AND operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \wedge \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} \wedge \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i}$ \\
 \midrule
 0x17 & {\small OR} & 2 & 1 & This is the bitwise OR operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \vee \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} \vee \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i}$ \\
 \midrule
 0x18 & {\small XOR} & 2 & 1 & This is the bitwise XOR operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} \oplus \boldsymbol{\mu}_\mathbf{s}[1]_\mathbf{i}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} \oplus \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i}$ \\
 \midrule
 0x19 & {\small NOT} & 1 & 1 & This is the bitwise NOT operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0]_\mathbf{i} = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x1a & {\small BYTE} & 2 & 1 & Retrieve a single byte from a word. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathbf{s}[0]_\mathbf{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[1]_{(i + 8\boldsymbol{\mu}_\mathbf{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathbf{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathrm{s}[1]_{(i + 8\boldsymbol{\mu}_\mathrm{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathrm{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\
 &&&& For the Nth byte, we count from the left (i.e. $N=0$ would be the most significant in big endian). \\
 \bottomrule
 \end{tabularx}
@@ -1759,8 +1759,8 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{20s: SHA3}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x20 & {\small SHA3} & 2 & 1 & Compute a Keccak-256 hash. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1] - 1) ])$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[1])$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1769,59 +1769,59 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{30s: Environmental Information}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x30 & {\small ADDRESS} & 0 & 1 & Get the address of the currently executing account. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{a}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{a}$ \\
 \midrule
 0x31 & {\small BALANCE} & 1 & 1 & Get the balance of the given account. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0]]_\mathbf{b}& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0]]_\mathrm{b}& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\
 \midrule
 0x32 & {\small ORIGIN} & 0 & 1 & Get the address that the execution originated from. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{o}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{o}$ \\
 &&&& This is the sender of the original transaction; it is never an account with non-empty associated code. \\
 \midrule
 0x33 & {\small CALLER} & 0 & 1 & Get the caller address. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{s}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{s}$ \\
 &&&& This is the address of the account that is directly responsible for this execution. \\
 \midrule
 0x34 & {\small CALLVALUE} & 0 & 1 & Get the deposited value by the instruction/transaction responsible for this execution. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \hyperlink{I v}{I_\mathbf{v}}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \hyperlink{I v}{I_\mathrm{v}}$ \\
 \midrule
 0x35 & {\small CALLDATALOAD} & 1 & 1 & Get the input data of the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{d}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \quad \text{with} \quad I_\mathbf{d}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_\mathbf{d} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{d}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + 31) ] \quad \text{with} \quad I_\mathrm{d}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_\mathrm{d} \rVert$ \\
 &&&& This pertains to the input data passed with the message call instruction or transaction. \\
 \midrule
 0x36 & {\small CALLDATASIZE} & 0 & 1 & Get the size of the input data in the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{d} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \lVert I_\mathrm{d} \rVert$ \\
 &&&& This pertains to the input data passed with the message call instruction or transaction. \\
 \midrule
 0x37 & {\small CALLDATACOPY} & 3 & 0 & Copy the input data in the current environment to memory. \\
-&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv
-\begin{cases} I_\mathbf{d}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{d} \rVert \\ 0 & \text{otherwise} \end{cases}$\\
-&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\
+&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathrm{s}[2] - 1\} } \boldsymbol{\mu}'_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[0] + i ] \equiv
+\begin{cases} I_\mathrm{d}[\boldsymbol{\mu}_\mathrm{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] + i < \lVert I_\mathrm{d} \rVert \\ 0 & \text{otherwise} \end{cases}$\\
+&&&& The additions in $\boldsymbol{\mu}_\mathrm{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[2])$ \\
 &&&& This pertains to the input data passed with the message call instruction or transaction. \\
 \midrule
 0x38 & {\small CODESIZE} & 0 & 1 & Get the size of code running in the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert I_\mathbf{b} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \lVert I_\mathrm{b} \rVert$ \\
 \midrule
 0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in the current environment to memory. \\
-&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[2] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] + i ] \equiv
-\begin{cases} I_\mathbf{b}[\boldsymbol{\mu}_\mathbf{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] + i < \lVert I_\mathbf{b} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[2])$ \\
-&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\
+&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathrm{s}[2] - 1\} } \boldsymbol{\mu}'_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[0] + i ] \equiv
+\begin{cases} I_\mathrm{b}[\boldsymbol{\mu}_\mathrm{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] + i < \lVert I_\mathrm{b} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[2])$ \\
+&&&& The additions in $\boldsymbol{\mu}_\mathrm{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\
 \midrule
 0x3a & {\small GASPRICE} & 0 & 1 & Get the price of gas in the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv I_\mathbf{p}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{p}$ \\
 &&&& This is the gas price specified by the originating transaction.\\
 \midrule
 0x3b & {\small EXTCODESIZE} & 1 & 1 & Get the size of an account's code. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{c} \rVert$ \\
 \midrule
 0x3c & {\small EXTCODECOPY} & 4 & 0 & Copy an account's code to memory. \\
-&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathbf{s}[3] - 1\} } \boldsymbol{\mu}'_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[1] + i ] \equiv
-\begin{cases} \mathbf{c}[\boldsymbol{\mu}_\mathbf{s}[2] + i] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
-&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{c}$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[3])$ \\
-&&&& The additions in $\boldsymbol{\mu}_\mathbf{s}[2] + i$ are not subject to the $2^{256}$ modulo. \\
+&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathrm{s}[3] - 1\} } \boldsymbol{\mu}'_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[1] + i ] \equiv
+\begin{cases} \mathbf{c}[\boldsymbol{\mu}_\mathrm{s}[2] + i] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
+&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{c}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[1], \boldsymbol{\mu}_\mathrm{s}[3])$ \\
+&&&& The additions in $\boldsymbol{\mu}_\mathrm{s}[2] + i$ are not subject to the $2^{256}$ modulo. \\
 \bottomrule
 \end{tabularx}
 
@@ -1830,25 +1830,25 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{40s: Block Information}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x40 & {\small BLOCKHASH} & 1 & 1 & Get the hash of one of the 256 most recent complete blocks. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv P(I_{\hyperlink{H p}{H_\mathbf{p}}}, \boldsymbol{\mu}_\mathbf{s}[0], 0)$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv P(I_{\hyperlink{H p}{H_\mathrm{p}}}, \boldsymbol{\mu}_\mathrm{s}[0], 0)$ \\
 &&&& where $P$ is the hash of a block of a particular number, up to a maximum age. 0 is left on the stack if the looked for block number is greater than the current block number or more than 256 blocks behind the current block. \\
-&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > \hyperlink{H i}{H_\mathbf{i}} \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = \hyperlink{H i}{H_\mathbf{i}} \\ P(\hyperlink{H p}{H_\mathbf{p}}, n, a + 1) & \text{otherwise} \end{cases}$ \\
+&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > \hyperlink{H i}{H_\mathrm{i}} \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = \hyperlink{H i}{H_\mathrm{i}} \\ P(\hyperlink{H p}{H_\mathrm{p}}, n, a + 1) & \text{otherwise} \end{cases}$ \\
 &&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash in the block following it. \\
 \midrule
 0x41 & {\small COINBASE} & 0 & 1 & Get the block's beneficiary address. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{c}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{c}$ \\
 \midrule
 0x42 & {\small TIMESTAMP} & 0 & 1 & Get the block's timestamp. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{s}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{s}$ \\
 \midrule
 0x43 & {\small NUMBER} & 0 & 1 & Get the block's number. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{i}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{i}$ \\
 \midrule
 0x44 & {\small DIFFICULTY} & 0 & 1 & Get the block's difficulty. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{d}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{d}$ \\
 \midrule
 0x45 & {\small GASLIMIT} & 0 & 1 & Get the block's gas limit. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv {I_H}_\mathbf{l}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{l}$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1859,50 +1859,50 @@ \subsection{Instruction Set}
 0x50 & {\small POP} & 1 & 0 & Remove the top, first item from the stack. \\
 \midrule
 0x51 & {\small MLOAD} & 1 & 1 & Load the first word from memory. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{m}[\boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ]$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\
-&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + 31) ]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv \max(\boldsymbol{\mu}_\mathrm{i}, \ceil{ (\boldsymbol{\mu}_\mathrm{s}[0] + 32) \div 32 })$ \\
+&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathrm{i}$ is not subject to the $2^{256}$ modulo. \\
 \midrule
 0x52 & {\small MSTORE} & 2 & 0 & Save the first word (which is the first item in the stack) to memory. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + 31) ] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 32) \div 32 })$ \\
-&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + 31) ] \equiv \boldsymbol{\mu}_\mathrm{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv \max(\boldsymbol{\mu}_\mathrm{i}, \ceil{ (\boldsymbol{\mu}_\mathrm{s}[0] + 32) \div 32 })$ \\
+&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathrm{i}$ is not subject to the $2^{256}$ modulo. \\
 \midrule
 0x53 & {\small MSTORE8} & 2 & 0 & Save the first byte to memory. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv (\boldsymbol{\mu}_\mathbf{s}[1] \bmod 256) $ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv \max(\boldsymbol{\mu}_\mathbf{i}, \ceil{ (\boldsymbol{\mu}_\mathbf{s}[0] + 1) \div 32 })$ \\
-&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathbf{i}$ is not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] ] \equiv (\boldsymbol{\mu}_\mathrm{s}[1] \bmod 256) $ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv \max(\boldsymbol{\mu}_\mathrm{i}, \ceil{ (\boldsymbol{\mu}_\mathrm{s}[0] + 1) \div 32 })$ \\
+&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathrm{i}$ is not subject to the $2^{256}$ modulo. \\
 \midrule
 0x54 & {\small SLOAD} & 1 & 1 & Load the first word from storage. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]]$ \hypertarget{SSTORE}{\\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{s}[\boldsymbol{\mu}_\mathrm{s}[0]]$ \hypertarget{SSTORE}{\\
 \midrule
 0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\
-&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{s}[ \boldsymbol{\mu}_\mathbf{s}[0] ] \equiv \boldsymbol{\mu}_\mathbf{s}[1] $ \hypertarget{C tiny SSTORE}{\\
+&&&& $\boldsymbol{\sigma}'[I_\mathrm{a}]_\mathrm{s}[ \boldsymbol{\mu}_\mathrm{s}[0] ] \equiv \boldsymbol{\mu}_\mathrm{s}[1] $ \hypertarget{C tiny SSTORE}{\\
 &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases}
-G_{\mathrm{sset}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] = 0 \\
+G_{\mathrm{sset}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{s}[\boldsymbol{\mu}_\mathrm{s}[0]] = 0 \\
 G_{\mathrm{sreset}} & \text{otherwise}
 \end{cases}$ }\\
 &&&& $A'_{r} \equiv A_{r} + \begin{cases}
-R_{\mathrm{sclear}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{s}[\boldsymbol{\mu}_\mathbf{s}[0]] \neq 0 \\
+R_{\mathrm{sclear}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{s}[\boldsymbol{\mu}_\mathrm{s}[0]] \neq 0 \\
 0 & \text{otherwise}
 \end{cases}$ }\\
 \midrule
 0x56 & {\small JUMP} & 1 & 0 & Alter the program counter. \\
-&&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{s}[0] $ \\
+&&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathrm{s}[0] $ \\
 &&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See equation \hyperlink{JUMP}{\ref{eq:JUMP}}. \\
 \midrule
 0x57 & {\small JUMPI} & 2 & 0 & Conditionally alter the program counter. \\
-&&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_\mathbf{s}[0] & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[1] \neq 0 \\ \boldsymbol{\mu}_{pc} + 1 & \text{otherwise} \end{cases} $ \\
+&&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_\mathrm{s}[0] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] \neq 0 \\ \boldsymbol{\mu}_{pc} + 1 & \text{otherwise} \end{cases} $ \\
 &&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \hyperlink{JUMPI}{\ref{eq:JUMP}}. \\
 \midrule
 0x58 & {\small PC} & 0 & 1 & Get the value of the program counter \textit{prior} to the increment corresponding to this instruction. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{pc}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_{pc}$ \\
 \midrule
 0x59 & {\small MSIZE} & 0 & 1 & Get the size of active memory in bytes. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv 32\boldsymbol{\mu}_{i}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv 32\boldsymbol{\mu}_{i}$ \\
 \midrule
 0x5a & {\small GAS} & 0 & 1 & Get the amount of available gas, including the corresponding reduction for the cost of this instruction. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_{g}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_{g}$ \\
 \midrule
 0x5b & {\small JUMPDEST} & 0 & 0 & Mark a valid destination for jumps. \\
 &&&& This operation has no effect on the machine state during execution. \\
@@ -1914,21 +1914,21 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{60s \& 70s: Push Operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x60 & {\small PUSH1} & 0 & 1 & Place a 1 byte item on the stack. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv c(\boldsymbol{\mu}_{pc} + 1)$ \\
-&&&& $\text{where} \quad c(x) \equiv \begin{cases} I_\mathbf{b}[x] & \text{if} \quad x < \lVert I_\mathbf{b} \rVert \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv c(\boldsymbol{\mu}_{pc} + 1)$ \\
+&&&& $\text{where} \quad c(x) \equiv \begin{cases} I_\mathrm{b}[x] & \text{if} \quad x < \lVert I_\mathrm{b} \rVert \\ 0 & \text{otherwise} \end{cases}$ \\
 &&&& The bytes are read in line from the program code's bytes array. \\
 &&&& The function $c$ ensures the bytes default to zero if they extend past the limits.\\
 &&&& The byte is right-aligned (\ie it takes the lowest significant place and the last, highest address, which is the big-endian interpretation). \\
 \midrule
 0x61 & {\small PUSH2} & 0 & 1 & Place a 2-byte item on the stack. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big( (\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 2) \big)$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{c}\big( (\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 2) \big)$ \\
 &&&& with $\boldsymbol{c}(\boldsymbol{x}) \equiv (c(\boldsymbol{x}_0), ..., c(\boldsymbol{x}_{\lVert x \rVert -1})) $ with $c$ as defined as above. \\
 &&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0x7f & {\small PUSH32} & 0 & 1 & Place 32-byte (full word) item on stack. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{c}\big((\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 32) \big)$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{c}\big((\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 32) \big)$ \\
 &&&& where $\boldsymbol{c}$ is defined as above. \\
 &&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\
 \bottomrule
@@ -1939,15 +1939,15 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{80s: Duplication Operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x80 & {\small DUP1} & 1 & 2 & Duplicate the 1st stack item. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
 \midrule
 0x81 & {\small DUP2} & 2 & 3 & Duplicate the 2nd stack item. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[1]$ \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0x8f & {\small DUP16} & 16 & 17 & Duplicate the 16th stack item. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[15]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[15]$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1956,18 +1956,18 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{90s: Exchange Operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x90 & {\small SWAP1} & 2 & 2 & Exchange the 1st and the 2nd stack items. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[1]$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[1] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[1] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
 \midrule
 0x91 & {\small SWAP2} & 3 & 3 & Exchange the 1st and the 3rd stack items. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[2]$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[2] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[2]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[2] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0x9f & {\small SWAP16} & 17 & 17 & Exchange the 1st and the 17th stack items. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv \boldsymbol{\mu}_\mathbf{s}[16]$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[16] \equiv \boldsymbol{\mu}_\mathbf{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[16]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[16] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1975,21 +1975,21 @@ \subsection{Instruction Set}
 \toprule
 \multicolumn{5}{c}{\textbf{a0s: Logging Operations}} \vspace{5pt} \\
 \multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\\
-\multicolumn{5}{l}{$A'_\mathbf{l} \equiv A_\mathbf{l} \cdot (I_\mathbf{a}, \mathbf{t}, \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots (\boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1) ])$}\\
+\multicolumn{5}{l}{$A'_\mathrm{l} \equiv A_\mathrm{l} \cdot (I_\mathrm{a}, \mathbf{t}, \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1] - 1) ])$}\\
 \multicolumn{5}{l}{and to update the memory consumption counter:}\\
-\multicolumn{5}{l}{$\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$}\\
+\multicolumn{5}{l}{$\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[1])$}\\
 \multicolumn{5}{l}{The entry's topic series, $\mathbf{t}$, differs accordingly:}\vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0xa0 & {\small LOG0} & 2 & 0 & Append the log record with no topics. \\
 &&&& $\mathbf{t} \equiv ()$ \\
 \midrule
 0xa1 & {\small LOG1} & 3 & 0 & Append the log record with one topic. \\
-&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2])$ \\
+&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathrm{s}[2])$ \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0xa4 & {\small LOG4} & 6 & 0 & Append the log record with four topics. \\
-&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4], \boldsymbol{\mu}_\mathbf{s}[5])$ \\
+&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathrm{s}[2], \boldsymbol{\mu}_\mathrm{s}[3], \boldsymbol{\mu}_\mathrm{s}[4], \boldsymbol{\mu}_\mathrm{s}[5])$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1998,84 +1998,84 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{f0s: System operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0xf0 & {\small CREATE} & 3 & 1 & Create a new account with associated code. \\
-&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[1] \dots (\boldsymbol{\mu}_\mathbf{s}[1] + \boldsymbol{\mu}_\mathbf{s}[2] - 1) ]$ \\
-&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_\mathbf{g}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, L(\boldsymbol{\mu}_\mathbf{g}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[0], \mathbf{i}, I_\mathbf{e} + 1) & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[0] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_\mathbf{g}, \varnothing\big) & \text{otherwise} \end{cases}$ \\
-&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_\mathbf{a}]_\mathbf{n} = \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n} + 1$ \\
-&&&& $A' \equiv A \Cup A^+$ which implies: $A'_\mathbf{s} \equiv A_\mathbf{s} \cup A^+_\mathbf{s} \quad \wedge \quad A'_\mathbf{l} \equiv A_\mathbf{l} \cdot A^+_\mathbf{l} \quad \wedge \quad A'_\mathbf{r} \equiv A_\mathbf{r} + A^+_\mathbf{r}$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\
+&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[1] \dots (\boldsymbol{\mu}_\mathrm{s}[1] + \boldsymbol{\mu}_\mathrm{s}[2] - 1) ]$ \\
+&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_\mathrm{g}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_\mathrm{a}, I_\mathrm{o}, L(\boldsymbol{\mu}_\mathrm{g}), I_\mathrm{p}, \boldsymbol{\mu}_\mathrm{s}[0], \mathbf{i}, I_\mathrm{e} + 1) & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge\; I_\mathrm{e} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_\mathrm{g}, \varnothing\big) & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_\mathrm{a}]_\mathrm{n} = \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{n} + 1$ \\
+&&&& $A' \equiv A \Cup A^+$ which implies: $A'_\mathrm{s} \equiv A_\mathrm{s} \cup A^+_\mathrm{s} \quad \wedge \quad A'_\mathrm{l} \equiv A_\mathrm{l} \cdot A^+_\mathrm{l} \quad \wedge \quad A'_\mathrm{r} \equiv A_\mathrm{r} + A^+_\mathrm{r}$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv x$ \\
 &&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\
-&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_\mathbf{e} = 1024$ \\
-&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathbf{s}[0] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_\mathbf{a}, \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{n})$, the address of the  \\
+&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_\mathrm{e} = 1024$ \\
+&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathrm{s}[0] > \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_\mathrm{a}, \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{n})$, the address of the  \\
 &&&& newly created account. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[1], \boldsymbol{\mu}_\mathbf{s}[2])$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[1], \boldsymbol{\mu}_\mathrm{s}[2])$ \\
 &&&& Thus the operand order is: value, input offset, input size. \\
 \midrule
 0xf1 & {\small CALL} & 7 & 1 & Message-call into an account. \\
-&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[3] \dots (\boldsymbol{\mu}_\mathbf{s}[3] + \boldsymbol{\mu}_\mathbf{s}[4] - 1) ]$ \\
-&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_\mathbf{a}, I_\mathbf{o}, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge \\ \quad\quad I_\mathbf{e} < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
-&&&& $n \equiv \min(\{ \boldsymbol{\mu}_\mathbf{s}[6], |\mathbf{o}|\})$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[5] \dots (\boldsymbol{\mu}_\mathbf{s}[5] + n - 1) ] = \mathbf{o}[0 \dots (n - 1)]$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{g} \equiv \boldsymbol{\mu}_\mathbf{g} + g'$ \\
-&&&& $\boldsymbol{\mu}'_\mathbf{s}[0] \equiv x$ \\
+&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[3] \dots (\boldsymbol{\mu}_\mathrm{s}[3] + \boldsymbol{\mu}_\mathrm{s}[4] - 1) ]$ \\
+&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_\mathrm{a}, I_\mathrm{o}, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathrm{p}, \boldsymbol{\mu}_\mathrm{s}[2], \boldsymbol{\mu}_\mathrm{s}[2], \mathbf{i}, I_\mathrm{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge \\ \quad\quad I_\mathrm{e} < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
+&&&& $n \equiv \min(\{ \boldsymbol{\mu}_\mathrm{s}[6], |\mathbf{o}|\})$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[5] \dots (\boldsymbol{\mu}_\mathrm{s}[5] + n - 1) ] = \mathbf{o}[0 \dots (n - 1)]$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{g} \equiv \boldsymbol{\mu}_\mathrm{g} + g'$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv x$ \\
 &&&& $A' \equiv A \Cup A^+$ \\
-&&&& $t \equiv \boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}$ \\
+&&&& $t \equiv \boldsymbol{\mu}_\mathrm{s}[1] \mod 2^{160}$ \\
 &&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting \\
 &&&& $Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) = \top$ or if  \\
-&&&& $\boldsymbol{\mu}_\mathbf{s}[2] > \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ (not enough funds) or $I_\mathbf{e} = 1024$ (call depth limit reached); $x=1$ \\
+&&&& $\boldsymbol{\mu}_\mathrm{s}[2] > \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b}$ (not enough funds) or $I_\mathrm{e} = 1024$ (call depth limit reached); $x=1$ \\
 &&&& otherwise. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[3], \boldsymbol{\mu}_\mathbf{s}[4]), \boldsymbol{\mu}_\mathbf{s}[5], \boldsymbol{\mu}_\mathbf{s}[6])$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[3], \boldsymbol{\mu}_\mathrm{s}[4]), \boldsymbol{\mu}_\mathrm{s}[5], \boldsymbol{\mu}_\mathrm{s}[6])$ \\
 &&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \hypertarget{tiny CALL}{}\\
 &&&& $C_{\text{\tiny CALL}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$ \\
 &&&& $C_{\text{\tiny CALLGAS}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv  \begin{cases}
-C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{\mathrm{callstipend}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\
+C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{\mathrm{callstipend}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \neq 0 \\
 C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{otherwise}
 \end{cases}$ \\
 &&&& $C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases}
-\min\{ L(\boldsymbol{\mu}_\mathbf{g} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_\mathbf{s}[0] \} & \text{if} \quad \boldsymbol{\mu}_\mathbf{g} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\
-\boldsymbol{\mu}_\mathbf{s}[0] & \text{otherwise}
+\min\{ L(\boldsymbol{\mu}_\mathrm{g} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_\mathrm{s}[0] \} & \text{if} \quad \boldsymbol{\mu}_\mathrm{g} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\
+\boldsymbol{\mu}_\mathrm{s}[0] & \text{otherwise}
 \end{cases}$\\
 &&&& $C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{\mathrm{call}} + C_{\text{\tiny XFER}}(\boldsymbol{\mu}) + C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$\\
 &&&& $C_{\text{\tiny XFER}}(\boldsymbol{\mu}) \equiv \begin{cases}
-G_{\mathrm{callvalue}} & \text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \neq 0 \\
+G_{\mathrm{callvalue}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \neq 0 \\
 0 & \text{otherwise}
 \end{cases}$ \\
 &&&& $C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases}
-G_{\mathrm{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[1] \mod 2^{160}] = \varnothing \\
+G_{\mathrm{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[1] \mod 2^{160}] = \varnothing \\
 0 & \text{otherwise}
 \end{cases}$ \\
 \midrule
 0xf2 & {\small CALLCODE} & 7 & 1 & Message-call into this account with an alternative account's code. \\
 &&&& Exactly equivalent to {\small CALL} except: \\
-&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{a}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathbf{p}, \boldsymbol{\mu}_\mathbf{s}[2], \boldsymbol{\mu}_\mathbf{s}[2], \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathbf{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\\ \quad\quad{}I_\mathbf{e} < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
-&&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_\mathbf{s}[1]$\\
-&&&& (as in {\small CALL}) to the present address $I_\mathbf{a}$. This means that the recipient is in fact the\\
+&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathrm{a}, I_\mathrm{o}, I_\mathrm{a}, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathrm{p}, \boldsymbol{\mu}_\mathrm{s}[2], \boldsymbol{\mu}_\mathrm{s}[2], \mathbf{i}, I_\mathrm{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge\\ \quad\quad{}I_\mathrm{e} < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
+&&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_\mathrm{s}[1]$\\
+&&&& (as in {\small CALL}) to the present address $I_\mathrm{a}$. This means that the recipient is in fact the\\
 &&&& same account as at present, simply that the code is overwritten.\hypertarget{RETURN}{}\\
 \midrule
 0xf3 & {\small RETURN} & 2 & 0 & Halt execution returning output data. \\
-&&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathbf{m}[ \boldsymbol{\mu}_\mathbf{s}[0] \dots ( \boldsymbol{\mu}_\mathbf{s}[0] + \boldsymbol{\mu}_\mathbf{s}[1] - 1 ) ]$ \\
+&&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots ( \boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1] - 1 ) ]$ \\
 &&&& This has the effect of halting the execution at this point with output defined.\\
 &&&& See equation \ref{eq:Normal Halting}. \\
-&&&& $\boldsymbol{\mu}'_\mathbf{i} \equiv M(\boldsymbol{\mu}_\mathbf{i}, \boldsymbol{\mu}_\mathbf{s}[0], \boldsymbol{\mu}_\mathbf{s}[1])$ \\
+&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[1])$ \\
 \end{tabularx}
 
 \begin{tabularx}{\textwidth}{rlrrX}
 \midrule
-0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments.  The omitted argument is $\boldsymbol{\mu}_\mathbf{s}[2]$. As a result, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$, $\boldsymbol{\mu}_\mathbf{s}[5]$ and $\boldsymbol{\mu}_\mathbf{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathbf{s}[2]$, $\boldsymbol{\mu}_\mathbf{s}[3]$, $\boldsymbol{\mu}_\mathbf{s}[4]$ and $\boldsymbol{\mu}_\mathbf{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\
-&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathbf{s}, I_\mathbf{o}, I_\mathbf{a}, t,\\\quad \boldsymbol{\mu}_\mathbf{s}[0], I_\mathbf{p}, 0, \hyperlink{I v}{I_\mathbf{v}}, \mathbf{i}, I_\mathbf{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathbf{v}} \leqslant \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b} \;\wedge\; I_\mathbf{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
+0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments.  The omitted argument is $\boldsymbol{\mu}_\mathrm{s}[2]$. As a result, $\boldsymbol{\mu}_\mathrm{s}[3]$, $\boldsymbol{\mu}_\mathrm{s}[4]$, $\boldsymbol{\mu}_\mathrm{s}[5]$ and $\boldsymbol{\mu}_\mathrm{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathrm{s}[2]$, $\boldsymbol{\mu}_\mathrm{s}[3]$, $\boldsymbol{\mu}_\mathrm{s}[4]$ and $\boldsymbol{\mu}_\mathrm{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\
+&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathrm{s}, I_\mathrm{o}, I_\mathrm{a}, t,\\\quad \boldsymbol{\mu}_\mathrm{s}[0], I_\mathrm{p}, 0, \hyperlink{I v}{I_\mathrm{v}}, \mathbf{i}, I_\mathrm{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathrm{v}} \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge\; I_\mathrm{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
 &&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\
 \midrule
 0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{selfdestruct}{\\
 \midrule
 0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. }\\
-&&&& $A'_\mathbf{s} \equiv A_\mathbf{s} \cup \{ I_\mathbf{a} \}$ \\
-&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}]_\mathbf{b} + \boldsymbol{\sigma}[I_\mathbf{a}]_\mathbf{b}$ \\
-&&&& $\boldsymbol{\sigma}'[I_\mathbf{a}]_\mathbf{b} \equiv 0$ \\
+&&&& $A'_\mathrm{s} \equiv A_\mathrm{s} \cup \{ I_\mathrm{a} \}$ \\
+&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{b} + \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b}$ \\
+&&&& $\boldsymbol{\sigma}'[I_\mathrm{a}]_\mathrm{b} \equiv 0$ \\
 &&&& $A'_{r} \equiv A_{r} + \begin{cases}
-\hyperlink{Rselfdestruct}{R_{\mathrm{selfdestruct}}} & \text{if} \quad I_\mathbf{a} \notin A_\mathbf{s} \\
+\hyperlink{Rselfdestruct}{R_{\mathrm{selfdestruct}}} & \text{if} \quad I_\mathrm{a} \notin A_\mathrm{s} \\
 0 & \text{otherwise} 
 \end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\
 &&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{\mathrm{selfdestruct}}} + \begin{cases}
-\hyperlink{Gnewaccount}{G_{\mathrm{newaccount}}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathbf{s}[0] \mod 2^{160}] = \varnothing \\
+\hyperlink{Gnewaccount}{G_{\mathrm{newaccount}}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}] = \varnothing \\
 0 & \text{otherwise}
 \end{cases}$ \\
 \bottomrule
@@ -2124,7 +2124,7 @@ \subsection{Definitions}
 \subsection{Size of dataset and cache}
 The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$  and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number.
 \begin{equation}
-E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathbf{i}}}{\hyperlink{Jepoch}{J_{\mathrm{epoch}}}}\right\rfloor
+E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathrm{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathrm{i}}}{\hyperlink{Jepoch}{J_{\mathrm{epoch}}}}\right\rfloor
 \end{equation}
 The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\mathrm{datasetgrowth}}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\mathrm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} for the cache.\hypertarget{dsize}{
 Let $d_{\mathrm{\mathrm{size}}} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:}
@@ -2146,12 +2146,12 @@ \subsection{Dataset generation}
 \subsubsection{Seed hash}
 The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash:
 \begin{equation}
- s = C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathbf{i}})
+ s = C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathrm{i}})
 \end{equation}
 \begin{equation}
- C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathbf{i}}) = \begin{cases}
-\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathbf{i}}) = 0 \quad  \\
-\texttt{KEC}(C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathbf{i}} - \hyperlink{Jepoch}{J_{\mathrm{epoch}}})) & \text{otherwise}
+ C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathrm{i}}) = \begin{cases}
+\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathrm{i}}) = 0 \quad  \\
+\texttt{KEC}(C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathrm{i}} - \hyperlink{Jepoch}{J_{\mathrm{epoch}}})) & \text{otherwise}
 \end{cases}
 \end{equation}
 With $\mathbf{0}_{32}$ being 32 bytes of zeros.
@@ -2227,16 +2227,16 @@ \subsection{Proof-of-work function}
 
 The PoW-function returns an array with the compressed mix as its first item and the Keccak-256 hash of the concatenation of the compressed mix with the seed hash as the second item:
 \begin{equation}
- \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}) = \lbrace \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d}), \texttt{KEC}(\mathbf{s}_\mathbf{h}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}) + \mathbf{m}_\mathbf{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathbf{n}}, \mathbf{d})) \rbrace
+ \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d}) = \lbrace \mathbf{m}_\mathrm{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d}), \texttt{KEC}(\mathbf{s}_\mathrm{h}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathrm{n}}) + \mathbf{m}_\mathrm{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d})) \rbrace
 \end{equation}
-With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathbf{c}$ is obtained as follows:
+With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathrm{c}$ is obtained as follows:
 \begin{equation}
- \mathbf{m}_\mathbf{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{\mathrm{compress}}(E_{\mathrm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{\mathrm{mix}}} \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}), -1), -4)
+ \mathbf{m}_\mathrm{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{\mathrm{compress}}(E_{\mathrm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{\mathrm{mix}}} \mathbf{s}_\mathrm{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathrm{h}(\mathbf{h}, \mathbf{n}), -1), -4)
 \end{equation}
 
 The seed hash being:
 \begin{equation}
- \mathbf{s}_\mathbf{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{\mathrm{revert}}(\mathbf{n}))
+ \mathbf{s}_\mathrm{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{\mathrm{revert}}(\mathbf{n}))
 \end{equation}
 $E_{\mathrm{revert}}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$:
 \begin{equation}

From a11170e2f537c412a7f6e7999cf7c2298b10a0dd Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 19 Oct 2017 20:24:41 +1100
Subject: [PATCH 087/132] _foo & _{foo} -> _{\mathrm{foo}}

where foo is a substate field of a block, account, transaction, machine state, global state, etc.
---
 Paper.tex | 768 +++++++++++++++++++++++++++---------------------------
 1 file changed, 384 insertions(+), 384 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 1138401f..cf99d9fe 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -148,7 +148,7 @@ \section{The Blockchain Paradigm} \label{ch:overview}
 
 Ethereum, taken as a whole, can be viewed as a transaction-based state machine: we begin with a genesis state and incrementally execute transactions to morph it into some final state. It is this final state which we accept as the canonical ``version'' of the world of Ethereum. The state can include such information as account balances, reputations, trust arrangements, data pertaining to information of the physical world; in short, anything that can currently be represented by a computer is admissible. Transactions thus represent a valid arc between two states; the `valid' part is important---there exist far more invalid state changes than valid state changes. Invalid state changes might, \eg, be things such as reducing an account balance without an equal and opposite increase elsewhere. A valid state transition is one which comes about through a transaction. Formally:\hypertarget{Upsilon}{}
 \begin{equation}
-\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_\mathrm{t}, T)
+\boldsymbol{\sigma}_{t+1} \equiv \Upsilon(\boldsymbol{\sigma}_{\mathrm{t}}, T)
 \end{equation}
 
 where $\Upsilon$ is the Ethereum state transition function. In Ethereum, $\Upsilon$, together with $\boldsymbol{\sigma}$ are considerably more powerful then any existing comparable system; $\Upsilon$ allows components to carry out arbitrary computation, while $\boldsymbol{\sigma}$ allows components to store arbitrary state between transactions.
@@ -159,7 +159,7 @@ \section{The Blockchain Paradigm} \label{ch:overview}
 
 Formally, we expand to:
 \begin{eqnarray}
-\boldsymbol{\sigma}_{t+1} & \equiv & \hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}_\mathrm{t}, B) \\
+\boldsymbol{\sigma}_{t+1} & \equiv & \hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}_{\mathrm{t}}, B) \\
 B & \equiv & (..., (T_0, T_1, ...) ) \\
 \Pi(\boldsymbol{\sigma}, B) & \equiv & \hyperlink{Omega}{\Omega}(B, \hyperlink{Upsilon}{\Upsilon}(\Upsilon(\boldsymbol{\sigma}, T_0), T_1) ...)
 \end{eqnarray}
@@ -208,7 +208,7 @@ \section{Conventions}\label{ch:conventions}
 
 For most functions, an uppercase letter is used, e.g. $C$, the general cost function. These may be subscripted to denote specialised variants, \eg \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$}, the cost function for the \hyperlink{SSTORE}{\tiny SSTORE} operation. For specialised and possibly externally defined functions, I may format as typewriter text, \eg the Keccak-256 hash function (as per the winning entry to the SHA-3 contest, rather than later releases (\cite{Keccak}) is denoted $\texttt{KEC}$ (and generally referred to as plain Keccak). Also $\texttt{KEC512}$ is referring to the Keccak 512 hash function.
 
-Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg  \hyperlink{transaction nonce}{$T_\mathrm{n}$, denotes the nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components.
+Tuples are typically denoted with an upper-case letter, \eg $T$, is used to denote an Ethereum transaction. This symbol may, if accordingly defined, be subscripted to refer to an individual component, \eg  \hyperlink{transaction nonce}{$T_{\mathrm{n}}$, denotes the nonce of said transaction}. The form of the subscript is used to denote its type; \eg uppercase subscripts refer to tuples with subscriptable components.
 
 Scalars and fixed-size byte sequences (or, synonymously, arrays) are denoted with a normal lower-case letter, \eg $n$ is used in the document to denote a \hyperlink{transaction nonce}{transaction nonce}. Those with a particularly special meaning may be greek, \eg $\delta$, the number of items required on the stack for a given operation.
 
@@ -216,7 +216,7 @@ \section{Conventions}\label{ch:conventions}
 
 Throughout, we assume scalars are positive integers and thus belong to the set $\mathbb{P}$. The set of all byte sequences is $\mathbb{B}$, formally defined in Appendix \ref{app:rlp}. If such a set of sequences is restricted to those of a particular length, it is denoted with a subscript, thus the set of all byte sequences of length $32$ is named $\mathbb{B}_{32}$ and the set of all positive integers smaller than $2^{256}$ is named $\mathbb{P}_{256}$. This is formally defined in section \ref{ch:block}.
 
-Square brackets are used to index into and reference individual components or subsequences of sequences, \eg $\boldsymbol{\mu}_\mathrm{s}[0]$ denotes the first item on the machine's stack. For subsequences, ellipses are used to specify the intended range, to include elements at both limits, \eg $\boldsymbol{\mu}_\mathrm{m}[0..31]$ denotes the first 32 items of the machine's memory.
+Square brackets are used to index into and reference individual components or subsequences of sequences, \eg $\boldsymbol{\mu}_{\mathrm{s}}[0]$ denotes the first item on the machine's stack. For subsequences, ellipses are used to specify the intended range, to include elements at both limits, \eg $\boldsymbol{\mu}_{\mathrm{m}}[0..31]$ denotes the first 32 items of the machine's memory.
 
 In the case of the global state $\boldsymbol{\sigma}$, which is a sequence of accounts, themselves tuples, the square brackets are used to reference an individual account.
 
@@ -242,15 +242,15 @@ \subsection{World State} \label{ch:state}
 
 \begin{description}
 \hypertarget{account nonce}{}
-\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_\mathrm{n}$.
-\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_\mathrm{b}$.
-\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the  256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_\mathrm{s}$.
-\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_\mathrm{c}$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_\mathrm{c}$.
+\item[nonce] A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address $a$ in state $\boldsymbol{\sigma}$, this would be formally denoted $\boldsymbol{\sigma}[a]_{\mathrm{n}}$.
+\item[balance] A scalar value equal to the number of Wei owned by this address. Formally denoted $\boldsymbol{\sigma}[a]_{\mathrm{b}}$.
+\item[storageRoot] A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the  256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted $\boldsymbol{\sigma}[a]_{\mathrm{s}}$.
+\item[codeHash] The hash of the EVM code of this account---this is the code that gets executed should this address receive a message call; it is immutable and thus, unlike all other fields, cannot be changed after construction. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted $\boldsymbol{\sigma}[a]_{\mathrm{c}}$, and thus the code may be denoted as $\mathbf{b}$, given that $\texttt{\small KEC}(\mathbf{b}) = \boldsymbol{\sigma}[a]_{\mathrm{c}}$.
 \end{description}
 
 Since I typically wish to refer not to the trie's root hash but to the underlying set of key/value pairs stored within, I define a convenient equivalence:
 \begin{equation}
-\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_\mathrm{s})\big) \equiv \boldsymbol{\sigma}[a]_\mathrm{s}
+\texttt{\small TRIE}\big(L_I^*(\boldsymbol{\sigma}[a]_{\mathrm{s}})\big) \equiv \boldsymbol{\sigma}[a]_{\mathrm{s}}
 \end{equation}
 
 The collapse function for the set of key/value pairs in the trie, $L_I^*$, is defined as the \hyperlink{f*}{element-wise transformation} of the base function $L_I$, given as:
@@ -263,9 +263,9 @@ \subsection{World State} \label{ch:state}
 k \in \mathbb{B}_{32} \quad \wedge \quad v \in \mathbb{P}
 \end{equation}
 
-It shall be understood that $\boldsymbol{\sigma}[a]_\mathrm{s}$ is not a `physical' member of the account and does not contribute to its later serialisation.
+It shall be understood that $\boldsymbol{\sigma}[a]_{\mathrm{s}}$ is not a `physical' member of the account and does not contribute to its later serialisation.
 
-If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_\mathrm{c} = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account.
+If the \textbf{codeHash} field is the Keccak-256 hash of the empty string, i.e. $\boldsymbol{\sigma}[a]_{\mathrm{c}} = \texttt{\small KEC}\big(()\big)$, then the node represents a simple account, sometimes referred to as a ``non-contract'' account.
 
 Thus we may define a world-state collapse function $L_S$:
 \begin{equation}
@@ -273,7 +273,7 @@ \subsection{World State} \label{ch:state}
 \end{equation}
 where
 \begin{equation}
-p(a) \equiv  \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_\mathrm{n}, \boldsymbol{\sigma}[a]_\mathrm{b}, \boldsymbol{\sigma}[a]_\mathrm{s}, \boldsymbol{\sigma}[a]_\mathrm{c}) \big) \big)
+p(a) \equiv  \big(\texttt{\small KEC}(a), \texttt{\small RLP}\big( (\boldsymbol{\sigma}[a]_{\mathrm{n}}, \boldsymbol{\sigma}[a]_{\mathrm{b}}, \boldsymbol{\sigma}[a]_{\mathrm{s}}, \boldsymbol{\sigma}[a]_{\mathrm{c}}) \big) \big)
 \end{equation}
 
 This function, $L_S$, is used alongside the trie function to provide a short identity (hash) of the world state. We assume:
@@ -282,7 +282,7 @@ \subsection{World State} \label{ch:state}
 \end{equation}
 \hypertarget{v x}{where $v$ is the account validity function:
 \begin{equation}
-\quad v(x) \equiv x_\mathrm{n} \in \mathbb{P}_{256} \wedge x_\mathrm{b} \in \mathbb{P}_{256} \wedge x_\mathrm{s} \in \mathbb{B}_{32} \wedge x_\mathrm{c} \in \mathbb{B}_{32}
+\quad v(x) \equiv x_{\mathrm{n}} \in \mathbb{P}_{256} \wedge x_{\mathrm{b}} \in \mathbb{P}_{256} \wedge x_{\mathrm{s}} \in \mathbb{B}_{32} \wedge x_{\mathrm{c}} \in \mathbb{B}_{32}
 }
 \end{equation}
 
@@ -292,18 +292,18 @@ \subsection{The Transaction} \label{subsec:transaction}
 
 \begin{description}
 \hypertarget{T n}{
-\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_\mathrm{n}$.}\hypertarget{T p}{
-\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_\mathrm{p}$.}\hypertarget{T g}{
-\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_\mathrm{g}$.}\hypertarget{T t}{
-\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_\mathrm{t}$.}\hypertarget{T v}{
-\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_\mathrm{v}$.}\hypertarget{T w}{
-\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_\mathrm{w}$}}, \hyperlink{T r}{$T_\mathrm{r}$} and \hyperlink{T s}{$T_\mathrm{s}$}, respectively. This is expanded in Appendix \ref{app:signing}.
+\item[nonce] \label{itm:nonce} A scalar value equal to the number of transactions sent by the sender; formally $T_{\mathrm{n}}$.}\hypertarget{T p}{
+\item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_{\mathrm{p}}$.}\hypertarget{T g}{
+\item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_{\mathrm{g}}$.}\hypertarget{T t}{
+\item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_{\mathrm{t}}$.}\hypertarget{T v}{
+\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_{\mathrm{v}}$.}\hypertarget{T w}{
+\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_{\mathrm{w}}$}}, \hyperlink{T r}{$T_{\mathrm{r}}$} and \hyperlink{T s}{$T_{\mathrm{s}}$}, respectively. This is expanded in Appendix \ref{app:signing}.
 \end{description}
 
 Additionally, a contract creation transaction contains:
 
 \begin{description}
-\item[init] An unlimited size byte array specifying the EVM-code for the account initialisation procedure, formally $T_\mathrm{i}$.
+\item[init] An unlimited size byte array specifying the EVM-code for the account initialisation procedure, formally $T_{\mathrm{i}}$.
 \end{description}
 
 \textbf{init} is an EVM-code fragment; it returns the \textbf{body}, a second fragment of code that executes each time the account receives a message call (either through a transaction or due to the internal execution of code). \textbf{init} is executed only once at account creation and gets discarded immediately thereafter.
@@ -311,33 +311,33 @@ \subsection{The Transaction} \label{subsec:transaction}
 In contrast, a message call transaction contains:
 
 \begin{description}
-\item[data] An unlimited size byte array specifying the input data of the message call, formally $T_\mathrm{d}$.
+\item[data] An unlimited size byte array specifying the input data of the message call, formally $T_{\mathrm{d}}$.
 \end{description}
 
 
 \begin{equation}
-L_\mathrm{T}(T) \equiv \begin{cases}
-(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{i}, \hyperlink{T w}{T_\mathrm{w}}, T_\mathrm{r}, T_\mathrm{s}) & \text{if} \; T_\mathrm{t} = \varnothing\\
-(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{d}, \hyperlink{T w}{T_\mathrm{w}}, T_\mathrm{r}, T_\mathrm{s}) & \text{otherwise}
+L_{\mathrm{t}}(T) \equiv \begin{cases}
+(T_{\mathrm{n}}, T_{\mathrm{p}}, T_{\mathrm{g}}, T_{\mathrm{t}}, \hyperlink{T v}{T_{\mathrm{v}}}, T_{\mathrm{i}}, \hyperlink{T w}{T_{\mathrm{w}}}, T_{\mathrm{r}}, T_{\mathrm{s}}) & \text{if} \; T_{\mathrm{t}} = \varnothing\\
+(T_{\mathrm{n}}, T_{\mathrm{p}}, T_{\mathrm{g}}, T_{\mathrm{t}}, \hyperlink{T v}{T_{\mathrm{v}}}, T_{\mathrm{d}}, \hyperlink{T w}{T_{\mathrm{w}}}, T_{\mathrm{r}}, T_{\mathrm{s}}) & \text{otherwise}
 \end{cases}
 \end{equation}
 
-Here, we assume all components are interpreted by the RLP as integer values, with the exception of the arbitrary length byte arrays $T_\mathrm{i}$ and $T_\mathrm{d}$.
+Here, we assume all components are interpreted by the RLP as integer values, with the exception of the arbitrary length byte arrays $T_{\mathrm{i}}$ and $T_{\mathrm{d}}$.
 \begin{equation}
 \begin{array}[t]{lclclc}
-T_\mathrm{n} \in \mathbb{P}_{256} & \wedge & \hyperlink{T v}{T_\mathrm{v}} \in \mathbb{P}_{256} & \wedge & T_\mathrm{p} \in \mathbb{P}_{256} & \wedge \\
-T_\mathrm{g} \in \mathbb{P}_{256} & \wedge & \hyperlink{T w}{T_\mathrm{w}} \in \mathbb{P}_5 & \wedge & T_\mathrm{r} \in \mathbb{P}_{256} & \wedge \\
-T_\mathrm{s} \in \mathbb{P}_{256} & \wedge & T_\mathrm{d} \in \mathbb{B} & \wedge & T_\mathrm{i} \in \mathbb{B}
+T_{\mathrm{n}} \in \mathbb{P}_{256} & \wedge & \hyperlink{T v}{T_{\mathrm{v}}} \in \mathbb{P}_{256} & \wedge & T_{\mathrm{p}} \in \mathbb{P}_{256} & \wedge \\
+T_{\mathrm{g}} \in \mathbb{P}_{256} & \wedge & \hyperlink{T w}{T_{\mathrm{w}}} \in \mathbb{P}_5 & \wedge & T_{\mathrm{r}} \in \mathbb{P}_{256} & \wedge \\
+T_{\mathrm{s}} \in \mathbb{P}_{256} & \wedge & T_{\mathrm{d}} \in \mathbb{B} & \wedge & T_{\mathrm{i}} \in \mathbb{B}
 \end{array}
 \end{equation}
 where
 \begin{equation}
-\mathbb{P}_\mathrm{n} = \{ P: P \in \mathbb{P} \wedge P < 2^n \}
+\mathbb{P}_{\mathrm{n}} = \{ P: P \in \mathbb{P} \wedge P < 2^n \}
 \end{equation}
 
-The address hash $T_\mathrm{t}$ is slightly different: it is either a 20-byte address hash or, in the case of being a contract-creation transaction (and thus formally equal to $\varnothing$), it is the RLP empty byte sequence and thus the member of $\mathbb{B}_0$:
+The address hash $T_{\mathrm{t}}$ is slightly different: it is either a 20-byte address hash or, in the case of being a contract-creation transaction (and thus formally equal to $\varnothing$), it is the RLP empty byte sequence and thus the member of $\mathbb{B}_0$:
 \begin{equation}
-T_\mathrm{t} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_\mathrm{t} \neq \varnothing \\
+T_{\mathrm{t}} \in \begin{cases} \mathbb{B}_{20} & \text{if} \quad T_{\mathrm{t}} \neq \varnothing \\
 \mathbb{B}_{0} & \text{otherwise}\end{cases}
 \end{equation}
 
@@ -348,64 +348,64 @@ \subsection{The Block} \label{ch:block}
 %\textit{TODO: Introduce logs}
 
 \begin{description}\hypertarget{H p}{
-\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_\mathrm{p}$.}
-\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_\mathrm{o}}$.\hypertarget{H c}{
-\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block shall be transferred; formally $H_\mathrm{c}$.}
-\item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_\mathrm{r}$}.
-\item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_\mathrm{t}$}.
-\item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_\mathrm{e}$}.
-\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_\mathrm{b}.$}\hyperlink{H d}{
-\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_\mathrm{d}$}.\hypertarget{H i}{
-\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_\mathrm{i}$.}\hyperlink{H l}{
-\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_\mathrm{l}$.}\hypertarget{H g}{
-\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_\mathrm{g}$.}\hypertarget{H s}{
-\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_\mathrm{s}$}.}\hypertarget{H x}{
-\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_\mathrm{x}$.}\hypertarget{H m}{
-\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_\mathrm{m}$.}
+\item[parentHash] The Keccak 256-bit hash of the parent block's header, in its entirety; formally $H_{\mathrm{p}}$.}
+\item[ommersHash] The Keccak 256-bit hash of the ommers list portion of this block; formally $\hyperlink{H o}{H_{\mathrm{o}}}$.\hypertarget{H c}{
+\item[beneficiary] The 160-bit address to which all fees collected from the successful mining of this block shall be transferred; formally $H_{\mathrm{c}}$.}
+\item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_{\mathrm{r}}$}.
+\item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_{\mathrm{t}}$}.
+\item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_{\mathrm{e}}$}.
+\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_{\mathrm{b}}.$}\hyperlink{H d}{
+\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_{\mathrm{d}}$}.\hypertarget{H i}{
+\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_{\mathrm{i}}$.}\hyperlink{H l}{
+\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_{\mathrm{l}}$.}\hypertarget{H g}{
+\item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_{\mathrm{g}}$.}\hypertarget{H s}{
+\item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_{\mathrm{s}}$}.}\hypertarget{H x}{
+\item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_{\mathrm{x}}$.}\hypertarget{H m}{
+\item[mixHash] A 256-bit hash which proves combined with the nonce that a sufficient amount of computation has been carried out on this block; formally $H_{\mathrm{m}}$.}
 \hypertarget{block nonce}{\hypertarget{H n}{
-\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_\mathrm{n}$.}}
+\item[nonce] A 64-bit hash which proves combined with the mix-hash that a sufficient amount of computation has been carried out on this block; formally $H_{\mathrm{n}}$.}}
 \end{description}
 \hypertarget{B U}{
-The other two components in the block are simply a list of ommer block headers (of the same format as above), $B_\mathrm{U}$, and a series of the transactions, $B_\mathrm{T}$. Formally, we can refer to a block $B$:
+The other two components in the block are simply a list of ommer block headers (of the same format as above), $B_{\mathrm{u}}$, and a series of the transactions, $B_{\mathrm{t}}$. Formally, we can refer to a block $B$:
 \begin{equation}
-B \equiv (B_H, B_\mathrm{T}, B_\mathrm{U})
+B \equiv (B_H, B_{\mathrm{t}}, B_{\mathrm{u}})
 \end{equation}}
 
 \hypertarget{Transaction Receipt}{\subsubsection{Transaction Receipt}}
 
 In order to encode information about a transaction concerning which it may be useful to form a zero-knowledge proof, or index and search, we encode a receipt of each transaction containing certain information from concerning its execution.
-Each receipt, denoted $B_\mathrm{R}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_\mathrm{e}$}.
+Each receipt, denoted $B_{\mathrm{r}}[i]$ for the $i$th transaction, is placed in an index-keyed \hyperlink{trie}{trie} and the root recorded in the header as \hyperlink{H e}{$H_{\mathrm{e}}$}.
 
 \hypertarget{R}{}
-The transaction receipt, $R$, is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_\mathrm{u}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_\mathrm{l}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_\mathrm{b}$}:
+The transaction receipt, $R$, is a tuple of four items \hypertarget{R sigma}{comprising the post-transaction state, $R_{\boldsymbol{\sigma}}$}, \hypertarget{R u}{the cumulative gas used in the block containing the transaction receipt as of immediately after the transaction has happened, $R_{\mathrm{u}}$}, the set of logs created through execution of the transaction, \hyperlink{R l}{$R_{\mathrm{l}}$} and the Bloom filter composed from information in those logs, \hyperlink{R b}{$R_{\mathrm{b}}$}:
 \begin{equation}
-R \equiv (R_{\boldsymbol{\sigma}}, R_\mathrm{u}, \hyperlink{R b}{R_\mathrm{b}}, \hyperlink{R l}{R_\mathrm{l}})
+R \equiv (R_{\boldsymbol{\sigma}}, R_{\mathrm{u}}, \hyperlink{R b}{R_{\mathrm{b}}}, \hyperlink{R l}{R_{\mathrm{l}}})
 \end{equation}
 
 The function $L_R$ trivially prepares a transaction receipt for being transformed into an RLP-serialised byte array:
 \begin{equation}
-L_R(R) \equiv (\mathtt{\small \hyperlink{trie}{TRIE}}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_\mathrm{u}}, \hyperlink{R b}{R_\mathrm{b}}, \hyperlink{R l}{R_\mathrm{l}})
+L_R(R) \equiv (\mathtt{\small \hyperlink{trie}{TRIE}}(L_S(R_{\boldsymbol{\sigma}})), \hyperlink{R u}{R_{\mathrm{u}}}, \hyperlink{R b}{R_{\mathrm{b}}}, \hyperlink{R l}{R_{\mathrm{l}}})
 \end{equation}
 thus the post-transaction state, $R_{\boldsymbol{\sigma}}$ is encoded into a \hyperlink{trie}{trie} structure, the root of which forms the first item.
 
-We assert $\hyperlink{R u}{R_\mathrm{u}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_\mathrm{b}$}, is a hash of size 2048 bits (256 bytes):
+We assert $\hyperlink{R u}{R_{\mathrm{u}}}$, the cumulative gas used is a positive integer and that the logs Bloom, \hyperlink{R b}{$R_{\mathrm{b}}$}, is a hash of size 2048 bits (256 bytes):
 \begin{equation}
-\hyperlink{R u}{R_\mathrm{u}} \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_\mathrm{b}} \in \mathbb{B}_{256}
+\hyperlink{R u}{R_{\mathrm{u}}} \in \mathbb{P} \quad \wedge \quad \hyperlink{R b}{R_{\mathrm{b}}} \in \mathbb{B}_{256}
 \end{equation}
 
-%Notably $B_\mathrm{T}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence.
+%Notably $B_{\mathrm{t}}$ does not get serialised into the block by the block preparation function $L_B$; it is merely a convenience equivalence.
 
-The log entries, $\hyperlink{R l}{R_\mathrm{l}}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_\mathrm{a}$, a series of 32-bytes log topics, $O_\mathrm{t}$ and some number of bytes of data, $O_\mathrm{d}$:
+The log entries, $\hyperlink{R l}{R_{\mathrm{l}}}$, is a series of log entries, termed, for example, $(O_0, O_1, ...)$. A log entry, $O$, is a tuple of a logger's address, $O_{\mathrm{a}}$, a series of 32-bytes log topics, $O_{\mathrm{t}}$ and some number of bytes of data, $O_{\mathrm{d}}$:
 \begin{equation}
-O \equiv (O_\mathrm{a}, ({O_\mathrm{t}}_0, {O_\mathrm{t}}_1, ...), O_\mathrm{d})
+O \equiv (O_{\mathrm{a}}, ({O_{\mathrm{t}}}_0, {O_{\mathrm{t}}}_1, ...), O_{\mathrm{d}})
 \end{equation}
 \begin{equation}
-O_\mathrm{a} \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_\mathrm{t}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_\mathrm{d} \in \mathbb{B}
+O_{\mathrm{a}} \in \mathbb{B}_{20} \quad \wedge \quad \forall_{t \in O_{\mathrm{t}}}: t \in \mathbb{B}_{32} \quad \wedge \quad O_{\mathrm{d}} \in \mathbb{B}
 \end{equation}
 
 We define the Bloom filter function, $M$, to reduce a log entry into a single 256-byte hash:
 \begin{equation}
-M(O) \equiv \hyperlink{bigvee}{\bigvee}_{t \in \{O_\mathrm{a}\} \cup O_\mathrm{t}} \big( M_{3:2048}(t) \big)
+M(O) \equiv \hyperlink{bigvee}{\bigvee}_{t \in \{O_{\mathrm{a}}\} \cup O_{\mathrm{t}}} \big( M_{3:2048}(t) \big)
 \end{equation}
 
 where $M_{3:2048}$ is a specialised Bloom filter that sets three bits out of 2048, given an arbitrary byte sequence. It does this through taking the low-order 11 bits of each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence.\footnote{11 bits $= 2^{2048}$, and the low-order 11 bits is the modulo 2048 of the operand, which is in this case is "each of the first three pairs of bytes in a Keccak-256 hash of the byte sequence".} Formally:
@@ -420,14 +420,14 @@ \subsection{The Block} \label{ch:block}
 
 \subsubsection{Holistic Validity}
 
-We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_\mathrm{T}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_\mathrm{r}$:
+We can assert a block's validity if and only if it satisfies several conditions: it must be internally consistent with the ommer and transaction block hashes and the given transactions $B_{\mathrm{t}}$ (as specified in sec \ref{ch:finalisation}), when executed in order on the base state $\boldsymbol{\sigma}$ (derived from the final state of the parent block), result in a new state of the identity $H_{\mathrm{r}}$:
 \begin{equation}
 \begin{array}[t]{lclc}\hypertarget{H r}{
-H_\mathrm{r} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\
-H_\mathrm{o} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_\mathrm{U}}))) & \wedge }\hypertarget{H t}{\\
-H_\mathrm{t} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_\mathrm{T} \rVert, i \in \mathbb{P}: p(i, L_\mathrm{T}(B_\mathrm{T}[i]))\}) }& \wedge \hypertarget{H e}{\\
-H_\mathrm{e} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert \hyperlink{Transaction Receipt}{B_\mathrm{R}} \rVert, i \in \mathbb{P}: p(i, L_R(B_\mathrm{R}[i]))\}) & \wedge }\hypertarget{H b}{\hypertarget{r}{\\
-H_\mathrm{b} &\equiv& \hyperlink{bigvee}{\bigvee}_{\mathbf{r} \in B_\mathrm{R}} \big( \mathbf{r}_\mathrm{b} \big)}}
+H_{\mathrm{r}} &\equiv& \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\hyperlink{Pi}{\Pi}(\boldsymbol{\sigma}, B))) & \wedge }\hypertarget{H o}{\\
+H_{\mathrm{o}} &\equiv& \mathtt{\small KEC}(\mathtt{\small RLP}(L_H^*(\hyperlink{B U}{B_{\mathrm{u}}}))) & \wedge }\hypertarget{H t}{\\
+H_{\mathrm{t}} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert B_{\mathrm{t}} \rVert, i \in \mathbb{P}: p(i, L_{\mathrm{t}}(B_{\mathrm{t}}[i]))\}) }& \wedge \hypertarget{H e}{\\
+H_{\mathrm{e}} &\equiv& \mathtt{\small TRIE}(\{\forall i < \lVert \hyperlink{Transaction Receipt}{B_{\mathrm{r}}} \rVert, i \in \mathbb{P}: p(i, L_R(B_{\mathrm{r}}[i]))\}) & \wedge }\hypertarget{H b}{\hypertarget{r}{\\
+H_{\mathrm{b}} &\equiv& \hyperlink{bigvee}{\bigvee}_{\mathbf{r} \in B_{\mathrm{r}}} \big( \mathbf{r}_{\mathrm{b}} \big)}}
 \end{array}
 \end{equation}
 
@@ -438,23 +438,23 @@ \subsubsection{Holistic Validity}
 
 Furthermore:
 \begin{equation}
-\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_\mathrm{r}
+\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma})) = {P(B_H)_H}_{\mathrm{r}}
 \end{equation}
 
 Thus $\texttt{\small TRIE}(L_S(\boldsymbol{\sigma}))$ is the root node hash of the Merkle Patricia tree structure containing the key-value pairs of the state $\boldsymbol{\sigma}$ with values encoded using RLP, and $P(B_H)$ is the parent block of $B$, defined directly.
 
-The values stemming from the computation of transactions, specifically the \hyperlink{Transaction Receipt}{transaction receipts, $B_\mathrm{R}$}, and that defined through the transaction's \hyperlink{Pi}{state-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}.
+The values stemming from the computation of transactions, specifically the \hyperlink{Transaction Receipt}{transaction receipts, $B_{\mathrm{r}}$}, and that defined through the transaction's \hyperlink{Pi}{state-accumulation function, $\Pi$}, are formalised later in section \ref{sec:statenoncevalidation}.
 
 \subsubsection{Serialisation}
 
 The function $L_B$ and $L_H$ are the preparation functions for a block and block header respectively. Much like the transaction receipt preparation function $L_R$, we assert the types and order of the structure for when the RLP transformation is required:
 \begin{eqnarray}
-\quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_\mathrm{p}}, \hyperlink{H o}{H_\mathrm{o}}, \hyperlink{H c}{H_\mathrm{c}}, \hyperlink{H r}{H_\mathrm{r}}, \hyperlink{H t}{H_\mathrm{t}}, \hyperlink{H e}{H_\mathrm{e}}, \hyperlink{H b}{H_\mathrm{b}}, \hyperlink{H d}{H_\mathrm{d}},\\ \hyperlink{H i}{H_\mathrm{i}}, \hyperlink{H l}{H_\mathrm{l}}, \hyperlink{H g}{H_\mathrm{g}}, \hyperlink{H s}{H_\mathrm{s}}, \hyperlink{H x}{H_\mathrm{x}}, \hyperlink{H m}{H_\mathrm{m}}, \hyperlink{H n}{H_\mathrm{n}} \; )\end{array} \\
-\quad L_B(B) & \equiv & \big( L_H(B_H), L_\mathrm{T}^*(B_\mathrm{T}), L_H^*(\hyperlink{B U}{B_\mathrm{U}}) \big)
+\quad L_H(H) & \equiv & (\begin{array}[t]{l}\hyperlink{H p}{H_{\mathrm{p}}}, \hyperlink{H o}{H_{\mathrm{o}}}, \hyperlink{H c}{H_{\mathrm{c}}}, \hyperlink{H r}{H_{\mathrm{r}}}, \hyperlink{H t}{H_{\mathrm{t}}}, \hyperlink{H e}{H_{\mathrm{e}}}, \hyperlink{H b}{H_{\mathrm{b}}}, \hyperlink{H d}{H_{\mathrm{d}}},\\ \hyperlink{H i}{H_{\mathrm{i}}}, \hyperlink{H l}{H_{\mathrm{l}}}, \hyperlink{H g}{H_{\mathrm{g}}}, \hyperlink{H s}{H_{\mathrm{s}}}, \hyperlink{H x}{H_{\mathrm{x}}}, \hyperlink{H m}{H_{\mathrm{m}}}, \hyperlink{H n}{H_{\mathrm{n}}} \; )\end{array} \\
+\quad L_B(B) & \equiv & \big( L_H(B_H), L_{\mathrm{t}}^*(B_{\mathrm{t}}), L_H^*(\hyperlink{B U}{B_{\mathrm{u}}}) \big)
 \end{eqnarray}
 
 \hypertarget{f*}{
-With $L_\mathrm{T}^*$ and $L_H^*$ being element-wise sequence transformations, thus:
+With $L_{\mathrm{t}}^*$ and $L_H^*$ being element-wise sequence transformations, thus:
 \begin{equation}
 f^*\big( (x_0, x_1, ...) \big) \equiv \big( f(x_0), f(x_1), ... \big) \quad \text{for any function} \; f
 \end{equation}}
@@ -462,17 +462,17 @@ \subsubsection{Serialisation}
 The component types are defined thus:
 \begin{equation}
 \begin{array}[t]{lclclcl}
-\hyperlink{H p}{H_\mathrm{p}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H o}{H_\mathrm{o}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H c}{H_\mathrm{c}} \in \mathbb{B}_{20} & \wedge \\
-\hyperlink{H r}{H_\mathrm{r}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H t}{H_\mathrm{t}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H e}{H_\mathrm{e}} \in \mathbb{B}_{32} & \wedge \\
-H_\mathrm{b} \in \mathbb{B}_{256} & \wedge & \hyperlink{H d}{H_\mathrm{d}} \in \mathbb{P} & \wedge & \hyperlink{H i}{H_\mathrm{i}} \in \mathbb{P} & \wedge \\
-\hyperlink{H l}{H_\mathrm{l}} \in \mathbb{P} & \wedge & \hyperlink{H g}{H_\mathrm{g}} \in \mathbb{P} & \wedge & \hyperlink{H s}{H_\mathrm{s}} \in \mathbb{P}_{256} & \wedge \\
-\hyperlink{H x}{H_\mathrm{x}} \in \mathbb{B} & \wedge & \hyperlink{H m}{H_\mathrm{m}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H n}{H_\mathrm{n}} \in \mathbb{B}_{8}
+\hyperlink{H p}{H_{\mathrm{p}}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H o}{H_{\mathrm{o}}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H c}{H_{\mathrm{c}}} \in \mathbb{B}_{20} & \wedge \\
+\hyperlink{H r}{H_{\mathrm{r}}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H t}{H_{\mathrm{t}}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H e}{H_{\mathrm{e}}} \in \mathbb{B}_{32} & \wedge \\
+H_{\mathrm{b}} \in \mathbb{B}_{256} & \wedge & \hyperlink{H d}{H_{\mathrm{d}}} \in \mathbb{P} & \wedge & \hyperlink{H i}{H_{\mathrm{i}}} \in \mathbb{P} & \wedge \\
+\hyperlink{H l}{H_{\mathrm{l}}} \in \mathbb{P} & \wedge & \hyperlink{H g}{H_{\mathrm{g}}} \in \mathbb{P} & \wedge & \hyperlink{H s}{H_{\mathrm{s}}} \in \mathbb{P}_{256} & \wedge \\
+\hyperlink{H x}{H_{\mathrm{x}}} \in \mathbb{B} & \wedge & \hyperlink{H m}{H_{\mathrm{m}}} \in \mathbb{B}_{32} & \wedge & \hyperlink{H n}{H_{\mathrm{n}}} \in \mathbb{B}_{8}
 \end{array}
 \end{equation}
 
 where
 \begin{equation}
-\mathbb{B}_\mathrm{n} = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \}
+\mathbb{B}_{\mathrm{n}} = \{ B: B \in \mathbb{B} \wedge \lVert B \rVert = n \}
 \end{equation}
 
 We now have a rigorous specification for the construction of a formal block structure. The RLP function $\texttt{\small RLP}$ (see Appendix \ref{app:rlp}) provides the canonical method for transforming this structure into a sequence of bytes ready for transmission over the wire or storage locally.
@@ -481,12 +481,12 @@ \subsubsection{Block Header Validity}
 
 We define $P(B_H)$ to be the parent block of $B$, formally:
 \begin{equation}
-P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = \hyperlink{H p}{H_\mathrm{p}}
+P(H) \equiv B': \mathtt{\tiny KEC}(\mathtt{\tiny RLP}(B'_H)) = \hyperlink{H p}{H_{\mathrm{p}}}
 \end{equation}
 
 The block number is the parent's block number incremented by one:
 \begin{equation}
-\hyperlink{H i}{H_\mathrm{i}} \equiv {{P(H)_H}_\mathrm{i}} + 1
+\hyperlink{H i}{H_{\mathrm{i}}} \equiv {{P(H)_H}_{\mathrm{i}}} + 1
 \end{equation}
 
 \newcommand{\mindifficulty}{D_0}
@@ -498,8 +498,8 @@ \subsubsection{Block Header Validity}
 The canonical difficulty of a block of header $H$ is defined as $D(H)$:
 \begin{equation}
 D(H) \equiv \begin{dcases}
-\mindifficulty & \text{if} \quad \hyperlink{H i}{H_\mathrm{i}} = 0\\
-\text{max}\!\left(\mindifficulty, {P(H)_H}_\mathrm{d} + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\
+\mindifficulty & \text{if} \quad \hyperlink{H i}{H_{\mathrm{i}}} = 0\\
+\text{max}\!\left(\mindifficulty, {P(H)_H}_{\mathrm{d}} + \diffadjustment\times\homesteadmod + \expdiffsymb \right) & \text{otherwise}\\
 \end{dcases}
 \end{equation}
 where:
@@ -507,56 +507,56 @@ \subsubsection{Block Header Validity}
 \mindifficulty \equiv 131072
 \end{equation}
 \begin{equation}
-\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_\mathrm{d}}{2048}\right\rfloor
+\diffadjustment \equiv \left\lfloor\frac{{P(H)_H}_{\mathrm{d}}}{2048}\right\rfloor
 \end{equation}
 \begin{equation}
-\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{\hyperlink{H s}{H_\mathrm{s}} - {P(H)_H}_\mathrm{s}}{10}\right\rfloor, -99 \right)
+\homesteadmod \equiv \text{max}\left( 1 - \left\lfloor\frac{\hyperlink{H s}{H_{\mathrm{s}}} - {P(H)_H}_{\mathrm{s}}}{10}\right\rfloor, -99 \right)
 \end{equation}
 \begin{equation}
-\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_\mathrm{i}} \div 100000 \right\rfloor - 2 } \right\rfloor
+\expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_{\mathrm{i}}} \div 100000 \right\rfloor - 2 } \right\rfloor
 \end{equation}}
 
 Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks. This is necessary to stabilise the time difference between blocks as  computation power becomes more efficient, with Moore's Law (\cite{THOMPSON200620}).
 
 \hypertarget{H l}{
-The canonical gas limit $\hyperlink{H l}{H_\mathrm{l}}$ of a block of header $H$ must fulfil the relation:
+The canonical gas limit $\hyperlink{H l}{H_{\mathrm{l}}}$ of a block of header $H$ must fulfil the relation:
 \begin{eqnarray}
-& & \hyperlink{H l}{H_\mathrm{l}} < {P(H)_H}_\mathrm{l} + \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor \quad \wedge \\
-& & \hyperlink{H l}{H_\mathrm{l}} > {P(H)_H}_\mathrm{l} - \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor \quad \wedge \\
-& & \hyperlink{H l}{H_\mathrm{l}} \geqslant 125000
+& & \hyperlink{H l}{H_{\mathrm{l}}} < {P(H)_H}_{\mathrm{l}} + \left\lfloor\frac{{P(H)_H}_{\mathrm{l}}}{1024}\right\rfloor \quad \wedge \\
+& & \hyperlink{H l}{H_{\mathrm{l}}} > {P(H)_H}_{\mathrm{l}} - \left\lfloor\frac{{P(H)_H}_{\mathrm{l}}}{1024}\right\rfloor \quad \wedge \\
+& & \hyperlink{H l}{H_{\mathrm{l}}} \geqslant 125000
 \end{eqnarray}}
 
-\hyperlink{H s}{$H_\mathrm{s}$} is the timestamp of block $H$ and must fulfil the relation:
+\hyperlink{H s}{$H_{\mathrm{s}}$} is the timestamp of block $H$ and must fulfil the relation:
 \begin{equation}
-\hyperlink{H s}{H_\mathrm{s}} > {P(H)_H}_\mathrm{s}
+\hyperlink{H s}{H_{\mathrm{s}}} > {P(H)_H}_{\mathrm{s}}
 \end{equation}
 
 This mechanism enforces a homeostasis in terms of the time between blocks; a smaller period between the last two blocks results in an increase in the difficulty level and thus additional computation is required, lengthening the likely next period. Conversely, if the period is too large, the difficulty, and expected time to the next block, is reduced.
 
-The nonce of a block, $\hyperlink{H n}{H_\mathrm{n}}$, must satisfy the relations:
+The nonce of a block, $\hyperlink{H n}{H_{\mathrm{n}}}$, must satisfy the relations:
 \begin{equation}
-n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \quad \wedge \quad m = \hyperlink{H m}{H_\mathrm{m}}
+n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_{\mathrm{d}}}} \quad \wedge \quad m = \hyperlink{H m}{H_{\mathrm{m}}}
 \end{equation}
-with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d})$.
+with $(n, m) = \mathtt{PoW}(H_{\hcancel{n}}, \hyperlink{H n}{H_{\mathrm{n}}}, \mathbf{d})$.
 
 \hypertarget{h cancel n}{}
-Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $\hyperlink{H d}{H_\mathrm{d}}$.
+Where $H_{\hcancel{n}}$ is the new block's header $H$, but \textit{without} the \hyperlink{block nonce}{nonce} and mix-hash block components, $\mathbf{d}$ being the current DAG, a large data set needed to compute the mix-hash, and $\mathtt{PoW}$ is the proof-of-work function (see section \ref{ch:pow}): this evaluates to an array with the first item being the mix-hash, to prove that a correct DAG has been used, and the second item being a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. Given an approximately uniform distribution in the range $[0, 2^{64})$, the expected time to find a solution is proportional to the difficulty, $\hyperlink{H d}{H_{\mathrm{d}}}$.
 
 This is the foundation of the security of the blockchain and is the fundamental reason why a malicious node cannot propagate newly created blocks that would otherwise overwrite (``rewrite'') history. Because the \hyperlink{block nonce}{block nonce} must satisfy this requirement, and because its satisfaction depends on the contents of the block and in turn its composed transactions, creating new, valid, blocks is difficult and, over time, requires approximately the total compute power of the trustworthy portion of the mining peers.
 
 Thus we are able to define the \hypertarget{BlockHeaderValidityFunction}{block header validity function $V(H)$}:\label{eq:BlockHeaderValidityFunction}
 \begin{eqnarray}
-V(H) & \equiv &  n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \wedge m = \hyperlink{H m}{H_\mathrm{m}} \quad \wedge \\
-& & \hyperlink{H d}{H_\mathrm{d}} = D(H) \quad \wedge \\
-& & \hyperlink{H g}{H_\mathrm{g}} \le \hyperlink{H l}{H_\mathrm{l}}  \quad \wedge \\
-& & \hyperlink{H l}{H_\mathrm{l}} < {P(H)_H}_\mathrm{l} + \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor  \quad \wedge \\
-& & \hyperlink{H l}{H_\mathrm{l}} > {P(H)_H}_\mathrm{l} - \left\lfloor\frac{{P(H)_H}_\mathrm{l}}{1024}\right\rfloor  \quad \wedge \\
-& & \hyperlink{H l}{H_\mathrm{l}} \geqslant 125000  \quad \wedge \\
-& & \hyperlink{H s}{H_\mathrm{s}} > {P(H)_H}_\mathrm{s} \quad \wedge \\
-& & \hyperlink{H i}{H_\mathrm{i}} = {P(H)_H}_\mathrm{i} +1 \quad \wedge \\
-& & \lVert \hyperlink{H x}{H_\mathrm{x}} \rVert \le 32
+V(H) & \equiv &  n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_{\mathrm{d}}}} \wedge m = \hyperlink{H m}{H_{\mathrm{m}}} \quad \wedge \\
+& & \hyperlink{H d}{H_{\mathrm{d}}} = D(H) \quad \wedge \\
+& & \hyperlink{H g}{H_{\mathrm{g}}} \le \hyperlink{H l}{H_{\mathrm{l}}}  \quad \wedge \\
+& & \hyperlink{H l}{H_{\mathrm{l}}} < {P(H)_H}_{\mathrm{l}} + \left\lfloor\frac{{P(H)_H}_{\mathrm{l}}}{1024}\right\rfloor  \quad \wedge \\
+& & \hyperlink{H l}{H_{\mathrm{l}}} > {P(H)_H}_{\mathrm{l}} - \left\lfloor\frac{{P(H)_H}_{\mathrm{l}}}{1024}\right\rfloor  \quad \wedge \\
+& & \hyperlink{H l}{H_{\mathrm{l}}} \geqslant 125000  \quad \wedge \\
+& & \hyperlink{H s}{H_{\mathrm{s}}} > {P(H)_H}_{\mathrm{s}} \quad \wedge \\
+& & \hyperlink{H i}{H_{\mathrm{i}}} = {P(H)_H}_{\mathrm{i}} +1 \quad \wedge \\
+& & \lVert \hyperlink{H x}{H_{\mathrm{x}}} \rVert \le 32
 \end{eqnarray}
-where $(n, m) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d})$
+where $(n, m) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_{\mathrm{n}}}, \mathbf{d})$
 
 Noting additionally that \textbf{extraData} must be at most 32 bytes.
 
@@ -592,10 +592,10 @@ \section{Transaction Execution} \label{ch:transactions}
 \subsection{Substate}
 Throughout transaction execution, we accrue certain information that is acted upon immediately following the transaction. We call this \textit{transaction substate}, and represent it as $A$, which is a tuple:
 \begin{equation}
-A \equiv (A_\mathrm{s}, A_\mathrm{l}, A_\mathrm{r})
+A \equiv (A_{\mathrm{s}}, A_{\mathrm{l}}, A_{\mathrm{r}})
 \end{equation}
 
-The tuple contents include $A_\mathrm{s}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_\mathrm{l}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_\mathrm{r}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs.
+The tuple contents include $A_{\mathrm{s}}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_{\mathrm{l}}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_{\mathrm{r}}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs.
 
 For brevity, we define the empty substate $A^0$ to have no self-destructs, no logs and a zero refund balance:
 \begin{equation}
@@ -605,18 +605,18 @@ \subsection{Substate}
 \subsection{Execution}
 We define intrinsic gas $g_0$, the amount of gas this transaction requires to be paid prior to execution, as follows:
 \begin{align}\hypertarget{g0}{
-g_0 \equiv {} & \sum_{i \in T_\mathrm{i}, T_\mathrm{d}} \begin{cases} \hyperlink{Gtxdatazero}{G_{\mathrm{txdatazero}}} & \text{if} \quad i = 0 \\ \hyperlink{Gtxdatanonzero}{G_{\mathrm{txdatanonzero}}} & \text{otherwise} \end{cases} \\
-{} & + \begin{cases} \hyperlink{Gtxcreate}{G_{\mathrm{txcreate}}} & \text{if} \quad T_\mathrm{t} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\
+g_0 \equiv {} & \sum_{i \in T_{\mathrm{i}}, T_{\mathrm{d}}} \begin{cases} \hyperlink{Gtxdatazero}{G_{\mathrm{txdatazero}}} & \text{if} \quad i = 0 \\ \hyperlink{Gtxdatanonzero}{G_{\mathrm{txdatanonzero}}} & \text{otherwise} \end{cases} \\
+{} & + \begin{cases} \hyperlink{Gtxcreate}{G_{\mathrm{txcreate}}} & \text{if} \quad T_{\mathrm{t}} = \varnothing \\ 0 & \text{otherwise} \end{cases} \\
 {} & + \hyperlink{Gtransaction}{G_{\mathrm{transaction}}}
 }\end{align}
 
-where $T_\mathrm{i},T_\mathrm{d}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_{\mathrm{txcreate}}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}.
+where $T_{\mathrm{i}},T_{\mathrm{d}}$ means the series of bytes of the transaction's associated data and initialisation EVM-code, depending on whether the transaction is for contract-creation or message-call. $G_{\mathrm{txcreate}}$ is added if the transaction is contract-creating, but not if a result of EVM-code. $G$ is fully defined in Appendix \ref{app:fees}.
 
 %todo Explain g_d reason?
 
 The up-front cost $v_0$ is calculated as:
 \begin{equation}
-v_0 \equiv T_\mathrm{g} T_\mathrm{p} + \hyperlink{T v}{T_\mathrm{v}}
+v_0 \equiv T_{\mathrm{g}} T_{\mathrm{p}} + \hyperlink{T v}{T_{\mathrm{v}}}
 \end{equation}
 
 The validity is determined as:
@@ -624,65 +624,65 @@ \subsection{Execution}
 \begin{array}[t]{rcl}
 S(T) & \neq & \varnothing \quad \wedge \\
 \boldsymbol{\sigma}[S(T)] & \neq & \varnothing \quad \wedge \hypertarget{transaction nonce}{\\
-T_\mathrm{n} & = & \boldsymbol{\sigma}[S(T)]_\mathrm{n} \quad \wedge \\}
-g_0 & \leqslant & T_\mathrm{g} \quad \wedge \\
-v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_\mathrm{b} \quad \wedge \\
-T_\mathrm{g} & \leqslant & {B_H}_\mathrm{l} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_\mathrm{R})_\mathrm{u}}
+T_{\mathrm{n}} & = & \boldsymbol{\sigma}[S(T)]_{\mathrm{n}} \quad \wedge \\}
+g_0 & \leqslant & T_{\mathrm{g}} \quad \wedge \\
+v_0 & \leqslant & \boldsymbol{\sigma}[S(T)]_{\mathrm{b}} \quad \wedge \\
+T_{\mathrm{g}} & \leqslant & {B_H}_{\mathrm{l}} - \hyperlink{ell}{\ell}\hyperlink{R u}{(B_{\mathrm{r}})_{\mathrm{u}}}
 \end{array}
 \end{equation}
 
-Note the final condition; the sum of the transaction's gas limit, $T_\mathrm{g}$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_\mathrm{R})_\mathrm{u}$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_\mathrm{l}$.
+Note the final condition; the sum of the transaction's gas limit, $T_{\mathrm{g}}$, and the gas utilised in this block prior, given by $ \hyperlink{ell}{\ell}(B_{\mathrm{r}})_{\mathrm{u}}$, must be no greater than the block's \textbf{gasLimit}, ${B_H}_{\mathrm{l}}$.
 
-The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_\mathrm{g}T_\mathrm{p}$. The gas available for the proceeding computation, $g$, is defined as $T_\mathrm{g} - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point.
+The execution of a valid transaction begins with an irrevocable change made to the state: the \hyperlink{account nonce}{nonce of the account of the sender}, $S(T)$, is incremented by one and the balance is reduced by part of the up-front cost, $T_{\mathrm{g}}T_{\mathrm{p}}$. The gas available for the proceeding computation, $g$, is defined as $T_{\mathrm{g}} - g_0$. The computation, whether contract creation or a message call, results in an eventual state (which may legally be equivalent to the current state), the change to which is deterministic and never invalid: there can be no invalid transactions from this point.
 
 We define the checkpoint state $\boldsymbol{\sigma}_0$:
 \begin{eqnarray}
 \boldsymbol{\sigma}_0 & \equiv & \boldsymbol{\sigma} \quad \text{except:} \\
-\boldsymbol{\sigma}_0[S(T)]_b & \equiv & \boldsymbol{\sigma}[S(T)]_b - T_g T_p \\%
-\boldsymbol{\sigma}_0[S(T)]_\mathrm{n} & \equiv & \boldsymbol{\sigma}[S(T)]_\mathrm{n} + 1
+\boldsymbol{\sigma}_0[S(T)]_b & \equiv & \boldsymbol{\sigma}[S(T)]_b - T_{\mathrm{g}} T_{\mathrm{p}} \\%
+\boldsymbol{\sigma}_0[S(T)]_{\mathrm{n}} & \equiv & \boldsymbol{\sigma}[S(T)]_{\mathrm{n}} + 1
 \end{eqnarray}
 
 Evaluating $\boldsymbol{\sigma}_P$ from $\boldsymbol{\sigma}_0$ depends on the transaction type; either contract creation or message call; we define the tuple of post-execution provisional state $\boldsymbol{\sigma}_P$, remaining gas $g'$ and substate $A$:
 \begin{equation}
 (\boldsymbol{\sigma}_P, g', A) \equiv \begin{cases}
-\Lambda(\boldsymbol{\sigma}_0, S(T), T_\mathrm{o}, &\\ \quad\quad g, T_\mathrm{p}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{i}, 0) & \text{if} \quad T_\mathrm{t} = \varnothing \\
-\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_\mathrm{o}, &\\ \quad\quad T_\mathrm{t}, T_\mathrm{t}, g, T_\mathrm{p}, \hyperlink{T v}{T_\mathrm{v}}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{d}, 0) & \text{otherwise}
+\Lambda(\boldsymbol{\sigma}_0, S(T), T_{\mathrm{o}}, &\\ \quad\quad g, T_{\mathrm{p}}, \hyperlink{T v}{T_{\mathrm{v}}}, T_{\mathrm{i}}, 0) & \text{if} \quad T_{\mathrm{t}} = \varnothing \\
+\Theta_{3}(\boldsymbol{\sigma}_0, S(T), T_{\mathrm{o}}, &\\ \quad\quad T_{\mathrm{t}}, T_{\mathrm{t}}, g, T_{\mathrm{p}}, \hyperlink{T v}{T_{\mathrm{v}}}, \hyperlink{T v}{T_{\mathrm{v}}}, T_{\mathrm{d}}, 0) & \text{otherwise}
 \end{cases}
 \end{equation}
 
 where $g$ is the amount of gas remaining after deducting the basic amount required to pay for the existence of the transaction:
 \begin{equation}
-g \equiv T_\mathrm{g} - g_0
+g \equiv T_{\mathrm{g}} - g_0
 \end{equation}
-and $T_\mathrm{o}$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code.
+and $T_{\mathrm{o}}$ is the original transactor, which can differ from the sender in the case of a message call or contract creation not directly triggered by a transaction but coming from the execution of EVM-code.
 
 Note we use $\Theta_{3}$ to denote the fact that only the first three components of the function's value are taken; the final represents the message-call's output value (a byte array) and is unused in the context of transaction evaluation.
 
 After the message call or contract creation is processed, the state is finalised by determining the amount to be refunded, $g^*$ from the remaining gas, $g'$, plus some allowance from the refund counter, to the sender at the original rate.
 \begin{equation}
-g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_\mathrm{g} - g'}{2} \Big\rfloor, A_\mathrm{r} \}
+g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_{\mathrm{g}} - g'}{2} \Big\rfloor, A_{\mathrm{r}} \}
 \end{equation}
 
-The total refundable amount is the legitimately remaining gas $g'$, added to $A_\mathrm{r}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_\mathrm{g} - g'$.
+The total refundable amount is the legitimately remaining gas $g'$, added to $A_{\mathrm{r}}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_{\mathrm{g}} - g'$.
 
 The Ether for the gas is given to the miner, whose address is specified as the beneficiary of the present block $B$. So we define the pre-final state $\boldsymbol{\sigma}^*$ in terms of the provisional state $\boldsymbol{\sigma}_P$:
 \begin{eqnarray}
 \boldsymbol{\sigma}^* & \equiv & \boldsymbol{\sigma}_P \quad \text{except} \\
-\boldsymbol{\sigma}^*[S(T)]_\mathrm{b} & \equiv & \boldsymbol{\sigma}_P[S(T)]_\mathrm{b} + g^* T_\mathrm{p} \\
-\boldsymbol{\sigma}^*[m]_\mathrm{b} & \equiv & \boldsymbol{\sigma}_P[m]_\mathrm{b} + (T_\mathrm{g} - g^*) T_\mathrm{p} \\
-m & \equiv & {B_H}_\mathrm{c}
+\boldsymbol{\sigma}^*[S(T)]_{\mathrm{b}} & \equiv & \boldsymbol{\sigma}_P[S(T)]_{\mathrm{b}} + g^* T_{\mathrm{p}} \\
+\boldsymbol{\sigma}^*[m]_{\mathrm{b}} & \equiv & \boldsymbol{\sigma}_P[m]_{\mathrm{b}} + (T_{\mathrm{g}} - g^*) T_{\mathrm{p}} \\
+m & \equiv & {B_H}_{\mathrm{c}}
 \end{eqnarray}
 
 The final state, $\boldsymbol{\sigma}'$, is reached after deleting all accounts that appear in the self-destruct set:
 \begin{eqnarray}
 \boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}^* \quad \text{except} \\
-\forall i \in A_\mathrm{s}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing
+\forall i \in A_{\mathrm{s}}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing
 \end{eqnarray}
 
 \hypertarget{Upsilong}{And finally, we specify $\Upsilon^g$, the total gas used in this transaction}\hypertarget{Upsilonl}{ and $\Upsilon^\mathbf{l}$, the logs created by this transaction:}
 \begin{eqnarray}
-\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_\mathrm{g} - \mathbf{g}' \\
-\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_\mathrm{l}
+\Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_{\mathrm{g}} - \mathbf{g}' \\
+\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_{\mathrm{l}}
 \end{eqnarray}
 
 These are used to help define the \hyperlink{Transaction Receipt}{transaction receipt}.
@@ -698,7 +698,7 @@ \section{Contract Creation} \label{ch:create}
 
 The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$:
 \begin{equation}
-a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_\mathrm{n} - 1)\;\big)\Big)\Big)
+a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_{\mathrm{n}} - 1)\;\big)\Big)\Big)
 \end{equation}
 
 where $\mathtt{\tiny KEC}$ is the Keccak 256-bit hash function, $\mathtt{\tiny RLP}$ is the RLP encoding function, $\mathcal{B}_{a..b}(X)$ evaluates to binary value containing the bits of indices in the range $[a, b]$ of the binary data $X$ and $\boldsymbol{\sigma}[x]$ is the address state of $x$ or $\varnothing$ if none exists. Note we use one fewer than the \hyperlink{account nonce}{sender's nonce value}; we assert that we have incremented the sender account's nonce prior to this call, and so the value used is the sender's nonce at the beginning of the responsible transaction or VM operation.
@@ -709,14 +709,14 @@ \section{Contract Creation} \label{ch:create}
 \end{equation}
 \begin{eqnarray}
 \boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\
-\boldsymbol{\sigma}^*[s]_\mathrm{b} &\equiv& \boldsymbol{\sigma}[s]_\mathrm{b} - v
+\boldsymbol{\sigma}^*[s]_{\mathrm{b}} &\equiv& \boldsymbol{\sigma}[s]_{\mathrm{b}} - v
 \end{eqnarray}
 
 where $v'$ is the account's pre-existing value, in the event it was previously in existence:
 \begin{equation}
 v' \equiv \begin{cases}
 0 & \text{if} \quad \boldsymbol{\sigma}[a] = \varnothing\\
-\boldsymbol{\sigma}[a]_\mathrm{b} & \text{otherwise}
+\boldsymbol{\sigma}[a]_{\mathrm{b}} & \text{otherwise}
 \end{cases}
 \end{equation}
 
@@ -729,17 +729,17 @@ \section{Contract Creation} \label{ch:create}
 \end{equation}
 where $I$ contains the parameters of the execution environment as defined in section \ref{ch:model}, that is:
 \begin{eqnarray}
-I_\mathrm{a} & \equiv & a \\
-I_\mathrm{o} & \equiv & o \\
-I_\mathrm{p} & \equiv & p \\
-I_\mathrm{d} & \equiv & () \\
-I_\mathrm{s} & \equiv & s \\
-\hyperlink{I v}{I_\mathrm{v}} & \equiv & v \\
-I_\mathrm{b} & \equiv & \mathbf{i} \\
-I_\mathrm{e} & \equiv & e
+I_{\mathrm{a}} & \equiv & a \\
+I_{\mathrm{o}} & \equiv & o \\
+I_{\mathrm{p}} & \equiv & p \\
+I_{\mathrm{d}} & \equiv & () \\
+I_{\mathrm{s}} & \equiv & s \\
+\hyperlink{I v}{I_{\mathrm{v}}} & \equiv & v \\
+I_{\mathrm{b}} & \equiv & \mathbf{i} \\
+I_{\mathrm{e}} & \equiv & e
 \end{eqnarray}
 
-$I_\mathrm{d}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain.
+$I_{\mathrm{d}}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain.
 
 Code execution depletes gas, and gas may not go below zero, thus execution may exit before the code has come to a natural halting state. In this (and several other) exceptional cases we say an out-of-gas (OOG) exception has occurred: The evaluated state is defined as being the empty set, $\varnothing$, and the entire create operation should have no effect on the state, effectively leaving it as it was immediately prior to attempting the creation.
 
@@ -762,7 +762,7 @@ \section{Contract Creation} \label{ch:create}
 \quad \boldsymbol{\sigma}' &\equiv  \begin{cases}
 \boldsymbol{\sigma} & \text{if} \quad F \\
 \boldsymbol{\sigma}^{**} \quad \text{except:} & \\
-\quad\boldsymbol{\sigma}'[a]_\mathrm{c} = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise}
+\quad\boldsymbol{\sigma}'[a]_{\mathrm{c}} = \texttt{\small KEC}(\mathbf{o}) & \text{otherwise}
 \end{cases} \\
 \nonumber \text{where} \\
 F &\equiv \big(\boldsymbol{\sigma}^{**} = \varnothing \ \vee\  \mathbf{g}^{**} < \mathbf{c} \ \vee\  |\mathbf{o}| > 24576\big)
@@ -786,7 +786,7 @@ \section{Message Call} \label{ch:call}
 
 We define $\boldsymbol{\sigma}_1$, the first transitional state as the original state but with the value transferred from sender to recipient:
 \begin{equation}
-\boldsymbol{\sigma}_1[r]_\mathrm{b} \equiv \boldsymbol{\sigma}[r]_\mathrm{b} + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_\mathrm{b} \equiv \boldsymbol{\sigma}[s]_\mathrm{b} - v
+\boldsymbol{\sigma}_1[r]_{\mathrm{b}} \equiv \boldsymbol{\sigma}[r]_{\mathrm{b}} + v \quad\wedge\quad \boldsymbol{\sigma}_1[s]_{\mathrm{b}} \equiv \boldsymbol{\sigma}[s]_{\mathrm{b}} - v
 \end{equation}
 unless $s = r$.
 
@@ -795,7 +795,7 @@ \section{Message Call} \label{ch:call}
 \boldsymbol{\sigma}_1 \equiv \boldsymbol{\sigma}_1' \quad \text{except:} \\
 \end{equation}
 \begin{equation}
-\boldsymbol{\sigma}_1[s]_\mathrm{b} \equiv \boldsymbol{\sigma}_1'[s]_\mathrm{b} - v
+\boldsymbol{\sigma}_1[s]_{\mathrm{b}} \equiv \boldsymbol{\sigma}_1'[s]_{\mathrm{b}} - v
 \end{equation}
 \begin{equation}
 \text{and}\quad \boldsymbol{\sigma}_1' \equiv \boldsymbol{\sigma} \quad \text{except:} \\
@@ -803,11 +803,11 @@ \section{Message Call} \label{ch:call}
 \begin{equation}
 \begin{cases}
 \boldsymbol{\sigma}_1'[r] \equiv (v, 0, \mathtt{\tiny KEC}(()), \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing)) & \text{if} \quad \boldsymbol{\sigma}[r] = \varnothing \\
-\boldsymbol{\sigma}_1'[r]_\mathrm{b} \equiv \boldsymbol{\sigma}[r]_\mathrm{b} + v & \text{otherwise}
+\boldsymbol{\sigma}_1'[r]_{\mathrm{b}} \equiv \boldsymbol{\sigma}[r]_{\mathrm{b}} + v & \text{otherwise}
 \end{cases}
 \end{equation}
 
-The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_\mathrm{c}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$).
+The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_{\mathrm{c}}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$).
 
 \begin{eqnarray}
 \boldsymbol{\sigma}' & \equiv & \begin{cases}
@@ -824,17 +824,17 @@ \section{Message Call} \label{ch:call}
 \Xi_{\mathtt{RIP160}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 3 \\
 \Xi_{\mathtt{ID}}(\boldsymbol{\sigma}_1, g, I) & \text{if} \quad r = 4 \\
 \Xi(\boldsymbol{\sigma}_1, g, I) & \text{otherwise} \end{cases} \\
-I_\mathrm{a} & \equiv & r \\
-I_\mathrm{o} & \equiv & o \\
-I_\mathrm{p} & \equiv & p \\
-I_\mathrm{d} & \equiv & \mathbf{d} \\
-I_\mathrm{s} & \equiv & s \\
-\hyperlink{I v}{I_\mathrm{v}} & \equiv & \tilde{v} \\
-I_\mathrm{e} & \equiv & e \\
-\text{Let} \; \mathtt{\tiny KEC}(I_\mathrm{b}) & = & \boldsymbol{\sigma}[c]_\mathrm{c}
+I_{\mathrm{a}} & \equiv & r \\
+I_{\mathrm{o}} & \equiv & o \\
+I_{\mathrm{p}} & \equiv & p \\
+I_{\mathrm{d}} & \equiv & \mathbf{d} \\
+I_{\mathrm{s}} & \equiv & s \\
+\hyperlink{I v}{I_{\mathrm{v}}} & \equiv & \tilde{v} \\
+I_{\mathrm{e}} & \equiv & e \\
+\text{Let} \; \mathtt{\tiny KEC}(I_{\mathrm{b}}) & = & \boldsymbol{\sigma}[c]_{\mathrm{c}}
 \end{eqnarray}
 
-It is assumed that the client will have stored the pair $(\mathtt{\tiny KEC}(I_\mathrm{b}), I_\mathrm{b})$ at some point prior in order to make the determination of $I_\mathrm{b}$ feasible.
+It is assumed that the client will have stored the pair $(\mathtt{\tiny KEC}(I_{\mathrm{b}}), I_{\mathrm{b}})$ at some point prior in order to make the determination of $I_{\mathrm{b}}$ feasible.
 
 As can be seen, there are four exceptions to the usage of the general execution framework $\Xi$ for evaluation of the message call: these are four so-called `precompiled' contracts, meant as a preliminary piece of architecture that may later become \textit{native extensions}. The four contracts in addresses 1, 2, 3 and 4 execute the elliptic curve public key recovery function, the SHA2 256-bit hash scheme, the RIPEMD 160-bit hash scheme and the identity function respectively.
 
@@ -867,15 +867,15 @@ \subsection{Execution Environment}
 In addition to the system state $\boldsymbol{\sigma}$, and the remaining gas for computation $g$, there are several pieces of important information used in the execution environment that the execution agent must provide; these are contained in the tuple $I$:
 
 \begin{itemize}\hypertarget{I a}{
-\item $I_\mathrm{a}$, the address of the account which owns the code that is executing.}\hypertarget{I o}{
-\item $I_\mathrm{o}$, the sender address of the transaction that originated this execution.}\hypertarget{I p}{
-\item $I_\mathrm{p}$, the price of gas in the transaction that originated this execution.}\hypertarget{I d}{
-\item $I_\mathrm{d}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data.}\hypertarget{I s}{
-\item $I_\mathrm{s}$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender.}\hypertarget{I v}{
-\item $I_\mathrm{v}$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value.}\hypertarget{I b}{
-\item $I_\mathrm{b}$, the byte array that is the machine code to be executed.
+\item $I_{\mathrm{a}}$, the address of the account which owns the code that is executing.}\hypertarget{I o}{
+\item $I_{\mathrm{o}}$, the sender address of the transaction that originated this execution.}\hypertarget{I p}{
+\item $I_{\mathrm{p}}$, the price of gas in the transaction that originated this execution.}\hypertarget{I d}{
+\item $I_{\mathrm{d}}$, the byte array that is the input data to this execution; if the execution agent is a transaction, this would be the transaction data.}\hypertarget{I s}{
+\item $I_{\mathrm{s}}$, the address of the account which caused the code to be executing; if the execution agent is a transaction, this would be the transaction sender.}\hypertarget{I v}{
+\item $I_{\mathrm{v}}$, the value, in Wei, passed to this account as part of the same procedure as execution; if the execution agent is a transaction, this would be the transaction value.}\hypertarget{I b}{
+\item $I_{\mathrm{b}}$, the byte array that is the machine code to be executed.
 \item $I_H$, the block header of the present block.}\hypertarget{I e}{
-\item $I_\mathrm{e}$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present).}
+\item $I_{\mathrm{e}}$, the depth of the present message-call or contract-creation (i.e. the number of {\small CALL}s or {\small CREATE}s being executed at present).}
 \end{itemize}
 
 The execution model defines the function $\Xi$, which can compute the resultant state $\boldsymbol{\sigma}'$, the remaining gas $g'$, the accrued substate $A$ and the resultant output, $\mathbf{o}$, given these definitions. For the present context, we will defined it as:
@@ -896,13 +896,13 @@ \subsection{Execution Overview}
 \hypertarget{emptySequence}{}
 The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt.
 \begin{eqnarray}
-\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_\mathrm{g}, A, \mathbf{o}) \\
+\Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_{\mathrm{g}}, A, \mathbf{o}) \\
 (\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\
-\boldsymbol{\mu}_\mathrm{g} & \equiv & \mathbf{g} \\
-\boldsymbol{\mu}_{pc} & \equiv & 0 \\
-\boldsymbol{\mu}_\mathrm{m} & \equiv & (0, 0, ...) \\
-\boldsymbol{\mu}_\mathrm{i} & \equiv & 0 \\
-\boldsymbol{\mu}_\mathrm{s} & \equiv & ()
+\boldsymbol{\mu}_{\mathrm{g}} & \equiv & \mathbf{g} \\
+\boldsymbol{\mu}_{\mathrm{pc}} & \equiv & 0 \\
+\boldsymbol{\mu}_{\mathrm{m}} & \equiv & (0, 0, ...) \\
+\boldsymbol{\mu}_{\mathrm{i}} & \equiv & 0 \\
+\boldsymbol{\mu}_{\mathrm{s}} & \equiv & ()
 \end{eqnarray}
 \begin{equation}
 X\big( (\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I) \big) \equiv \begin{cases}
@@ -918,18 +918,18 @@ \subsection{Execution Overview}
 (a, b, c, d) \cdot e & \equiv & (a, b, c, d, e)
 \end{eqnarray}
 
-Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_\mathrm{g}$ from the resultant machine state $\boldsymbol{\mu}'$.
+Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_{\mathrm{g}}$ from the resultant machine state $\boldsymbol{\mu}'$.
 
 $X$ is thus cycled (recursively here, but implementations are generally expected to use a simple iterative loop) until either $Z$ becomes true indicating that the present state is exceptional and that the machine must be halted and any changes discarded or until $H$ becomes a series (rather than the empty set) indicating that the machine has reached a controlled halt.
 
 \subsubsection{Machine State}
-The machine state $\boldsymbol{\mu}$ is defined as the tuple $(g, pc, \mathbf{m}, i, \mathbf{s})$ which are the gas available, the program counter $pc \in \mathbb{P}_{256}$ , the memory contents, the active number of words in memory (counting continuously from position 0), and the stack contents. The memory contents $\boldsymbol{\mu}_\mathrm{m}$ are a series of zeroes of size $2^{256}$.
+The machine state $\boldsymbol{\mu}$ is defined as the tuple $(\mathrm{g}, \mathrm{pc}, \mathbf{m}, \mathrm{i}, \mathbf{s})$ which are the gas available, the program counter $\mathrm{pc} \in \mathbb{P}_{256}$ , the memory contents, the active number of words in memory (counting continuously from position 0), and the stack contents. The memory contents $\boldsymbol{\mu}_{\mathrm{m}}$ are a series of zeroes of size $2^{256}$.
 
 For the ease of reading, the instruction mnemonics, written in small-caps (\eg \space {\small ADD}), should be interpreted as their numeric equivalents; the full table of instructions and their specifics is given in Appendix \ref{app:vm}.
 
 For the purposes of defining $Z$, $H$ and $O$, we define $w$ as the current operation to be executed:
 \begin{equation}\label{eq:currentoperation}
-w \equiv \begin{cases} I_\mathrm{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathrm{b} \rVert \\
+w \equiv \begin{cases} I_{\mathrm{b}}[\boldsymbol{\mu}_{\mathrm{pc}}] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{pc}} < \lVert I_{\mathrm{b}} \rVert \\
 \text{\small STOP} & \text{otherwise}
 \end{cases}
 \end{equation}
@@ -942,11 +942,11 @@ \subsubsection{Exceptional Halting}
 \begin{equation}
 Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv
 \begin{array}[t]{l}
-\boldsymbol{\mu}_\mathrm{g} < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\
+\boldsymbol{\mu}_{\mathrm{g}} < C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \quad \vee \\
 \mathbf{\delta}_w = \varnothing \quad \vee \\
-\lVert\boldsymbol{\mu}_\mathrm{s}\rVert < \mathbf{\delta}_w \quad \vee \\
-( w \in \{ \text{\small JUMP}, \text{\small JUMPI} \} \quad \wedge \\ \quad \boldsymbol{\mu}_\mathrm{s}[0] \notin D(I_\mathrm{b}) ) \quad \vee \\
-\lVert\boldsymbol{\mu}_\mathrm{s}\rVert - \mathbf{\delta}_w + \mathbf{\alpha}_w > 1024 \quad
+\lVert\boldsymbol{\mu}_{\mathrm{s}}\rVert < \mathbf{\delta}_w \quad \vee \\
+( w \in \{ \text{\small JUMP}, \text{\small JUMPI} \} \quad \wedge \\ \quad \boldsymbol{\mu}_{\mathrm{s}}[0] \notin D(I_{\mathrm{b}}) ) \quad \vee \\
+\lVert\boldsymbol{\mu}_{\mathrm{s}}\rVert - \mathbf{\delta}_w + \mathbf{\alpha}_w > 1024 \quad
 \end{array}
 \end{equation}
 
@@ -998,24 +998,24 @@ \subsection{The Execution Cycle}
 \begin{eqnarray}
 O\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A, I)\big) & \equiv & (\boldsymbol{\sigma}', \boldsymbol{\mu}', A', I) \\
 \Delta & \equiv & \mathbf{\alpha}_w - \mathbf{\delta}_w \\
-\lVert\boldsymbol{\mu}'_\mathrm{s}\rVert & \equiv & \lVert\boldsymbol{\mu}_\mathrm{s}\rVert + \Delta \\
-\quad \forall x \in [\mathbf{\alpha}_w, \lVert\boldsymbol{\mu}'_\mathrm{s}\rVert): \boldsymbol{\mu}'_\mathrm{s}[x] & \equiv & \boldsymbol{\mu}_\mathrm{s}[x-\Delta]
+\lVert\boldsymbol{\mu}'_{\mathrm{s}}\rVert & \equiv & \lVert\boldsymbol{\mu}_{\mathrm{s}}\rVert + \Delta \\
+\quad \forall x \in [\mathbf{\alpha}_w, \lVert\boldsymbol{\mu}'_{\mathrm{s}}\rVert): \boldsymbol{\mu}'_{\mathrm{s}}[x] & \equiv & \boldsymbol{\mu}_{\mathrm{s}}[x-\Delta]
 \end{eqnarray}
 
 The gas is reduced by the instruction's gas cost and for most instructions, the program counter increments on each cycle, for the three exceptions, we assume a function $J$, subscripted by one of two instructions, which evaluates to the according value:
 \begin{eqnarray}
-\quad \boldsymbol{\mu}'_{g} & \equiv & \boldsymbol{\mu}_{g} - C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I)  \\
-\hypertarget{JUMP}{} \hypertarget{JUMPI}{} \label{eq:JUMP} \quad \boldsymbol{\mu}'_{pc} & \equiv & \begin{cases}
+\quad \boldsymbol{\mu}'_{\mathrm{g}} & \equiv & \boldsymbol{\mu}_{\mathrm{g}} - C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I)  \\
+\hypertarget{JUMP}{} \hypertarget{JUMPI}{} \label{eq:JUMP} \quad \boldsymbol{\mu}'_{\mathrm{pc}} & \equiv & \begin{cases}
 J_{\text{JUMP}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMP} \\
 J_{\text{JUMPI}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small JUMPI} \\
-N(\boldsymbol{\mu}_{pc}, w) & \text{otherwise}
+N(\boldsymbol{\mu}_{\mathrm{pc}}, w) & \text{otherwise}
 \end{cases}
 \end{eqnarray}
 
 In general, we assume the memory, self-destruct set and system state don't change:
 \begin{eqnarray}
-\boldsymbol{\mu}'_\mathrm{m} & \equiv & \boldsymbol{\mu}_\mathrm{m} \\
-\boldsymbol{\mu}'_\mathrm{i} & \equiv & \boldsymbol{\mu}_\mathrm{i} \\
+\boldsymbol{\mu}'_{\mathrm{m}} & \equiv & \boldsymbol{\mu}_{\mathrm{m}} \\
+\boldsymbol{\mu}'_{\mathrm{i}} & \equiv & \boldsymbol{\mu}_{\mathrm{i}} \\
 A' & \equiv & A \\
 \boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}
 \end{eqnarray}
@@ -1030,11 +1030,11 @@ \section{Blocktree to Blockchain} \label{ch:ghost}
 
 Thus we define the total difficulty of block $B$ recursively as:
 \begin{eqnarray}
-B_\mathrm{t} & \equiv & B'_\mathrm{t} + B_\mathrm{d} \\
+B_{\mathrm{t}} & \equiv & B'_{\mathrm{t}} + B_{\mathrm{d}} \\
 B' & \equiv & P(B_H)
 \end{eqnarray}
 
-As such given a block $B$, $B_\mathrm{t}$ is its total difficulty, $B'$ is its parent block and $B_\mathrm{d}$ is its difficulty.
+As such given a block $B$, $B_{\mathrm{t}}$ is its total difficulty, $B'$ is its parent block and $B_{\mathrm{d}}$ is its difficulty.
 
 \section{Block Finalisation} \label{ch:finalisation}
 
@@ -1051,7 +1051,7 @@ \subsection{Ommer Validation}
 
 The validation of \hyperlink{ommerheaders}{ommer headers} means nothing more than verifying that each ommer header is both a valid header and satisfies the relation of $N$th-generation ommer to the present block where $N \leq 6$. The maximum of ommer headers is two. Formally:
 \begin{equation}
-\lVert \hyperlink{B U}{B_\mathrm{U}} \rVert \leqslant 2 \bigwedge_{U \in \hyperlink{B U}{B_\mathrm{U}}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6)
+\lVert \hyperlink{B U}{B_{\mathrm{u}}} \rVert \leqslant 2 \bigwedge_{U \in \hyperlink{B U}{B_{\mathrm{u}}}} \hyperlink{BlockHeaderValidityFunction}{V(U)} \; \wedge \; k(U, P(B_H)_H, 6)
 \end{equation}
 
 where $k$ denotes the ``is-kin'' property:
@@ -1064,34 +1064,34 @@ \subsection{Ommer Validation}
 
 and $s$ denotes the ``is-sibling'' property:
 \begin{equation}
-s(U, H) \equiv (P(H) = P(U)\; \wedge \; H \neq U \; \wedge \; U \notin B(H)_\mathrm{U})
+s(U, H) \equiv (P(H) = P(U)\; \wedge \; H \neq U \; \wedge \; U \notin B(H)_{\mathrm{u}})
 \end{equation}
 where $B(H)$ is the block of the corresponding header $H$.
 
 \subsection{Transaction Validation}
 
-%where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_\mathrm{T}[i]$, and $g[i]$ the total gas used immediately after said transaction.
+%where $s[i]$ equals the root of the state trie immediately after the execution of the transaction $B_{\mathrm{t}}[i]$, and $g[i]$ the total gas used immediately after said transaction.
 
-The given \textbf{gasUsed} must correspond faithfully to the transactions listed: \hyperlink{H g}{${B_H}_\mathrm{g}$}, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction:
+The given \textbf{gasUsed} must correspond faithfully to the transactions listed: \hyperlink{H g}{${B_H}_{\mathrm{g}}$}, the total gas used in the block, must be equal to the accumulated gas used according to the final transaction:
 \begin{equation}
-\hyperlink{H g}{{B_H}_\mathrm{g}} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_\mathrm{u}}
+\hyperlink{H g}{{B_H}_{\mathrm{g}}} = \hyperlink{ell}{\ell}\hyperlink{R u}{(\mathbf{R})_{\mathrm{u}}}
 \end{equation}
 
 \subsection{Reward Application}
 
-The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{block reward R b}{$R_\mathrm{b}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):}
+The application of rewards to a block involves raising the balance of the accounts of the beneficiary address of the block and each ommer by a certain amount. We raise the block's beneficiary account by \hyperlink{block reward R b}{$R_{\mathrm{b}}$}; for each ommer, we raise the block's beneficiary by an additional $\frac{1}{32}$ of the block reward and the beneficiary of the ommer gets rewarded depending on the block number. \hypertarget{Omega}{Formally we define the function $\Omega$, the block-finalisation state transition function (a function that rewards a nominated party):}
 \begin{eqnarray}
 \Omega(B, \boldsymbol{\sigma}) & \equiv & \boldsymbol{\sigma}': \boldsymbol{\sigma}' = \boldsymbol{\sigma} \quad \text{except:} \\
-\boldsymbol{\sigma}'[\hyperlink{H c}{{B_H}_\mathrm{c}}]_\mathrm{b} & = & \boldsymbol{\sigma}[{B_H}_\mathrm{c}]_\mathrm{b} + (1 + \frac{\lVert \hyperlink{B U}{B_\mathrm{U}}\rVert}{32})\hyperlink{block reward R b}{R_\mathrm{b}} \\
-\forall_{U \in B_\mathrm{U}}: \\ \nonumber
- \boldsymbol{\sigma}'[U_\mathrm{c}]_\mathrm{b} & = & \boldsymbol{\sigma}[U_\mathrm{c}]_\mathrm{b} + (1 + \frac{1}{8} (U_\mathrm{i} - \hyperlink{H i}{{B_H}_\mathrm{i}})) \hyperlink{block reward R b}{R_\mathrm{b}}
+\boldsymbol{\sigma}'[\hyperlink{H c}{{B_H}_{\mathrm{c}}}]_{\mathrm{b}} & = & \boldsymbol{\sigma}[{B_H}_{\mathrm{c}}]_{\mathrm{b}} + (1 + \frac{\lVert \hyperlink{B U}{B_{\mathrm{u}}}\rVert}{32})\hyperlink{block reward R b}{R_{\mathrm{b}}} \\
+\forall_{U \in B_{\mathrm{u}}}: \\ \nonumber
+ \boldsymbol{\sigma}'[U_{\mathrm{c}}]_{\mathrm{b}} & = & \boldsymbol{\sigma}[U_{\mathrm{c}}]_{\mathrm{b}} + (1 + \frac{1}{8} (U_{\mathrm{i}} - \hyperlink{H i}{{B_H}_{\mathrm{i}}})) \hyperlink{block reward R b}{R_{\mathrm{b}}}
 \end{eqnarray}
 
 If there are collisions of the beneficiary addresses between ommers and the block (i.e. two ommers with the same beneficiary address or an ommer with the same beneficiary address as the present block), additions are applied cumulatively.\hypertarget{block reward R b}{}
 
 We define the block reward as 5 Ether:
 \begin{equation}
-\text{Let} \quad R_\mathrm{b} = 5 \times 10^{18}
+\text{Let} \quad R_{\mathrm{b}} = 5 \times 10^{18}
 \end{equation}
 
 \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation}
@@ -1101,45 +1101,45 @@ \subsection{State \& Nonce Validation}\label{sec:statenoncevalidation}
 \begin{equation}
 \Gamma(B) \equiv \begin{cases}
 \boldsymbol{\sigma}_0 & \text{if} \quad P(B_H) = \varnothing \\
-\boldsymbol{\sigma}_\mathrm{i}: \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\boldsymbol{\sigma}_\mathrm{i})) = {P(B_H)_H}_\mathrm{r} & \text{otherwise}
+\boldsymbol{\sigma}_{\mathrm{i}}: \mathtt{\small \hyperlink{trie}{TRIE}}(L_S(\boldsymbol{\sigma}_{\mathrm{i}})) = {P(B_H)_H}_{\mathrm{r}} & \text{otherwise}
 \end{cases}
 \end{equation}
 }
-Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_\mathrm{i}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_\mathrm{i}$; it is assumed that implementations will store this in the state database, which is trivial and efficient since the trie is by nature an immutable data structure.
+Here, $\mathtt{\small TRIE}(L_S(\boldsymbol{\sigma}_{\mathrm{i}}))$ means the hash of the root node of a trie of state $\boldsymbol{\sigma}_{\mathrm{i}}$; it is assumed that implementations will store this in the state database, which is trivial and efficient since the trie is by nature an immutable data structure.
 \hypertarget{Phi}{
 And finally we define $\Phi$, the block transition function, which maps an incomplete block $B$ to a complete block $B'$:}
 \begin{eqnarray}
 \Phi(B) & \equiv & B': \quad B' = B^* \quad \text{except:} \\
-B'_\mathrm{n} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \\
-B'_\mathrm{m} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\
-B^* & \equiv & B \quad \text{except:} \quad {\hyperlink{Transaction Receipt}{B^*_\mathrm{r}}} = \hyperlink{r}{r}(\hyperlink{Pi}{\Pi}(\Gamma(B), B))
+B'_{\mathrm{n}} & = & n: \quad x \leqslant \frac{2^{256}}{\hyperlink{H d}{H_{\mathrm{d}}}} \\
+B'_{\mathrm{m}} & = & m \quad \text{with } (x, m) = \mathtt{PoW}(B^*_{\hyperlink{h cancel n}{\hcancel{n}}}, n, \mathbf{d}) \\
+B^* & \equiv & B \quad \text{except:} \quad {\hyperlink{Transaction Receipt}{B^*_{\mathrm{r}}}} = \hyperlink{r}{r}(\hyperlink{Pi}{\Pi}(\Gamma(B), B))
 \end{eqnarray}
 With $\mathbf{d}$ being a dataset as specified in appendix \ref{app:ethash}.
 
 As specified at the beginning of the present work, \hyperlink{Pi}{$\Pi$ is the state-transition function}, which is defined in terms of \hyperlink{Omega}{$\Omega$}, the block finalisation function and \hyperlink{Upsilon}{$\Upsilon$}, the transaction-evaluation function, both now well-defined.
 
-\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_\mathrm{l}$ and $\mathbf{R}[n]_\mathrm{u}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_\mathrm{b}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction):
+\hyperlink{Transaction Receipt}{As previously detailed}, $\mathbf{R}[n]_{\boldsymbol{\sigma}}$, $\mathbf{R}[n]_{\mathrm{l}}$ and $\mathbf{R}[n]_{\mathrm{u}}$ are the $n$th corresponding states, logs and cumulative gas used after each transaction ($\mathbf{R}[n]_{\mathrm{b}}$, the fourth component in the tuple, has already been defined in terms of the logs). The former is defined simply as the state resulting from applying the corresponding transaction to the state resulting from the previous transaction (or the block's initial state in the case of the first such transaction):
 \begin{equation}
-\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathrm{T}[n]) & \text{otherwise} \end{cases}
+\mathbf{R}[n]_{\boldsymbol{\sigma}} = \begin{cases} \Gamma(B) & \text{if} \quad n < 0 \\ \hyperlink{Upsilon}{\Upsilon}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_{\mathrm{t}}[n]) & \text{otherwise} \end{cases}
 \end{equation}
 
-In the case of \hyperlink{Transaction Receipt}{${B_\mathrm{R}}[n]_\mathrm{u}$}, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total:
+In the case of \hyperlink{Transaction Receipt}{${B_{\mathrm{r}}}[n]_{\mathrm{u}}$}, we take a similar approach defining each item as the gas used in evaluating the corresponding transaction summed with the previous item (or zero, if it is the first), giving us a running total:
 \begin{equation}
-\mathbf{R}[n]_\mathrm{u} = \begin{cases} 0 & \text{if} \quad n < 0 \\
+\mathbf{R}[n]_{\mathrm{u}} = \begin{cases} 0 & \text{if} \quad n < 0 \\
 \begin{array}[b]{l}
-\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathrm{T}[n])\\ \quad + \mathbf{R}[n-1]_\mathrm{u}
+\hyperlink{Upsilong}{\Upsilon^g}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_{\mathrm{t}}[n])\\ \quad + \mathbf{R}[n-1]_{\mathrm{u}}
 \end{array}
  & \text{otherwise} \end{cases}
 \end{equation}
 
-For $\mathbf{R}[n]_\mathrm{l}$, we utilise the \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} function that we conveniently defined in the transaction execution function.
+For $\mathbf{R}[n]_{\mathrm{l}}$, we utilise the \hyperlink{Upsilonl}{$\Upsilon^\mathbf{l}$} function that we conveniently defined in the transaction execution function.
 \begin{equation}
-\mathbf{R}[n]_\mathrm{l} =
-\hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_\mathrm{T}[n])
+\mathbf{R}[n]_{\mathrm{l}} =
+\hyperlink{Upsilonl}{\Upsilon^\mathbf{l}}(\mathbf{R}[n - 1]_{\boldsymbol{\sigma}}, B_{\mathrm{t}}[n])
 \end{equation}
 
 \hypertarget{Pi}{
-Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_\mathrm{R})_{\boldsymbol{\sigma}}$:
+Finally, we define \hyperlink{Pi}{$\Pi$} as the new state given the block reward function \hyperlink{Omega}{$\Omega$} applied to the final transaction's resultant state, $\hyperlink{ell}{\ell}(B_{\mathrm{r}})_{\boldsymbol{\sigma}}$:
 \begin{equation}
 \Pi(\boldsymbol{\sigma}, B) \equiv \hyperlink{Omega}{\Omega}(B, \ell(\hyperlink{R sigma}{\mathbf{R})_{\boldsymbol{\sigma}}})
 \end{equation}}
@@ -1160,10 +1160,10 @@ \subsection{Mining Proof-of-Work} \label{ch:pow}
 
 More formally, the proof-of-work function takes the form of $\mathtt{PoW}$:
 \begin{equation}
-m = \hyperlink{H m}{H_\mathrm{m}} \quad \wedge \quad n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_\mathrm{d}}} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_\mathrm{n}, \mathbf{d})
+m = \hyperlink{H m}{H_{\mathrm{m}}} \quad \wedge \quad n \leqslant \frac{2^{256}}{\hyperlink{H d}{H_{\mathrm{d}}}} \quad \text{with} \quad (m, n) = \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, H_{\mathrm{n}}, \mathbf{d})
 \end{equation}
 
-Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_\mathrm{n}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_\mathrm{d}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being the \hyperlink{block nonce}{block nonce}, a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below.
+Where $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ is the new block's header but \textit{without} the nonce and mix-hash components; $\hyperlink{H n}{H_{\mathrm{n}}}$ is the nonce of the block header; $\mathbf{d}$ is a large data set needed to compute the mixHash and $\hyperlink{H d}{H_{\mathrm{d}}}$ is the new block's difficulty value (i.e. the block difficulty from section \ref{ch:ghost}). $\mathtt{PoW}$ is the proof-of-work function which evaluates to an array with the first item being the mixHash and the second item being the \hyperlink{block nonce}{block nonce}, a pseudo-random number cryptographically dependent on $H$ and $\mathbf{d}$. The underlying algorithm is called Ethash and is described below.
 \subsubsection{Ethash}
 Ethash is the PoW algorithm for Ethereum \textit{Frontier} and \textit{Homestead}. It is the latest version of Dagger-Hashimoto, introduced by \cite{dagger} and \cite{hashimoto}, although it can no longer appropriately be called that since many of the original features of both algorithms were drastically changed with R\&D from February 2015 until May 4 2015 (\cite{commitdateforEthash}). The general route that the algorithm takes is as follows:
 
@@ -1274,7 +1274,7 @@ \section{Recursive Length Prefix}\label{app:rlp}
 
 We define the RLP function as $\mathtt{\tiny RLP}$ through two sub-functions, the first handling the instance when the value is a byte array, the second when it is a sequence of further values:
 \begin{equation}
-\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_\mathrm{b}}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ \hyperlink{R l}{R_\mathrm{l}}(\mathbf{x}) & \text{otherwise} \end{cases}
+\mathtt{\tiny RLP}(\mathbf{x}) \equiv \begin{cases} \hyperlink{R b}{R_{\mathrm{b}}}(\mathbf{x}) & \text{if} \quad \mathbf{x} \in \mathbb{B} \\ \hyperlink{R l}{R_{\mathrm{l}}}(\mathbf{x}) & \text{otherwise} \end{cases}
 \end{equation}
 
 If the value to be serialised is a byte-array, the RLP serialisation takes one of three forms:
@@ -1285,9 +1285,9 @@ \section{Recursive Length Prefix}\label{app:rlp}
 \item Otherwise, the output is equal to the input prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the input byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 183.
 \end{itemize}
 \hypertarget{R b}{
-Formally, we define $R_\mathrm{b}$:}
+Formally, we define $R_{\mathrm{b}}$:}
 \begin{eqnarray}
-R_\mathrm{b}(\mathbf{x}) & \equiv & \begin{cases}
+R_{\mathrm{b}}(\mathbf{x}) & \equiv & \begin{cases}
 \mathbf{x} & \text{if} \quad \lVert \mathbf{x} \rVert = 1 \wedge \mathbf{x}[0] < 128 \\
 (128 + \lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{else if} \quad \lVert \mathbf{x} \rVert < 56 \\
 \big(183 + \big\lVert \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert \mathbf{x} \rVert) \cdot \mathbf{x} & \text{otherwise}
@@ -1305,9 +1305,9 @@ \section{Recursive Length Prefix}\label{app:rlp}
 \item Otherwise, the output is equal to the concatenated serialisations prefixed by the minimal-length byte-array which when interpreted as a big-endian integer is equal to the length of the concatenated serialisations byte array, which is itself prefixed by the number of bytes required to faithfully encode this length value plus 247.
 \end{itemize}
 \hypertarget{R l}{
-Thus we finish by formally defining $R_\mathrm{l}$:
+Thus we finish by formally defining $R_{\mathrm{l}}$:
 \begin{eqnarray}
-R_\mathrm{l}(\mathbf{x}) & \equiv & \begin{cases}
+R_{\mathrm{l}}(\mathbf{x}) & \equiv & \begin{cases}
 (192 + \lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{if} \quad \lVert s(\mathbf{x}) \rVert < 56 \\
 \big(247 + \big\lVert \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \big\rVert \big) \cdot \mathtt{\tiny BE}(\lVert s(\mathbf{x}) \rVert) \cdot s(\mathbf{x}) & \text{otherwise}
 \end{cases} \\
@@ -1410,22 +1410,22 @@ \section{Precompiled Contracts}\label{app:precompiled}
 For each precompiled contract, we make use of a template function, $\Xi_{\mathtt{PRE}}$, which implements the out-of-gas checking.
 \begin{equation}
 \Xi_{\mathtt{PRE}}(\boldsymbol{\sigma}, g, I) \equiv \begin{cases}
-(\varnothing, 0, A^0, ()) & \text{if} \quad \mathbf{g} < \mathbf{g}_\mathrm{r} \\
-(\boldsymbol\sigma, \mathbf{g} - \mathbf{g}_\mathrm{r}, A^0, \mathbf{o}) & \text{otherwise}\end{cases}
+(\varnothing, 0, A^0, ()) & \text{if} \quad \mathbf{g} < \mathbf{g}_{\mathrm{r}} \\
+(\boldsymbol\sigma, \mathbf{g} - \mathbf{g}_{\mathrm{r}}, A^0, \mathbf{o}) & \text{otherwise}\end{cases}
 \end{equation}
 
-The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $\mathbf{g}_\mathrm{r}$, the gas requirements.
+The precompiled contracts each use these definitions and provide specifications for the $\mathbf{o}$ (the output data) and $\mathbf{g}_{\mathrm{r}}$, the gas requirements.
 
 For the elliptic curve DSA recover VM execution function, we also define $\mathbf{d}$ to be the input data, well-defined for an infinite length by appending zeroes as required. Importantly in the case of an invalid signature ($\mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing$), then we have no output.
 \begin{eqnarray}
 \Xi_{\mathtt{ECREC}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathrm{r} &=& 3000\\
+\mathbf{g}_{\mathrm{r}} &=& 3000\\
 |\mathbf{o}| &=& \begin{cases} 0 & \text{if} \quad \mathtt{\tiny ECDSARECOVER}(h, v, r, s) = \varnothing\\ 32 & \text{otherwise} \end{cases}\\
 \text{if} \quad |\mathbf{o}| = 32: &&\\
 \mathbf{o}[0..11] &=& 0 \\
 \mathbf{o}[12..31] &=& \mathtt{\tiny KEC}\big(\mathtt{\tiny ECDSARECOVER}(h, v, r, s)\big)[12..31] \quad \text{where:}\\
-\mathbf{d}[0..(|I_\mathrm{d}|-1)] &=& I_\mathrm{d}\\
-\mathbf{d}[|I_\mathrm{d}|..] &=& (0, 0, ...) \\
+\mathbf{d}[0..(|I_{\mathrm{d}}|-1)] &=& I_{\mathrm{d}}\\
+\mathbf{d}[|I_{\mathrm{d}}|..] &=& (0, 0, ...) \\
 h &=& \mathbf{d}[0..31]\\
 v &=& \mathbf{d}[32..63]\\
 r &=& \mathbf{d}[64..95]\\
@@ -1435,12 +1435,12 @@ \section{Precompiled Contracts}\label{app:precompiled}
 The two hash functions, RIPEMD-160 and SHA2-256 are more trivially defined as an almost pass-through operation. Their gas usage is dependent on the input data size, a factor rounded up to the nearest number of words.
 \begin{eqnarray}
 \Xi_{\mathtt{SHA256}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathrm{r} &=& 60 + 12\Big\lceil \dfrac{|I_\mathrm{d}|}{32} \Big\rceil\\
-\mathbf{o}[0..31] &=& \mathtt{\tiny SHA256}(I_\mathrm{d})\\
+\mathbf{g}_{\mathrm{r}} &=& 60 + 12\Big\lceil \dfrac{|I_{\mathrm{d}}|}{32} \Big\rceil\\
+\mathbf{o}[0..31] &=& \mathtt{\tiny SHA256}(I_{\mathrm{d}})\\
 \Xi_{\mathtt{RIP160}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathrm{r} &=& 600 + 120\Big\lceil \dfrac{|I_\mathrm{d}|}{32} \Big\rceil\\
+\mathbf{g}_{\mathrm{r}} &=& 600 + 120\Big\lceil \dfrac{|I_{\mathrm{d}}|}{32} \Big\rceil\\
 \mathbf{o}[0..11] &=& 0 \\
-\mathbf{o}[12..31] &=& \mathtt{\tiny RIPEMD160}(I_\mathrm{d})\\
+\mathbf{o}[12..31] &=& \mathtt{\tiny RIPEMD160}(I_{\mathrm{d}})\\
 \end{eqnarray}
 
 For the purposes here, we assume we have well-defined standard cryptographic functions for RIPEMD-160 and SHA2-256 of the form:
@@ -1452,8 +1452,8 @@ \section{Precompiled Contracts}\label{app:precompiled}
 Finally, the fourth contract, the identity function $\Xi_{\mathtt{ID}}$ simply defines the output as the input:
 \begin{eqnarray}
 \Xi_{\mathtt{ID}} &\equiv& \Xi_{\mathtt{PRE}} \quad \text{where:} \\
-\mathbf{g}_\mathrm{r} &=& 15 + 3\Big\lceil \dfrac{|I_\mathrm{d}|}{32} \Big\rceil\\
-\mathbf{o} &=& I_\mathrm{d}
+\mathbf{g}_{\mathrm{r}} &=& 15 + 3\Big\lceil \dfrac{|I_{\mathrm{d}}|}{32} \Big\rceil\\
+\mathbf{o} &=& I_{\mathrm{d}}
 \end{eqnarray}
 
 
@@ -1493,11 +1493,11 @@ \section{Signing Transactions}\label{app:signing}
 \end{equation}
 
 \hypertarget{h T}{
-The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_\mathrm{r}$, $T_\mathrm{s}$ and $\hyperlink{T w}{T_\mathrm{w}}$:
+The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_{\mathrm{r}}$, $T_{\mathrm{s}}$ and $\hyperlink{T w}{T_{\mathrm{w}}}$:
 \begin{eqnarray}
 L_S(T) & \equiv & \begin{cases}
-(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{i}) & \text{if} \; T_\mathrm{t} = 0\\
-(T_\mathrm{n}, T_\mathrm{p}, T_\mathrm{g}, T_\mathrm{t}, \hyperlink{T v}{T_\mathrm{v}}, T_\mathrm{d}) & \text{otherwise}
+(T_{\mathrm{n}}, T_{\mathrm{p}}, T_{\mathrm{g}}, T_{\mathrm{t}}, \hyperlink{T v}{T_{\mathrm{v}}}, T_{\mathrm{i}}) & \text{if} \; T_{\mathrm{t}} = 0\\
+(T_{\mathrm{n}}, T_{\mathrm{p}}, T_{\mathrm{g}}, T_{\mathrm{t}}, \hyperlink{T v}{T_{\mathrm{v}}}, T_{\mathrm{d}}) & \text{otherwise}
 \end{cases} \\
 h(T) & \equiv & \mathtt{\small KEC}( L_S(T) )}
 \end{eqnarray}
@@ -1505,12 +1505,12 @@ \section{Signing Transactions}\label{app:signing}
 \hyperlink{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as:
 \begin{eqnarray}
 G(T, p_r) \equiv T \quad \text{except:} \\
-(\hyperlink{T w}{T_\mathrm{w}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r)
+(\hyperlink{T w}{T_{\mathrm{w}}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r)
 \end{eqnarray}}
 
 We may then define the sender function $S$ of the transaction as:
 \begin{equation}
-S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_\mathrm{w}}, T_\mathrm{r}, T_\mathrm{s}) \big) \big)
+S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_{\mathrm{w}}}, T_{\mathrm{r}}, T_{\mathrm{s}}) \big) \big)
 \end{equation}
 
 The assertion that the sender of a signed transaction equals the address of the signer should be self-evident:
@@ -1578,17 +1578,17 @@ \subsection{Gas Cost}
 The general gas cost function, $C$, is defined as:
 
 \begin{equation}
-C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_\mathrm{i})-C_{mem}(\boldsymbol{\mu}_\mathrm{i}) + \begin{cases}
+C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_{\mathrm{i}})-C_{mem}(\boldsymbol{\mu}_{\mathrm{i}}) + \begin{cases}
 C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SSTORE} \\
-G_{\mathrm{exp}} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathrm{s}[1] = 0 \\
-G_{\mathrm{exp}} + G_{\mathrm{expbyte}}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_\mathrm{s}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_\mathrm{s}[1] > 0 \\
-G_{\mathrm{verylow}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathrm{s}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\
-G_{\mathrm{extcode}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_\mathrm{s}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1] & \text{if} \quad w = \text{\small LOG0} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG1} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+2G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG2} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+3G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG3} \\
-G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_\mathrm{s}[1]+4G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG4} \\
+G_{\mathrm{exp}} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_{\mathrm{s}}[1] = 0 \\
+G_{\mathrm{exp}} + G_{\mathrm{expbyte}}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_{\mathrm{s}}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_{\mathrm{s}}[1] > 0 \\
+G_{\mathrm{verylow}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_{\mathrm{s}}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\
+G_{\mathrm{extcode}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_{\mathrm{s}}[3] \div 32\rceil & \text{if} \quad w = \text{\small EXTCODECOPY} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_{\mathrm{s}}[1] & \text{if} \quad w = \text{\small LOG0} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_{\mathrm{s}}[1]+G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG1} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_{\mathrm{s}}[1]+2G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG2} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_{\mathrm{s}}[1]+3G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG3} \\
+G_{\mathrm{log}}+G_{\mathrm{logdata}}\times\boldsymbol{\mu}_{\mathrm{s}}[1]+4G_{\mathrm{logtopic}} & \text{if} \quad w = \text{\small LOG4} \\
 C_\text{\tiny CALL}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small CALL} \lor \text{\small CALLCODE} \lor \text{\small DELEGATECALL} \\
 \hyperlink{C tiny SELFDESTRUCT}{C_\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{selfdestruct}{\small SELFDESTRUCT}} \\
 G_{\mathrm{create}} & \text{if} \quad w = \text{\small CREATE}\\
@@ -1607,7 +1607,7 @@ \subsection{Gas Cost}
 \end{cases}
 \end{equation}
 \begin{equation}
-w \equiv \begin{cases} I_\mathrm{b}[\boldsymbol{\mu}_{pc}] & \text{if} \quad \boldsymbol{\mu}_{pc} < \lVert I_\mathrm{b} \rVert\\
+w \equiv \begin{cases} I_{\mathrm{b}}[\boldsymbol{\mu}_{\mathrm{pc}}] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{pc}} < \lVert I_{\mathrm{b}} \rVert\\
 \text{\small STOP} & \text{otherwise}
 \end{cases}
 \end{equation}
@@ -1633,9 +1633,9 @@ \subsection{Gas Cost}
 
 $W_{\mathrm{extcode}}$ = \{{\small EXTCODESIZE}\}
 
-Note the memory cost component, given as the product of $G_{\mathrm{memory}}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_\mathrm{i}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes.
+Note the memory cost component, given as the product of $G_{\mathrm{memory}}$ and the maximum of 0 \& the ceiling of the number of words in size that the memory must be over the current number of words, $\boldsymbol{\mu}_{\mathrm{i}}$ in order that all accesses reference valid memory whether for read or write. Such accesses must be for non-zero number of bytes.
 
-Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_\mathrm{i}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal.
+Referencing a zero length range (e.g. by attempting to pass it as the input range to a CALL) does not require memory to be extended to the beginning of the range. $\boldsymbol{\mu}'_{\mathrm{i}}$ is defined as this new maximum number of words of active memory; special-cases are given where these two are not equal.
 
 Note also that $C_{mem}$ is the memory cost function (the expansion function being the difference between the cost before and after). It is a polynomial, with the higher-order coefficient divided and floored, and thus linear up to 724B of memory used, after which it costs substantially more.
 
@@ -1673,43 +1673,43 @@ \subsection{Instruction Set}
 \\
 \midrule
 0x01 & {\small ADD} & 2 & 1 & This is the addition operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0] + \boldsymbol{\mu}_{\mathrm{s}}[1]$ \\
 \midrule
 0x02 & {\small MUL} & 2 & 1 & This is the multiplication operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] \times \boldsymbol{\mu}_\mathrm{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0] \times \boldsymbol{\mu}_{\mathrm{s}}[1]$ \\
 \midrule
 0x03 & {\small SUB} & 2 & 1 & This is the subtraction operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] - \boldsymbol{\mu}_\mathrm{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0] - \boldsymbol{\mu}_{\mathrm{s}}[1]$ \\
 \midrule
 0x04 & {\small DIV} & 2 & 1 & This is the integer division operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ \lfloor\boldsymbol{\mu}_\mathrm{s}[0] \div \boldsymbol{\mu}_\mathrm{s}[1]\rfloor & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] = 0\\ \lfloor\boldsymbol{\mu}_{\mathrm{s}}[0] \div \boldsymbol{\mu}_{\mathrm{s}}[1]\rfloor & \text{otherwise}\end{cases}$  \\
 \midrule
 0x05 & {\small SDIV} & 2 & 1 & This is the signed integer division operation (truncated). \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ -2^{255} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] = -2^{255} \wedge \quad \boldsymbol{\mu}_\mathrm{s}[1] = -1\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathrm{s}[0] \div \boldsymbol{\mu}_\mathrm{s}[1]) \lfloor |\boldsymbol{\mu}_\mathrm{s}[0] \div \boldsymbol{\mu}_\mathrm{s}[1]| \rfloor & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] = 0\\ -2^{255} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] = -2^{255} \wedge \quad \boldsymbol{\mu}_{\mathrm{s}}[1] = -1\\ \mathbf{sgn} (\boldsymbol{\mu}_{\mathrm{s}}[0] \div \boldsymbol{\mu}_{\mathrm{s}}[1]) \lfloor |\boldsymbol{\mu}_{\mathrm{s}}[0] \div \boldsymbol{\mu}_{\mathrm{s}}[1]| \rfloor & \text{otherwise}\end{cases}$  \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 &&&& Note the overflow semantic when $-2^{255}$ is negated.\\
 \midrule
 0x06 & {\small MOD} & 2 & 1 & This is the modulo remainder operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ \boldsymbol{\mu}_\mathrm{s}[0] \bmod \boldsymbol{\mu}_\mathrm{s}[1] & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] = 0\\ \boldsymbol{\mu}_{\mathrm{s}}[0] \bmod \boldsymbol{\mu}_{\mathrm{s}}[1] & \text{otherwise}\end{cases}$  \\
 \midrule
 0x07 & {\small SMOD} & 2 & 1 & This is the signed modulo remainder operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0\\ \mathbf{sgn} (\boldsymbol{\mu}_\mathrm{s}[0]) (|\boldsymbol{\mu}_\mathrm{s}[0]| \bmod |\boldsymbol{\mu}_\mathrm{s}[1]|) & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] = 0\\ \mathbf{sgn} (\boldsymbol{\mu}_{\mathrm{s}}[0]) (|\boldsymbol{\mu}_{\mathrm{s}}[0]| \bmod |\boldsymbol{\mu}_{\mathrm{s}}[1]|) & \text{otherwise}\end{cases}$  \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 \midrule
 0x08 & {\small ADDMOD} & 3 & 1 & This is the modulo addition operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] = 0\\ (\boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1]) \mod \boldsymbol{\mu}_\mathrm{s}[2] & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] = 0\\ (\boldsymbol{\mu}_{\mathrm{s}}[0] + \boldsymbol{\mu}_{\mathrm{s}}[1]) \mod \boldsymbol{\mu}_{\mathrm{s}}[2] & \text{otherwise}\end{cases}$  \\
 &&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\
 \midrule
 0x09 & {\small MULMOD} & 3 & 1 & This is the modulo multiplication operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] = 0\\ (\boldsymbol{\mu}_\mathrm{s}[0] \times \boldsymbol{\mu}_\mathrm{s}[1]) \mod \boldsymbol{\mu}_\mathrm{s}[2] & \text{otherwise}\end{cases}$  \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases}0 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] = 0\\ (\boldsymbol{\mu}_{\mathrm{s}}[0] \times \boldsymbol{\mu}_{\mathrm{s}}[1]) \mod \boldsymbol{\mu}_{\mathrm{s}}[2] & \text{otherwise}\end{cases}$  \\
 &&&& All intermediate calculations of this operation are not subject to the $2^{256}$ modulo. \\
 \midrule
 0x0a & {\small EXP} & 2 & 1 & This is the exponential operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0] ^ {\boldsymbol{\mu}_\mathrm{s}[1] }$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0] ^ {\boldsymbol{\mu}_{\mathrm{s}}[1] }$ \\
 \midrule
 0x0b & {\small SIGNEXTEND} & 2 & 1 & Extend the length of a two's complement signed integer. \\
-&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{t} &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_\mathrm{s}[0] + 1) \\ \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i} &\text{otherwise} \end{cases}$ \\
-\multicolumn{5}{l}{$\boldsymbol{\mu}_\mathrm{s}[x]_\mathrm{i}$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_\mathrm{s}[x]$} \vspace{5pt} \\
+&&&& $ \forall i \in [0..255]: \boldsymbol{\mu}'_{\mathrm{s}}[0]_{\mathrm{i}} \equiv \begin{cases} \boldsymbol{\mu}_{\mathrm{s}}[1]_{\mathrm{t}} &\text{if} \quad i \leqslant t \quad \text{where} \; t = 256 - 8(\boldsymbol{\mu}_{\mathrm{s}}[0] + 1) \\ \boldsymbol{\mu}_{\mathrm{s}}[1]_{\mathrm{i}} &\text{otherwise} \end{cases}$ \\
+\multicolumn{5}{l}{$\boldsymbol{\mu}_{\mathrm{s}}[x]_{\mathrm{i}}$ gives the $i$th bit (counting from zero) of $\boldsymbol{\mu}_{\mathrm{s}}[x]$} \vspace{5pt} \\
 \end{tabularx}
 
 \begin{tabularx}{\textwidth}{rlrrX}
@@ -1717,39 +1717,39 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{10s: Comparison \& Bitwise Logic Operations}} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x10 & {\small LT} & 2 & 1 & This is the less-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] < \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] < \boldsymbol{\mu}_{\mathrm{s}}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x11 & {\small GT} & 2 & 1 & This is the greater-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] > \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] > \boldsymbol{\mu}_{\mathrm{s}}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x12 & {\small SLT} & 2 & 1 & This is the signed less-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] < \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] < \boldsymbol{\mu}_{\mathrm{s}}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 \midrule
 0x13 & {\small SGT} & 2 & 1 & This is the signed greater-than comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] > \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] > \boldsymbol{\mu}_{\mathrm{s}}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 &&&& Where all values are treated as two's complement signed 256-bit integers. \\
 \midrule
 0x14 & {\small EQ} & 2 & 1 & This is the equality comparison. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] = \boldsymbol{\mu}_\mathrm{s}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] = \boldsymbol{\mu}_{\mathrm{s}}[1] \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x15 & {\small ISZERO} & 1 & 1 & This is the logical negation operation, also called the logical complement or the NOT operation. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x16 & {\small AND} & 2 & 1 & This is the bitwise AND operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} \wedge \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_{\mathrm{s}}[0]_{\mathrm{i}} \equiv \boldsymbol{\mu}_{\mathrm{s}}[0]_{\mathrm{i}} \wedge \boldsymbol{\mu}_{\mathrm{s}}[1]_{\mathrm{i}}$ \\
 \midrule
 0x17 & {\small OR} & 2 & 1 & This is the bitwise OR operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} \vee \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_{\mathrm{s}}[0]_{\mathrm{i}} \equiv \boldsymbol{\mu}_{\mathrm{s}}[0]_{\mathrm{i}} \vee \boldsymbol{\mu}_{\mathrm{s}}[1]_{\mathrm{i}}$ \\
 \midrule
 0x18 & {\small XOR} & 2 & 1 & This is the bitwise XOR operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} \oplus \boldsymbol{\mu}_\mathrm{s}[1]_\mathrm{i}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_{\mathrm{s}}[0]_{\mathrm{i}} \equiv \boldsymbol{\mu}_{\mathrm{s}}[0]_{\mathrm{i}} \oplus \boldsymbol{\mu}_{\mathrm{s}}[1]_{\mathrm{i}}$ \\
 \midrule
 0x19 & {\small NOT} & 1 & 1 & This is the bitwise NOT operation. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0]_\mathrm{i} = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_{\mathrm{s}}[0]_{\mathrm{i}} \equiv \begin{cases} 1 & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0]_{\mathrm{i}} = 0 \\ 0 & \text{otherwise} \end{cases}$ \\
 \midrule
 0x1a & {\small BYTE} & 2 & 1 & Retrieve a single byte from a word. \\
-&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_\mathrm{s}[0]_\mathrm{i} \equiv \begin{cases} \boldsymbol{\mu}_\mathrm{s}[1]_{(i + 8\boldsymbol{\mu}_\mathrm{s}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_\mathrm{s}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\
+&&&& $\forall i \in [0..255]: \boldsymbol{\mu}'_{\mathrm{s}}[0]_{\mathrm{i}} \equiv \begin{cases} \boldsymbol{\mu}_{\mathrm{s}}[1]_{(i + 8\boldsymbol{\mu}_{\mathrm{s}}[0])} & \text{if} \quad i < 8 \wedge \boldsymbol{\mu}_{\mathrm{s}}[0] < 32 \\ 0 & \text{otherwise} \end{cases} $\\
 &&&& For the Nth byte, we count from the left (i.e. $N=0$ would be the most significant in big endian). \\
 \bottomrule
 \end{tabularx}
@@ -1759,8 +1759,8 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{20s: SHA3}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x20 & {\small SHA3} & 2 & 1 & Compute a Keccak-256 hash. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1] - 1) ])$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[1])$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \mathtt{\tiny Keccak}(\boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] \dots (\boldsymbol{\mu}_{\mathrm{s}}[0] + \boldsymbol{\mu}_{\mathrm{s}}[1] - 1) ])$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[1])$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1769,59 +1769,59 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{30s: Environmental Information}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x30 & {\small ADDRESS} & 0 & 1 & Get the address of the currently executing account. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{a}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv I_{\mathrm{a}}$ \\
 \midrule
 0x31 & {\small BALANCE} & 1 & 1 & Get the balance of the given account. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0]]_\mathrm{b}& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \begin{cases}\boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0]]_{\mathrm{b}}& \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}] \neq \varnothing\\0&\text{otherwise}\end{cases}$ \\
 \midrule
 0x32 & {\small ORIGIN} & 0 & 1 & Get the address that the execution originated from. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{o}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv I_{\mathrm{o}}$ \\
 &&&& This is the sender of the original transaction; it is never an account with non-empty associated code. \\
 \midrule
 0x33 & {\small CALLER} & 0 & 1 & Get the caller address. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{s}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv I_{\mathrm{s}}$ \\
 &&&& This is the address of the account that is directly responsible for this execution. \\
 \midrule
 0x34 & {\small CALLVALUE} & 0 & 1 & Get the deposited value by the instruction/transaction responsible for this execution. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \hyperlink{I v}{I_\mathrm{v}}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \hyperlink{I v}{I_{\mathrm{v}}}$ \\
 \midrule
 0x35 & {\small CALLDATALOAD} & 1 & 1 & Get the input data of the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{d}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + 31) ] \quad \text{with} \quad I_\mathrm{d}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_\mathrm{d} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv I_{\mathrm{d}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] \dots (\boldsymbol{\mu}_{\mathrm{s}}[0] + 31) ] \quad \text{with} \quad I_{\mathrm{d}}[x] = 0 \quad \text{if} \quad x \geqslant \lVert I_{\mathrm{d}} \rVert$ \\
 &&&& This pertains to the input data passed with the message call instruction or transaction. \\
 \midrule
 0x36 & {\small CALLDATASIZE} & 0 & 1 & Get the size of the input data in the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \lVert I_\mathrm{d} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \lVert I_{\mathrm{d}} \rVert$ \\
 &&&& This pertains to the input data passed with the message call instruction or transaction. \\
 \midrule
 0x37 & {\small CALLDATACOPY} & 3 & 0 & Copy the input data in the current environment to memory. \\
-&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathrm{s}[2] - 1\} } \boldsymbol{\mu}'_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[0] + i ] \equiv
-\begin{cases} I_\mathrm{d}[\boldsymbol{\mu}_\mathrm{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] + i < \lVert I_\mathrm{d} \rVert \\ 0 & \text{otherwise} \end{cases}$\\
-&&&& The additions in $\boldsymbol{\mu}_\mathrm{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[2])$ \\
+&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_{\mathrm{s}}[2] - 1\} } \boldsymbol{\mu}'_{\mathrm{m}}[\boldsymbol{\mu}_{\mathrm{s}}[0] + i ] \equiv
+\begin{cases} I_{\mathrm{d}}[\boldsymbol{\mu}_{\mathrm{s}}[1] + i] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] + i < \lVert I_{\mathrm{d}} \rVert \\ 0 & \text{otherwise} \end{cases}$\\
+&&&& The additions in $\boldsymbol{\mu}_{\mathrm{s}}[1] + i$ are not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[2])$ \\
 &&&& This pertains to the input data passed with the message call instruction or transaction. \\
 \midrule
 0x38 & {\small CODESIZE} & 0 & 1 & Get the size of code running in the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \lVert I_\mathrm{b} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \lVert I_{\mathrm{b}} \rVert$ \\
 \midrule
 0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in the current environment to memory. \\
-&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathrm{s}[2] - 1\} } \boldsymbol{\mu}'_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[0] + i ] \equiv
-\begin{cases} I_\mathrm{b}[\boldsymbol{\mu}_\mathrm{s}[1] + i] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] + i < \lVert I_\mathrm{b} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[2])$ \\
-&&&& The additions in $\boldsymbol{\mu}_\mathrm{s}[1] + i$ are not subject to the $2^{256}$ modulo. \\
+&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_{\mathrm{s}}[2] - 1\} } \boldsymbol{\mu}'_{\mathrm{m}}[\boldsymbol{\mu}_{\mathrm{s}}[0] + i ] \equiv
+\begin{cases} I_{\mathrm{b}}[\boldsymbol{\mu}_{\mathrm{s}}[1] + i] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] + i < \lVert I_{\mathrm{b}} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[2])$ \\
+&&&& The additions in $\boldsymbol{\mu}_{\mathrm{s}}[1] + i$ are not subject to the $2^{256}$ modulo. \\
 \midrule
 0x3a & {\small GASPRICE} & 0 & 1 & Get the price of gas in the current environment. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv I_\mathrm{p}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv I_{\mathrm{p}}$ \\
 &&&& This is the gas price specified by the originating transaction.\\
 \midrule
 0x3b & {\small EXTCODESIZE} & 1 & 1 & Get the size of an account's code. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{c} \rVert$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \lVert \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}]_{\mathrm{c}} \rVert$ \\
 \midrule
 0x3c & {\small EXTCODECOPY} & 4 & 0 & Copy an account's code to memory. \\
-&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_\mathrm{s}[3] - 1\} } \boldsymbol{\mu}'_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[1] + i ] \equiv
-\begin{cases} \mathbf{c}[\boldsymbol{\mu}_\mathrm{s}[2] + i] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
-&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{c}$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[1], \boldsymbol{\mu}_\mathrm{s}[3])$ \\
-&&&& The additions in $\boldsymbol{\mu}_\mathrm{s}[2] + i$ are not subject to the $2^{256}$ modulo. \\
+&&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_{\mathrm{s}}[3] - 1\} } \boldsymbol{\mu}'_{\mathrm{m}}[\boldsymbol{\mu}_{\mathrm{s}}[1] + i ] \equiv
+\begin{cases} \mathbf{c}[\boldsymbol{\mu}_{\mathrm{s}}[2] + i] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
+&&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}]_{\mathrm{c}}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[1], \boldsymbol{\mu}_{\mathrm{s}}[3])$ \\
+&&&& The additions in $\boldsymbol{\mu}_{\mathrm{s}}[2] + i$ are not subject to the $2^{256}$ modulo. \\
 \bottomrule
 \end{tabularx}
 
@@ -1830,25 +1830,25 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{40s: Block Information}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x40 & {\small BLOCKHASH} & 1 & 1 & Get the hash of one of the 256 most recent complete blocks. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv P(I_{\hyperlink{H p}{H_\mathrm{p}}}, \boldsymbol{\mu}_\mathrm{s}[0], 0)$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv P(I_{\hyperlink{H p}{H_{\mathrm{p}}}}, \boldsymbol{\mu}_{\mathrm{s}}[0], 0)$ \\
 &&&& where $P$ is the hash of a block of a particular number, up to a maximum age. 0 is left on the stack if the looked for block number is greater than the current block number or more than 256 blocks behind the current block. \\
-&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > \hyperlink{H i}{H_\mathrm{i}} \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = \hyperlink{H i}{H_\mathrm{i}} \\ P(\hyperlink{H p}{H_\mathrm{p}}, n, a + 1) & \text{otherwise} \end{cases}$ \\
+&&&& $P(h, n, a) \equiv \begin{cases} 0 & \text{if} \quad n > \hyperlink{H i}{H_{\mathrm{i}}} \vee a = 256 \vee h = 0 \\ h & \text{if} \quad n = \hyperlink{H i}{H_{\mathrm{i}}} \\ P(\hyperlink{H p}{H_{\mathrm{p}}}, n, a + 1) & \text{otherwise} \end{cases}$ \\
 &&&& and we assert that the reason why the header $H$ can be determined is because its hash is the parent hash in the block following it. \\
 \midrule
 0x41 & {\small COINBASE} & 0 & 1 & Get the block's beneficiary address. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{c}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv {I_H}_{\mathrm{c}}$ \\
 \midrule
 0x42 & {\small TIMESTAMP} & 0 & 1 & Get the block's timestamp. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{s}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv {I_H}_{\mathrm{s}}$ \\
 \midrule
 0x43 & {\small NUMBER} & 0 & 1 & Get the block's number. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{i}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv {I_H}_{\mathrm{i}}$ \\
 \midrule
 0x44 & {\small DIFFICULTY} & 0 & 1 & Get the block's difficulty. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{d}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv {I_H}_{\mathrm{d}}$ \\
 \midrule
 0x45 & {\small GASLIMIT} & 0 & 1 & Get the block's gas limit. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv {I_H}_\mathrm{l}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv {I_H}_{\mathrm{l}}$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1859,50 +1859,50 @@ \subsection{Instruction Set}
 0x50 & {\small POP} & 1 & 0 & Remove the top, first item from the stack. \\
 \midrule
 0x51 & {\small MLOAD} & 1 & 1 & Load the first word from memory. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{m}[\boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + 31) ]$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv \max(\boldsymbol{\mu}_\mathrm{i}, \ceil{ (\boldsymbol{\mu}_\mathrm{s}[0] + 32) \div 32 })$ \\
-&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathrm{i}$ is not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{m}}[\boldsymbol{\mu}_{\mathrm{s}}[0] \dots (\boldsymbol{\mu}_{\mathrm{s}}[0] + 31) ]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv \max(\boldsymbol{\mu}_{\mathrm{i}}, \ceil{ (\boldsymbol{\mu}_{\mathrm{s}}[0] + 32) \div 32 })$ \\
+&&&& The addition in the calculation of $\boldsymbol{\mu}'_{\mathrm{i}}$ is not subject to the $2^{256}$ modulo. \\
 \midrule
 0x52 & {\small MSTORE} & 2 & 0 & Save the first word (which is the first item in the stack) to memory. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + 31) ] \equiv \boldsymbol{\mu}_\mathrm{s}[1]$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv \max(\boldsymbol{\mu}_\mathrm{i}, \ceil{ (\boldsymbol{\mu}_\mathrm{s}[0] + 32) \div 32 })$ \\
-&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathrm{i}$ is not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] \dots (\boldsymbol{\mu}_{\mathrm{s}}[0] + 31) ] \equiv \boldsymbol{\mu}_{\mathrm{s}}[1]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv \max(\boldsymbol{\mu}_{\mathrm{i}}, \ceil{ (\boldsymbol{\mu}_{\mathrm{s}}[0] + 32) \div 32 })$ \\
+&&&& The addition in the calculation of $\boldsymbol{\mu}'_{\mathrm{i}}$ is not subject to the $2^{256}$ modulo. \\
 \midrule
 0x53 & {\small MSTORE8} & 2 & 0 & Save the first byte to memory. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] ] \equiv (\boldsymbol{\mu}_\mathrm{s}[1] \bmod 256) $ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv \max(\boldsymbol{\mu}_\mathrm{i}, \ceil{ (\boldsymbol{\mu}_\mathrm{s}[0] + 1) \div 32 })$ \\
-&&&& The addition in the calculation of $\boldsymbol{\mu}'_\mathrm{i}$ is not subject to the $2^{256}$ modulo. \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] ] \equiv (\boldsymbol{\mu}_{\mathrm{s}}[1] \bmod 256) $ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv \max(\boldsymbol{\mu}_{\mathrm{i}}, \ceil{ (\boldsymbol{\mu}_{\mathrm{s}}[0] + 1) \div 32 })$ \\
+&&&& The addition in the calculation of $\boldsymbol{\mu}'_{\mathrm{i}}$ is not subject to the $2^{256}$ modulo. \\
 \midrule
 0x54 & {\small SLOAD} & 1 & 1 & Load the first word from storage. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{s}[\boldsymbol{\mu}_\mathrm{s}[0]]$ \hypertarget{SSTORE}{\\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{s}}[\boldsymbol{\mu}_{\mathrm{s}}[0]]$ \hypertarget{SSTORE}{\\
 \midrule
 0x55 & {\small SSTORE} & 2 & 0 & Save the first word to storage. \\
-&&&& $\boldsymbol{\sigma}'[I_\mathrm{a}]_\mathrm{s}[ \boldsymbol{\mu}_\mathrm{s}[0] ] \equiv \boldsymbol{\mu}_\mathrm{s}[1] $ \hypertarget{C tiny SSTORE}{\\
+&&&& $\boldsymbol{\sigma}'[I_{\mathrm{a}}]_{\mathrm{s}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] ] \equiv \boldsymbol{\mu}_{\mathrm{s}}[1] $ \hypertarget{C tiny SSTORE}{\\
 &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases}
-G_{\mathrm{sset}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{s}[\boldsymbol{\mu}_\mathrm{s}[0]] = 0 \\
+G_{\mathrm{sset}} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{s}}[\boldsymbol{\mu}_{\mathrm{s}}[0]] = 0 \\
 G_{\mathrm{sreset}} & \text{otherwise}
 \end{cases}$ }\\
 &&&& $A'_{r} \equiv A_{r} + \begin{cases}
-R_{\mathrm{sclear}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{s}[\boldsymbol{\mu}_\mathrm{s}[0]] \neq 0 \\
+R_{\mathrm{sclear}} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{s}}[\boldsymbol{\mu}_{\mathrm{s}}[0]] \neq 0 \\
 0 & \text{otherwise}
 \end{cases}$ }\\
 \midrule
 0x56 & {\small JUMP} & 1 & 0 & Alter the program counter. \\
-&&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathrm{s}[0] $ \\
-&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See equation \hyperlink{JUMP}{\ref{eq:JUMP}}. \\
+&&&& $J_{\text{\tiny JUMP}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_{\mathrm{s}}[0] $ \\
+&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{\mathrm{pc}}$. See equation \hyperlink{JUMP}{\ref{eq:JUMP}}. \\
 \midrule
 0x57 & {\small JUMPI} & 2 & 0 & Conditionally alter the program counter. \\
-&&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_\mathrm{s}[0] & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[1] \neq 0 \\ \boldsymbol{\mu}_{pc} + 1 & \text{otherwise} \end{cases} $ \\
-&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{pc}$. See section \hyperlink{JUMPI}{\ref{eq:JUMP}}. \\
+&&&& $J_{\text{\tiny JUMPI}}(\boldsymbol{\mu}) \equiv \begin{cases} \boldsymbol{\mu}_{\mathrm{s}}[0] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] \neq 0 \\ \boldsymbol{\mu}_{\mathrm{pc}} + 1 & \text{otherwise} \end{cases} $ \\
+&&&& This has the effect of writing said value to $\boldsymbol{\mu}_{\mathrm{pc}}$. See section \hyperlink{JUMPI}{\ref{eq:JUMP}}. \\
 \midrule
 0x58 & {\small PC} & 0 & 1 & Get the value of the program counter \textit{prior} to the increment corresponding to this instruction. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_{pc}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{pc}}$ \\
 \midrule
 0x59 & {\small MSIZE} & 0 & 1 & Get the size of active memory in bytes. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv 32\boldsymbol{\mu}_{i}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv 32\boldsymbol{\mu}_{\mathrm{i}}$ \\
 \midrule
 0x5a & {\small GAS} & 0 & 1 & Get the amount of available gas, including the corresponding reduction for the cost of this instruction. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_{g}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{g}}$ \\
 \midrule
 0x5b & {\small JUMPDEST} & 0 & 0 & Mark a valid destination for jumps. \\
 &&&& This operation has no effect on the machine state during execution. \\
@@ -1914,21 +1914,21 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{60s \& 70s: Push Operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x60 & {\small PUSH1} & 0 & 1 & Place a 1 byte item on the stack. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv c(\boldsymbol{\mu}_{pc} + 1)$ \\
-&&&& $\text{where} \quad c(x) \equiv \begin{cases} I_\mathrm{b}[x] & \text{if} \quad x < \lVert I_\mathrm{b} \rVert \\ 0 & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv c(\boldsymbol{\mu}_{\mathrm{pc}} + 1)$ \\
+&&&& $\text{where} \quad c(x) \equiv \begin{cases} I_{\mathrm{b}}[x] & \text{if} \quad x < \lVert I_{\mathrm{b}} \rVert \\ 0 & \text{otherwise} \end{cases}$ \\
 &&&& The bytes are read in line from the program code's bytes array. \\
 &&&& The function $c$ ensures the bytes default to zero if they extend past the limits.\\
 &&&& The byte is right-aligned (\ie it takes the lowest significant place and the last, highest address, which is the big-endian interpretation). \\
 \midrule
 0x61 & {\small PUSH2} & 0 & 1 & Place a 2-byte item on the stack. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{c}\big( (\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 2) \big)$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{c}\big( (\boldsymbol{\mu}_{\mathrm{pc}} + 1) \dots (\boldsymbol{\mu}_{\mathrm{pc}} + 2) \big)$ \\
 &&&& with $\boldsymbol{c}(\boldsymbol{x}) \equiv (c(\boldsymbol{x}_0), ..., c(\boldsymbol{x}_{\lVert x \rVert -1})) $ with $c$ as defined as above. \\
 &&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0x7f & {\small PUSH32} & 0 & 1 & Place 32-byte (full word) item on stack. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{c}\big((\boldsymbol{\mu}_{pc} + 1) \dots (\boldsymbol{\mu}_{pc} + 32) \big)$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{c}\big((\boldsymbol{\mu}_{\mathrm{pc}} + 1) \dots (\boldsymbol{\mu}_{\mathrm{pc}} + 32) \big)$ \\
 &&&& where $\boldsymbol{c}$ is defined as above. \\
 &&&& Similarly, the bytes are right-aligned (\ie they take the lowest significant place and the last, highest address, which is the big-endian interpretation). \\
 \bottomrule
@@ -1939,15 +1939,15 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{80s: Duplication Operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x80 & {\small DUP1} & 1 & 2 & Duplicate the 1st stack item. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0]$ \\
 \midrule
 0x81 & {\small DUP2} & 2 & 3 & Duplicate the 2nd stack item. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[1]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[1]$ \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0x8f & {\small DUP16} & 16 & 17 & Duplicate the 16th stack item. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[15]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[15]$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1956,18 +1956,18 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{90s: Exchange Operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0x90 & {\small SWAP1} & 2 & 2 & Exchange the 1st and the 2nd stack items. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[1]$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[1] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[1]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[1] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0]$ \\
 \midrule
 0x91 & {\small SWAP2} & 3 & 3 & Exchange the 1st and the 3rd stack items. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[2]$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[2] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[2]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[2] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0]$ \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0x9f & {\small SWAP16} & 17 & 17 & Exchange the 1st and the 17th stack items. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv \boldsymbol{\mu}_\mathrm{s}[16]$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[16] \equiv \boldsymbol{\mu}_\mathrm{s}[0]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv \boldsymbol{\mu}_{\mathrm{s}}[16]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[16] \equiv \boldsymbol{\mu}_{\mathrm{s}}[0]$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1975,21 +1975,21 @@ \subsection{Instruction Set}
 \toprule
 \multicolumn{5}{c}{\textbf{a0s: Logging Operations}} \vspace{5pt} \\
 \multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\\
-\multicolumn{5}{l}{$A'_\mathrm{l} \equiv A_\mathrm{l} \cdot (I_\mathrm{a}, \mathbf{t}, \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots (\boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1] - 1) ])$}\\
+\multicolumn{5}{l}{$A'_{\mathrm{l}} \equiv A_{\mathrm{l}} \cdot (I_{\mathrm{a}}, \mathbf{t}, \boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] \dots (\boldsymbol{\mu}_{\mathrm{s}}[0] + \boldsymbol{\mu}_{\mathrm{s}}[1] - 1) ])$}\\
 \multicolumn{5}{l}{and to update the memory consumption counter:}\\
-\multicolumn{5}{l}{$\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[1])$}\\
+\multicolumn{5}{l}{$\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[1])$}\\
 \multicolumn{5}{l}{The entry's topic series, $\mathbf{t}$, differs accordingly:}\vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0xa0 & {\small LOG0} & 2 & 0 & Append the log record with no topics. \\
 &&&& $\mathbf{t} \equiv ()$ \\
 \midrule
 0xa1 & {\small LOG1} & 3 & 0 & Append the log record with one topic. \\
-&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathrm{s}[2])$ \\
+&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_{\mathrm{s}}[2])$ \\
 \midrule
 \multicolumn{1}{c}{\vdots} & \multicolumn{1}{c}{\vdots} & \vdots & \vdots & \multicolumn{1}{c}{\vdots} \\
 \midrule
 0xa4 & {\small LOG4} & 6 & 0 & Append the log record with four topics. \\
-&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_\mathrm{s}[2], \boldsymbol{\mu}_\mathrm{s}[3], \boldsymbol{\mu}_\mathrm{s}[4], \boldsymbol{\mu}_\mathrm{s}[5])$ \\
+&&&& $\mathbf{t} \equiv (\boldsymbol{\mu}_{\mathrm{s}}[2], \boldsymbol{\mu}_{\mathrm{s}}[3], \boldsymbol{\mu}_{\mathrm{s}}[4], \boldsymbol{\mu}_{\mathrm{s}}[5])$ \\
 \bottomrule
 \end{tabularx}
 
@@ -1998,84 +1998,84 @@ \subsection{Instruction Set}
 \multicolumn{5}{c}{\textbf{f0s: System operations}} \vspace{5pt} \\
 \textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
 0xf0 & {\small CREATE} & 3 & 1 & Create a new account with associated code. \\
-&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[1] \dots (\boldsymbol{\mu}_\mathrm{s}[1] + \boldsymbol{\mu}_\mathrm{s}[2] - 1) ]$ \\
-&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_\mathrm{g}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_\mathrm{a}, I_\mathrm{o}, L(\boldsymbol{\mu}_\mathrm{g}), I_\mathrm{p}, \boldsymbol{\mu}_\mathrm{s}[0], \mathbf{i}, I_\mathrm{e} + 1) & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[0] \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge\; I_\mathrm{e} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_\mathrm{g}, \varnothing\big) & \text{otherwise} \end{cases}$ \\
-&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_\mathrm{a}]_\mathrm{n} = \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{n} + 1$ \\
-&&&& $A' \equiv A \Cup A^+$ which implies: $A'_\mathrm{s} \equiv A_\mathrm{s} \cup A^+_\mathrm{s} \quad \wedge \quad A'_\mathrm{l} \equiv A_\mathrm{l} \cdot A^+_\mathrm{l} \quad \wedge \quad A'_\mathrm{r} \equiv A_\mathrm{r} + A^+_\mathrm{r}$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv x$ \\
+&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[1] \dots (\boldsymbol{\mu}_{\mathrm{s}}[1] + \boldsymbol{\mu}_{\mathrm{s}}[2] - 1) ]$ \\
+&&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_{\mathrm{g}}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_{\mathrm{a}}, I_{\mathrm{o}}, L(\boldsymbol{\mu}_{\mathrm{g}}), I_{\mathrm{p}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \mathbf{i}, I_{\mathrm{e}} + 1) & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] \leqslant \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}} \;\wedge\; I_{\mathrm{e}} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_{\mathrm{g}}, \varnothing\big) & \text{otherwise} \end{cases}$ \\
+&&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_{\mathrm{a}}]_{\mathrm{n}} = \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{n}} + 1$ \\
+&&&& $A' \equiv A \Cup A^+$ which implies: $A'_{\mathrm{s}} \equiv A_{\mathrm{s}} \cup A^+_{\mathrm{s}} \quad \wedge \quad A'_{\mathrm{l}} \equiv A_{\mathrm{l}} \cdot A^+_{\mathrm{l}} \quad \wedge \quad A'_{\mathrm{r}} \equiv A_{\mathrm{r}} + A^+_{\mathrm{r}}$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv x$ \\
 &&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\
-&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_\mathrm{e} = 1024$ \\
-&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_\mathrm{s}[0] > \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_\mathrm{a}, \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{n})$, the address of the  \\
+&&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_{\mathrm{e}} = 1024$ \\
+&&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_{\mathrm{s}}[0] > \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_{\mathrm{a}}, \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{n}})$, the address of the  \\
 &&&& newly created account. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[1], \boldsymbol{\mu}_\mathrm{s}[2])$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[1], \boldsymbol{\mu}_{\mathrm{s}}[2])$ \\
 &&&& Thus the operand order is: value, input offset, input size. \\
 \midrule
 0xf1 & {\small CALL} & 7 & 1 & Message-call into an account. \\
-&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[3] \dots (\boldsymbol{\mu}_\mathrm{s}[3] + \boldsymbol{\mu}_\mathrm{s}[4] - 1) ]$ \\
-&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_\mathrm{a}, I_\mathrm{o}, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathrm{p}, \boldsymbol{\mu}_\mathrm{s}[2], \boldsymbol{\mu}_\mathrm{s}[2], \mathbf{i}, I_\mathrm{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge \\ \quad\quad I_\mathrm{e} < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
-&&&& $n \equiv \min(\{ \boldsymbol{\mu}_\mathrm{s}[6], |\mathbf{o}|\})$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[5] \dots (\boldsymbol{\mu}_\mathrm{s}[5] + n - 1) ] = \mathbf{o}[0 \dots (n - 1)]$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{g} \equiv \boldsymbol{\mu}_\mathrm{g} + g'$ \\
-&&&& $\boldsymbol{\mu}'_\mathrm{s}[0] \equiv x$ \\
+&&&& $\mathbf{i} \equiv \boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[3] \dots (\boldsymbol{\mu}_{\mathrm{s}}[3] + \boldsymbol{\mu}_{\mathrm{s}}[4] - 1) ]$ \\
+&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}, I_{\mathrm{a}}, I_{\mathrm{o}}, t, t,\\ \quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_{\mathrm{p}}, \boldsymbol{\mu}_{\mathrm{s}}[2], \boldsymbol{\mu}_{\mathrm{s}}[2], \mathbf{i}, I_{\mathrm{e}} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] \leqslant \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}} \;\wedge \\ \quad\quad I_{\mathrm{e}} < 1024\end{array}\\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
+&&&& $n \equiv \min(\{ \boldsymbol{\mu}_{\mathrm{s}}[6], |\mathbf{o}|\})$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[5] \dots (\boldsymbol{\mu}_{\mathrm{s}}[5] + n - 1) ] = \mathbf{o}[0 \dots (n - 1)]$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{g}} \equiv \boldsymbol{\mu}_{\mathrm{g}} + g'$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv x$ \\
 &&&& $A' \equiv A \Cup A^+$ \\
-&&&& $t \equiv \boldsymbol{\mu}_\mathrm{s}[1] \mod 2^{160}$ \\
+&&&& $t \equiv \boldsymbol{\mu}_{\mathrm{s}}[1] \mod 2^{160}$ \\
 &&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting \\
 &&&& $Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) = \top$ or if  \\
-&&&& $\boldsymbol{\mu}_\mathrm{s}[2] > \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b}$ (not enough funds) or $I_\mathrm{e} = 1024$ (call depth limit reached); $x=1$ \\
+&&&& $\boldsymbol{\mu}_{\mathrm{s}}[2] > \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}}$ (not enough funds) or $I_{\mathrm{e}} = 1024$ (call depth limit reached); $x=1$ \\
 &&&& otherwise. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[3], \boldsymbol{\mu}_\mathrm{s}[4]), \boldsymbol{\mu}_\mathrm{s}[5], \boldsymbol{\mu}_\mathrm{s}[6])$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[3], \boldsymbol{\mu}_{\mathrm{s}}[4]), \boldsymbol{\mu}_{\mathrm{s}}[5], \boldsymbol{\mu}_{\mathrm{s}}[6])$ \\
 &&&& Thus the operand order is: gas, to, value, in offset, in size, out offset, out size. \hypertarget{tiny CALL}{}\\
 &&&& $C_{\text{\tiny CALL}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$ \\
 &&&& $C_{\text{\tiny CALLGAS}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv  \begin{cases}
-C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{\mathrm{callstipend}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \neq 0 \\
+C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) + G_{\mathrm{callstipend}} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] \neq 0 \\
 C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{otherwise}
 \end{cases}$ \\
 &&&& $C_{\text{\tiny GASCAP}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases}
-\min\{ L(\boldsymbol{\mu}_\mathrm{g} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_\mathrm{s}[0] \} & \text{if} \quad \boldsymbol{\mu}_\mathrm{g} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\
-\boldsymbol{\mu}_\mathrm{s}[0] & \text{otherwise}
+\min\{ L(\boldsymbol{\mu}_{\mathrm{g}} - C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})), \boldsymbol{\mu}_{\mathrm{s}}[0] \} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{g}} \ge C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu})\\
+\boldsymbol{\mu}_{\mathrm{s}}[0] & \text{otherwise}
 \end{cases}$\\
 &&&& $C_{\text{\tiny EXTRA}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv G_{\mathrm{call}} + C_{\text{\tiny XFER}}(\boldsymbol{\mu}) + C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu})$\\
 &&&& $C_{\text{\tiny XFER}}(\boldsymbol{\mu}) \equiv \begin{cases}
-G_{\mathrm{callvalue}} & \text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \neq 0 \\
+G_{\mathrm{callvalue}} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] \neq 0 \\
 0 & \text{otherwise}
 \end{cases}$ \\
 &&&& $C_{\text{\tiny NEW}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases}
-G_{\mathrm{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[1] \mod 2^{160}] = \varnothing \\
+G_{\mathrm{newaccount}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[1] \mod 2^{160}] = \varnothing \\
 0 & \text{otherwise}
 \end{cases}$ \\
 \midrule
 0xf2 & {\small CALLCODE} & 7 & 1 & Message-call into this account with an alternative account's code. \\
 &&&& Exactly equivalent to {\small CALL} except: \\
-&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathrm{a}, I_\mathrm{o}, I_\mathrm{a}, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_\mathrm{p}, \boldsymbol{\mu}_\mathrm{s}[2], \boldsymbol{\mu}_\mathrm{s}[2], \mathbf{i}, I_\mathrm{e} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_\mathrm{s}[2] \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge\\ \quad\quad{}I_\mathrm{e} < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
-&&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_\mathrm{s}[1]$\\
-&&&& (as in {\small CALL}) to the present address $I_\mathrm{a}$. This means that the recipient is in fact the\\
+&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_{\mathrm{a}}, I_{\mathrm{o}}, I_{\mathrm{a}}, t,\\\quad C_{\text{\tiny CALLGAS}}(\boldsymbol{\mu}), I_{\mathrm{p}}, \boldsymbol{\mu}_{\mathrm{s}}[2], \boldsymbol{\mu}_{\mathrm{s}}[2], \mathbf{i}, I_{\mathrm{e}} + 1)\end{array} & \begin{array}{l}\text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] \leqslant \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}} \;\wedge\\ \quad\quad{}I_{\mathrm{e}} < 1024\end{array} \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
+&&&& Note the change in the fourth parameter to the call $\Theta$ from the 2nd stack value $\boldsymbol{\mu}_{\mathrm{s}}[1]$\\
+&&&& (as in {\small CALL}) to the present address $I_{\mathrm{a}}$. This means that the recipient is in fact the\\
 &&&& same account as at present, simply that the code is overwritten.\hypertarget{RETURN}{}\\
 \midrule
 0xf3 & {\small RETURN} & 2 & 0 & Halt execution returning output data. \\
-&&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_\mathrm{m}[ \boldsymbol{\mu}_\mathrm{s}[0] \dots ( \boldsymbol{\mu}_\mathrm{s}[0] + \boldsymbol{\mu}_\mathrm{s}[1] - 1 ) ]$ \\
+&&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] \dots ( \boldsymbol{\mu}_{\mathrm{s}}[0] + \boldsymbol{\mu}_{\mathrm{s}}[1] - 1 ) ]$ \\
 &&&& This has the effect of halting the execution at this point with output defined.\\
 &&&& See equation \ref{eq:Normal Halting}. \\
-&&&& $\boldsymbol{\mu}'_\mathrm{i} \equiv M(\boldsymbol{\mu}_\mathrm{i}, \boldsymbol{\mu}_\mathrm{s}[0], \boldsymbol{\mu}_\mathrm{s}[1])$ \\
+&&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[1])$ \\
 \end{tabularx}
 
 \begin{tabularx}{\textwidth}{rlrrX}
 \midrule
-0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments.  The omitted argument is $\boldsymbol{\mu}_\mathrm{s}[2]$. As a result, $\boldsymbol{\mu}_\mathrm{s}[3]$, $\boldsymbol{\mu}_\mathrm{s}[4]$, $\boldsymbol{\mu}_\mathrm{s}[5]$ and $\boldsymbol{\mu}_\mathrm{s}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_\mathrm{s}[2]$, $\boldsymbol{\mu}_\mathrm{s}[3]$, $\boldsymbol{\mu}_\mathrm{s}[4]$ and $\boldsymbol{\mu}_\mathrm{s}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\
-&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_\mathrm{s}, I_\mathrm{o}, I_\mathrm{a}, t,\\\quad \boldsymbol{\mu}_\mathrm{s}[0], I_\mathrm{p}, 0, \hyperlink{I v}{I_\mathrm{v}}, \mathbf{i}, I_\mathrm{e} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_\mathrm{v}} \leqslant \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b} \;\wedge\; I_\mathrm{e} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
+0xf4 & {\small DELEGATECALL} & 6 & 1 & Message-call into this account with an alternative account's code, but persisting the current values for {\it sender} and {\it value}. Compared with {\small CALL}, {\small DELEGATECALL} takes one fewer arguments.  The omitted argument is $\boldsymbol{\mu}_{\mathrm{s}}[2]$. As a result, $\boldsymbol{\mu}_{\mathrm{s}}[3]$, $\boldsymbol{\mu}_{\mathrm{s}}[4]$, $\boldsymbol{\mu}_{\mathrm{s}}[5]$ and $\boldsymbol{\mu}_{\mathrm{s}}[6]$ in the definition of {\small CALL} should respectively be replaced with $\boldsymbol{\mu}_{\mathrm{s}}[2]$, $\boldsymbol{\mu}_{\mathrm{s}}[3]$, $\boldsymbol{\mu}_{\mathrm{s}}[4]$ and $\boldsymbol{\mu}_{\mathrm{s}}[5]$. Otherwise it is exactly equivalent to {\small CALL} except: \\
+&&&& $(\boldsymbol{\sigma}', g', A^+, \mathbf{o}) \equiv \begin{cases}\begin{array}{l}\Theta(\boldsymbol{\sigma}^*, I_{\mathrm{s}}, I_{\mathrm{o}}, I_{\mathrm{a}}, t,\\\quad \boldsymbol{\mu}_{\mathrm{s}}[0], I_{\mathrm{p}}, 0, \hyperlink{I v}{I_{\mathrm{v}}}, \mathbf{i}, I_{\mathrm{e}} + 1)\end{array} & \text{if} \quad \hyperlink{I v}{I_{\mathrm{v}}} \leqslant \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}} \;\wedge\; I_{\mathrm{e}} < 1024 \\ (\boldsymbol{\sigma}, g, \varnothing, ()) & \text{otherwise} \end{cases}$ \\
 &&&& Note the changes (in addition to that of the fourth parameter) to the second and ninth parameters to the call $\Theta$. This means that the recipient is in fact the same account as at present, simply that the code is overwritten {\it and} the context is almost entirely identical.\\
 \midrule
 0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{selfdestruct}{\\
 \midrule
 0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. }\\
-&&&& $A'_\mathrm{s} \equiv A_\mathrm{s} \cup \{ I_\mathrm{a} \}$ \\
-&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{b} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}]_\mathrm{b} + \boldsymbol{\sigma}[I_\mathrm{a}]_\mathrm{b}$ \\
-&&&& $\boldsymbol{\sigma}'[I_\mathrm{a}]_\mathrm{b} \equiv 0$ \\
+&&&& $A'_{\mathrm{s}} \equiv A_{\mathrm{s}} \cup \{ I_{\mathrm{a}} \}$ \\
+&&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}]_{\mathrm{b}} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}]_{\mathrm{b}} + \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}}$ \\
+&&&& $\boldsymbol{\sigma}'[I_{\mathrm{a}}]_{\mathrm{b}} \equiv 0$ \\
 &&&& $A'_{r} \equiv A_{r} + \begin{cases}
-\hyperlink{Rselfdestruct}{R_{\mathrm{selfdestruct}}} & \text{if} \quad I_\mathrm{a} \notin A_\mathrm{s} \\
+\hyperlink{Rselfdestruct}{R_{\mathrm{selfdestruct}}} & \text{if} \quad I_{\mathrm{a}} \notin A_{\mathrm{s}} \\
 0 & \text{otherwise} 
 \end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\
 &&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{\mathrm{selfdestruct}}} + \begin{cases}
-\hyperlink{Gnewaccount}{G_{\mathrm{newaccount}}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_\mathrm{s}[0] \mod 2^{160}] = \varnothing \\
+\hyperlink{Gnewaccount}{G_{\mathrm{newaccount}}} & \text{if} \quad \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}] = \varnothing \\
 0 & \text{otherwise}
 \end{cases}$ \\
 \bottomrule
@@ -2124,7 +2124,7 @@ \subsection{Definitions}
 \subsection{Size of dataset and cache}
 The size for Ethash's cache $\mathbf{c} \in \mathbb{B}$  and dataset $\mathbf{d} \in \mathbb{B}$ depend on the epoch, which in turn depends on the block number.
 \begin{equation}
-E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathrm{i}}) = \left\lfloor\frac{\hyperlink{H i}{H_\mathrm{i}}}{\hyperlink{Jepoch}{J_{\mathrm{epoch}}}}\right\rfloor
+E_{\mathrm{epoch}}(\hyperlink{H i}{H_{\mathrm{i}}}) = \left\lfloor\frac{\hyperlink{H i}{H_{\mathrm{i}}}}{\hyperlink{Jepoch}{J_{\mathrm{epoch}}}}\right\rfloor
 \end{equation}
 The size of the dataset growth is \hyperlink{Jdatasetgrowth}{$J_{\mathrm{datasetgrowth}}$} bytes, and the size of the cache growth is \hyperlink{Jcachegrowth}{$J_{\mathrm{cachegrowth}}$} bytes, where the growth of each occurs every epoch. In order to avoid regularity leading to cyclic behavior, the size must be a prime number. Therefore the size is reduced by a multiple of \hyperlink{Jmixbytes}{$J_{\mathrm{mixbytes}}$}, for the dataset, and \hyperlink{Jhashbytes}{$J_{\mathrm{hashbytes}}$} for the cache.\hypertarget{dsize}{
 Let $d_{\mathrm{\mathrm{size}}} = \lVert \mathbf{d} \rVert$ be the size of the dataset. Which is calculated using:}
@@ -2146,12 +2146,12 @@ \subsection{Dataset generation}
 \subsubsection{Seed hash}
 The seed hash is different for every epoch. For the first epoch it is the Keccak-256 hash of a series of 32 bytes of zeros. For every other epoch it is always the Keccak-256 hash of the previous seed hash:
 \begin{equation}
- s = C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathrm{i}})
+ s = C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_{\mathrm{i}}})
 \end{equation}
 \begin{equation}
- C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathrm{i}}) = \begin{cases}
-\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\mathrm{epoch}}(\hyperlink{H i}{H_\mathrm{i}}) = 0 \quad  \\
-\texttt{KEC}(C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_\mathrm{i}} - \hyperlink{Jepoch}{J_{\mathrm{epoch}}})) & \text{otherwise}
+ C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_{\mathrm{i}}}) = \begin{cases}
+\texttt{KEC}(\mathbf{0}_{32}) & \text{if} \quad E_{\mathrm{epoch}}(\hyperlink{H i}{H_{\mathrm{i}}}) = 0 \quad  \\
+\texttt{KEC}(C_{\mathrm{\mathrm{\mathrm{seedhash}}}}(\hyperlink{H i}{H_{\mathrm{i}}} - \hyperlink{Jepoch}{J_{\mathrm{epoch}}})) & \text{otherwise}
 \end{cases}
 \end{equation}
 With $\mathbf{0}_{32}$ being 32 bytes of zeros.
@@ -2159,16 +2159,16 @@ \subsubsection{Seed hash}
 \subsubsection{Cache}
 The cache production process involves using the seed hash to first sequentially fill up $c_{\mathrm{size}}$ bytes of memory, then performing \hyperlink{Jcacherounds}{$J_{\mathrm{cacherounds}}$} passes of the RandMemoHash algorithm created by \cite{lerner2014randmemohash}. The initial cache $\mathbf{c'}$, being an array of arrays of single bytes, will be constructed as follows.
 
-We define the array $\mathbf{c}_{i}$, consisting of 64 single bytes,  as the $i$th element of the initial cache:
+We define the array $\mathbf{c}_{\mathrm{i}}$, consisting of 64 single bytes,  as the $i$th element of the initial cache:
 \begin{equation}
- \mathbf{c}_{i} = \begin{cases}
+ \mathbf{c}_{\mathrm{i}} = \begin{cases}
 \texttt{KEC512}(\mathbf{s}) & \text{if} \quad i = 0 \quad  \\
 \texttt{KEC512}(\mathbf{c}_{i-1}) & \text{otherwise}
 \end{cases}
 \end{equation}
 Therefore $ \mathbf{c'}$ can be defined as
 \begin{equation}
- \mathbf{c'}[i] = \mathbf{c}_{i} \quad \forall \quad i < n
+ \mathbf{c'}[i] = \mathbf{c}_{\mathrm{i}} \quad \forall \quad i < n
 \end{equation}
 \begin{equation}
  n = \left\lfloor\frac{c_{\mathrm{size}}}{\hyperlink{Jhashbytes}{J_{\mathrm{hashbytes}}}}\right\rfloor
@@ -2227,16 +2227,16 @@ \subsection{Proof-of-work function}
 
 The PoW-function returns an array with the compressed mix as its first item and the Keccak-256 hash of the concatenation of the compressed mix with the seed hash as the second item:
 \begin{equation}
- \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d}) = \lbrace \mathbf{m}_\mathrm{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d}), \texttt{KEC}(\mathbf{s}_\mathrm{h}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathrm{n}}) + \mathbf{m}_\mathrm{c}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_\mathrm{n}}, \mathbf{d})) \rbrace
+ \mathtt{PoW}(H_{\hyperlink{h cancel n}{\hcancel{n}}}, \hyperlink{H n}{H_{\mathrm{n}}}, \mathbf{d}) = \lbrace \mathbf{m}_{\mathrm{c}}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_{\mathrm{n}}}, \mathbf{d}), \texttt{KEC}(\mathbf{s}_{\mathrm{h}}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_{\mathrm{n}}}) + \mathbf{m}_{\mathrm{c}}(\mathtt{\small KEC}(\mathtt{\small RLP}(L_H(H_{\hcancel{n}}))), \hyperlink{H n}{H_{\mathrm{n}}}, \mathbf{d})) \rbrace
 \end{equation}
-With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_\mathrm{c}$ is obtained as follows:
+With $H_{\hyperlink{h cancel n}{\hcancel{n}}}$ being the hash of the header without the \hyperlink{block nonce}{nonce}. The compressed mix $\mathbf{m}_{\mathrm{c}}$ is obtained as follows:
 \begin{equation}
- \mathbf{m}_\mathrm{c}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{\mathrm{compress}}(E_{\mathrm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{\mathrm{mix}}} \mathbf{s}_\mathrm{h}(\mathbf{h}, \mathbf{n}), \mathbf{s}_\mathrm{h}(\mathbf{h}, \mathbf{n}), -1), -4)
+ \mathbf{m}_{\mathrm{c}}(\mathbf{h}, \mathbf{n}, \mathbf{d}) = E_{\mathrm{compress}}(E_{\mathrm{accesses}}(\mathbf{d}, \sum_{i = 0}^{n_{\mathrm{mix}}} \mathbf{s}_{\mathrm{h}}(\mathbf{h}, \mathbf{n}), \mathbf{s}_{\mathrm{h}}(\mathbf{h}, \mathbf{n}), -1), -4)
 \end{equation}
 
 The seed hash being:
 \begin{equation}
- \mathbf{s}_\mathrm{h}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{\mathrm{revert}}(\mathbf{n}))
+ \mathbf{s}_{\mathrm{h}}(\mathbf{h}, \mathbf{n}) = \texttt{KEC512}(\mathbf{h} + E_{\mathrm{revert}}(\mathbf{n}))
 \end{equation}
 $E_{\mathrm{revert}}(\mathbf{n})$ returns the reverted bytes sequence of the \hyperlink{block nonce}{nonce} $\mathbf{n}$:
 \begin{equation}

From 343c3ac49fc154da606a68ae7396b26a72fb82b4 Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 19 Oct 2017 20:31:51 +1100
Subject: [PATCH 088/132] Removing or replacing non-working links

---
 Biblio.bib | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index f1ab4ca1..be4357ce 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -30,7 +30,7 @@ @misc{Mist
 
 @misc{commitdateforEthash,
 	url = "https://github.com/ethereum/yellowpaper/commit/77a8cf2428ce245bf6e2c39c5e652ba58a278666#commitcomment-24644869",
-	note = {{Last modified on 4 May 2015. Not able to be archived by the Wayback Machine, since the saved page doesn't load showing the cited change and comment. The change is available here: \url{https://filetea.me/#n3wZ23ZjyxVSxeDnCTlNZkznQ}}},
+	note = {{Last modified on 4 May 2015. Not able to be archived by the Wayback Machine, since the saved page doesn't load showing the cited change and comment. The change is available here: \url{https://drive.google.com/open?id=0B6erNjejWCBwajJLR2FnRWotTFk} in this folder of screenshots of the commit the change is in here: \url{https://drive.google.com/open?id=0B6erNjejWCBwaUFISUJMWjRtRHc}}},
 	author = "Christoph Jentzsch",
 	year = "2015",
 	publisher = "Github",
@@ -62,7 +62,7 @@ @book{ASICSmithMJS
 	publisher = "Addison-Wesley",
 	year = "1997",
 	ISBN = "0201500221",
-	note = "Available here: \url{https://www.slideshare.net/nhKhanhNguyn/michael-john-sebastian-smith-applicationspecific-integrated-circuitsaddisonwesley-professional-1997-1}, which is not able to be archived by the Wayback Machine, but is available here: \url{https://filetea.me/#n3wO8DL3jr9RyGrFrKuCyozKg}. A preview is also available at \url{https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}, with the archive: 
+	note = "Available here: \url{https://www.slideshare.net/nhKhanhNguyn/michael-john-sebastian-smith-applicationspecific-integrated-circuitsaddisonwesley-professional-1997-1}, which is not able to be archived by the Wayback Machine, but is available here: \url{https://drive.google.com/open?id=0B6erNjejWCBwbTc1RmFLV1BlZlE}. A preview is also available at \url{https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}, with the archive: 
 \url{https://web.archive.org/web/20170929041938/https://www.amazon.com/Application-Specific-Integrated-Circuits-Michael-Smith/dp/0321602757}.",
 }
 
@@ -181,7 +181,7 @@ @article{mastercoin2013willett
 
 @article{colouredcoins2012rosenfeld,
 	url = "https://bitcoil.co.il/BitcoinX.pdf",
-	note = {{Test: \url{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}.}},
+	note = {{\url{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}.}},
 	author = {Meni Rosenfeld},
 	title = {{Overview of Colored Coins}},
 	year = {{2012}},
@@ -200,7 +200,7 @@ @incollection{boutellier2014pirates
 
 @Article{szabo1997formalizing,
 	url = "http://firstmonday.org/ojs/index.php/fm/article/view/548",
-	note = {{\url{https://web.archive.org/web/20170810042659/http://firstmonday.org/ojs/index.php/fm/article/view/548}.}},
+	note = "\url{https://web.archive.org/web/20170810042659/http://firstmonday.org/ojs/index.php/fm/article/view/548}.",
 	author = {Szabo, Nick},
 	title = {{Formalizing and securing relationships on public networks}},
 	journal = {{First Monday}},
@@ -211,7 +211,6 @@ @Article{szabo1997formalizing
 
 @InProceedings{miller1997future,
 	url = "https://drive.google.com/file/d/0Bw0VXJKBgYPMS0J2VGIyWWlocms/edit?usp=sharing",
-	note = "https://filetea.me/n3we8BhHZE5QYC8iVxcUE152Q",
 	BookTitle = {{paper delivered at the Extro 3 Conference (August 9)}},
 	author = {Miller, Mark},
 	title = {{The Future of Law}},
@@ -235,7 +234,7 @@ @article{back2002hashcash
 
 @article{hashimoto,
 	url = "https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf",
-	note = {{\url{https://web.archive.org/web/20170810043640/https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf}. Dead original link as of 10 August 2017: \url{https://mirrorx.com/files/hashimoto.pdf}.}},
+	note = "\url{https://web.archive.org/web/20170810043640/https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf}. Dead original link as of 10 August 2017: \url{https://mirrorx.com/files/hashimoto.pdf}.",
 	author = {Thaddeus Dryja},
 	title = {{Hashimoto: I/O bound proof of work}},
 	year = {{2014}},

From a6d55a3dcf78addf7a3b016d6015ddc6e89fd8dd Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 19 Oct 2017 20:39:30 +1100
Subject: [PATCH 089/132] Abstract and removed dead link for ECDSACerticom

---
 Biblio.bib | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index be4357ce..e7027ea6 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -80,13 +80,14 @@ @Book{zbMATH01748069
 }
 
 @misc{ECDSAcerticom,
-	url = "http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf",
-	note = "Accessed 21 September 2017, \url{https://web.archive.org/web/20170921160141/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf}. Refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.",
+	url = "https://web.archive.org/web/20170921160141/http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf",
+ 	note = "Accessed 21 September 2017, but the original link was inaccessible on 19 October 2017. Refer to section 6.2 for ECDSAPUBKEY, and section 7 for ECDSASIGN and ECDSARECOVER.",
 	title = {{The Elliptic Curve Digital Signature Algorithm (ECDSA)}},
 	publisher = {{Certicom Research}},
 	location = "Canada",
 	author = "Don Johnson and Alfred Menezes and Scott Vanstone",
 	year = "2001",
+	abstract = "The Elliptic Curve Digital Signature Algorithm (ECDSA) is the elliptic curve analogue of the Digital Signature Algorithm (DSA). It was accepted in 1999 as an ANSI standard, and was accepted in 2000 as IEEE and NIST standards. It was also accepted in 1998 as an ISO standard, and is under consideration for inclusion in some other ISO standards. Unlike the ordinary discrete logarithm problem and the integer factorization problem, no subexponential-time algorithm is known for the elliptic curve discrete logarithm problem. For this reason, the strength-per-key-bit is substantially greater in an algorithm that uses elliptic curves. This paper describes the ANSI X9.62 ECDSA, and discusses related security, implementation, and interoperability issues.",
 }
 
 @misc{npmElectrum2017,

From 18f9a0e5247c3eeb3cadb4dee959cfd154a293cb Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 19 Oct 2017 20:54:51 +1100
Subject: [PATCH 090/132] missing comma

---
 Biblio.bib | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Biblio.bib b/Biblio.bib
index e7027ea6..d6a4bdf7 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -8,7 +8,7 @@ @article{THOMPSON200620
 issn = "1369-7021",
 doi = "https://doi.org/10.1016/S1369-7021(06)71539-5",
 url = "http://www.sciencedirect.com/science/article/pii/S1369702106715395",
-author = "Scott E. Thompson and Srivatsan Parthasarathy"
+author = "Scott E. Thompson and Srivatsan Parthasarathy",
 }
 
 @misc{Keccak,

From 96131caaa37597f5a93a76d8ab63ea977a7b9257 Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 19 Oct 2017 21:12:22 +1100
Subject: [PATCH 091/132] Cryptoeprint URLs

---
 Biblio.bib | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Biblio.bib b/Biblio.bib
index d6a4bdf7..49c507cd 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -103,7 +103,8 @@ @misc{cryptoeprint:2013:881
     title = {{Accelerating Bitcoin's Transaction Processing. Fast Money Grows on Trees, Not Chains}},
     howpublished = {Cryptology ePrint Archive, Report 2013/881},
     year = {2013},
-    note = {\url{http://eprint.iacr.org/2013/881}},
+    url = "http://eprint.iacr.org/2013/881",
+    note = "\url{https://web.archive.org/web/20171019101138/https://eprint.iacr.org/2013/881}",
 }
 
 @InCollection{gura2004comparing,

From 5a2733b40cbeab19b43f5aa75cf2c72b7ab23a1a Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Fri, 20 Oct 2017 17:44:45 +1100
Subject: [PATCH 092/132] Cross-refs and release history with refs.

---
 Biblio.bib | 147 ++++++++++++++++++++++++++++++++++++++---------------
 Paper.tex  | 130 ++++++++++++++++++++++++----------------------
 2 files changed, 173 insertions(+), 104 deletions(-)

diff --git a/Biblio.bib b/Biblio.bib
index 49c507cd..5fd0fb51 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -1,20 +1,64 @@
+@misc{Codetract,
+	title = "Hardfork countdown",
+	url = "https://fork.codetract.io/",
+	note = "\url{https://web.archive.org/web/20171020024113/https://fork.codetract.io/}",
+	year = "2017",
+	publisher = "CodeTract,"
+}
+
+@misc{EtherscanBlock4370000,
+	title = "Block 4370000",
+	url = "https://etherscan.io/block/4370000",
+	note = "\url{https://web.archive.org/web/20171020022711/https://etherscan.io/block/4370000}",
+	year = "2017",
+	publisher = "Etherscan",
+}
+
+@misc{EthdocsPRroadmap,
+	title = {{Milestones of the Ethereum development roadmap}},
+	url = "https://github.com/jamesray1/homestead-guide/blob/32d2fa4ccfa3d45f8493a673a08247450d55fea0/source/introduction/the-homestead-release.rst",
+	year = "2017",
+	publisher = "Github",
+}
+
+@misc{EthblogDevRoadmap,
+	title = {{The Ethereum Launch Process}},
+	url = "https://blog.ethereum.org/2015/03/03/ethereum-launch-process/",
+	note = "\url{https://web.archive.org/web/20171020025922/https://blog.ethereum.org/2015/03/03/ethereum-launch-process/}",
+	year = "2015",
+	publisher = "Ethereum Blog",
+}
+
+@misc{EthblogByzantiumHFAnnouncement,
+	title = {{Byzantium HF Announcement}},
+	url = "https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/",
+	note = "\url{https://web.archive.org/web/20171020023532/https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/}",
+	year = "2017",
+	publisher = "Ethereum Blog",
+}
+
 @article{THOMPSON200620,
-title = "Moore's law: the future of Si microelectronics",
-journal = "Materials Today",
-volume = "9",
-number = "6",
-pages = "20 - 25",
-year = "2006",
-issn = "1369-7021",
-doi = "https://doi.org/10.1016/S1369-7021(06)71539-5",
-url = "http://www.sciencedirect.com/science/article/pii/S1369702106715395",
-author = "Scott E. Thompson and Srivatsan Parthasarathy",
+	title = "Moore's law: the future of Si microelectronics",
+	journal = "Materials Today",
+	volume = "9",
+	number = "6",
+	pages = "20 - 25",
+	year = "2006",
+	issn = "1369-7021",
+	doi = "https://doi.org/10.1016/S1369-7021(06)71539-5",
+	url = "http://www.sciencedirect.com/science/article/pii/S1369702106715395",
+	author = "Scott E. Thompson
+and Srivatsan Parthasarathy",
 }
 
 @misc{Keccak,
 	url = "https://keccak.team/keccak.html",
 	note = "Accessed 6 October 2017. Unable to be archived by the Wayback Machine.",
-	author = "Guido Bertoni and Joan Daemen and Michaël Peeters and Gilles Van Assche and Ronny Van Keer",
+	author = "Guido Bertoni
+and Joan Daemen
+and Michaël Peeters
+and Gilles Van Assche
+and Ronny Van Keer",
 	title = {{KECCAK}},
 	year = "2017",
 }
@@ -22,7 +66,11 @@ @misc{Keccak
 @misc{Mist,
 	url = "https://github.com/ethereum/mist/releases/tag/0.8.0",
 	note = "Published on 8 July 2016, accessed 30 September 2017, \url{https://web.archive.org/web/20170930071729/https://github.com/ethereum/mist/releases/tag/0.8.0}.",
-	author = "Fabian Vogelsteller and Alex Van de Sande and Everton Fraga and Ramesh Nair and Luca Zeug",
+	author = "Fabian Vogelsteller
+and Alex Van de Sande
+and Everton Fraga
+and Ramesh Nair
+and Luca Zeug",
 	year = "2016",
 	publisher = "Github",
 	title = "Mist release 0.8.0",
@@ -38,22 +86,22 @@ @misc{commitdateforEthash
 }
 
 @Inbook{Courtois2014,
-author="Courtois, Nicolas T.
+	author="Courtois, Nicolas T.
 and Grajek, Marek
 and Naik, Rahul",
-editor="Kotulski, Zbigniew
+	editor="Kotulski, Zbigniew
 and Ksi{\k{e}}{\.{z}}opolski, Bogdan
 and Mazur, Katarzyna",
-title="Optimizing SHA256 in Bitcoin Mining",
-bookTitle="Cryptography and Security Systems: Third International Conference, CSS 2014, Lublin, Poland, September 22-24, 2014. Proceedings",
-year="2014",
-publisher="Springer Berlin Heidelberg",
-address="Berlin, Heidelberg",
-pages="131--144",
+	title="Optimizing SHA256 in Bitcoin Mining",
+	bookTitle="Cryptography and Security Systems: Third International Conference, CSS 2014, Lublin, Poland, September 22-24, 2014. Proceedings",
+	year="2014",
+	publisher="Springer Berlin Heidelberg",
+	address="Berlin, Heidelberg",
+	pages="131--144",
 abstract="Bitcoin is a ``crypto currency'', a decentralized electronic payment scheme based on cryptography. It implements a particular type of peer-to-peer payment system. Bitcoin depends on well-known cryptographic standards such as SHA-256. In this paper we revisit the cryptographic process which allows one to make money by producing new bitcoins. We reformulate this problem as a specific sort of Constrained Input Small Output (CISO) hashing problem and reduce the problem to a pure block cipher problem, cf. Fig. 1. We estimate the speed of this process and we show that the amortized cost of this process is less than it seems and it depends on a certain cryptographic constant which is estimated to be at most 1.89. These optimizations enable bitcoin miners to save countless millions of dollars per year in electricity bills.",
-isbn="978-3-662-44893-9",
-doi="10.1007/978-3-662-44893-9_12",
-url="https://doi.org/10.1007/978-3-662-44893-9_12"
+	isbn="978-3-662-44893-9",
+	doi="10.1007/978-3-662-44893-9_12",
+	url="https://doi.org/10.1007/978-3-662-44893-9_12"
 }
 
 @book{ASICSmithMJS,
@@ -67,7 +115,8 @@ @book{ASICSmithMJS
 }
 
 @Book{zbMATH01748069,
-    Author = {B.A. {Davey} and H.A. {Priestley}},
+    Author = {B.A. {Davey}
+and H.A. {Priestley}},
     Title = {{Introduction to lattices and order. 2nd ed.}},
     Edition = {2nd ed.},
     ISBN = {0-521-78451-4/pbk},
@@ -85,7 +134,9 @@ @misc{ECDSAcerticom
 	title = {{The Elliptic Curve Digital Signature Algorithm (ECDSA)}},
 	publisher = {{Certicom Research}},
 	location = "Canada",
-	author = "Don Johnson and Alfred Menezes and Scott Vanstone",
+	author = "Don Johnson
+and Alfred Menezes
+and Scott Vanstone",
 	year = "2001",
 	abstract = "The Elliptic Curve Digital Signature Algorithm (ECDSA) is the elliptic curve analogue of the Digital Signature Algorithm (DSA). It was accepted in 1999 as an ANSI standard, and was accepted in 2000 as IEEE and NIST standards. It was also accepted in 1998 as an ISO standard, and is under consideration for inclusion in some other ISO standards. Unlike the ordinary discrete logarithm problem and the integer factorization problem, no subexponential-time algorithm is known for the elliptic curve discrete logarithm problem. For this reason, the strength-per-key-bit is substantially greater in an algorithm that uses elliptic curves. This paper describes the ANSI X9.62 ECDSA, and discusses related security, implementation, and interoperability issues.",
 }
@@ -93,13 +144,16 @@ @misc{ECDSAcerticom
 @misc{npmElectrum2017,
 	url = "https://www.npmjs.com/package/electrum",
 	note = {{\url{https://web.archive.org/save/https://www.npmjs.com/package/electrum}.}},
-	author = "Arnaud, Pierre and Schroeter, Mathieu and Le Barbare, Sam",
+	author = "Arnaud, Pierre
+and Schroeter, Mathieu
+and Le Barbare, Sam",
 	title = {{Electrum}},
 	year = {{2017}},
 }
 
 @misc{cryptoeprint:2013:881,
-    author = {Sompolinsky, Yonatan and Aviv Zohar},
+    author = "Sompolinsky, Yonatan
+and Aviv Zohar",
     title = {{Accelerating Bitcoin's Transaction Processing. Fast Money Grows on Trees, Not Chains}},
     howpublished = {Cryptology ePrint Archive, Report 2013/881},
     year = {2013},
@@ -112,7 +166,11 @@ @InCollection{gura2004comparing
 	note = {{\url{https://web.archive.org/web/20170810035057/https://www.iacr.org/archive/ches2004/31560117/31560117.pdf}.}},
 	BookTitle = {{Cryptographic Hardware and Embedded Systems-CHES 2004}},
 	Publisher = {{Springer}},
-	author = {Gura, Nils and Patel, Arun and Wander, Arvinderpal and Eberle, Hans and Sheueling Chang Shantz},
+	author = "Gura, Nils
+and Patel, Arun
+and Wander, Arvinderpal
+and Eberle, Hans
+and Sheueling Chang Shantz",
 	title = {{Comparing elliptic curve cryptography and RSA on 8-bit CPUs}},
 	pages = {119-132},
 	year = {{2004}},
@@ -120,7 +178,8 @@ @InCollection{gura2004comparing
 
 @InProceedings{laurie2004proof,
 	BookTitle = {{Workshop on Economics and Information, Security}},
-	author = {Laurie, Ben and Clayton, Richard},
+	author = "Laurie, Ben
+and Clayton, Richard",
 	title = {{Proof-of-Work{''} proves not to work; version 0.2}},
 	year = {{2004}},
 }
@@ -136,7 +195,8 @@ @Misc{vishnumurthy03karma:a
 @InProceedings{dwork92pricingvia,
     url = "http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf",
     note = {{\url{https://web.archive.org/web/20170810035254/http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf}.}},
-    author = {Cynthia Dwork and Moni Naor},
+    author = "Cynthia Dwork
+and Moni Naor",
     title = {Pricing via processing or combatting junk mail},
     booktitle = {In 12th Annual International Cryptology Conference},
     year = {1992},
@@ -156,7 +216,7 @@ @Article{nakamoto2008bitcoin
 @Misc{sprankel2013technical,
 	url = "http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf",
 	note = {{\url{https://web.archive.org/web/20170810025028/http://www.coderblog.de/wp-content/uploads/technical-basis-of-digital-currencies.pdf}.}},
-	author = {Sprankel, Simon},
+	author = "Sprankel, Simon",
 	title = {{Technical Basis of Digital Currencies}},
 	year = {{2013}},
 }
@@ -164,7 +224,7 @@ @Misc{sprankel2013technical
 @Article{aron2012bitcoin,
 	url = "http://www.sciencedirect.com/science/article/pii/S0262407912601055",
 	Publisher = {{Elsevier}},
-	author = {Aron, Jacob},
+	author = "Aron, Jacob",
 	title = {{BitCoin software finds new life}},
 	journal = {{New Scientist}},
 	volume = {{213}},
@@ -184,7 +244,7 @@ @article{mastercoin2013willett
 @article{colouredcoins2012rosenfeld,
 	url = "https://bitcoil.co.il/BitcoinX.pdf",
 	note = {{\url{https://web.archive.org/web/20170810040120/https://bitcoil.co.il/BitcoinX.pdf}.}},
-	author = {Meni Rosenfeld},
+	author = "Meni Rosenfeld",
 	title = {{Overview of Colored Coins}},
 	year = {{2012}},
 }
@@ -194,7 +254,8 @@ @incollection{boutellier2014pirates
 	note = {{URL available at \url{http://wiki.erights.org/wiki/Documentation}. \url{https://web.archive.org/web/20170810040208/https://www.springer.com/gb/book/9783319040158}.}},
 	booktitle = {{Growth Through Innovation}},
 	publisher = {{Springer}},
-	author = {Boutellier, Roman and Heinzen, Mareike},
+	author = "Boutellier, Roman
+and Heinzen, Mareike",
 	title = {{Pirates, Pioneers, Innovators and Imitators}},
 	pages = {85-96},
 	year = {{2014}},
@@ -203,7 +264,7 @@ @incollection{boutellier2014pirates
 @Article{szabo1997formalizing,
 	url = "http://firstmonday.org/ojs/index.php/fm/article/view/548",
 	note = "\url{https://web.archive.org/web/20170810042659/http://firstmonday.org/ojs/index.php/fm/article/view/548}.",
-	author = {Szabo, Nick},
+	author = "Szabo, Nick",
 	title = {{Formalizing and securing relationships on public networks}},
 	journal = {{First Monday}},
 	volume = {{2}},
@@ -214,14 +275,14 @@ @Article{szabo1997formalizing
 @InProceedings{miller1997future,
 	url = "https://drive.google.com/file/d/0Bw0VXJKBgYPMS0J2VGIyWWlocms/edit?usp=sharing",
 	BookTitle = {{paper delivered at the Extro 3 Conference (August 9)}},
-	author = {Miller, Mark},
+	author = "Miller, Mark",
 	title = {{The Future of Law}},
 	year = {{1997}},
 }
 
 @article{buterin2013ethereum,
 	url = "https://github.com/ethereum/wiki/wiki/White-Paper",
-	author = {Vitalik Buterin},
+	author = "Vitalik Buterin",
 	title = {{Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform}},
 	year = {{2013}},
 }
@@ -229,7 +290,7 @@ @article{buterin2013ethereum
 @article{back2002hashcash,
 	url = "http://www.hashcash.org/papers/amortizable.pdf",
 	note = "\url{https://web.archive.org/web/20170810043047/http://www.hashcash.org/papers/amortizable.pdf}.",
-	author = {Adam Back},
+	author = "Adam Back",
 	title = {{Hashcash - Amortizable Publicly Auditable Cost-Functions}},
 	year = {{2002}},
 }
@@ -237,7 +298,7 @@ @article{back2002hashcash
 @article{hashimoto,
 	url = "https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf",
 	note = "\url{https://web.archive.org/web/20170810043640/https://pdfs.semanticscholar.org/3b23/7cc60c1b9650e260318d33bec471b8202d5e.pdf}. Dead original link as of 10 August 2017: \url{https://mirrorx.com/files/hashimoto.pdf}.",
-	author = {Thaddeus Dryja},
+	author = "Thaddeus Dryja",
 	title = {{Hashimoto: I/O bound proof of work}},
 	year = {{2014}},
 }
@@ -245,7 +306,7 @@ @article{hashimoto
 @article{dagger,
 	url = "http://www.hashcash.org/papers/dagger.html",
 	note = {{\url{https://web.archive.org/web/20170810043955/http://www.hashcash.org/papers/dagger.html}. Dead original link as of 10 August 2017: \url{http://vitalik.ca/ethereum/dagger.html}.}},
-	author = {Vitalik Buterin},
+	author = "Vitalik Buterin",
 	title = {{Dagger: A Memory-Hard to Compute, Memory-Easy to Verify Scrypt Alternative}},
 	year = {{2013}},
 }
@@ -253,14 +314,16 @@ @article{dagger
 @article{lerner2014randmemohash,
 	url = "http://www.hashcash.org/papers/memohash.pdf",
 	note = {{\url{https://web.archive.org/web/20170810044110/http://www.hashcash.org/papers/memohash.pdf}.}},
-	author = {Sergio Demian Lerner},
+	author = "Sergio Demian Lerner",
 	title = {{Strict Memory Hard Hashing Functions}},
 	year = {{2014}},
 }
 
 @article{FowlerNollVo1991FNVHash,
 	url = "https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#cite_note-2",
-	author = {Glenn Fowler and Landon Curt Noll and Phong Vo},
+	author = "Glenn Fowler
+and Landon Curt Noll
+and Phong Vo",
 	title = {{Fowler–Noll–Vo hash function}},
 	year = {{1991}},
 }
diff --git a/Paper.tex b/Paper.tex
index cf99d9fe..5ef9385f 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1,3 +1,4 @@
+%Note that the Travis CI build is using Trusty, thus the latest version of LaTeX can't be used, which is not desirable.
 \documentclass[9pt,oneside]{amsart}
 \usepackage{cancel}
 %\usepackage{tweaklist}
@@ -26,7 +27,7 @@
 \usepackage[usenames,dvipsnames]{xcolor}
 \usepackage{afterpage}
 \usepackage{tikz}
-\usepackage{underscore}
+%\usepackage{underscore}
 %\usepackage{lipsum} % to generate filler text for testing of document rendering
 \usepackage[english]{babel}
 \usepackage[autostyle]{csquotes}
@@ -196,7 +197,7 @@ \subsection{Which History?}
 
 The scheme we use in order to generate consensus is a simplified version of the GHOST protocol introduced by \cite{cryptoeprint:2013:881}. This process is described in detail in section \ref{ch:ghost}.
 
-Sometimes, a path follows a new protocol from a particular height.  This document describes one version of the protocol.  In order to follow back the history of a path, one might need to reference multiple versions of this document.
+Sometimes, a path follows a new protocol from a particular height.  This document describes one version of the protocol.  In order to follow back the history of a path, one might need to reference multiple versions of this document. The Ethereum protocol underwent a Byzantium hard fork, the first phase of Metropolis, at block 4370000 on Oct 16 2017 (\cite{EthblogByzantiumHFAnnouncement}, \cite{Codetract}, \cite{EtherscanBlock4370000}). Thus, this document version is currently not the current implementation of the Ethereum protocol, and it will be updated soon. For further information about previous protocol release revisions, see \cite{EthdocsPRroadmap} and \cite{EthblogDevRoadmap}.
 
 \section{Conventions}\label{ch:conventions}
 
@@ -296,8 +297,8 @@ \subsection{The Transaction} \label{subsec:transaction}
 \item[gasPrice] A scalar value equal to the number of Wei to be paid per unit of \textit{gas} for all computation costs incurred as a result of the execution of this transaction; formally $T_{\mathrm{p}}$.}\hypertarget{T g}{
 \item[gasLimit] A scalar value equal to the maximum amount of gas that should be used in executing this transaction. This is paid up-front, before any computation is done and may not be increased later; formally $T_{\mathrm{g}}$.}\hypertarget{T t}{
 \item[to] The 160-bit address of the message call's recipient or, for a contract creation transaction, $\varnothing$, used here to denote the only member of $\mathbb{B}_0$ ; formally $T_{\mathrm{t}}$.}\hypertarget{T v}{
-\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_{\mathrm{v}}$.}\hypertarget{T w}{
-\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally {$T_{\mathrm{w}}$}}, \hyperlink{T r}{$T_{\mathrm{r}}$} and \hyperlink{T s}{$T_{\mathrm{s}}$}, respectively. This is expanded in Appendix \ref{app:signing}.
+\item[value] A scalar value equal to the number of Wei to be transferred to the message call's recipient or, in the case of contract creation, as an endowment to the newly created account; formally $T_{\mathrm{v}}$.}
+\item[v, r, s] Values corresponding to the signature of the transaction and used to determine the sender of the transaction; formally \hyperlink{T w}{$T_{\mathrm{w}}$}, \hyperlink{T r}{$T_{\mathrm{r}}$} and \hyperlink{T s}{$T_{\mathrm{s}}$}, respectively. This is expanded in Appendix \ref{app:signing}.
 \end{description}
 
 Additionally, a contract creation transaction contains:
@@ -354,10 +355,10 @@ \subsection{The Block} \label{ch:block}
 \item[stateRoot] The Keccak 256-bit hash of the root node of the state \hyperlink{trie}{trie}, after all transactions are executed and finalisations applied; formally \hyperlink{H r}{$H_{\mathrm{r}}$}.
 \item[transactionsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with each transaction in the transactions list portion of the block; formally \hyperlink{H t}{$H_{\mathrm{t}}$}.
 \item[receiptsRoot] The Keccak 256-bit hash of the root node of the \hyperlink{trie}{trie} structure populated with the receipts of each transaction in the transactions list portion of the block; formally \hyperlink{H e}{$H_{\mathrm{e}}$}.
-\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_{\mathrm{b}}.$}\hyperlink{H d}{
-\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally $H_{\mathrm{d}}$}.\hypertarget{H i}{
-\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_{\mathrm{i}}$.}\hyperlink{H l}{
-\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally $H_{\mathrm{l}}$.}\hypertarget{H g}{
+\item[logsBloom] The Bloom filter composed from indexable information (logger address and log topics) contained in each log entry from the receipt of each transaction in the transactions list; formally \hyperlink{H b}{$H_{\mathrm{b}}.$}
+\item[difficulty] A scalar value corresponding to the difficulty level of this block. This can be calculated from the previous block's difficulty level and the timestamp; formally \hyperlink{H d}{$H_{\mathrm{d}}$}.\hypertarget{H i}{
+\item[number] A scalar value equal to the number of ancestor blocks. The \hyperlink{GenesisBlock}{genesis block} has a number of zero; formally $H_{\mathrm{i}}$.}
+\item[gasLimit] A scalar value equal to the current limit of gas expenditure per block; formally \hyperlink{H l}{$H_{\mathrm{l}}$}.\hypertarget{H g}{
 \item[gasUsed] A scalar value equal to the total gas used in transactions in this block; formally $H_{\mathrm{g}}$.}\hypertarget{H s}{
 \item[timestamp] A scalar value equal to the reasonable output of Unix's time() at this block's inception; formally {$H_{\mathrm{s}}$}.}\hypertarget{H x}{
 \item[extraData] An arbitrary byte array containing data relevant to this block. This must be 32 bytes or fewer; formally $H_{\mathrm{x}}$.}\hypertarget{H m}{
@@ -516,7 +517,7 @@ \subsubsection{Block Header Validity}
 \expdiffsymb \equiv \left\lfloor 2^{ \left\lfloor \hyperlink{H i}{H_{\mathrm{i}}} \div 100000 \right\rfloor - 2 } \right\rfloor
 \end{equation}}
 
-Note that \mindifficulty is the difficulty of the genesis block. The effect of the difficulty parameter \homesteadmod on a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. \expdiffsymb results in the difficulty increasing every 10000 blocks. This is necessary to stabilise the time difference between blocks as  computation power becomes more efficient, with Moore's Law (\cite{THOMPSON200620}).
+Note that $\mindifficulty$ is the difficulty of the genesis block. The difficulty parameter $\homesteadmod$ is designed to affect a dynamic homeostasis of time between blocks, as the time between blocks varies, as discussed below. $\expdiffsymb$ results in the difficulty increasing every 10000 blocks. This is necessary to stabilise the time difference between blocks as  computation power becomes more efficient, with Moore's Law (\cite{THOMPSON200620}).
 
 \hypertarget{H l}{
 The canonical gas limit $\hyperlink{H l}{H_{\mathrm{l}}}$ of a block of header $H$ must fulfil the relation:
@@ -595,7 +596,7 @@ \subsection{Substate}
 A \equiv (A_{\mathrm{s}}, A_{\mathrm{l}}, A_{\mathrm{r}})
 \end{equation}
 
-The tuple contents include $A_{\mathrm{s}}$, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $A_{\mathrm{l}}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $A_{\mathrm{r}}$, the refund balance, increased through using the {\small SSTORE} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs.
+The tuple contents include \hyperlink{A s}{$A_{\mathrm{s}}$}, the self-destruct set: a set of accounts that will be discarded following the transaction's completion. $\hyperlink{A l}{A_{\mathrm{l}}}$ is the log series: this is a series of archived and indexable `checkpoints' in VM code execution that allow for contract-calls to be easily tracked by onlookers external to the Ethereum world (such as decentralised application front-ends). Finally there is $\hyperlink{A r}{A_{\mathrm{r}}}$, the refund balance, increased through using the \hyperlink{SSTORE}{{\small SSTORE}} instruction in order to reset contract storage to zero from some non-zero value. Though not immediately refunded, it is allowed to partially offset the total execution costs.
 
 For brevity, we define the empty substate $A^0$ to have no self-destructs, no logs and a zero refund balance:
 \begin{equation}
@@ -660,10 +661,10 @@ \subsection{Execution}
 
 After the message call or contract creation is processed, the state is finalised by determining the amount to be refunded, $g^*$ from the remaining gas, $g'$, plus some allowance from the refund counter, to the sender at the original rate.
 \begin{equation}
-g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_{\mathrm{g}} - g'}{2} \Big\rfloor, A_{\mathrm{r}} \}
+g^* \equiv g' + \min \{ \Big\lfloor \dfrac{T_{\mathrm{g}} - g'}{2} \Big\rfloor, \hyperlink{A r}{A_{\mathrm{r}}} \}
 \end{equation}
 
-The total refundable amount is the legitimately remaining gas $g'$, added to $A_{\mathrm{r}}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_{\mathrm{g}} - g'$.
+The total refundable amount is the legitimately remaining gas $g'$, added to $\hyperlink{A r}{A_{\mathrm{r}}}$, with the latter component being capped up to a maximum of half (rounded down) of the total amount used $T_{\mathrm{g}} - g'$.
 
 The Ether for the gas is given to the miner, whose address is specified as the beneficiary of the present block $B$. So we define the pre-final state $\boldsymbol{\sigma}^*$ in terms of the provisional state $\boldsymbol{\sigma}_P$:
 \begin{eqnarray}
@@ -675,28 +676,28 @@ \subsection{Execution}
 
 The final state, $\boldsymbol{\sigma}'$, is reached after deleting all accounts that appear in the self-destruct set:
 \begin{eqnarray}
-\boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}^* \quad \text{except} \\
+\boldsymbol{\sigma}' & \equiv & \boldsymbol{\sigma}^* \quad \text{except} \hypertarget{A s}{}\\
 \forall i \in A_{\mathrm{s}}: \boldsymbol{\sigma}'[i] & \equiv & \varnothing
 \end{eqnarray}
 
 \hypertarget{Upsilong}{And finally, we specify $\Upsilon^g$, the total gas used in this transaction}\hypertarget{Upsilonl}{ and $\Upsilon^\mathbf{l}$, the logs created by this transaction:}
 \begin{eqnarray}
 \Upsilon^g(\boldsymbol{\sigma}, T) & \equiv & T_{\mathrm{g}} - \mathbf{g}' \\
-\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & A_{\mathrm{l}}
+\Upsilon^\mathbf{l}(\boldsymbol{\sigma}, T) & \equiv & \hyperlink{A l}{A_{\mathrm{l}}}
 \end{eqnarray}
 
 These are used to help define the \hyperlink{Transaction Receipt}{transaction receipt}.
 
 \section{Contract Creation} \label{ch:create}
 
-There are a number of intrinsic parameters used when creating an account: sender ($s$), original transactor ($o$), available gas ($g$), gas price ($p$), endowment ($v$) together with an arbitrary length byte array, $\mathbf{i}$, the initialisation EVM code and finally the present depth of the message-call/contract-creation stack ($e$).
+\hypertarget{endow}{}There are a number of intrinsic parameters used when creating an account: sender ($s$), original transactor ($o$), available gas ($g$), gas price ($p$), endowment ($v$) together with an arbitrary length byte array, $\mathbf{i}$, the initialisation EVM code and finally the present depth of the message-call/contract-creation stack ($e$).
 
 We define the creation function formally as the function $\Lambda$, which evaluates from these values, together with the state $\boldsymbol{\sigma}$ to the tuple containing the new state, remaining gas and accrued transaction substate $(\boldsymbol{\sigma}', g', A)$, as in section \ref{ch:transactions}:
 \begin{equation}
 (\boldsymbol{\sigma}', g', A) \equiv \Lambda(\boldsymbol{\sigma}, s, o, g, p, v, \mathbf{i}, e)
 \end{equation}
 
-The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$:
+The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the \hyperlink{rlp}{RLP} encoding of the structure containing only the sender and the \hyperlink{account nonce}{nonce}. Thus we define the resultant address for the new account $a$:
 \begin{equation}
 a \equiv \mathcal{B}_{96..255}\Big(\mathtt{\tiny KEC}\Big(\mathtt{\tiny RLP}\big(\;(s, \boldsymbol{\sigma}[s]_{\mathrm{n}} - 1)\;\big)\Big)\Big)
 \end{equation}
@@ -708,7 +709,7 @@ \section{Contract Creation} \label{ch:create}
 \boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except:}
 \end{equation}
 \begin{eqnarray}
-\boldsymbol{\sigma}^*[a] &\equiv& \big( 0, v + v', \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\
+\boldsymbol{\sigma}^*[a] &\equiv& \big( 0, \hyperlink{endow}{v} + v', \mathtt{\tiny \hyperlink{trie}{TRIE}}(\varnothing), \mathtt{\tiny KEC}\big(()\big) \big) \\
 \boldsymbol{\sigma}^*[s]_{\mathrm{b}} &\equiv& \boldsymbol{\sigma}[s]_{\mathrm{b}} - v
 \end{eqnarray}
 
@@ -741,11 +742,11 @@ \section{Contract Creation} \label{ch:create}
 
 $I_{\mathrm{d}}$ evaluates to the empty tuple as there is no input data to this call. $I_H$ has no special treatment and is determined from the blockchain.
 
-Code execution depletes gas, and gas may not go below zero, thus execution may exit before the code has come to a natural halting state. In this (and several other) exceptional cases we say an out-of-gas (OOG) exception has occurred: The evaluated state is defined as being the empty set, $\varnothing$, and the entire create operation should have no effect on the state, effectively leaving it as it was immediately prior to attempting the creation.
+Code execution depletes gas, and gas may not go below zero, thus execution may exit before the code has come to a \hyperlink{hhalt}{natural halting} state. In this (and several other) exceptional cases we say an out-of-gas (OOG) exception has occurred: The evaluated state is defined as being the empty set, $\varnothing$, and the entire create operation should have no effect on the state, effectively leaving it as it was immediately prior to attempting the creation.
 
 If the initialization code completes successfully, a final contract-creation cost is paid, the code-deposit cost, $c$, proportional to the size of the created contract's code:
 \begin{equation}
-c \equiv G_{\mathrm{codedeposit}} \times |\mathbf{o}|
+c \equiv \hyperlink{codedeposit}{G_{\mathrm{codedeposit}}} \times |\mathbf{o}|
 \end{equation}
 
 If there is not enough gas remaining to pay this, \ie $g^{**} < c$, then we also declare an out-of-gas exception.
@@ -773,7 +774,7 @@ \section{Contract Creation} \label{ch:create}
 Note that the intention is that the result is either a successfully created new contract with its endowment, or no new contract with no transfer of value.
 
 \subsection{Subtleties}
-Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a \hyperlink{selfdestruct}{\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal {\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever.
+Note that while the initialisation code is executing, the newly created address exists but with no intrinsic body code. Thus any message call received by it during this time causes no code to be executed. If the initialisation execution ends with a \hyperlink{selfdestruct}{\small SELFDESTRUCT} instruction, the matter is moot since the account will be deleted before the transaction is completed. For a normal \hyperlink{stop}{\small STOP} code, or if the code returned is otherwise empty, then the state is left with a zombie account, and any remaining balance will be locked into the account forever.
 
 \section{Message Call} \label{ch:call}
 In the case of executing a message call, several parameters are required: sender ($s$), transaction originator ($o$), recipient ($r$), the account whose code is to be executed ($c$, usually the same as recipient), available gas ($g$), value ($v$) and gas price ($p$) together with an arbitrary length byte array, $\mathbf{d}$, the input data of the call and finally the present depth of the message-call/contract-creation stack ($e$).
@@ -807,7 +808,7 @@ \section{Message Call} \label{ch:call}
 \end{cases}
 \end{equation}
 
-The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_{\mathrm{c}}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution halts in an exceptional fashion (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$).
+The account's associated code (identified as the fragment whose Keccak hash is $\boldsymbol{\sigma}[c]_{\mathrm{c}}$) is executed according to the execution model (see section \ref{ch:model}). Just as with contract creation, if the execution \hyperlink{zhalt}{halts in an exceptional fashion} (i.e. due to an exhausted gas supply, stack underflow, invalid jump destination or invalid instruction), then no gas is refunded to the caller and the state is reverted to the point immediately prior to balance transfer (i.e. $\boldsymbol{\sigma}$).
 
 \begin{eqnarray}
 \boldsymbol{\sigma}' & \equiv & \begin{cases}
@@ -850,7 +851,7 @@ \subsection{Basics}
 
 The machine does not follow the standard von Neumann architecture. Rather than storing program code in generally-accessible memory or storage, it is stored separately in a virtual ROM interactable only through a specialised instruction.
 
-The machine can have exceptional execution for several reasons, including stack underflows and invalid instructions. Like the out-of-gas exception, they do not leave state changes intact. Rather, the machine halts immediately and reports the issue to the execution agent (either the transaction processor or, recursively, the spawning execution environment) which will deal with it separately.
+The machine can have exceptional execution for several reasons, including stack underflows and invalid instructions. Like the out-of-gas exception, they do not leave state changes intact. Rather, the machine \\hyperlink{zhalt}{halts} immediately and reports the issue to the execution agent (either the transaction processor or, recursively, the spawning execution environment) which will deal with it separately.
 
 \subsection{Fees Overview}
 
@@ -891,10 +892,10 @@ \subsection{Execution Environment}
 
 \subsection{Execution Overview}
 
-We must now define the $\Xi$ function. In most practical implementations this will be modelled as an iterative progression of the pair comprising the full system state, $\boldsymbol{\sigma}$ and the machine state, $\boldsymbol{\mu}$. Formally, we define it recursively with a function $X$. This uses an iterator function $O$ (which defines the result of a single cycle of the state machine) together with functions $Z$ which determines if the present state is an exceptional halting state of the machine and $H$, specifying the output data of the instruction if and only if the present state is a normal halting state of the machine.
+We must now define the $\Xi$ function. In most practical implementations this will be modelled as an iterative progression of the pair comprising the full system state, $\boldsymbol{\sigma}$ and the machine state, $\boldsymbol{\mu}$. Formally, we define it recursively with a function $X$. This uses an iterator function $O$ (which defines the result of a single cycle of the state machine) together with functions $Z$ which determines if the present state is an \hyperlink{zhalt}{exceptional halting} state of the machine and $H$, specifying the output data of the instruction if and only if the present state is a \hyperlink{hhalt}{normal halting} state of the machine.
 
 \hypertarget{emptySequence}{}
-The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of $H$, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt.
+The empty sequence, denoted {{$()$}}, is not equal to the empty set, denoted $\varnothing$; this is important when interpreting the output of \hyperlink{hhalt}{$H$}, which evaluates to $\varnothing$ when execution is to continue but a series (potentially empty) when execution should halt.
 \begin{eqnarray}
 \Xi(\boldsymbol{\sigma}, g, I) & \equiv & (\boldsymbol{\sigma}'\!, \boldsymbol{\mu}'_{\mathrm{g}}, A, \mathbf{o}) \\
 (\boldsymbol{\sigma}, \boldsymbol{\mu}'\!, A, ..., \mathbf{o}) & \equiv & X\big((\boldsymbol{\sigma}, \boldsymbol{\mu}, A^0\!, I)\big) \\
@@ -920,7 +921,7 @@ \subsection{Execution Overview}
 
 Note that, when we evaluate $\Xi$, we drop the fourth element $I'$ and extract the remaining gas $\boldsymbol{\mu}'_{\mathrm{g}}$ from the resultant machine state $\boldsymbol{\mu}'$.
 
-$X$ is thus cycled (recursively here, but implementations are generally expected to use a simple iterative loop) until either $Z$ becomes true indicating that the present state is exceptional and that the machine must be halted and any changes discarded or until $H$ becomes a series (rather than the empty set) indicating that the machine has reached a controlled halt.
+$X$ is thus cycled (recursively here, but implementations are generally expected to use a simple iterative loop) until either \hyperlink{zhalt}{$Z$} becomes true indicating that the present state is exceptional and that the machine must be halted and any changes discarded or until \hyperlink{hhalt}{$H$} becomes a series (rather than the empty set) indicating that the machine has reached a controlled halt.
 
 \subsubsection{Machine State}
 The machine state $\boldsymbol{\mu}$ is defined as the tuple $(\mathrm{g}, \mathrm{pc}, \mathbf{m}, \mathrm{i}, \mathbf{s})$ which are the gas available, the program counter $\mathrm{pc} \in \mathbb{P}_{256}$ , the memory contents, the active number of words in memory (counting continuously from position 0), and the stack contents. The memory contents $\boldsymbol{\mu}_{\mathrm{m}}$ are a series of zeroes of size $2^{256}$.
@@ -930,12 +931,12 @@ \subsubsection{Machine State}
 For the purposes of defining $Z$, $H$ and $O$, we define $w$ as the current operation to be executed:
 \begin{equation}\label{eq:currentoperation}
 w \equiv \begin{cases} I_{\mathrm{b}}[\boldsymbol{\mu}_{\mathrm{pc}}] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{pc}} < \lVert I_{\mathrm{b}} \rVert \\
-\text{\small STOP} & \text{otherwise}
+\text{\hyperlink{stop}{\small STOP}} & \text{otherwise}
 \end{cases}
 \end{equation}
 
 We also assume the fixed amounts of $\mathbf{\delta}$ and $\mathbf{\alpha}$, specifying the stack items removed and added, both subscriptable on the instruction and an instruction cost function $C$ evaluating to the full cost, in gas, of executing the given instruction.
-
+\hypertarget{zhalt}{}
 \subsubsection{Exceptional Halting}
 
 The exceptional halting function $Z$ is defined as:
@@ -956,7 +957,7 @@ \subsubsection{Jump Destination Validity}
 
 We previously used $D$ as the function to determine the set of valid jump destinations given the code that is being run. We define this as any position in the code occupied by a {\small JUMPDEST} instruction.
 
-All such positions must be on valid instruction boundaries, rather than sitting in the data portion of {\small PUSH} operations and must appear within the explicitly defined portion of the code (rather than in the implicitly defined {\small STOP} operations that trail it).
+All such positions must be on valid instruction boundaries, rather than sitting in the data portion of {\small PUSH} operations and must appear within the explicitly defined portion of the code (rather than in the implicitly defined \hyperlink{stop}{\small STOP} operations that trail it).
 
 Formally:
 \begin{equation}
@@ -978,14 +979,14 @@ \subsubsection{Jump Destination Validity}
 i + w - \text{\small PUSH1} + 2 & \text{if} \quad w \in [\text{\small PUSH1}, \text{\small PUSH32}] \\
 i + 1 & \text{otherwise} \end{cases}
 \end{equation}
-
+\hypertarget{hhalt}{}
 \subsubsection{Normal Halting} \label{subsec:Normal Halting}
 
 The normal halting function $H$ is defined:
 \begin{equation} \label{eq:Normal Halting}
 H(\boldsymbol{\mu}, I) \equiv \begin{cases}
-H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \text{\small RETURN} \\
-() & \text{if} \quad w \in \text{\small STOP}, \text{\hyperlink{selfdestruct}{\small SELFDESTRUCT}} \\
+H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) & \text{if} \quad w = \hyperlink{RETURN}{\text{\small RETURN}} \\
+() & \text{if} \quad w \in \text{\hyperlink{stop}{\small STOP}}, \text{\hyperlink{selfdestruct}{\small SELFDESTRUCT}} \\
 \varnothing & \text{otherwise}
 \end{cases}
 \end{equation}
@@ -1154,7 +1155,7 @@ \subsection{Mining Proof-of-Work} \label{ch:pow}
 
 Secondly, it should not be possible to make super-linear profits, and especially not so with a high initial barrier. Such a mechanism allows a well-funded adversary to gain a troublesome amount of the network's total mining power and as such gives them a super-linear reward (thus skewing distribution in their favour) as well as reducing the network security.
 
-One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task (\cite{ASICSmithMJS}, \cite{ASICWiki}). In Bitcoin's case the task is the SHA256 hash function (\cite{Courtois2014}). While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet.
+One plague of the Bitcoin world is ASICs. These are specialised pieces of compute hardware that exist only to do a single task (\cite{ASICSmithMJS}). In Bitcoin's case the task is the SHA256 hash function (\cite{Courtois2014}). While ASICs exist for a proof-of-work function, both goals are placed in jeopardy. Because of this, a proof-of-work function that is ASIC-resistant (i.e. difficult or economically inefficient to implement in specialised compute hardware) has been identified as the proverbial silver bullet.
 
 Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the \hyperlink{block nonce}{nonce} requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of ``specialised hardware''  for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to ``specialised hardware'' for the task. For Ethereum \textit{Frontier} and \textit{Homestead} we have chosen the first path.
 
@@ -1259,7 +1260,7 @@ \section{Terminology} \label{ch:Terminology}
 
 \end{description}
 
-\hypertarget{rlp}{}
+\hypertarget{rlp}{}W
 \section{Recursive Length Prefix}\label{app:rlp}
 This is a serialisation method for encoding arbitrarily structured binary data (byte arrays).
 
@@ -1466,12 +1467,12 @@ \section{Signing Transactions}\label{app:signing}
 We assert the functions $\mathtt{\small ECDSAPUBKEY}$, $\mathtt{\small ECDSARECOVER}$ and $\mathtt{\small ECDSASIGN}$. These are formally defined in the literature, \eg by \cite{ECDSAcerticom}.
 \begin{eqnarray}
 \mathtt{\small ECDSAPUBKEY}(p_r \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64} \\
-\ e & \equiv & \hyperlink{h T}{h(T)} \\
+\ e & \equiv & \hyperlink{h T}{h(T)} \hypertarget{ECDSASIGN}{}\\
 \mathtt{\small ECDSASIGN}(e \in \mathbb{B}_{32}, p_r \in \mathbb{B}_{32}) & \equiv & (v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) \\
 \mathtt{\small ECDSARECOVER}(e \in \mathbb{B}_{32}, v \in \mathbb{B}_{1}, r \in \mathbb{B}_{32}, s \in \mathbb{B}_{32}) & \equiv & p_u \in \mathbb{B}_{64}
 \end{eqnarray}
 
-Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the aforementioned range). \hypertarget{v}{It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
+Where $p_u$ is the public key, assumed to be a byte array of size 64 (formed from the concatenation of two positive integers each $< 2^{256}$) and $p_r$ is the private key, a byte array of size 32 (or a single positive integer in the \hypertarget{v}{aforementioned range). It is assumed that $v$ is the `recovery id', a 1 byte value specifying the sign and finiteness of the curve point; this value is in the range of $[27, 30]$, however we declare the upper two possibilities, representing infinite values, invalid.} 
 
 \newcommand{\slimit}{\ensuremath{\text{s-limit}}}
 
@@ -1493,7 +1494,7 @@ \section{Signing Transactions}\label{app:signing}
 \end{equation}
 
 \hypertarget{h T}{
-The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_{\mathrm{r}}$, $T_{\mathrm{s}}$ and $\hyperlink{T w}{T_{\mathrm{w}}}$:
+The message hash, $h(T)$, to be signed is the Keccak hash of the transaction without the latter three signature components, formally described as $T_{\mathrm{r}}$, $T_{\mathrm{s}}$ and $T_{\mathrm{w}}$:
 \begin{eqnarray}
 L_S(T) & \equiv & \begin{cases}
 (T_{\mathrm{n}}, T_{\mathrm{p}}, T_{\mathrm{g}}, T_{\mathrm{t}}, \hyperlink{T v}{T_{\mathrm{v}}}, T_{\mathrm{i}}) & \text{if} \; T_{\mathrm{t}} = 0\\
@@ -1502,15 +1503,21 @@ \section{Signing Transactions}\label{app:signing}
 h(T) & \equiv & \mathtt{\small KEC}( L_S(T) )}
 \end{eqnarray}
 
-\hyperlink{T w}{}\hypertarget{T r}{}\hypertarget{T s}{The signed transaction $G(T, p_r)$ is defined as:
+The signed transaction $G(T, p_r)$ is defined as:
 \begin{eqnarray}
 G(T, p_r) \equiv T \quad \text{except:} \\
-(\hyperlink{T w}{T_{\mathrm{w}}}, T_r, T_s) = \mathtt{\small ECDSASIGN}(h(T), p_r)
-\end{eqnarray}}
+(T_{\mathrm{w}}, T_{\mathrm{r}}, T_{\mathrm{s}}) = \mathtt{\small ECDSASIGN}(h(T), p_r)
+\end{eqnarray}
 
+Where the output of $\mathtt{\small ECDSASIGN}$ is also \hyperlink{ECDSASIGN}{defined previously}. Thus:
+\begin{eqnarray}\hypertarget{T w}{}\hypertarget{T r}{}\hypertarget{T s}{}
+T_{\mathrm{w}} = \hyperlink{v}{v}\\
+T_{\mathrm{r}} = \hyperlink{r}{r}\\
+T_{\mathrm{s}} = \hyperlink{s}{s}
+\end{eqnarray}
 We may then define the sender function $S$ of the transaction as:
 \begin{equation}
-S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), \hyperlink{T w}{T_{\mathrm{w}}}, T_{\mathrm{r}}, T_{\mathrm{s}}) \big) \big)
+S(T) \equiv \mathcal{B}_{96..255}\big(\mathtt{\tiny KEC}\big( \mathtt{\small ECDSARECOVER}(h(T), T_{\mathrm{w}}, T_{\mathrm{r}}, T_{\mathrm{s}}) \big) \big)
 \end{equation}
 
 The assertion that the sender of a signed transaction equals the address of the signer should be self-evident:
@@ -1537,12 +1544,12 @@ \section{Fee Schedule}\label{app:fees}
 $G_{\mathrm{balance}}$ & 400 & This is the amount of gas to pay for a {\small BALANCE} operation. \\
 $G_{\mathrm{sload}}$ & 200 & This is paid for an {\small SLOAD} operation. \\
 $G_{\mathrm{jumpdest}}$ & 1 & This is paid for a {\small JUMPDEST} operation. \\
-$G_{\mathrm{sset}}$ & 20000 & This is paid for an {\small SSTORE} operation when the storage value is set to non-zero from zero. \\
-$G_{\mathrm{sreset}}$ & 5000 & This is the amount for an {\small SSTORE} operation when the storage value's zeroness remains unchanged or is set to zero. \\
+$G_{\mathrm{sset}}$ & 20000 & This is paid for an \hyperlink{SSTORE}{{\small SSTORE}} operation when the storage value is set to non-zero from zero. \\
+$G_{\mathrm{sreset}}$ & 5000 & This is the amount for an \hyperlink{SSTORE}{{\small SSTORE}} operation when the storage value's zeroness remains unchanged or is set to zero. \\
 $R_{\mathrm{sclear}}$ & 15000 & This is the refund given (added into the refund counter) when the storage value is set to zero from non-zero. \hypertarget{Rselfdestruct}{}\\
 $R_{\mathrm{selfdestruct}}$ & 24000 & This is the refund given (added into the refund counter) for self-destructing an account. \hypertarget{Gselfdestruct}{}\\
 $G_{\mathrm{selfdestruct}}$ & 5000 & This is the amount of gas to pay for a \hyperlink{selfdestruct}{\small SELFDESTRUCT} operation. \\
-$G_{\mathrm{create}}$ & 32000 & This is paid for a {\small CREATE} operation. \\
+$G_{\mathrm{create}}$ & 32000 & This is paid for a {\small CREATE} operation. \hypertarget{codedeposit}{}\\
 $G_{\mathrm{codedeposit}}$ & 200 & This is paid per byte for a {\small CREATE} operation to succeed in placing code into the state. \\
 $G_{\mathrm{call}}$ & 700 & This is paid for a {\small CALL} operation. \\
 $G_{\mathrm{callvalue}}$ & 9000 & This is paid for a non-zero value transfer as part of the {\small CALL} operation. \\
@@ -1579,7 +1586,7 @@ \subsection{Gas Cost}
 
 \begin{equation}
 C(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) \equiv C_{mem}(\boldsymbol{\mu}'_{\mathrm{i}})-C_{mem}(\boldsymbol{\mu}_{\mathrm{i}}) + \begin{cases}
-C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\small SSTORE} \\
+C_\text{\tiny SSTORE}(\boldsymbol{\sigma}, \boldsymbol{\mu}) & \text{if} \quad w = \text{\hyperlink{SSTORE}{{\small SSTORE}}} \\
 G_{\mathrm{exp}} & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_{\mathrm{s}}[1] = 0 \\
 G_{\mathrm{exp}} + G_{\mathrm{expbyte}}\times(1+\lfloor\log_{256}(\boldsymbol{\mu}_{\mathrm{s}}[1])\rfloor) & \text{if} \quad w = \text{\small EXP} \wedge \boldsymbol{\mu}_{\mathrm{s}}[1] > 0 \\
 G_{\mathrm{verylow}} + G_{\mathrm{copy}}\times\lceil\boldsymbol{\mu}_{\mathrm{s}}[2] \div 32\rceil & \text{if} \quad w = \text{\small CALLDATACOPY} \lor \text{\small CODECOPY} \\
@@ -1608,7 +1615,7 @@ \subsection{Gas Cost}
 \end{equation}
 \begin{equation}
 w \equiv \begin{cases} I_{\mathrm{b}}[\boldsymbol{\mu}_{\mathrm{pc}}] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{pc}} < \lVert I_{\mathrm{b}} \rVert\\
-\text{\small STOP} & \text{otherwise}
+\text{\hyperlink{stop}{\small STOP}} & \text{otherwise}
 \end{cases}
 \end{equation}
 
@@ -1619,7 +1626,7 @@ \subsection{Gas Cost}
 
 with \hyperlink{tiny CALL}{$C_\text{\tiny CALL}$}, \hyperlink{C tiny SELFDESTRUCT}{$C_\text{\tiny SELFDESTRUCT}$} and \hyperlink{C tiny SSTORE}{$C_\text{\tiny SSTORE}$} as specified in the appropriate section below. We define the following subsets of instructions:
 
-$W_{\mathrm{zero}}$ = \{{\small STOP}, {\small RETURN}\}
+$W_{\mathrm{zero}}$ = \{{\hyperlink{stop}{\small STOP}, \hyperlink{RETURN}{\text{\small RETURN}}\}
 
 $W_{\mathrm{base}}$ = \{{\small ADDRESS}, {\small ORIGIN}, {\small CALLER}, {\small CALLVALUE}, {\small CALLDATASIZE}, {\small CODESIZE}, {\small GASPRICE}, {\small COINBASE},\newline \noindent\hspace*{1cm} {\small TIMESTAMP}, {\small NUMBER}, {\small DIFFICULTY}, {\small GASLIMIT}, {\small POP}, {\small PC}, {\small MSIZE}, {\small GAS}\}
 
@@ -1668,8 +1675,8 @@ \subsection{Instruction Set}
 \toprule
 \multicolumn{5}{c}{\textbf{0s: Stop and Arithmetic Operations}} \\
 \multicolumn{5}{l}{All arithmetic is modulo $2^{256}$ unless otherwise noted. The zero-th power of zero $0^0$ is defined to be one.} \vspace{5pt} \\
-\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
-0x00 & {\small STOP} & 0 & 0 & This operation halts execution, outputting the empty sequence as per equation \ref{eq:Normal Halting}.
+\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \hypertarget{stop}{}\\
+0x00 & {\small STOP} & 0 & 0 & This operation \hyperlink{hhalt}{halts execution}.
 \\
 \midrule
 0x01 & {\small ADD} & 2 & 1 & This is the addition operation. \\
@@ -1805,7 +1812,7 @@ \subsection{Instruction Set}
 \midrule
 0x39 & {\small CODECOPY} & 3 & 0 & Copy code running in the current environment to memory. \\
 &&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_{\mathrm{s}}[2] - 1\} } \boldsymbol{\mu}'_{\mathrm{m}}[\boldsymbol{\mu}_{\mathrm{s}}[0] + i ] \equiv
-\begin{cases} I_{\mathrm{b}}[\boldsymbol{\mu}_{\mathrm{s}}[1] + i] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] + i < \lVert I_{\mathrm{b}} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
+\begin{cases} I_{\mathrm{b}}[\boldsymbol{\mu}_{\mathrm{s}}[1] + i] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] + i < \lVert I_{\mathrm{b}} \rVert \\ \text{\hyperlink{stop}{\small STOP}} & \text{otherwise} \end{cases}$\\
 &&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[2])$ \\
 &&&& The additions in $\boldsymbol{\mu}_{\mathrm{s}}[1] + i$ are not subject to the $2^{256}$ modulo. \\
 \midrule
@@ -1818,7 +1825,7 @@ \subsection{Instruction Set}
 \midrule
 0x3c & {\small EXTCODECOPY} & 4 & 0 & Copy an account's code to memory. \\
 &&&& $\forall_{i \in \{ 0 \dots \boldsymbol{\mu}_{\mathrm{s}}[3] - 1\} } \boldsymbol{\mu}'_{\mathrm{m}}[\boldsymbol{\mu}_{\mathrm{s}}[1] + i ] \equiv
-\begin{cases} \mathbf{c}[\boldsymbol{\mu}_{\mathrm{s}}[2] + i] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\small STOP} & \text{otherwise} \end{cases}$\\
+\begin{cases} \mathbf{c}[\boldsymbol{\mu}_{\mathrm{s}}[2] + i] & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[2] + i < \lVert \mathbf{c} \rVert \\ \text{\hyperlink{stop}{\small STOP}} & \text{otherwise} \end{cases}$\\
 &&&& where $\mathbf{c} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}]_{\mathrm{c}}$ \\
 &&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[1], \boldsymbol{\mu}_{\mathrm{s}}[3])$ \\
 &&&& The additions in $\boldsymbol{\mu}_{\mathrm{s}}[2] + i$ are not subject to the $2^{256}$ modulo. \\
@@ -1881,8 +1888,8 @@ \subsection{Instruction Set}
 &&&& $C_{\text{\tiny SSTORE}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \begin{cases}
 G_{\mathrm{sset}} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] \neq 0 \; \wedge \; \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{s}}[\boldsymbol{\mu}_{\mathrm{s}}[0]] = 0 \\
 G_{\mathrm{sreset}} & \text{otherwise}
-\end{cases}$ }\\
-&&&& $A'_{r} \equiv A_{r} + \begin{cases}
+\end{cases}$ }\hypertarget{A r}{}\\
+&&&& $A'_{\mathrm{r}} \equiv A_{\mathrm{r}} + \begin{cases}
 R_{\mathrm{sclear}} & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[1] = 0 \; \wedge \; \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{s}}[\boldsymbol{\mu}_{\mathrm{s}}[0]] \neq 0 \\
 0 & \text{otherwise}
 \end{cases}$ }\\
@@ -1974,7 +1981,7 @@ \subsection{Instruction Set}
 \begin{tabularx}{\textwidth}{rlrrX}
 \toprule
 \multicolumn{5}{c}{\textbf{a0s: Logging Operations}} \vspace{5pt} \\
-\multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\\
+\multicolumn{5}{l}{For all logging operations, the state change is to append an additional log entry on to the substate's log series:}\hypertarget{A l}{}\\
 \multicolumn{5}{l}{$A'_{\mathrm{l}} \equiv A_{\mathrm{l}} \cdot (I_{\mathrm{a}}, \mathbf{t}, \boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] \dots (\boldsymbol{\mu}_{\mathrm{s}}[0] + \boldsymbol{\mu}_{\mathrm{s}}[1] - 1) ])$}\\
 \multicolumn{5}{l}{and to update the memory consumption counter:}\\
 \multicolumn{5}{l}{$\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[1])$}\\
@@ -2001,9 +2008,9 @@ \subsection{Instruction Set}
 &&&& $\mathbf{i} \equiv \boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[1] \dots (\boldsymbol{\mu}_{\mathrm{s}}[1] + \boldsymbol{\mu}_{\mathrm{s}}[2] - 1) ]$ \\
 &&&& $(\boldsymbol{\sigma}', \boldsymbol{\mu}'_{\mathrm{g}}, A^+) \equiv \begin{cases}\Lambda(\boldsymbol{\sigma}^*, I_{\mathrm{a}}, I_{\mathrm{o}}, L(\boldsymbol{\mu}_{\mathrm{g}}), I_{\mathrm{p}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \mathbf{i}, I_{\mathrm{e}} + 1) & \text{if} \quad \boldsymbol{\mu}_{\mathrm{s}}[0] \leqslant \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}} \;\wedge\; I_{\mathrm{e}} < 1024\\ \big(\boldsymbol{\sigma}, \boldsymbol{\mu}_{\mathrm{g}}, \varnothing\big) & \text{otherwise} \end{cases}$ \\
 &&&& $\boldsymbol{\sigma}^* \equiv \boldsymbol{\sigma} \quad \text{except} \quad \boldsymbol{\sigma}^*[I_{\mathrm{a}}]_{\mathrm{n}} = \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{n}} + 1$ \\
-&&&& $A' \equiv A \Cup A^+$ which implies: $A'_{\mathrm{s}} \equiv A_{\mathrm{s}} \cup A^+_{\mathrm{s}} \quad \wedge \quad A'_{\mathrm{l}} \equiv A_{\mathrm{l}} \cdot A^+_{\mathrm{l}} \quad \wedge \quad A'_{\mathrm{r}} \equiv A_{\mathrm{r}} + A^+_{\mathrm{r}}$ \\
+&&&& $A' \equiv A \Cup A^+$ which implies: $A'_{\mathrm{s}} \equiv \hyperlink{A s}{A_{\mathrm{s}}} \cup A^+_{\mathrm{s}} \quad \wedge \quad A'_{\mathrm{l}} \equiv \hyperlink{A l}{A_{\mathrm{l}}} \cdot A^+_{\mathrm{l}} \quad \wedge \quad A'_{\mathrm{r}} \equiv \hyperlink{A r}{A_{\mathrm{r}}} + A^+_{\mathrm{r}}$ \\
 &&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv x$ \\
-&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting: \\
+&&&& where $x=0$ if the code execution for this operation failed due to an \hypertarget{zhalt}{exceptional halting}: \\
 &&&& $Z(\boldsymbol{\sigma}^*, \boldsymbol{\mu}, I) = \top$ or $I_{\mathrm{e}} = 1024$ \\
 &&&& (the maximum call depth limit is reached) or $\boldsymbol{\mu}_{\mathrm{s}}[0] > \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}}$ (the balance of the caller is too low to fulfil the value transfer); and otherwise $x=A(I_{\mathrm{a}}, \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{n}})$, the address of the  \\
 &&&& newly created account. \\
@@ -2019,7 +2026,7 @@ \subsection{Instruction Set}
 &&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv x$ \\
 &&&& $A' \equiv A \Cup A^+$ \\
 &&&& $t \equiv \boldsymbol{\mu}_{\mathrm{s}}[1] \mod 2^{160}$ \\
-&&&& where $x=0$ if the code execution for this operation failed due to an exceptional halting \\
+&&&& where $x=0$ if the code execution for this operation failed due to an \hypertarget{zhalt}{exceptional halting} \\
 &&&& $Z(\boldsymbol{\sigma}, \boldsymbol{\mu}, I) = \top$ or if  \\
 &&&& $\boldsymbol{\mu}_{\mathrm{s}}[2] > \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}}$ (not enough funds) or $I_{\mathrm{e}} = 1024$ (call depth limit reached); $x=1$ \\
 &&&& otherwise. \\
@@ -2051,10 +2058,9 @@ \subsection{Instruction Set}
 &&&& (as in {\small CALL}) to the present address $I_{\mathrm{a}}$. This means that the recipient is in fact the\\
 &&&& same account as at present, simply that the code is overwritten.\hypertarget{RETURN}{}\\
 \midrule
-0xf3 & {\small RETURN} & 2 & 0 & Halt execution returning output data. \\
+0xf3 & {\small RETURN} & 2 & 0 & \hyperlink{hhalt}{Halt execution} returning output data. \\
 &&&& $H_{\text{\tiny RETURN}}(\boldsymbol{\mu}) \equiv \boldsymbol{\mu}_{\mathrm{m}}[ \boldsymbol{\mu}_{\mathrm{s}}[0] \dots ( \boldsymbol{\mu}_{\mathrm{s}}[0] + \boldsymbol{\mu}_{\mathrm{s}}[1] - 1 ) ]$ \\
 &&&& This has the effect of halting the execution at this point with output defined.\\
-&&&& See equation \ref{eq:Normal Halting}. \\
 &&&& $\boldsymbol{\mu}'_{\mathrm{i}} \equiv M(\boldsymbol{\mu}_{\mathrm{i}}, \boldsymbol{\mu}_{\mathrm{s}}[0], \boldsymbol{\mu}_{\mathrm{s}}[1])$ \\
 \end{tabularx}
 
@@ -2066,12 +2072,12 @@ \subsection{Instruction Set}
 \midrule
 0xfe & {\small INVALID} & $\varnothing$ & $\varnothing$ & Designated invalid instruction. \hypertarget{selfdestruct}{\\
 \midrule
-0xff & {\small SELFDESTRUCT} & 1 & 0 & Halt execution and register account for later deletion. }\\
-&&&& $A'_{\mathrm{s}} \equiv A_{\mathrm{s}} \cup \{ I_{\mathrm{a}} \}$ \\
+0xff & {\small SELFDESTRUCT} & 1 & 0 & \hyperlink{hhalt}{Halt execution} and register account for later deletion. }\\
+&&&& $A'_{\mathrm{s}} \equiv \hyperlink{A s}{A_{\mathrm{s}}} \cup \{ I_{\mathrm{a}} \}$ \\
 &&&& $\boldsymbol{\sigma}'[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}]_{\mathrm{b}} \equiv \boldsymbol{\sigma}[\boldsymbol{\mu}_{\mathrm{s}}[0] \mod 2^{160}]_{\mathrm{b}} + \boldsymbol{\sigma}[I_{\mathrm{a}}]_{\mathrm{b}}$ \\
 &&&& $\boldsymbol{\sigma}'[I_{\mathrm{a}}]_{\mathrm{b}} \equiv 0$ \\
 &&&& $A'_{r} \equiv A_{r} + \begin{cases}
-\hyperlink{Rselfdestruct}{R_{\mathrm{selfdestruct}}} & \text{if} \quad I_{\mathrm{a}} \notin A_{\mathrm{s}} \\
+\hyperlink{Rselfdestruct}{R_{\mathrm{selfdestruct}}} & \text{if} \quad I_{\mathrm{a}} \notin \hyperlink{A s}{A_{\mathrm{s}}} \\
 0 & \text{otherwise} 
 \end{cases}$ \hypertarget{C tiny SELFDESTRUCT}{}\\
 &&&& $ C_{\text{\tiny SELFDESTRUCT}}(\boldsymbol{\sigma}, \boldsymbol{\mu}) \equiv \hyperlink{Gselfdestruct}{G_{\mathrm{selfdestruct}}} + \begin{cases}
@@ -2081,7 +2087,7 @@ \subsection{Instruction Set}
 \bottomrule
 \end{tabularx}
 
-%Is in the terminology list.
+%This is in the terminology list.
 %\section{Low-level Lisp-like Language}\label{app:lll}
 %The Low-level Lisp-like Language is a language created in order to efficiently author low-level programs (contracts) without having to resort to EVM-Assembly. 
 

From f9712ae303ede6580a92b742205d9e2fcb78ac83 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Fri, 27 Oct 2017 10:16:54 +1100
Subject: [PATCH 093/132] Minor modifications to Biblio.bib: Wayback link notes

---
 Biblio.bib | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Biblio.bib b/Biblio.bib
index 5fd0fb51..a03ca4fe 100644
--- a/Biblio.bib
+++ b/Biblio.bib
@@ -205,6 +205,7 @@ @InProceedings{dwork92pricingvia
 
 @Article{nakamoto2008bitcoin,
 	url = "http://nakamotoinstitute.org/bitcoin/",
+	note = "\url{https://web.archive.org/web/20171026231027/http://nakamotoinstitute.org/bitcoin/}",
 	author = {Nakamoto, Satoshi},
 	title = {{Bitcoin: A peer-to-peer electronic cash system}},
 	journal = {{Consulted}},
@@ -223,6 +224,7 @@ @Misc{sprankel2013technical
 
 @Article{aron2012bitcoin,
 	url = "http://www.sciencedirect.com/science/article/pii/S0262407912601055",
+	note = "Not available to be archived by the Wayback Machine.",
 	Publisher = {{Elsevier}},
 	author = "Aron, Jacob",
 	title = {{BitCoin software finds new life}},

From d5ae6608e3d08dd0deaa8973a48348d298149060 Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Tue, 2 Jan 2018 11:51:19 +1100
Subject: [PATCH 094/132] BLOCKHASH

---
 Paper.tex | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Paper.tex b/Paper.tex
index 5ef9385f..5ae19deb 100644
--- a/Paper.tex
+++ b/Paper.tex
@@ -1182,7 +1182,7 @@ \subsection{Data Feeds}
 The general pattern involves a single contract within Ethereum which, when given a message call, replies with some timely information concerning an external phenomenon. An example might be the local temperature of New York City. This would be implemented as a contract that returned that value of some known point in storage. Of course this point in storage must be maintained with the correct such temperature, and thus the second part of the pattern would be for an external server to run an Ethereum node, and immediately on discovery of a new block, creates a new valid transaction, sent to the contract, updating said value in storage. The contract's code would accept such updates only from the identity contained on said server.
 
 \subsection{Random Numbers}
-Providing random numbers within a deterministic system is, naturally, an impossible task. However, we can approximate with pseudo-random numbers by utilising data which is generally unknowable at the time of transacting. Such data might include the block's hash, the block's timestamp and the block's beneficiary address. In order to make it hard for malicious miner to control those values, one should use the {\small BLOCKHASH} operation in order to use hashes of the previous 256 blocks as pseudo-random numbers. For a series of such numbers, a trivial solution would be to add some constant amount and hashing the result.
+Providing random numbers within a deterministic system is, naturally, an impossible task. However, we can approximate with pseudo-random numbers by utilising data which is generally unknowable at the time of transacting. Such data might include the block's hash, the block's timestamp and the block's beneficiary address. In order to make it hard for malicious miner to control those values, one should use the {\small \hyperlink{blockhash}{BLOCKHASH}} operation in order to use hashes of the previous 256 blocks as pseudo-random numbers. For a series of such numbers, a trivial solution would be to add some constant amount and hashing the result.
 
 \section{Future Directions} \label{ch:future}
 
@@ -1568,7 +1568,7 @@ \section{Fee Schedule}\label{app:fees}
 $G_{\mathrm{sha3}}$ & 30 & This is paid for each {\small SHA3} operation. \\
 $G_{\mathrm{sha3word}}$ & 6 & This is paid for each word (rounded up) for input data to a {\small SHA3} operation. \\
 $G_{\mathrm{copy}}$ & 3 & This is a partial payment for {\small *COPY} operations, multiplied by the number of words copied, rounded up. \\
-$G_{\mathrm{blockhash}}$ & 20 & This is a payment for a {\small BLOCKHASH} operation. \\
+$G_{\mathrm{blockhash}}$ & 20 & This is a payment for a {\small \hyperlink{blockhash}{BLOCKHASH}} operation. \\
 
 %extern u256 const \mathbf{c}_copyGas;			///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added.
 \bottomrule
@@ -1610,7 +1610,7 @@ \subsection{Gas Cost}
 G_{\mathrm{\mathrm{high}}} & \text{if} \quad w \in W_{\mathrm{\mathrm{high}}}\\
 G_{\mathrm{extcode}} & \text{if} \quad w \in W_{\mathrm{extcode}}\\
 G_{\mathrm{balance}} & \text{if} \quad w = \text{\small BALANCE}\\
-G_{\mathrm{blockhash}} & \text{if} \quad w = \text{\small BLOCKHASH}\\
+G_{\mathrm{blockhash}} & \text{if} \quad w = \text{\small \hyperlink{blockhash}{BLOCKHASH}}\\
 \end{cases}
 \end{equation}
 \begin{equation}
@@ -1835,7 +1835,7 @@ \subsection{Instruction Set}
 \begin{tabularx}{\textwidth}{rlrrX}
 \toprule
 \multicolumn{5}{c}{\textbf{40s: Block Information}} \vspace{5pt} \\
-\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \\
+\textbf{Value} & \textbf{Mnemonic} & $\delta$ & $\alpha$ & \textbf{Description} \vspace{5pt} \hypertarget{blockhash}{BLOCKHASH}\\
 0x40 & {\small BLOCKHASH} & 1 & 1 & Get the hash of one of the 256 most recent complete blocks. \\
 &&&& $\boldsymbol{\mu}'_{\mathrm{s}}[0] \equiv P(I_{\hyperlink{H p}{H_{\mathrm{p}}}}, \boldsymbol{\mu}_{\mathrm{s}}[0], 0)$ \\
 &&&& where $P$ is the hash of a block of a particular number, up to a maximum age. 0 is left on the stack if the looked for block number is greater than the current block number or more than 256 blocks behind the current block. \\

From 501be0033bda0de1327049ac58cdfc1ea82552a9 Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 4 Jan 2018 10:10:39 +1100
Subject: [PATCH 095/132] LICENSE-GNU-V3

---
 LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 674 insertions(+)
 create mode 100644 LICENSE

diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..94a9ed02
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. 
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    
+    Copyright (C)   
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+      Copyright (C)   
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+.

From d2af0163d59498ff49e28b28590a6494f0a84383 Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 4 Jan 2018 10:51:21 +1100
Subject: [PATCH 096/132] Deprecated notice

---
 README.md | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 20e0b1cb..ffbcda4e 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,21 @@
 
 [![Gitter](https://badges.gitter.im/ethereum/yellowpaper.svg)](https://gitter.im/ethereum/yellowpaper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 
-The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf.
+## Notice that this is not up-to-date
+
+This Yellow Paper does not include changes to Ethereum that have been made after this commit 759dcc (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on [August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because of using the KEVM, "the first fully executable formal semantics of the EVM", as an alternative to the current EVM (as of January 4 2018), which is reasonable.
+
+For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md).
+
+## The paper
+The paper comes as a single ``latex`` file ``Paper.tex``. 
+
+Here is the latest version of the PDF that is based on the changes that I've made:
+
+[Paper.pdf](https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf).
+
+This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here](
+https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. To get this link you just right click on a link that directs to the target that you want in the PDF (in a browser or program) and copy the link.
 
 How to build
 ---

From d1a4b4a6fb8d77423d44eddc37cc90e8ecddeee7 Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 4 Jan 2018 10:54:33 +1100
Subject: [PATCH 097/132] [this commit, 759dcc,

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ffbcda4e..d53ac314 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 
 ## Notice that this is not up-to-date
 
-This Yellow Paper does not include changes to Ethereum that have been made after this commit 759dcc (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on [August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because of using the KEVM, "the first fully executable formal semantics of the EVM", as an alternative to the current EVM (as of January 4 2018), which is reasonable.
+This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because of using the KEVM, "the first fully executable formal semantics of the EVM", as an alternative to the current EVM (as of January 4 2018), which is reasonable.
 
 For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md).
 

From e7b879bd3b177e1cae9ceeb48035bf3b9e582939 Mon Sep 17 00:00:00 2001
From: James Ray 
Date: Thu, 4 Jan 2018 11:03:49 +1100
Subject: [PATCH 098/132] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d53ac314..3e4e908f 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 
 ## Notice that this is not up-to-date
 
-This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because of using the KEVM, "the first fully executable formal semantics of the EVM", as an alternative to the current EVM (as of January 4 2018), which is reasonable.
+This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable.
 
 For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md).
 

From c7418b201f692a713bfead1cd0c2017cd5c8cca0 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 4 Jan 2018 12:36:20 +1100
Subject: [PATCH 099/132] Add P

---
 .gitignore | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 44c9250f..edc49f03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,5 @@ Paper.aux
 Paper.bbl
 Paper.blg
 Paper.log
-Paper.pdf
 Version.tex
 

From e0613f593d7891d9c19a2caf76c81ec2486ce462 Mon Sep 17 00:00:00 2001
From: jamesray1 <16969914+jamesray1@users.noreply.github.com>
Date: Thu, 4 Jan 2018 12:37:04 +1100
Subject: [PATCH 100/132] Modify .gitignore and add Paper.pdf to tracking

---
 Paper.pdf | Bin 0 -> 530194 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Paper.pdf

diff --git a/Paper.pdf b/Paper.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..a6bc36440d846822b6d440037d17f8a600444011
GIT binary patch
literal 530194
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

$MtiwSsZTrcmsE=wMUbs#Z#W$(_XbA5r=o0k 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

_enTIw~|)^XPzW4r=eiRo{W;!lL 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 literal 0 HcmV?d00001 From b8ae6d706282eed41bb92730159a507a3bec857e Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 4 Jan 2018 12:39:33 +1100 Subject: [PATCH 101/132] Remove Paper.pdf from .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 44c9250f..edc49f03 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,5 @@ Paper.aux Paper.bbl Paper.blg Paper.log -Paper.pdf Version.tex From 17f8126f591794407c3721001f30510149890429 Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 4 Jan 2018 12:43:58 +1100 Subject: [PATCH 102/132] Readme: update Paper.pdf --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3e4e908f..6e2dec1c 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ For the Byzantium Hard Fork (of which the changes made by it are not included in ## The paper The paper comes as a single ``latex`` file ``Paper.tex``. -Here is the latest version of the PDF that is based on the changes that I've made: +Here is the latest version of the PDF that is based on the changes that I've made (which is the same as the Paper.pdf file above): -[Paper.pdf](https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf). +[Paper.pdf](https://github.com/Ethereum-community/yellowpaper/blob/master/Paper.pdf). This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. To get this link you just right click on a link that directs to the target that you want in the PDF (in a browser or program) and copy the link. From d40abd815f383ebfd17422e1773c860669ad9a6d Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 4 Jan 2018 16:56:24 +1100 Subject: [PATCH 103/132] Create Byzantium-Hard-Fork-changes.md --- Byzantium-Hard-Fork-changes.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Byzantium-Hard-Fork-changes.md diff --git a/Byzantium-Hard-Fork-changes.md b/Byzantium-Hard-Fork-changes.md new file mode 100644 index 00000000..4c008133 --- /dev/null +++ b/Byzantium-Hard-Fork-changes.md @@ -0,0 +1,19 @@ +

What changes are included in the Byzantium hard fork?

+

The following upgrades are included:

+
+

What if something goes wrong?

+

In the event that a critical bug is discovered, the following communication channels will be utilized:

+ +Source: verbatim extract from [this Ethereum blog post](https://web.archive.org/web/20180104055521/https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/) From 287788a39fc941726557b0d64510c1ba664e7400 Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 4 Jan 2018 17:01:17 +1100 Subject: [PATCH 104/132] Update Byzantium-Hard-Fork-changes.md --- Byzantium-Hard-Fork-changes.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Byzantium-Hard-Fork-changes.md b/Byzantium-Hard-Fork-changes.md index 4c008133..e23d8ac3 100644 --- a/Byzantium-Hard-Fork-changes.md +++ b/Byzantium-Hard-Fork-changes.md @@ -10,10 +10,5 @@
  • Changes to the difficulty adjustment formula to take uncles into account (EIP 100)
  • Delay of the ice age / difficulty bomb by 1 year, and reduction of block reward from 5 to 3 ether (EIP 649)
  • -

    What if something goes wrong?

    -

    In the event that a critical bug is discovered, the following communication channels will be utilized:

    - + Source: verbatim extract from [this Ethereum blog post](https://web.archive.org/web/20180104055521/https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/) From 70b5f4ed9c9b4c703bd92cd0d00a8334f775bf44 Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 4 Jan 2018 17:01:43 +1100 Subject: [PATCH 105/132] Update Byzantium-Hard-Fork-changes.md --- Byzantium-Hard-Fork-changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Byzantium-Hard-Fork-changes.md b/Byzantium-Hard-Fork-changes.md index e23d8ac3..96b37581 100644 --- a/Byzantium-Hard-Fork-changes.md +++ b/Byzantium-Hard-Fork-changes.md @@ -11,4 +11,4 @@
  • Delay of the ice age / difficulty bomb by 1 year, and reduction of block reward from 5 to 3 ether (EIP 649)
  • -Source: verbatim extract from [this Ethereum blog post](https://web.archive.org/web/20180104055521/https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/) +Source: verbatim extract from [this Ethereum blog post](https://web.archive.org/web/20180104055521/https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/). From ed29a1df0c1f466c1f7453453c6e4ed518882293 Mon Sep 17 00:00:00 2001 From: James Ray Date: Thu, 4 Jan 2018 17:02:24 +1100 Subject: [PATCH 106/132] Byzantium EIPs --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6e2dec1c..155c971b 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ [![Gitter](https://badges.gitter.im/ethereum/yellowpaper.svg)](https://gitter.im/ethereum/yellowpaper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -## Notice that this is not up-to-date +## This is not up-to-date This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable. -For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). +For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. Also, refer to [here](yellowpaper/Byzantium-Hard-Fork-changes.md) for a quick summary of Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). ## The paper The paper comes as a single ``latex`` file ``Paper.tex``. From c63a7316309c51943c4e85e1f976adf0fc200be4 Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 5 Jan 2018 12:36:44 +1100 Subject: [PATCH 107/132] Jello paper --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 155c971b..16153d1a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,12 @@ [![Gitter](https://badges.gitter.im/ethereum/yellowpaper.svg)](https://gitter.im/ethereum/yellowpaper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +## You may be better off reading the Jello paper + +While James Ray hasn't finished reading it, the [Jello Paper](https://thehydra.io/evm/) seems like it may be a better alternative, since it is executable and thus better for formal verification, and thereby better at detecting bugs. + + + ## This is not up-to-date This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable. From d06ace7f4cb4c3613601b7e46cb4377a84b1c82c Mon Sep 17 00:00:00 2001 From: James Ray Date: Fri, 5 Jan 2018 12:38:27 +1100 Subject: [PATCH 108/132] Jello [m] --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 16153d1a..9e4e7f6a 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,7 @@ ## You may be better off reading the Jello paper -While James Ray hasn't finished reading it, the [Jello Paper](https://thehydra.io/evm/) seems like it may be a better alternative, since it is executable and thus better for formal verification, and thereby better at detecting bugs. - - +While James Ray hasn't finished reading the [Jello Paper](https://thehydra.io/evm/), it seems like it may be a better alternative, since it is executable and thus better for formal verification, and thereby better at detecting bugs. ## This is not up-to-date From a6da728c61a4d472ca7ccd0d71bea3d001190cf3 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Fri, 5 Jan 2018 17:29:30 +1100 Subject: [PATCH 109/132] UNLICENSE Although actually it still has no license since it is modified from ethereum/yellowpaper. --- LICENSE | 698 ++------------------------------------------------------ 1 file changed, 24 insertions(+), 674 deletions(-) diff --git a/LICENSE b/LICENSE index 94a9ed02..cf1ab25d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,24 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to From ae127899e10acc7f0732f719526cddb02aa5725c Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Fri, 5 Jan 2018 17:30:45 +1100 Subject: [PATCH 110/132] UNLICENSE --- LICENSE | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/LICENSE b/LICENSE index cf1ab25d..d5fabec9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,3 +1,7 @@ +This is a draft only. The actual license is still no license, and therefore all rights reserved, since this repository is forked from github.com.ethereum/yellowpaper. + +Draft: + This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or From 37785e425b15e7a6573cd0d76ea077c13b2e0e1f Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Fri, 5 Jan 2018 17:31:41 +1100 Subject: [PATCH 111/132] UNLICENSE DRAFT --- LICENSE | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index d5fabec9..e0bf9bf1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,6 @@ -This is a draft only. The actual license is still no license, and therefore all rights reserved, since this repository is forked from github.com.ethereum/yellowpaper. +This is a draft only. The actual license is still no license, and +therefore all rights reserved, since this repository is forked from +https://github.com.ethereum/yellowpaper. Draft: From fd3610e52e826376d3e13c04d7741e0a62456d56 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 6 Jan 2018 06:57:06 +1100 Subject: [PATCH 112/132] ## Byzantium and beyond --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9e4e7f6a..cdce86dc 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ While James Ray hasn't finished reading the [Jello Paper](https://thehydra.io/ev This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable. +## Byzantium and beyond For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. Also, refer to [here](yellowpaper/Byzantium-Hard-Fork-changes.md) for a quick summary of Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). ## The paper From 2d674db2b5759ab2bbdec2a8721cfc2089b4bfee Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 6 Jan 2018 09:36:55 +1100 Subject: [PATCH 113/132] Draft CC4.0 --- LICENSE | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/LICENSE b/LICENSE index e0bf9bf1..8bc812c4 100644 --- a/LICENSE +++ b/LICENSE @@ -4,27 +4,8 @@ https://github.com.ethereum/yellowpaper. Draft: -This is free and unencumbered software released into the public domain. +The license for this repository is Creative Commons 4.0. -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. +A human-readable summary (and not a substitute) of the license is [here](https://creativecommons.org/licenses/by/4.0/). -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to +The license is [here](https://creativecommons.org/licenses/by/4.0/legalcode). From 52a860f955ae3fdc8b717a1e52004c00d9bf4b09 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 6 Jan 2018 10:18:33 +1100 Subject: [PATCH 114/132] Releases --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cdce86dc..914c0cf8 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ While James Ray hasn't finished reading the [Jello Paper](https://thehydra.io/ev This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable. -## Byzantium and beyond -For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. Also, refer to [here](yellowpaper/Byzantium-Hard-Fork-changes.md) for a quick summary of Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). +## Releases +For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. Also, refer to [here](yellowpaper/Byzantium-Hard-Fork-changes.md) for a quick summary of Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). For more information about releases, see [here](https://github.com/ethereum/homestead-guide/blob/master/source/introduction/the-homestead-release.rst) (which has the latest changes) or [here](http://ethdocs.org/en/latest/introduction/the-homestead-release.html) (which doesn't have the latest changes as of January 8, 2018). ## The paper The paper comes as a single ``latex`` file ``Paper.tex``. From 4fbf06b6a5a9776bed316e0a666da3c9e1b14b76 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 6 Jan 2018 10:24:52 +1100 Subject: [PATCH 115/132] Add a link for license discussion --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 914c0cf8..24a9e48e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ While James Ray hasn't finished reading the [Jello Paper](https://thehydra.io/ev ## This is not up-to-date -This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable. +This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f), as well as [here](https://github.com/ethereum/yellowpaper/pull/262#issuecomment-355496755) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable. ## Releases For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. Also, refer to [here](yellowpaper/Byzantium-Hard-Fork-changes.md) for a quick summary of Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). For more information about releases, see [here](https://github.com/ethereum/homestead-guide/blob/master/source/introduction/the-homestead-release.rst) (which has the latest changes) or [here](http://ethdocs.org/en/latest/introduction/the-homestead-release.html) (which doesn't have the latest changes as of January 8, 2018). From 39713f903a6bc6f88fe30535794c05431b912a55 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 14:52:56 +1100 Subject: [PATCH 116/132] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 24a9e48e..06e1173f 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ [![Gitter](https://badges.gitter.im/ethereum/yellowpaper.svg)](https://gitter.im/ethereum/yellowpaper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +## This repo is not going to be maintained, as the original Yellow Paper can now be maintained + +The license was added [here](https://github.com/ethereum/yellowpaper/commit/fdea8446425fecc7d864ec7b19f98f80ba88790f) + ## You may be better off reading the Jello paper While James Ray hasn't finished reading the [Jello Paper](https://thehydra.io/evm/), it seems like it may be a better alternative, since it is executable and thus better for formal verification, and thereby better at detecting bugs. From 46040f8ea50e0e933b42967d24b9850063493787 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 14:53:08 +1100 Subject: [PATCH 117/132] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 06e1173f..3b9d2543 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## This repo is not going to be maintained, as the original Yellow Paper can now be maintained -The license was added [here](https://github.com/ethereum/yellowpaper/commit/fdea8446425fecc7d864ec7b19f98f80ba88790f) +The license was added [here](https://github.com/ethereum/yellowpaper/commit/fdea8446425fecc7d864ec7b19f98f80ba88790f). ## You may be better off reading the Jello paper From 93e3ea3f576da1b6840da4975fcdd9044d9383fe Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 15:38:51 +1100 Subject: [PATCH 118/132] Update README.md --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 54edd4ec..a1e4b0db 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,6 @@ It is free culture work, licensed under the Creative Commons Attribution Share-A The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf or just [yellowpaper.io](http://yellowpaper.io/) . -## This is not up-to-date - -This Yellow Paper does not include changes to Ethereum that have been made after [this commit, 759dcc, (after which this repository was branched from the Ethereum Foundation Yellow Paper repository, i.e. the latest shared commit in both repositories is this commit) on August 8 2017](https://github.com/jamesray1/yellowpaper/commit/759dccde49c3a1a457196665d1db06baba220bf0). See the ensuing discussion [here](https://gitter.im/ethereum/yellowpaper?at=5a4ad08e03838b2f2a5d350f), as well as [here](https://github.com/ethereum/yellowpaper/pull/262#issuecomment-355496755) to gain a better understanding of why the Yellow paper won't be maintained by the Ethereum Foundation. In short, it is because the copyright from Gavin Wood's repo isn't specified, which means that by default the work is under exclusive copyright. This creates too much uncertainty from the Ethereum Foundation so they don't want to risk it, which is reasonable. - ## Releases For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. Also, refer to [here](yellowpaper/Byzantium-Hard-Fork-changes.md) for a quick summary of Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). For more information about releases, see [here](https://github.com/ethereum/homestead-guide/blob/master/source/introduction/the-homestead-release.rst) (which has the latest changes) or [here](http://ethdocs.org/en/latest/introduction/the-homestead-release.html) (which doesn't have the latest changes as of January 8, 2018). @@ -30,7 +26,12 @@ https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an How to build --- -In order to build, use the supplied build script (``build.sh``. You can clone the directory with `git clone https://github.com/ethereum/yellowpaper.git` or use the URL of your forked clone, then `cd yellowpaper` and run `./build.sh`. Then open the produced PDF. If running `./build.sh` again, you can leave the PDF open; you don't need to close and reopen it for it to update). Following the first time, you can use the standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. It can be viewed in ``PDF`` format after building. +``` +git clone https://github.com/ethereum/yellowpaper.git +cd yellowpaper +./build.sh +``` +Following buidling, you can use standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. It can be viewed in ``PDF`` format after building. ## The Jello paper is an alternative From bb2a1e6b364e8e5565249dba38a28905053942bf Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 15:39:54 +1100 Subject: [PATCH 119/132] Delete LICENSE --- LICENSE | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 LICENSE diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 8bc812c4..00000000 --- a/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ -This is a draft only. The actual license is still no license, and -therefore all rights reserved, since this repository is forked from -https://github.com.ethereum/yellowpaper. - -Draft: - -The license for this repository is Creative Commons 4.0. - -A human-readable summary (and not a substitute) of the license is [here](https://creativecommons.org/licenses/by/4.0/). - -The license is [here](https://creativecommons.org/licenses/by/4.0/legalcode). From 8d04b53b6dd2b45eabb0cf984e863d08b1951dd5 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 17:57:14 +1100 Subject: [PATCH 120/132] ## Releases --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1e4b0db..4ba5c095 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ It is free culture work, licensed under the Creative Commons Attribution Share-A The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf or just [yellowpaper.io](http://yellowpaper.io/) . ## Releases -For the Byzantium Hard Fork (of which the changes made by it are not included in this paper), refer to [here](https://web.archive.org/web/20171026151615/https://github.com/ethereum/EIPs#accepted-eips-planned-for-adoption-in-the-byzantium-metropolis-hard-fork), which is an archive link showing the Byzantium EIPs. Also, refer to [here](yellowpaper/Byzantium-Hard-Fork-changes.md) for a quick summary of Byzantium EIPs. For further changes, e.g. the Constantinople Hard Fork (TBA) and Serenity, refer to the [the finalized list of EIPs in the Ethereum EIPs repository](https://github.com/ethereum/EIPS#finalized-eips-standards-that-have-been-adopted). Note that [this is an archive link in case the EIPs list is changed in a way that does not breakdown EIPs into different releases, as is the case up until now. This archive link lists the deferred Constantinople EIPs](https://web.archive.org/web/20180103233351/https://github.com/ethereum/EIPS). For changes in the Homestead release, see [this EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md). For more information about releases, see [here](https://github.com/ethereum/homestead-guide/blob/master/source/introduction/the-homestead-release.rst) (which has the latest changes) or [here](http://ethdocs.org/en/latest/introduction/the-homestead-release.html) (which doesn't have the latest changes as of January 8, 2018). +This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR! For further information on previous and planned releases, see [here](https://github.com/ethereum/wiki/wiki/Releases). ## The paper The paper comes as a single ``latex`` file ``Paper.tex``. From e8c1aeea7e494c0f79b715935995cf1a8bb06517 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 18:00:39 +1100 Subject: [PATCH 121/132] Restructuring and How to build --- README.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4ba5c095..c0a847c7 100644 --- a/README.md +++ b/README.md @@ -15,15 +15,12 @@ The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR! For further information on previous and planned releases, see [here](https://github.com/ethereum/wiki/wiki/Releases). ## The paper -The paper comes as a single ``latex`` file ``Paper.tex``. -Here is the latest version of the PDF that is based on the changes that I've made (which is the same as the Paper.pdf file above): - -[Paper.pdf](https://github.com/ethereum/yellowpaper/blob/master/Paper.pdf). - -This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( +[Here](https://github.com/ethereum/yellowpaper/blob/master/Paper.pdf) is the latest version of the PDF (which is the same as the Paper.pdf file above). This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. To get this link you just right click on a link that directs to the target that you want in the PDF (in a browser or program) and copy the link. +The paper also comes as a single ``latex`` file ``Paper.tex``, which is built as a PDF as follows. + How to build --- ``` @@ -31,7 +28,7 @@ git clone https://github.com/ethereum/yellowpaper.git cd yellowpaper ./build.sh ``` -Following buidling, you can use standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. It can be viewed in ``PDF`` format after building. +This will create a PDF version of the Yellow Paper. Following buidling, you can also use standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. ## The Jello paper is an alternative From 0d01f15dd39b1c5269ee6ad3de0f65e22be6efba Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 18:01:18 +1100 Subject: [PATCH 122/132] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index c0a847c7..9cec2a34 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,6 @@ The Yellow Paper is a formal definition of the Ethereum protocol, originally by It is free culture work, licensed under the Creative Commons Attribution Share-Alike (CC-BY-SA)i version 4.0. -## Usage - -The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper.pdf or just [yellowpaper.io](http://yellowpaper.io/) . - ## Releases This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR! For further information on previous and planned releases, see [here](https://github.com/ethereum/wiki/wiki/Releases). From f6314731a99bfdf3268df700af7adb61d3c478c9 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sun, 7 Jan 2018 18:01:52 +1100 Subject: [PATCH 123/132] Fix i typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cec2a34..b579e4b8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ The Yellow Paper is a formal definition of the Ethereum protocol, originally by Gavin Wood, currently maintained by Nick Savers and with contributions from many people around the world. -It is free culture work, licensed under the Creative Commons Attribution Share-Alike (CC-BY-SA)i version 4.0. +It is free culture work, licensed under the Creative Commons Attribution Share-Alike (CC-BY-SA) version 4.0. ## Releases This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR! For further information on previous and planned releases, see [here](https://github.com/ethereum/wiki/wiki/Releases). From 9b929c4799bdfe3de2b1da6ecc83a18bf9476f5d Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Tue, 9 Jan 2018 09:29:47 +1100 Subject: [PATCH 124/132] Remove Jello Paper --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index b579e4b8..b627b833 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,3 @@ cd yellowpaper ./build.sh ``` This will create a PDF version of the Yellow Paper. Following buidling, you can also use standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. - -## The Jello paper is an alternative - -The [Jello Paper](https://thehydra.io/evm/) is an alternative or additional read. It is executable and thus better for formal verification, and thereby better at detecting bugs. From c4f9147a6fd8ef4b4aaa03c93be0c6d487d23a74 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Tue, 9 Jan 2018 09:31:54 +1100 Subject: [PATCH 125/132] Remove Jello, Byzantium branch --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b627b833..b3a30c8e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ The Yellow Paper is a formal definition of the Ethereum protocol, originally by It is free culture work, licensed under the Creative Commons Attribution Share-Alike (CC-BY-SA) version 4.0. ## Releases -This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR! For further information on previous and planned releases, see [here](https://github.com/ethereum/wiki/wiki/Releases). +This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR to the [`byzantium` branch](https://github.com/ethereum/yellowpaper/tree/byzantium)! For further information on previous and planned releases, see [here](https://github.com/ethereum/wiki/wiki/Releases). ## The paper From b5ed18bf47d3e51d68546469070e8640f255e3a8 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Tue, 9 Jan 2018 09:44:58 +1100 Subject: [PATCH 126/132] Delete Byzantium-Hard-Fork-changes.md --- Byzantium-Hard-Fork-changes.md | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 Byzantium-Hard-Fork-changes.md diff --git a/Byzantium-Hard-Fork-changes.md b/Byzantium-Hard-Fork-changes.md deleted file mode 100644 index 96b37581..00000000 --- a/Byzantium-Hard-Fork-changes.md +++ /dev/null @@ -1,14 +0,0 @@ -

    What changes are included in the Byzantium hard fork?

    -

    The following upgrades are included:

    -
      -
    • Addition of ‘REVERT’ opcode, which permits error handling without consuming all gas (EIP 140)
    • -
    • Transaction receipts now include a status field to indicate success or failure EIP 658)
    • -
    • Elliptic curve addition and scalar multiplication on alt_bn128 (EIP 196) and pairing checks (EIP 197), permitting ZK-Snarks and other cryptographic mathemagic™
    • -
    • Support for big integer modular exponentiation (EIP 198), enabling RSA signature verification and other cryptographic applications
    • -
    • Support for variable length return values (EIP 211)
    • -
    • Addition of the ‘STATICCALL’ opcode, permitting non-state-changing calls to other contracts (EIP 214)
    • -
    • Changes to the difficulty adjustment formula to take uncles into account (EIP 100)
    • -
    • Delay of the ice age / difficulty bomb by 1 year, and reduction of block reward from 5 to 3 ether (EIP 649)
    • -
    - -Source: verbatim extract from [this Ethereum blog post](https://web.archive.org/web/20180104055521/https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/). From 2253916d3998c52b1cca9ca4a6c37cf5d2e079a7 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Tue, 9 Jan 2018 14:56:49 +1100 Subject: [PATCH 127/132] Add Paper.pdf --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index edc49f03..44c9250f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ Paper.aux Paper.bbl Paper.blg Paper.log +Paper.pdf Version.tex From 75084debdcde32568b6dd4c6f593892761d2ef4f Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Thu, 11 Jan 2018 10:28:58 +1100 Subject: [PATCH 128/132] Delete Paper.pdf --- Paper.pdf | Bin 530194 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Paper.pdf diff --git a/Paper.pdf b/Paper.pdf deleted file mode 100644 index a6bc36440d846822b6d440037d17f8a600444011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530194 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

    $MtiwSsZTrcmsE=wMUbs#Z#W$(_XbA5r=o0k zEFL}?2|#N?u;GT8zloUt=?$kt^~OAbxrU8QrA{NC5Ke&tz<)lrWdt!NwgxNv)`*o? zV0Y2$D0It27NIvFXCuJH3Kf%Hw(P=xlkrwj+)T8`fp;6=I@z*SHPCSZy*)@64_UBiqV6ClGgHSd~ zCs?ECao2YRfik&u0$$jFXuCq_tgZeK%-u8sDC&ewe+XJy$Z*0paS%yi9o>6MKn~;Wd@OFh=(5e1<=h0< zq{kb%h<0yN5CTC360`+t_y;TKtwkb^f@Pf%DkzF@T2ZwO#vcIC$u4Y+Aho zSYh#A(0tYY&du^!z8k;)arSzx7r3Z8G+4?%U^=Z1v`}&FMfjbyNBS1u=Yq?{!5KB5 zPpEWIiV&tHp2Rtql(kmpu9K1w&-nHvMrVW1E$&x!t`}WYhj;6UpI5c!LeA4mOi0A1 zSkZa3b&hXjk9r8g5&sUfBrt<8{Yopf>!QfhfaAd*B2y<&1UgO_ey>FbB1Z8v>PY6qmuwms^}+h6q_J(Nk$F$Y#dSyM@^KG- z;7W=OH<*CSpY$|Xg(i^BrSGswns1L)oA;-KF8o-epsAi5yC@)Ozg&d%vQQ(>#acX{ zaS(^DEO4IGBQ=W85QK8J(#3+!IOJ=&HT8#d4R71%>?JnYK~95f9&(hxreO}+thf+= zd2mifynw$S^pF>;w6ZbZO_z0N;qvib@kPYSHK}1_M?yS{Pdn9-{PO?*)06#w#2+xR zvi-MD%Vlki)D5;2pV`_ut;!j7xca~0W}LQKE}cf)yhl>U`HPMrr1ceR@gl)VU58WY zJAAI77--7H4!ETod~Co_K>m@DkvDX^vnZ_Lg*<~lWYbR!uHS|Y=|i`xM;3?sEPu$; zofWJTr(`o699Z9GYxl=lmEG=^@#%Zs-`i!$=_VFg(zUf^5@;05(~Ht$8gQjj5_@G& zFnlv|XM26WrU6qLyxsu_tlr$d?_Y0OkvY@3GdtQ@{O(WpSD#oI-D$n)2rx^iK0Xi6 zF9QHlx)g9Pqi^gm2WbbOhlbU8V* zzHVqrZe6-xhh?9Jbg=>DN$}E9Vz098TB8tUJAjF;Q)2J7Ja6tw9JL%ZVqG-sq&1&; za~egfm@W%WPr)~3$<#;@`+Gg&NQLpCqhf@jUnM#{M9qI`50swst*1`~ee09LV@|aq zU3(s)7jRHO#+F{x$5c;L;-rA=n$4Hlo6+m$kaDyb`L;-2s|&szpD~7Yf}@=2vU-WZ zksL-|nZV<4=GO4zoI={ByF#*P0{v;o?n85D|H`Jgb?X}y4PEDkOgbZNI@i84K_vmT z29qdAN)RIBH#oEO7y^+X`xjHD^FRR!Lxm&SaG3Neh65{6lsehAD9^USN@Ig0++pp= z$R}CWX(v2K_u4hfP4CKV-r; zvHE%gB&m!I;P~>!EcoS8;P@blMa1h*cv%j2SFYsn*6k=1BQfe2aX>7+cg-bl$_4Sh z=0(HyoT&n6$v-QOZ*iTb4{z`p{nWA-0j1jMG&vk&lq^~V#q#>Qxb$(6iCtX79AQFB z)*=IdQQZRxU}u#AQDbc zAQv_Rl63!e8!~{9W8>*j#pmqZd42E*cN1bXDAQ=x{96%f6sN&LitGMo=2aJVh!ZBP zElvqVL^8wF=$z)<8?sc9bd;oojg=pRm2kpjTw{RsHi;QMaoBV`TyH`QTW25vtF(U z@i*=CF%q||cI9_UewvADptSUbykRWF3r*4Wa>DKy!$mcLH_Z z%psPdA3V)X8xENrF3Tx=nwaPmsctB1go!!l*tNqn1RrLkXRG`?OJYHFOcYXF51^ln z1dndENqN_tlnG}#DSf$pvG)-PvQ-CxCwu)-@w!p5)3$BxZ?x!V^k#%>gU8Q4*|K*< zFc-^-`+UI+%yZTS$$3nHfbAt9_p-uAX?w!Bp!CV_2;5ot2~12E1EKNyW>M4N+kjfA z>t4+^q|PX{C_l^=?)XEcPVVUo4@*la-dxWe!$VqKsO3RhY_`>GC=<2>MN^Tu)TBHa zqQod|fI3})z7VQWn`wpbMTgVyVWEppf)=V*nnWv$+2ISR_NWt7WIU?|?aNqe768-_vb*-!yzGV|NFu_`zX#sa++qx!ifXBhr?a6rQ!YCb^Z zgV{xO$HY-F15#w-v-hAGiSc!5gUOcvYOEQJhPYsdaGy2sNpvf=hNL=mY@mSV)n?VK zQ4{MwVCb#~7}f+Er^K*@gMeNG$h>`%v8l#i~aXA!cmo zR$OEg2wO~(9QBVS>Q`~GhT_kzG*oOozy;`b^T7es`Y_fUUhXUSBr3}LED25>B*eWk zA_{-heS^*3_DcLH6Fgu6RvDxu>t8Og*vw&8OdX|ViF9!XzWX~0k+yy>I?*I<^vM;| zG$K%p5Nd51?p$9VKHW!44c4xCnGc8cK&<*+sv>|u7tl$b8pIxEGL#mU?WNBlN!+`3 zb@RC-HI8@EMNDWzBRlBO0MUBQcr-3q_2v@IPb)j&(dDyuPw}3-5OA?9iQJhFa(GCg z#M~7$ny%LMyz8j9rw;9cLqa2P%Tt-*8F;q*$P{lt`A^FWdOguLt*3y{)4Pt$iOI*&cV;lV2Y#e4!=Uvu-rSI8XtHhfZU z(F39ml!YbmN2rWG206~BQSb_p4m`FRScp7C&tdH#f47Yi@7Xu zgaAzDQr`XCs{_>c>a5WEdUUW|+# z^{KzNzCaUnF|)6xiGa7pqVJ0d*SnDD4_6cZhTIj+NAut-nR%$ZJGGJ*d{W|8VPpBU`Whv5DI#IT_AhJnJiI*9Cj) z^>9J7HYHZE%;7#~u@T_mF}_uWtaebHA3nv&Ymbjo@^#YuyOX@F)A79X-%V_#TC0mn z=Gi_V)r+8-2+^FOx>AdSiAomLpiQa>hZhg2z6z3F?DdJWl9xMC^}a@inX>|ysj~y{ z=9xbaFo-tQzZL-?5T{>cr3-*uTt%xI*2Ka^m_GWK~K*8=(`b4?D6t_ng!xCP?SG%*_c%x z2`A(-G+4mZ8z_widiPi1(F7ZV$I00Y^k!S7Q&u=RsgX~@C(YikUH6dF)Sa%npjvnL zuU!GE_lzTWGgfcA?&Ysw!)%iGavHU4aK|zkyiVQgp|gLo>vY4H$!k{yNV;HaQ-=wI zz((_}n>5Hdg#3qYsaVwDzQ7PNJNOJFqra2TXa}jKAZG?uo4j6|rfk4B+9bHSbH*zj zFm81XKaH#8>@&_o-P~gpWDJ3x{)Qr1+YQPx@CsSpj&6v;>tso0_{d_Mkb8(Q^xVyn zI(YrQyB12oBjVx+x2-ifQN|Y0>=to!NV!J?b#qADNnmyW4^Si}N3X1a#T)7p=@&dN z(I@WOOdgwqmS^`?Q*5KHIBtuz@@rc#GJnKRZXT#@>>l+EI~KE>)<1n#!osGHdCjD< z=}xI6*|wU~n+xN90UEKMkV)#u$9&)OPGKE6AHPCg*1_z1Y(Tv!5`|cRjA?4naGk+= zq+KFR%E^mX+-U^?bTs@AI*tZ8J?K&x_P zM(A5JGT@SR53!nB($&{o8zs8)r0L_&n+N zT@vGaS0^QKO|P}&%oGknd-cQkdP)3BUeJ}7JFvgvf0nm=hz6im)y09?Ay+LKA}~{2 z+pYEICsG;@*TDj;+_B3={d-`XwI?EDvzVvK)jKp*`X*p!XrHIKd*28Ar zE_wqAhXEwxGz6zrjf~TJ{KC%;O36c?5U@_W?D~IyAZ8j5RNY(YNH`2ZUy-q42L;M= z6~_YMsT)k(K~!E*jbl0f6vbfzsg?~P{mIN4C{^34ZgwWL2p6dJ0BA~rxsbk*Yo)v# znQD0N7I5~i0%Ojgb+N}X`HnJTkXPfSzo;ZV$1^?%vWR5J=&fQxAwj`|qpwOz#SLUw zBQhE#{FM+b7$roDyEz?JV5Cjmwhsd`bLpvkHtM8aU69@1LLu#^H6YZg(sy+v=*iYq zo65qOLH{(LEZNsFmdx3GKu*0rsKJHUpyrMui-TzBeV@_qRu%Mb-KmkFp+wTOoIpI+ zSzf}yUmg_1wjV?91Q87uROlB3l?s5gjkg}}y?(8LG>e!+4yYAarmE+*q(+{<2V7TweLLN(!Krpl1l;#4efO)!kO|co%*_AL}|+M>@rx z<)C2(+dby*dah@czc`A?6@l&ggM_$5HJld=zxUMzDbE1=b}LwTZiGW;pLv~Wc~DsE z1UDvBK6rs;r7phDllIwx6N zPz_V$*i5x((;p}17< zAT(_uF1Tz|sK2yYy=P+*V||LMI<5W=+I9jH3h$_55By-FqO>;3X?^q! zO4e&qkRX*N+S0Q!Jxi~owC5+6SUZV0gyUJal=%mU{flqP+DW6C;H+-v7iMfLU{Z}h zyaPm|u$G~ZoPFYeR;A%kQ|%M)5D<5}`4$2Cd;+prOM=v{>FN(P`=GUTTjwZ%l;1~< z_*eiCFxr*BhslOpCV|NNE z#DI5osRzc$y9L;qQzkGV*_N1shV%y*F0Xvy2!Vjjq6Jr+HzXO^HC_to-(fV-*Buvx z0B6R=i_81&B?`&PiE@`}qPay*zf8@7ZwGBaJb|l5blPEaXj4R05y!!5bS%Z7Wq{1G z>!q_uzqap!#8PsMTKVT8Co#Wo3k{^g+~L677l#IHESeG9dk2CUvgWmECvS<4WVzCB zvEufGJj*bB`7~B=UEzg~Sd$+B4b3XD3YS|3IlTTe!~%Q3-nR-F7GI0)kzRCdx)sRqCtB6f&MJRO>Gh`D4D^t2&Aytz%0u&wGvW?WjMZ^%4h6aOi0cYuN0&(AgCgKfLJV$XWV*4m8U{tdJhTQ4&H!0P)e^rvs!^{F z)T=giW6_EnCws(X-D>)XhBUfCg?3T$DHRE9V$)6=@KJGx)EsUKPE81i1i<4O0XP-+ zI#;uhmXr(N>A8{5S8=Y#9x;DM!qPpM^KnFgGe|8zXF1-c#}{T5C@cyQvh(B#{*&P` zzByVJ4a3tK1=5_Dw3h7%aTCT6v2B*^JG-_Mvj+!_^Z-+v&7=V`vW1gN*gX+N==q*kj>swGbYw=l(z$ zc%xSLYN%x9`t(--O|Ky z!#-toHU=fA(L=?s)P-feANzHN0Ti@5<)4!F`zJ(E6imYGqrI5!^kX^r z#EjF20cM3fa`DXd=3jkXYPz$+3ty3N!P?FFmebn?YNN!#5!_x$X2m^;Ts_R;S8g4! z+k0C7L*$^r0tH*B9yx(6O@>ti7s;ndP)H)d=B*_hSt{E0yg)aKBdq>ag~sKo+hre2 z;dKZ$%eY6c7BB3c5^sMHgwNl+@RiIUm1^bALxxK!&NI8 ziDfTmveHZAfRXx{4}p)y^k z#=;_ZJVc{NVB$-7ox&($1abMYp0QDDL=)}n{55#U9vWRzk?RKy>KhG*3c|1R?+Uck zv7?I7dn}rjUrh!6Qi=>E=m&nP;&z8{C4$IuooOY1KQ0V0)3*WX|1`v-MMFYrzewcd zXR(+KZve%`?`Ls7*%HC|8zcO8?zcf7Wv-~C!I&JM7aA54SQ}*CTfJSL+{smiv`7}* z`freBX_LQ6zbB$+4hpKT`C$UmZ3NYttM)%kHTmEIkK!701Bo_u5qRBOYVY~t?nTcCp9BKg3F+HtXe3Y-zJez^63G={E-sX`)DyrYVA*I z#-)W;goSDW+JSrKQ`X~1oMi`Fb;7-CwwF6u{Ij^W#a@6Qd=ATt~<{Qg;&lHtESL?k0764vy}`@uE**XmvTbu{^GF*!}B zPl1~aVr*>(e>mNavUBf;UTf#cPS^p#@%CH1byv(QxH&-?;C##mLelZ(O z2k1gJ3Bq(3TGO_pR5jsO)4>le--aS2TX!pJQuB)q&g!>3k`p>Gb3ZisF|0Dytc~+3%0W z`%4&XuLr=t8t~;qZ9Auus7Vx`r@MQJO@9;za|%XFK*kYZwlOkQjy^~4^KonNp*_Lt z8Pj*|a(Fl~H%Cu?Sq(#uuE+Q7^R9JPSKCWe<$w2$RqC+1zQ2bL9Q)1WbooB^JS#q* z_bct_a&mv(?`v~?X)Bojp8;N;e|a8dcfQq%EZ*MNjYfzszhcu=xvopPmB;Ss?PbYLSs%lhSXwcN6C?dj2JZBPF9 z%@*l)yBf;}+AME;c&EqlVAc_(t->>dqNW?_&q0^|X6|?eVz9U+(jH}C0qS7A`v%Q3 z3#7_DVE9-&43LTb{CBJEe&!{9mn%@Vs5w8;EKEgc_WWp}RvbosG{thuqi(ME;>1UA z09CPWT$RPjycFxwrQ6C}SwpN)N`WDNAg?z`$hf2gwmJkQl0rARaovFRQCi7gXtm0! zuX`GemrGwtXCcR6+OV?+a0B%ZBFCoN+fQsez@V1yJ~qI>J2Oa|=?H{#q6BBnwP_C; zCIs%M`~ZQ}c81F)G%T}0laZsz$>ZPQ5}gJ)ROt9>d$+Xr;R0Hz9=ZsO_OXow_i3ES z56V$RVKyBGcRin70F3nsbqfMNEkEH4V@8e$;-!5s`r(rrWoz-6Y5Ql8CR03Ue$FCx z3nY>tjDx21TYq)aFt1`u9w!6Tr?ppuwS8-$V;6LrXVPxPo(NAitSd~xex|6uXSa1% z1&tv-eO!F}6|FAVlF4hp%vj<6+!|g0`mk`J zaXVvxk%Ag<@ylNz)AYuK0E=SE=s>~c~uUO zSaWW!%uB5y41mJVsv6;8bV0+})p^`%*k1m=VrvR`hTMG|a`W3HCfcOE#(QZ3f~^6D zyKaTC3|m66+sy&dZ~n38!9}?5Dt%JFA=$a|IdXkSF65lk%54ypcJan#yd z(dvELT>q>28Z$%Lh-XU$u2f6b{77cY0B0I{Rm?qY_TA%()ChGn%VU}5 zCA*gRERB3g@b9ra*hMUbE7AZ5rB@R4-8?N&e@gh3Lqekri$tq`W5vK%nMFY{j9j|w3Af;1Y0-oRvL{_Fm4E^><6h~6d>IA z=?J8LB$t)1D%UunH+-bAblM-}+XXWMI#jm$c;8W;T@-qg-GuCG4+`c%;sD9J`3p)H zUFtqo)-!|VhEY@6Jhq(2mC*!R%NH~P6gB)oKiM~wCGT$*X%&uMjlV)abPoOb@`UdS zxQ`JP-x0gh0yoFpgXpT8iE@Bn^hjHaA2CPkTKlR_+)TUNv(@L#U0tD^zK=27oEb!) zJX6CoKuCCA_$;q%eT*;;G0_6^OWrH{r{)h6S5l>FBEp4g-_1OC9pbT6A{1 zVaY9Ujn2uweTPOY5kPN3dFRA{H;J}pt6&$CnLS1qzzZP=0b7^x1!J->j|kj6ddUH| zVn*$5K88fY#>_1oLt%XuO6T~Yl{fBz*F3;Vi6v)K_qcnYvSmgC)J_bWbXG&P3KPNqI?pxCg8S6!$|@RxD0q09o<^$qgn^;N<4LZx5I z=YA&kIx*6^v0fv`tZvoc zc2`)M-Tt{sKT-IkNQkzu5h!*7`bAx4%dkIPVT+p_KKceVYJqOug|3G%~jJktz$zL)4O4nYjP{0a9aU4O$8!9Cj@OqRY{?LD9eOc*Jkv z7tGidNH@>xTFu^Jb+`7Z@o|o>n+m2BsM=sCH|k!q+O2$-ZuM=IW9?X{UQ@2QJgTdV z8e}Y;ivPE7uoz`Sz4-#XTOC>(y7Ptt8cd+hMxnj4G)8I`Fy>}Z{!;J7_~dAJ>WyH` z5-7>!$EFvH77I4^NpusgIvNxC}X3onxQkv*g@v};xpgq-U%B#D4Y2=rInjtr?$h5QH?v=jaX zi)Qra7&RVJqvG}_)OsWZW+o;BqS|lAM8EDE^n3}+AAJUBI&(FrGG$I>BBVLiOCh}9=c@eCBi%sCB8Z>JD!mC2BfiO>4+~-8%sLU%&(}3q#;0cFKrZXdb!ylKR@KI2utZspT898z5S>bCA0C&{AsPn#|p>}z;yt(8VX@5`p zwckNa%=JdQ#%jTU-u0Vd5JkDH0JNZ(Uvjv~Hz$G<>Cs<{vit_=DW9ASUi8ZtE4<7%6iJ99(Vx?n3Fw!isxcEo zxNaPT$*@O11)ofa@Es+yw)H9m5%iUD^4cyL7fk5l_#Xd{Iaw6aypQSJoZHtlZVzN~ zaDPYBU@ZmusW;mZQ0t)xI5$vp2maEhFdG{XvdRTuFjU|f|2S_#aPYTiyOI1de%M7K zW+&8YH!Ah3KdP0OlV78bDXa4gX$NINh&a3CCsJk-CqkkuYA#~@X#1^^YLZ|6%Ox2- z3(?-5E#IUA!K9-pw~t>XrS?sXmuVlnfv6H9vnfK%G??ZJx;DWmS}XaG%?X7@@U<~`SmjJLaGW{qRvQ#ry7}HQrYH2l`45nRB#$KB9U3-<~tnf zY(YsWLxh9WS`kxD-Q9hU^ORr_UG)=e{7tLq#U?U~`88Xws4H_P?(;@~ikAZ(c_}|p zhDl20>4L26!C)xD!#0}H^&zI1)iLnoHF#A@uxRFI=&nyDC`}na-b1c$I~ezKn-xka z>C=0b{?AmL(u|+W>Wj#2UKcLSu;pGVkptW&{$;pd*z^&SXEk^P95N|nj9x{jMxs55 za@It~5IzxqSZsermvS7MP2~WL50fwwr7-6$#y=5=lEtk?xWUa)KX$|@{Feutb=*mS zFO~yQL>`$Jqxk`LT`AXk%+#BR=3L4wf(zsPFud#CB#kl3^wYr~cuv=+rQ=%l{Te)y z(Dw3%B~)|iVfX7znHH#+QnoiEOMLf90Smdg=pk|B!JCaz zqkVNTb=eLOCKFhh1hDH>1!5{c`3(dmczzu&MY4)u^!WHTV-0qdq3PDQcrbhqEPEN; z;bt3CvXOD89>Ey{`H<9~^n8r)!RyJ(lvFh9_GeF@2pA`U{E`f2Im!!0u!`?06ekdn zXu4E>f0W{E=s1N+FnukSmz|b>Yb{hNN$Xqy!60in7z7Rx3i((nS|v{6P*rn@u-Mx# zkGpQwk;T(KeAz+d{5GbENEIsbU<1E6o;X4k_}D~?RUgG#9#xu8N4mWLP?t5OQ`p(L z)WUTkM-kBORTJN#m=|EHr(OV}{9H9_??#^rgtO?0i&!eb@j9wq?@mWjl2k_?dej^8 zrj}j3gZ*D2&K47;Xap{&T#;X?ThC;VXO(oVAGWT)IWfp;o=lyRPV^yB#nvTJuUK;A zHZf*OVFKN-n(qlo%tc-6tHW0rqFIxyqgbU2@j2HihA3USqCQ>p8Gl)hsifq=+QHp{ zoi}XMpp+t;4uoWBN7`ya+8kNvBGYi(2@GFX42o**{w@BjW8FsC)i}f~0Y8(I35fg2 zajmmt?Azw#M-@|UpELS7{2ah!*!#kS;zZ){eW4}Ti+H3Sh zIM~8#GS+-`_San8-o!;1eaKhuNTDLiK-C<86Q(APqDG)2;8F765#QFoccWLP+ z)Qi0EKVGS6ki@Beurj-h^0V5f1ICrO#PmEL%){7dc7!(YQEYu_AGk6F7(VxKlhZj` zB*=PU`p3`*TA}KO%7X)sDK}WGjGqErt_8W8is25TVywWSqWhQXZ#1V@g5Y}2(n28+ zPPHsk3L`gOM6u=0OLcJS#<3d3{r)zvw}13a=W4gl(tsHB~O!uQ{QwIR-yR&9A&@kL-PVOSTC#a z_~j&_y4qcU!$6EUy-@uF>*U=}-r_XtitETuMDVqJP&+2maY4t_2{5@tP1zv4eAVc^ ziVznYF~UsS#~7o01?25x%CIE=xoqcNfJ)JfDJ_$skF>uS2J7UDyKG?4 zEd7VRQZ7dvr9>muG3K=tD4F(NSrlyRybGsKXBZKRN$g?wu+L_#(s1wi-8%g)n8fD} z^8!(fEK7_@49UyK6>-()dFB5nReYD)HP%1TeO=|t@@V1R8kJOm@g!R!@t$G3Mwi%J zunHDB*UjrrTh&l3mFF-E82y+2;PYKniG@Eb0?Wr}6cjMzR*{8@w#mHWg1m*P%GnWA z)_aGBU8gI{5x8#gK88?fvo9iPq5gvh(h$77^Ds+_E1YDKbWFG)o4k=UoFVF6aBmX+ z8m*^?lSR_4P8#yc9yBI0>De|ySu`k)e%MuyUiZJ%;e*T$a0YC#<~ioUnLwbO;sq3f#Bbvv2SNC+>!_O{g7lCNnH1@L6|Q^wUA3l__e0kHLwzVx-%@yp74fby7(!oG@aDbau|=nUP`F1;B|k;awoOP{BqbCI*5D1l zd?4|)VrCj6=r;y~f!9B91gxfeyj7$&C{1q`P*JLIn#C7DPZZ}mwbcP|sUCp~kkugP1#icek9)x+(V58MSY>ad=${dSp0|sHsN>YaDNVp69LcB|2Dv7{> z<#bD&&LFw3xgDY!y~zT_UjH2H3iZljBF$X2X%hgsNBs=dn}|7RB8x7`CrEzp={7Gn zE}DX}8ckW5$cfI6S6(G3DA`m>PeD)U$|WdWRrKl$<-mby3YYmwYu3U(2PPcPs5^X0 zS(>g3WF+HoHEzS#j!K(vRH*cIvxq2ax|klg5dN|!J@a-!ljMvW>VS=WWVmmP_*1$=6YJB4*_}5!t zw)gvSE0!|^YO{a`ia)GVQaXHXvT-VlWBY+}6v`mM>4&{>FKqZ75%s3|F5UB>K#V`N z*R=60%hL|oJYicErlBee6N=n)bxh_(MYXR{synvyJx#(!vIxD@oTU(bIA$JQo^FIA zX(!~-bC~?&)+|@P>)=Hl6+WwKO!(Pup&c28VnpmGzInp21fKN9n8PXWY||cvB|UDr zcheOCI4dO%tCo>eq)jV2Do$|5p-1gtQOX;jmu1;?7#7T-GyMw2FHENUSIv9C-*~A(G#QMU65<%z=w97u@}9f8%SIAuC<(pAL_wK?I8>CGWgC# zGSy&Ll9)QJ7YnpHDV1WqLu&%ZWB%H~eI!{{$v%d{)>N4z+cMB2`lh9H=gai0)>nLQ zF%#=fR<%_Vh2SVz8Kzx=wZL|&k=GBObP7Urx>-o{%D-3akx42qy8$?F+93%b&KD;J zFM&~bh2x!b1R76Cun$VfNGCXsS+>z|=IUm5Q~x*=nfkvdJBKJyf^|!mZQHhO+dO64 zwr$&Xow9A)wr#%CJ?gdY9lRbz#ynQ$AA9HicHTF%z?;YHe{pWu8UKrO!@$b+q0P-59+#5nMZ2I@MTrVU&`4dqDG=-&Zla0e)6=sJe{5{@5fhq z`qV!WM~FZF`ZkY~*y-sjF0&@d)97`3y`R1x)zfwrR$J5P>Bw<;0ygP&c{}2XJRUyY z;pxjCKPT;ay1hN_CogY%+^HTz0!8g3>?LNDlYrwv`XBMrv>T&J=4m`U-WMO$ZNa)e zz!$5hb~b4Iq;aJ`5TiFq52Z`>LCV-csE;$tBCCE-wfE8ine}*%Jq;GOFhYXTsFW+f zKoYiTuAoIxT>coKjtFzY}(n;r$(NRvzu(Hb_VK?#^%vAY}q(0`#e2@s0_4A zrQk|j^wL#3WTl;s+bI92Eq}T`Ce#`zTER!;OaWMzm0Xd(kv+g^B*<_oIM$y4{Y{gW zw``ZFed)wIU(;E(Kr?$cLXe6I2@?a)Y<|&-H%6W~H|Bt=5qmJ3T?v zi&Tav7*VK$I6N7+Ihg0$&GfF{*U7{3sh&UOdu{>HbQ;4a$j?PhGPSO73O9OoT3DVPC32c-Tjc)@31e`LX&u0ss~PP$jQOkG`g* zxbDaObd{N+>%$96eUYcMnkJmSUC!lvoPB zKwxd<%)ersdE|R8vCdo>g9HkF2P)!lZrRz^P~?;ok&?MMGr~S-d5))rxdHyGy#TYX z!9WsEczEqPhj!$6)3v-HDwivs(eNj+}x!Ka>5iS z?#+}k3cw3fEo(OX-fYD`saRwd7={5+-i}wZB-O|3I!I_|fThNV#=dBrn8Z0ud!yAv zN#!hui;_GPiLxVo6-7%NVncn?i!xIMsP7^%fVlLt=+Xkpb+ta|N%WLya=cgI+eSKo zJpCO#k#yPp++P4IbvUjPYsvRKTa~W@WyfiwA)%X6QI--9qyRDm@54mt3aY2ryL{XNFs2z!1}07*eDEPH2p3An&66H{z7=>Y6gAjkl6 z#WI4=ePU2zfqKTyt+10Pca8qKZ|)z1{bYM{Z=A7^Re0f(jbVjG%teRjj3Mg9QV-$P zO`|(%KBxiY`e8{6ETR49e4`k2YY}?!hd8SN^#Qb)<;;Bv*_H>R{!G2-<@>O``D#T; zbw-xP0(b>zm|X}IXz%O6#h<@VPp9)qOHfU0OSZd3tk*}9aONljxZbHzThwvtPo@1Uhmv*b z6mVt5F_dUuZHE2(Qb(h${iRA5UPzV1pRa#;MN1_4)A;}(QnYsDE z99iuTdqta-86W09%UkpxA?Kn+AqdhzTJuI<_`$~s#5A@vsZM}+`uNT=hBj{Y^GE$d4N8$%Z??$^+Zb{olUdFM)DK-qPJpCMP+`p6m*_sTsV!)aM=XC zO_Vm<-xl&q?}w3Q2DR_!6H4W{7IZn3VQr*Sc&ORTH%GHg$-uEN<=7woOz^Bf%L{*o z=8D0Y6`4^NiU)+NT5~AniRw64OkIh1d-6kPL#%}QruOswGMVNlfgqk{kj=(QAUIJ7 zqGU-TaPE5`d!$G_UDRaUE+TO_3^@vjV=u72aKzR}U3M=V@BX;b9iS+9a9EWm;o^Z&?BT5g;9tA^%+mCAKWb;zsf6a`*;v)KAc3TdzC;A z;mr!l?-#6n#-*I~_q>)4phuD!YE2h5JrX06&b>0`lH&t(2H_ z`Iw#xT#15@nqH&@UWSG(7GP_X9{AeyG%z4dJpv%y2qAE(V?*tXQMjj~>6=!~!nSNl zM-|7Q;>sudUT{9VfCVfL0G68^mD$AFETKAW-B2sgBQ+P~M$JFQ{p&@~1k5XTywAj~ za;u$OT@0bI61LhE#zSBt|-&pN> z`5^rJbk<2W+WZoGIbWY11|bat=Y7oj7V`?eibB%I*DG)Z>JEK65o()ni@r_ay84rx zi`*_(GbNOF2%jJf3nONfvrchZc`;>+GKSpW=OhP5Sp?oX4{k}A)vomXE&nTiqb|}6 zfRL;f8IDB&=MVoEQ5n6@dVghVj?i#}doOR2**OPdf+WwBoFloPa`}@@bIEm7ChXXF ziSZ~?_-IBKeC#{8b)HRx4CFeA@o`)^w`LXA0wyX?u(7p$Rqc5Hn^XfPQ%)}F)Xk2a zApwc}0JSmagz3OL5RJf~vT|5f9E{vNznIZ=2rP%dKWhxzpwY(lZKP-&Z;MGm2~G$| zyAl{?CSk~5j5$ueuBIm{G0)%ydE72@7$^}Xv_dytEN2c1joe>c6dsO3CVLT1i5aYb zDjgPt z`LGw~uE9|zw#%AGJV`oFvEb!|#jK?92y5B7gton}pontyGey~>d2-4jlDDPvCm~|> zt?t@7RW)WDXDuXjVBY^pH3q9fWqc)Obj4V0$}XWn{w>I>Rn})4MXN(&*(;4=Ek*YC z2&!p)!J}H|1N$kVhD|+w(oo`XpG&hK#lP;L9X$Lsl55nuyp+Z)!m&oal-MQ57R{z} z_r)gj5YEW~Oo8W5@?^z1m1b_!XX|xkg)O%kHUnR&45N${rO#oculQkYX)LF$!N@E7 zvOhEjBm>kwG45v}bvJ*U03__FCt41LT2+T8ydrcai0S6lWcr$-{$Yi8uEm4E>5GeY zCz|&}89XIMZP5-tpqbd+KoQicy%K+f8N2IxNoRYUkr zflznQUlnPN$$935r2Zg9=u*Q-b1vYy0dMFcIqkv>Be|`sxQG2v58_=>w95T!%{}J< zd$+0MVBv>~$#VmrHl;CQ1JYEc3VBY4X-aZigqgSyM;fkP>$3%(07m8+3}OdBuKESD zj_%{U>z5wCr*Mm+!Cda7%U^M0Jxo>nPY99tP>J9Sb?S9(^s`ihuvo zwz@nbCb4WIr>pg}|1lil$lYfd@zC6c3CLufWHje*(P@7k2i2K>h6K%Td+(Z`zene; zre#rdTFf7*d@QcxRsXOxa$GHz+BpB=8#9U2%h_2^xW5Jt6$Cq^#yQ;XXtqLQ%Cej}0y6PldVK%h%5 zm1iv2v<$I0ajsg6p9XUqH)YiD6Tqd_BtZGz#6h>H^1M7G;`R=t=||hfX>atqLnonJ z;WB7!wU}TV&aUS12xiDf4RI?=f;}PLSyQoDg?}hrS;}q#KUX$)k&47BcyF&7R|?{z zicl2r;yJ&>cD=j+-u8Ln+@@uFzUinbmlKogE4`$S&q?ua?z8GcGHU_rrZLV zs6fpH*Dt`cN5sQ$oO<-?s!+e>V%lVuF11W0jbn_m2?`0WaznpcScVnrA=>w)Rf=_> z^n;PbC9U17-63Q>ERox>EpHefh5t;=+JGhSi+qIKo3)wWo`Z#gGSm~M^mh?YgP{Mh zojADQ0FFNP?VuM52o={~ezO9imk)iA!1?zMp{pOTAX@`X?L3s|(ptQgWejDkFazzn zcCXnMzZ@iUm<7v_k;#E}KVPL|9JuhChYc9>Z=Y{%ASc|v?RBSo=#h4pQSok9F4Ih^Qr_WbQpEZeZ4~1rB%v zjq&G8E#L#~k%)=|87v1EJw*xV0y#er%z;S16Guk>j#PcPQaB>Q<`3mg4<&nRJwL6E zY$UQp`t0OgU8bOT=XJi;g!X55W-1b#Xc#yP=pgR;wa$IkESI@CgQ~#Ay+yI*mUAlU z*pu#nM@P(!vFrx@`LNjVZU}Mq7Q5v{5}QXD2^rIr|E2lb9*6Tx<@gc?pm=c2IneSm zn=TY)VIS=%I&ZA>@;4h+ZPIFOI7}yOI6?J8$;RPU@E|3m#$WHN9@~k)naMAP13NDq z7r6^lvH;L{WH^%CI)NmLw~Nvuz+7hgGmR>UATt>FSD)uXX_x@OTv8@s>gg#0Hv1K> zKTI1e%M3fpKE|EO;SD`DTlUMR+kM!`iZJ{O!)K2GjJ=HuLdF_M+jmJb>U zn&y$olN^G;;eGd9DEXJp4u5e24Y{Nj4v#9^D)mXJ^VLPc{%b)*MzXi{yAr{;a|_)L zcQrG~jDg!3y?54S{&386Y_|JYu$W43cqD1hZ4ZFv^OR{)v?G-UZQMzZ@BcItGtUjt zEYq1{NvufrIP>7PdE$-LFidatn}7p1M_Bc~W;8#T9k)x~5FUD~0}yX{iW^)Y6;q}F12A;#H1X*e(m&TYn_Cj+KxlUIDM z%t8$A$5sBoc~Zg+ylw}1Dh_Lmi7{r3!(ZcSztB1y5-^QzxLgq5ABW*^c)h>p!~w8f z)2gd(vKhK;alC#UHX1^e>#<#1Ob+#diK6_6)AijRjBh7Qz+Z-$cTvUlOz*56 zYze#)f4VWj!kuPXyHBzRy!{>6_HB4U3QQ&W)c5j(esn6x9;0MYFw~RmO{LZK5B1A( zFwm-V-QD>yMjIE)lHi~nrKXV<8uu>9;Y;Wm%;)8ZS>W4j3da&>FU(ax!xXkq`m>^p zlfZ?|Q;>-5b!1h)c7F>qaVWjj@=UKVB*PkaO-2sy8BW-mIUpi!Bvjeg&<`Qb=;Ok}7hd4hHjA2DIX8VJ|Kyr zu)+btl;3MGrKQ9jAIKw%wrwR5(lyiCh z86+soSbZOw_0cdX-mWaO+~TW*4NL%vzudWbKM$9pyeSIrjX0$nzY@tHNg-}P@M1d( zww8%=M_2t#Z^th$mB)Nz)YU6sy7w28aE(Pwoc@b4B~}+T#U?$QIqmw8C1m;_OK24! zqnHQ6E%$(&r^cZFaO`FSb#*z$eTigbpj-4T8I*r(Us37$Uc2#aa#!=*?6>_j39Nr% z=zLLct&u@&GFXmch+9;JyW*Av|10w05!(J7QHK~=F$G4Gx#q?=9WGxbd?S&DFOcP%Ypzy0 zg{roh_)0c;6mjRy=gU|aGddE(CwP5aE#FmGiRXhbN0){$|$F!KaV^VtJ)@TKOIfbLZJlF(S-YplwyulCxG z=0iBnQtCkv<55}6<)yb^esXhsIr{_8hN3UJ1rtd-Sd z!`i>l#@9{J^Pv#ULUH}uYGF5Qp00P#8okonEQ*KW!qy3Nm2Be0)P<-Ptu5Lvk0g5Q z+}81GJ>R9ABhLpY_Be4l5RCq5}ls*_u;$r1z_G!MrPB5 z-g=k&Fe>#=LPdR*O0^O!El3>0p9%(|d7)3j-~qPpnXhwZ12i_u1{tHnlo=O8ePDGZ z(h&Q+a1pXvGgOvPvXM96I{HY%_0-Q=ZTt&UzrR$`IzNYn^^=ZTc2d<&KG9$(MDicU zdb_IV)X>~+TEEVOQ6|lC(NL4)HoxOG>pq*RSrW6nBZn_b0L%__nrjS~pwYs#C*4FX1`3D=|{n@2hOKaVw{l*|o555Mk&Z zx8z@uSBoJ85v45u21lhMq$XX!N9=p?< z3sTYRhlDv!imu7i;W(&QsNCvM?|v<#xfN^FI?(Is36(Ur{Y_<0&74c^cv+4U-{rkI zF0XU!F2pQ7tf-0eR@i(HSe%=fhGCeQhN+xj#n~&}*?oY%z^QC^qWEG)_0-c1KVIp^ zfV;8ax6C!RH)NqYNS|X9D88epk&Rx7;~D=_B)2$~XOgz&;u?=5R;EhSeyM-1lc0z4 zJXb_XLl>kFg}B}53U>y=uoRh-jGnM3-(QGR%vK4%p{7JiK;v~$gjY&KU(SN=>uMNI zVqbq)|Nd^#omEajsi#9F?kH69Z`o%qM>ub2-$$o?g1-a%c8g{J3Y|4rHVP&@3$eI^ zKMWA%sh?ccAV<{P3n*7_{Dz!V9j)1HxWP~<$O!T~E80r^Z1&1uKeBX>0`T23G7GD< zLlQ*)5r7)tF3v&?{OO?EY}MAYWfM57ho|(wD0kKywHTDo#o zz3drSvD3MvKvKUhAh}5BS8{Da>f|BmLo(_3x*0GPA!ORYrsATCaxtQM42#u!g$AjH zTZO0#oQ|9xk$pvp2nK6o=5Vgyf3-QZtOJ)^96S z<-tzxAZhx35=cq5()rzYun(tpF;S)^)SSS4>e;J*aKd?D)<#I09X*t^Zf!XPkw0H1 z&F)_(1mtPf?)oP6Fu44jgr5hI*bBnoka5(mV+?f$YoGCaGyck790l7IY$V}7L%*Z2 zh&zXrVydt~r_1+FMwIrf131Vuk$^;6#F4uu(>JAb{er!Zg+3Jh0TSG1+vn`P(gtmK zKJl%~Ezr2AGwlhYZ32M86_rnD?-fU?(N%-sVq$Axe3m1J2_}vfTF1WJ&CR!GboZ0G zN#rxI>JvvU9l#|-Zu+lqWP=3kJ&&-I^}3cMK@4?0u_gcDAylo+O+MNeAeMc!8~Lan zD^tQ>ImdGa*2Ut3KjyBeugWI7gIcl8bO%f(6lobk}WbZ z&`Xs{^1PW?o})VJ1%!LSOsJUBkk}-0fgHH9p~$#B1FXcE0(H#PSl@v@eW02=@n8nX z*}z~?g&Y3$;g~ta`5L&Z5=K6RPtnDxi;JH-*MckBF0|GDk>(urmo50locUY|0$W1( zkwA2?`_Z54uRkV%6X#Us&pt9{5;8A>s9@|XTvP-n3IdFa39tA>I`hHd-{T%H?_ zW2j9ZZ}$RRafr;=#*tyJ5`KNSO8CZMOz{bi_CY`H0g;%(#AwjvoT9#(02zSa}&d^aa3?eT9vMVdhT5<1?#D3Zi*q+WU1-8 zW4SMb_Ig+AD3%cp3)~-dg};t;-86%=&s88?29$ZdHs&{?pxxLG>#VKdrimDvV`b;I zK(*xaEvNq+VF0h2IADQU$);Xm=O z(Ao}o1%AU{ui+hl;`M?5j$F@oIsP2Q3UA*ckxf!ozR8mTVBA#QQ<;qC3VTG!^9(Q; zeg(pi5wS>~ZH)mT_c2i7gH+3D%{suw_1NdM+E$zK@1=+gEL1TwbILuLc+zP%mD~>1 zSsPzlzypQ65dp|tjp$h0W!73oz?J%w z_=}4(xkxFIZ-%DkVa^o*vIR`Wuf&P~775^2jtJBm2V3FM_tr0ULj?e=y~Nq1WU$9o z?a8Afc)3spgsPmK&4gLC?CQS^>#*D?nHt({Lxr9gyXwHhAZKs%j3y=aj0YHi_~3V; zj?lS`oEXXvh3pbH1W+R$OBg4^5@5|8$E|l%b$hu5nH*Xh*)Bb9TmkN1 zp&=z&WP{|u;xxM(OC-jdH|Skp>jQaK zP_sVZPVWMLA$hd8$#O3P-3sgV<*QD$k!e6^XF82S!M#^hPOY{sdic?mZt>>ejcX2f zkQdOCu9`MGZGhfexNAl{vOu2zTU7vk-lFl#0Z^a%D(H)DE!4?^wzw0B0H92!im(YH zqW8_ebx^sAGf}glA^bWNt=mVZ%LGAx*TP7(8_6oHw+R^HMZ7L5qY)lufLL2khp3&| zVPmaPKvT!IWF005QEy*0?5YiWm`V(3&&}qL;Na^Vp|hIobB5) z@3a!Rh#?v{55@Cj;`Wj8n1etd7$^IjUgOWZHTf3w;tgqC76*KDHr9;KT5mxR7;bAY z-Im4ip5|>AK0$as3R2D<03vXX!*)Nbh^%6aCx{VoFs&KJC!=^n6y-8DMAAqy zGe_)U+{OTW>(Uj2u<#xF2$SH0FI&%i8W)qWi^@S6=2v8f0Z0Zs#W%#v7vlp(KOkaU z8=55n4x!zGh|SwN`X}a&{GE;k#x6oZJZl{PJmC+r1`1`r@;;u0b{j2~&^7>fNNxKnlDr za15NwF$_ZxO6A2b$0MCP)ny1{ENWRO_mZ$6hz;uw^8j^Mudg)nJp*Z@v@bLRZNr3Q z#Um|_LohQwXz->wCwu%wL}tYuf|2$<{*d}?}r zxGH^`3@}_)1!u$_B&}4w!dl6|2at;*VC}*$g7`C~>L;sxWR|Is5JTHFE5R7$8Y#F^ zyyf8rq0*)>w&~e>+D?UDS?yiU)btXI*Xf+sm{(Qu1yF*h59_DoW|nR1Mki3u?au}= zab<}^Ng+hd9r_I#iALpE>?lNCcW$HI{Q0KP+!FD(|f8lv#K){~Tn9ot5Z?D}4EbeaGTIEZA!fOZu zNBMr?TbX4fUg;FM^H*5Yu4>u@WC_~%?O(Rmox<7x-vmi8ISpED&JZVBf25z584-nS z+!6DSjUhEt-_em>PyXXP>So)%d@NBC!W5AVN7zi{?w}_g9N&Z(8LQ(b5f2ynTk`g# zN&pnYUobunen+=ci}(js{RwnLmTK}vO}BBlQyZsE2iAQCA2(y-6ekwtH0Dt5c~{`)%1 z**HQw1iEfmUtT+ZB1ZOo;q3zdJO2hj$G-~#vvr5_nC!BX_o$$oeD`jL$g1W%)#q~% zU#XKNR>OQp16lPIaQRPdybRukJieP(TjH;G-!k!^v{;|oeq58Kkg>IbY@zHQg%0#@ z(uZb&E`u^c^X2FX#gdeJ^o>|3zP;!y+k0a+|4<3f7zgWAOHEr#K1rjA{(G#QO**>x zJg=d@i?H{Y0oiK-$1dybNZgo59D4QF*+5kIrUiJEXEe`;EAR1Vi!Yw1Z8a(ZF?-4GZA|% zD=lOhS_0Rj2Wx~_rj_|Vb7yJ5T)+VmnizPT?v$0;gMVvWs?Ru)LYBO$^Y zX8+{8Df<`ZW_u<*ImY=wkcVVnyF8#nm0opiWMwM3EWmDa* z$!*6Zu9cWc(J3V|?O*13X7$gry0rwooVhqpgz+bD<|-jM1I--`Vu}0 zP7@w?3V0WBl9`|jj4f&hBktA{v)!*W{a&qm9Dt_tzlNod3ZXV$=Zd{X5 zhoOnu<-2K8-MmS;h?PrZ)1Lt7IhV)x3U=ow06AWy46A^&3T#_8Ip#@WL;Be8h%%$| zSV0NM+;07{?dKujGr%!l42Q;|_tC73|ETF+}!^6W_7Im<2Oq zi%&mIzq>+8auU7Yy%HZGfZd&aDAdlgoq&8*oDZ<(+oWZ@&k`A-?7a1EsJKiTaX>9E zP>5<*RqWb#Vg&9UmkU-eNiE2?W7THlU2ed#mH|~F@%*A(lR1;m2Ef{fzJO`nv@`9x zTT%TqkKkrq#8#?2e05hw=<`LPR-Mr%N>&2_uWhR5{q^Us%2)5<1 zjNJ=CC$DvHs>o82;@Z_EJBNlfNkPlEF7<#lb7ySnI5*F@dLdzCHg>Pe>r4>R%ch2Y zxSU3R?`sW7d$v}$W2-Dz_fNEKOAhbTrj9u21{m$=i(-W0?^;F(yUrL1CDM>-KYETs zSlFrGgp129^x{ClP8nMhiCGz`32HiFc z+Niot=Mwkado1GUwexw~fy%{j(QXQN^A%oGGPQMTM_X`DCDMF?0zcj>z`bJp4T7Mj zhw>I`qVxd(y~is**z;uGa%%#tHZO`c32TLJXI%3tUUXh(?Toa7o3?VxA??0XtD^G6 z%#e!g@A=Lb@y{4$(&OX5lL+=<2v!DR^Y#9zdGXh^sv{c@6w;ADq;HZdv(Az95BaWo z-SYP@JYK)9S_hZLsO$1bV zS{%bTGf0*OJ6He4<~b5>zV(jxy{YRy%C%Kvz9;Co-Sq&VjZdP77}9JrY%eEuk$F#s z$SLCmvw}$`PJn_kirjD@?Xx(Jw9_`9hYVlj^~6ASvR5CQKR4Z1)sT4l%B_%*8w-UW z+pl{`_DC|gf;!g~1hPVJR7R=*@Toh>({X7#oMG1%Gz02|LGQA5zP@pQ{!GHFi1t)a zoDI-2W~NXNrL(uL!qsC;A0Q`HAScoOsx*z9yGwdJF0GfE!XgY}j}JHuu$r`4ZQ~~5 zRv+Z|9yw<7rNYiHvHAWN>N!J@Zi*$H8QpUC0=WzKMj0z&5=ZBT%5L~U1Myb;7$^wq z3H2)P2JeOq)-Lb0(Kq;l6}L7iVE=ahLmV#X^)|7qDeh0qJh+MpRIJ|uSN%a8e6l08 zeTlaK#bj}azOCc5wSeliZqG==7jJ^^w`$cC@1`T$)z=+q-Kte=SAG}D(~*?)IdFl#-zkEJHO12SRn zcfIal|6QIwK;PmV;eN)jD+Y;(i&ecrYcU(wvtdJXdqJwFGIoR^{ak7Yx=f=Z%fS4# zWwI#jcNv6z8tTW(T9P(zQ*gyKvJp#f)#gSq+Yg~o*|Lm<)>RA7M-D3)M2zSh28;$e zDnR665!>pv*@}!L#BL&DZalf}hEZ{P`=#Rj4F)R~OJO!jRbbYnZ$tJ%OWtQQ8+_Sa z?O$mNCNqg!ipi^=sVKAemmwdgDP13-rwki-FNGhn_BvLM$WndNQ;)OVD%PCf13%u- z!Uk6(NabML4&;SIb|U*U1eB!h?b4Pvf%6{it-Z=l2Nc}X`hEW&jsJNHHH|*58(Rr6 zZXhqhRmiSID>m^;jP}!9Qa^wO;Gh#Ws@`T)ed+*p5B7Iw=8m*$sbAk27MJddVbWg% zJ+k~wM&E|%wvL5>5M*_*$-9%f$BqKYbyA)eDSZn6m>_&e)Ci36kSGFnwE0fWVsW?W zMt8v4wYJ?3HxLjB^x?;nxg8;-=o!9SPI8xtr<)VG%J?c6!~*JeUoUo}Ld&;I6)2!i>4rFYyExg-|KINTTYkBFxS8E4PCj%Am z*v7>2UD8K`y{UucpZ4jTF{to;b^IuwKwY3;7f$GMV>Js~$l*Sr&#?2}Q@fG^9YOYE zr&NaA&TxrXwU2QA6RE0%qEpW@8UEH0f!HIsx`FZy?>2gaZ0pDi@@aaSl_}u%#xhk)iK{0z%J#S3U6`HGgmU+T$Q0Dc z5?hxzshtEc5%!)I+L@8(6uSWeXqE3VTmK)n51WL5!{VS5LL(pASE**w=(Oh^^C|t0 zoJjVu_Z6)zdxR)IT$U92SK3V;Q291Lg+F(rWfdG-$yE`LPCkfUg2@OKZipNL{IH)e zfV*yE)uH71l(v1VWd{QFA&UzZkX6LszLr!kes`e)(i<$N>NSx^BcS>npaUsak2rxJ zdZ42z7_CpF__4M!Ye>+;n;_9>{K@Zo$4&=V8nFGAZPg%;LB~xq zNEb2y$)8&;Cv*UJl2%Y)O0;kg#c}-AjsY*YV5lK)&)q1PM&}3;Wb^d^o@=(;l|YwH z%he`3bvHRDSwRzGjyWh<)K>dc6j>{1eEcjh0kND9glP@!i+|erFX$I@Tfu*tcWj)@ z|Brd6;$d$>Kre4-sqAb6MK4Fd$iM(aFJ|HBS!t-T8>#a5mKLHk}u1jUzk&9 ziU7?_=-~(^vwB{|*|=6xK&y=m(1wzvf^5m3v!F(yATe6Z`M|6KrHh0rT58CX$uvTD z9oQtwDDD6>QO#ALpVQbHxC9ad*VA`dASN9!Dvq&4Gd5jt96nJ*HF5?IDx5YN@|Ved zWC=PPZz7pFRDCL`2n&_afe8!AD^k&A4)m!e;xZ^c^RIt(eg#SBOyXg#1*2s74U#Mr zq#?zN-rq9JnB@FAn2?fzXHxl1z*7<7zHr|pP_5L8^FBPLm~0|t6jw8Qb-Dg$>UCw- z@c;&+OQj+HHBq_c**42c#?uMC`#Sxd0Zb@09VNzYP?cFU4i$(qTrUn3S4|w03qt-Y zI)`A&`aR7P#XA&mPl~}vYTbMYTT@7Fy=V7=o~peNsH*bYZ| zKg_?j9?jagdU-i+WH7?MJX&>~%L8L`-p>x-AMQRaH_^A;rjJF(hBmrg43ES#QuPD5 zHxOhK#QZGz6p|IJ?sD45XAodG*}KvGmWQD*FPI0RfbxmZS)q4BHW+(v!_)Kw!gN_+ zu?3qfC@>SH0i1!I$l!QDZjYXw-Fz;y{_nKX7p+J(~!88D}v{wo>~`_rrcTqA(Fb_ z4|eELq#U_VJ1Io-op7^Dx$V5tUT{!lR>zM4#k{@iUvDp~F1tUI#|N+LU&oFv^EI9k z*{V)JvU#~PyHkGYer`hT+mx%0aHJ9sEBoFh3e{oIsfpELjHT(;@h}~BpWXaykE@ez z(!f@qi|g<253YZI%A#!lYG=FomFniHP>BFT1J9MKA<_+bWYu3+8d}wAh5V_bgC~+` zfohCIwY(@&Xu`8`G1OVAN!-#uI(9U;1RUzO6?M;n_$KMkpdK!b=1^d)Pp&!my8pSd z^Z`&TUK7CID~fTBW5^%4qv^MV(-M6TAbZR!OAF~#Mm}^1o+tVT`~$rZ6lf9v*o=Am z=+M&E_HC+zBam0PBz8{9Cmu2mM?|);oG_7An-Lu0S#<^W2G6YJ?d)3(sb5tA7ACi#-z#8a|$~cwsPcb}XX+GVW!ay>L zy+;ZCg+`1=ATtm1Bo$(MXs#!_nZ6@>Q|sIxGIL^=zVJ8{nFrlX@-4m^uX#`T^7gD` zR77y&B-WRxEm;`wX(~l1fN!pTPA=nQks_E@<{7epcNdKV?#K2svYlj?WCC0{ZDPkf44hBJuDSb+2LaAu&tM&(?UINPH&uMB6u z(AC*EA>p>I!nx_J2l(2(F6Kq{mp zgobzr)EPPCXi$VbRDUj6yWNd<+13ldbwL0HC)6Z5Jy!j6+@hj614-#+pNylp&a{{IM`}EM|=3M z(rsO1A2h}^=#(CZ!EayqxP?;M!nN8VCHy{-ch8|yUOMetjTLQ?g2El7gud*=pQ*&N zbM*2``;6m$o&z)xsHv>bL(z=EwqsB$_AHb>YnnvV;}pwcH`hyC$7fxsK*zkx_A2`E zcXo8O{Zj!ube>kR;TwmqUS`q6n}q+w2OMmtO3xwIl+_Fx0q&u#N7aOeKiTnbgd?lA zltgZt1K;|+X#D}1sr!2)itX69@NzhLq;!}(ArgPL^kdI;-x*<0Y~K^wJl;U7g*$JF zzt@h+$B${z*S^<^#5k8BI|rBIS$t@aNPFs9jUFU&Z%HBXuddxnEu|&CS1Lk!~aRH(t@v z=~SEd1K0;4yKMJwy|?aSYyUYGa{L?c{u_yx<$s&!9@gGW+!RanSyg9vF^GvpFvz!W zHNrQpFc~+RY+1q^4Ze;MNHRwvM#u-OFUd`h+vUm7Y^xWX^v!_P(_mLYt!!YD&y{+* zrS>~+*NptF+1O@zeYsTaemKjcklq@TUNBAxO}Gqkz^dIabZPy#k7(Uc464iXc6mH{ zOe512wM`|tzc{f)EvwA~sUl&u%~TwBeU5VSdA#_zewN?$acGVeI^-FQyY1@q{aM_! zqV#n5{`#1n-Zb0o@pbzaitOp}b>gMG!>#mvyjfS(&pu_Z>-8fJ+12fR`}nwCwqxJ* z{$UzZBkT^w*T)OE?Q{@JO8!UgHMkbvS>}r6IlX?~)$2XPi~n4X>LO~FO}bKpT6r+y z;n(r{*?_JHp(mc&S&H*!e-h>n#xI<%XUgk+DpI{Lb-*dS=aLa(F9g-j>YMiVDBeB& zUfv*KEP*0HGV?m-7S(GCYnb_Ls3>V_&ti?r>8N1Ow2s=9H_>ulU`iXPoR2*oAL2v_ zV?7af()w(gR3uY2-w3O6*&CJ9wM&r5){^p}V2tynC*8JiGGP*T;$6P$;tYb^cewC7 zvrJlbDS|bZmAx=8QdYN4BU3zJ4O-(ovC&l(4beV&ib=Mev|ZE(dR0HGOj!Vyl2g^g zs}hoOm*w(kp@uh?dG^p@DXaBtlQJ6Z{u34o5<%9@5LLUz(gmS-m5l3)oD2LA_Vu08 zBVN4O2Z_Rm6Xq6eT&2)#0XM2#=M^5=kQND_?(S6CqNI&JX*ED>mfJXNm&w^#NN4V{ zGO8SPUmjKambfzt@65IIqHyG*c}p^gTmbI(98{kq9x0olPRbUbb@k}lNrA#M+(r8n zwGr~yX|*YF?D*80in5f5)n}(WO+|grWiVXrffDJd(8F)w|}ZYx_1jK!sP?DeFq z0-rcaR?tsyOu^G4$`2#{E=yXcUs&+{keh!pdleBuw2o|Kf=H_2g?2aO;gKR1%MzY# zWjT*l7GzoPUYKl-W_tjOb#<(o$a$@5oLzb&&1L>IBohOgkQF+@=l`sC#_CXEw0WZH z^goQ9V~-|4yR92f+qP{_+qP}nwr$&*wr$%zZJX1!&b%i(Cp+26$*vET`U&^FYOQrq zcJ{VMfl%zyKej(F4aX|`uDjef(kcVjjC(vQ8s)$(dTT9f-4p*TKdR3mY}TeP8t>fb z>Pa>NG*M^LAG*N3u|uiU?g@>s1Zj=ulHnEIZEz9?y4b#^23MPJo;s9!5|{8ov1)oH z#LCxsA35TC^|0}SCv(m-?u$YuTry*=lg8=y5oYFKU{3$J&3rabV6bRnwgamF+R$Qh z@c%-gNt5dg%os7Day>?nCh@e(fh~LVN9UT@3Xv(^z5~;i)V2xwlVxVg6bO&%u@q>u z`fA2z`P2s!{6-pFfmgj^Hz)}zMEK3P?eP|hoV@UuB(pkBJI(20%%BNocd;&pa4e`~{SO=>u+J58a#%9<1UDh7X>J#0#Iq@(ze$B-9f~JJ~ zz3#rI^yV6yV#T1-8zy^E-7gOK5tbH|(t83|sUWU9V#TzJt^$m#M!F`^KNk~ScSz^O zda@9jn=Lx>=noCuS(HT1h>KClTP4s|supR0^p8n1s{*|>Gi)x2a;-gSThwW6PnB!k zG=Jny8~TE3A~;E7%!5|}%X9osSdZXS46N!keb_2v%JzZ#IhDN^gEug9Xp&Q+mpi99Yf(6i~+TA3d%fr2Q1e_u|9sPKTqOiN_cY!e#r^wl1Nh&F;BUIUacG zAn_6UI1rbVNOm=gLf=FVr>`?uuf@^s179dm7U1?JTf&<35q~obKEp!g^kD}!%i%>_ z$^ucLl1$`>KVLGNw$eh~cVXQ+mv##KUud4Gp011Z22#>(h@{RAW1tF` z`t=>sFe}1$P%B7Y4E5pVh)rR-^gI!6o;EZ7ZB*=i_d8-> z^iv?0t_w=3j3}{QADsS+kx;lgxTyY>4`unsQv=)_10Glp;6o303 z-+8J=6boAQ5Y%Dyh^AX0RDn)9 z#)1Pw*?%J$NB^h6vkaLiE`jvm$JoaH0)(o>a zm=8Z3O_1GH7NCJl>6I%n3ZW#B@<$$sj7HG0KzykFPLzhL>e@Wl1Uf0K!15_3;b!04 zyktEbnHt;?yV%89LcAAEg*o;Ovl^y_^vRrr2mbA&@H)bj4L8J?5;?$6JtqUE0RiHV zy~|a7eApu7C{?HuN4x1984|MIQk7MHw|3+3#bUt>(~TwPrJNIPrZ9pHwkx=E z%(SSeY_9_FseQTo$HyniWGnVlZg`^By`!9qMRdD!BwSx;_f57R{pZa$A=TmiMngFp|EO&-9^-M-qiy} zkivRt`J%2TKZl)%oiMrhlFiUrTQ%p7;57{zBc@gqKQeSk^O`s$-H_8_3pQxr8JWu9 zJ9B$6we%N|kYX{;aHJ&xYcdMmbnwZ=aRkL6OFtLSvC0f7w^C`^G(|qNdnh@wofsIm z(}43jWJ8c;2IasMb z6-9g)uF&VKp0~ks3Sjm{G!`6@MZK%B(pXJ5!r5OD8N$c4ijsrPPYg|nCajWaqM|BQ zRvivW7*H=+B) z2S*fZUg}*(8+XF`tmGO(qs265gAD?Q2jWdVfh*lbkpV{waio%ISGHi^gGLGDSfGy&dHZCJwKC` z7T>FoT6lvY%byO_jDsp)r<{le*2JPMR_Vst@UQiR)x41<1FwRb6zg3DDSNkgLPTYJ$zw|cd6ROrNj7y#AL-Y#TbTahg=j>TDO%MJ(t1-4vA2sEexMb zp_oP^l(1YIf6FEU1Q}F~H!Ol=S+EXu;!tSGm~>6Z!laQ6Geaa* z*0UF$jCHl$3H#cwMa2$}O!JEIa%7-RBKyMh_S1xabJ9dl0~Gi}bQ3BNp^V z5O+UVZ7MYnk>cvbWwAk&d_Mh*l?$+BuMb25no{ONfr%D51*B$K@tHdZY)J`APgpQf zR*nXTk`g(IMY7{*`kFrouQ)GJa=+^&l>Ag}Wghh<3y$=yxmipA<@LxhB6o}xcaIN` zz)VrW_{R`(REeM{JjAYt-4O+-78}OG#U5gxDj}|E;X{~OCMlvJ@YRnNt`E3w(>z`< zvp=F-qykxX!Z^Wt-gtaSWS;)B+lmqSRmR+*GupFYh2WCdRTtAerDIpo#ot0>@B~%D zu65Gd_`!Z6+?Geh4a$sK8v80yan<4+5)|$_)GdQnudKD__lqKEb21&z>K9Fm&judI zP~n!zGR3D)a38}XvKLT~#h7%r6!c+oGp;8(=%Qu7CyDk&QF0-HAK)9^ja zCD232I4GQ;1QxFZ(j_tj9)fp|^POb$O*c+zTl(2n0+$S=8^WHka&GGg=HacR>M#Ub zOvXj9TI3TnnrXbSxmhP9zO$QqRk1|70^o*hAF=v&d8FHQ}q#^SvU!r|XxwpXZD9 zF7@b!=M6VIGjRZg8*oZu-75I^KZJ5E#@BsJLcbr(pQFokvEJh%bjW$O?5>%*ZIn_%W!JNSAPN`k3^%YXlwE`O|qh zBI#>+B}Onx_;l<%u+z}ER_@*s?fO)*fY+@t!=&0lH~K^a#|XRa=~l)L>r=IDV#sL6 z4EGFFs)GNDw3~?ll`ut|u55|s#hxYHYpN&<`0DRA&9UxF25t{Ga7Z!|%>)(k*&8uo zm;`l;ZHum+UtNc61_{WHC6N4G>2zZ6HfoYyz#Pm%5Z(-{t0|QCf;c1&e}p6_F3M$l z*=(7+k~5%EKqVT3u<^kKum=s-`3myg6n$4kp$KXCNUyIDi%0lOYZi!Kt*REpy!Z*r zS9T09OEJ^J<(?m4{(Ls5pRDEGAIIN#*rqxc?w->SF;rP!&1O_El9{zB2Gu#SAX_S{qlR7|k&rpHnqDuD%;OiE_PS8@QoGh~w5>L* zr+i6fXbJI99$clzry+~062N`p`Flj$EYu2$fobZS$@qS8RVX8xJV$^YmqJB#?8HsP z8ScwC^-)lVhj3;fmDxJtCD`^mOZX~nz5{eG^UQX(Nklo=d1x$jlH@SV6B1If)q|C6 zd}WgL(!If;5R7a^HCg{NXc^H4@g6Bs&j0xI@32X#BnuE0Gm$)*gDHonm+7NSmar92 zxd--HY3dC1b-5>H$`X#QP;8~2vAs&)_&cn*VmD1q=iyZ*aiY+|Kd6vi3ZczpP=>GH zvfE&nJidaVEk^OW&rQXt=M|jCex_H#Ts9C|HKC{SrW{rS2ufc9&Y9({kT*FUuL^3E z;)RjZ`C_lW2%b+YFV!m)LMsh?Y$aV z$4mrf=a!&upJgj@BJEN0eHm4b&q7(|2ngRVncik#DN(Bh_x`okZ6H7~l_Gx& zfsq1w{9u=?{${J0=!*byYIx_y>{QHDil&p z^X+g6G#J|Xt~rkEr0V>(K$D#$9N4O4wi=K`OJCYk1M|oY8^?T7hXB%(h-0*uj^{P( zGSxG9aTu6wXHjwKV4Yxj`Mr`<#2Oy_JhymHsWzNLib>(56ZS_K_7X14F1dO-zBFt+KcII9f1ssv;|b*w*UteJcdDPeD?zCu$QDa^ITk4+0kJ?cme- zWix}JbE6t@fW5J${J|!JWSWC^iX0SGZQOBt(HA`Z*_7PS&3IaXyR-N|xG^eRnKgVu ziXvDd)6z=xgvjuN;!&mh*Hu%^gxylOWV)$ZQzNp=QlgoL?S8#C$8z1`kKs_ptoAhu zn1@ViZD55yhL^QO#j(ZqT$Iv#v&G9E)9cym@AACy1M61(^JChXIJ-ER8ruHn^&fB| zC)2P0`EkR>^uG_|&v0AXZ%U;72ccLBjBTM<9jxBV*?Ley;plDS4jz3z5JW7kHiB9~ zMCF|W{@ixM9n~qbo+-mnzb&ZZdRCq2K-4-)<6L6 zh#ZfM_Z}FB%xg7m!S{ZdZQud{O25+AKB43uAXj-hOo;-~$~^j@!&1Wp7p)Ps`flM;*+D>z==7zv!>kP^20@;p7B zy&1&s3qK?<(p)lU7L)OW04u@-H^Q;NFk}z!nG&t=wq^bcop_iDXI5q>+9BoD64ery zXC?8GBr|SQ>8)aqiv4LZCq}iP$8(#uLv`-W-B31}?JZKKAk&;oc(YdXbi0#@f2b`% z4;)kp_agvQcA(e{(&wPHVSA7@V#5NKR&of@Z$D!w#c}+yvPN3lB)8_TffRL*TV^WR zbRfcU>a$(olxrCl{~|eWzz0^~v>KiNW)zq8cTkV#3|R~zY0%fTIay4IYUKP!azj{t z=fLiAc8#qjq8emrX}zHIT|nT(c2UJ@!2aJH)cQ&JkkyRRicw(;m*G89fEz8+Pi9R3 zk?Tl*HMLH$M#f4Yo8+t+_mv)7ggmr4M;L#6yTbNX@~Z-W&UOC|j@y)mmu|AEZQ8>Q zq=oFNku>o3UkxN!Wvi0+M1FP6;OLarnO0@R6bIrOP6@ZZ#6{th%RDEGt0pfVZBXtv z7oRL=CMVPk)UkXf@*!3o6iPc((5zh~py3f!l&rfThm?q$qybQ1Zb;WEi|V`H+>n-s{j zVrz``{wdnRHs`q2LU4mKhZ!L}L`3m`a}+yMsKf{W=zf7yt~M4N+;x310wnkd!QPXY zV4y{Tl1G=;*N$s)>`uS+BgL&}{=#0_K}mNAVA2Cn6-G7au8)YZ%AS zR=o(ute_+bflf-Iiv6 ztU)ViI~(V#>#AF`HYyolndX4p!tfNA7}m>*yXi694Whvj=je=A2+7_vm;h%Ve*d+} zwe2^K2xu3g<|mkNFdr1eo+Ke9&CNVMLmFm$fClVaW2!cmO*9$YKe(eqoXEbNt182# zt9B>7a$v!++(4GAWe%1}?uH0znIXvpK$sOx{6L^^a24$$WowW(B0y!w*fNSc1<7DB zz)Q4&A<0F*htFJfPP`EYOF?U!q>v7xWSI7qmkkaY{nu_yE{F#LBIXrTYgCYq7jfcoJq9o=Vk^(v|5QM3y#>%dQpR|dY!;siP8>(oNRAP z&r7ltOWNAn05U&&<<0Zj5KIb%H3lxBEx?Q+W^u>A(73V&#t!Rw;8*6cV>82GRF<)l z1^s2~CO{FuX>`Dz*b8!fgx7d6+iYPk5XMihDRfzOm|Vj6>!cuQ7#5z2-2@BNemm=} z)5ZFatnvN+*}~gjN>^5~$kp1Lf7tOnaW}lMJ~tihfdtw4xT;$OLx3A(L&{winGU(}FS7=)_quIdeuM2;Y;pju0ap{=a}11m}3 zqt3?Mhka~Py35zL=`8Lc*=W8QuxCUOooa0z&O?bvv8^?-+nUk@k)cdyhly{zj#uvj z(AOZ<7e+^}_rFlWOc~fgZLg-=uBh@>H)Sm7AXux8mh6_G!{h9B-dx2iaBoI8+)`o& z_jHps58i}-Bq;;r(PAS92w73BR)l#3xn47zW!8d*yXvtRqo%zFt<83OO=CrYBoShb z-6Ihr3bI!?_Ap>Pqk2yB+z~+oo?h({|3LKgx>V|vGkq35H+lSxM$;75qE*B9O7 zgOS3YgGIQL&my`-C!j$g=YUtYT9EudP1ECQR8M?_hjw{=ial?oWjpZ-o^8PZb+)5 zII1A|W8cXY)f@lcKa-)C^*EI!^HGz`dnXOeNZx(A{@8nl7t)Ri2v0E~K7VI-9Z+nx z0qNNQ=pRNOiP+UCrg5?jMgfOF+sP-S8X~NqdY-fiVDlFRKpgl&ld&Hw3%~V!=)agr zc5)rz-J!}~V}LNylLmkp(j-HQlT+>xQF89g40{LL?OH zD7~8M1XU^;C*F*V*oGZgRu!x7{f?F*|ZfE^}}<34ZcF)po@|1bPDXnAD_ zL|({Qymht0IcH9jUd@UaXfPm+?AFr)Bbg6kK4Qo38{c_#uuA);Uz zF2_Mu-mKa&nmx$0ZMY0uOA70qXTZ-<*rV_lc}gPsqg?n7{O6y$?YVPIM63>(%BX-j zN>7#Vc7+=0qszZF!9Wl?OfxNpBPT5}8Ud+3`3t1oA@#UXk4~0=@vy#ZHp;ZMC<{sR z*kjajJOB|^I$FjDivWK(Zt6QrFl@<0-l%a;hk_&9U(Y~a4?4J*w|X>-Hp79Cr9pLdc_gcG7Rq4+Z;_r^BbHKjC2N4S z+p?>0X{k4%PD{=KNeWNlr8b`U7PsGrJfYnJ4dQlp&O}C-D*~6U3<%U~*hpvt9Nd+0 z+~Q%HY|XgPh+km=*x%a3-jCmL6Fvc=u|nk2JVS1jBovXDuYR`+o6?wwd@k~g2~P@9 zuOB}mZcx4YqG>1zSOGv}0D#62_5C+B46Wxq%4Jh)D_bB)Zko%u5z_y%{tR0VHpa)e z%!p$~MH}&@ry}Ciyq}k6{NwPTyE5H4YUBEMucWMWqRXsjxFtu&fU#->sezUb`}@W96*Gk!G5lXcg)r%t2hLGJfdyn|$e=e} z<{2hK?apMu4P;1(Nph`sTn74@Y83AuH=$+XxDF~Ce>5s0A0&u7L|k~hbR3?Etl5*& z%io3Ljcj{ngSw`T|)_Cn*})C)xW&aJ9B^?UFEK>WAl&h*4n6U zo1MM(d09Xeo{M+A12*(^pQ4+5Zc{b;`r2JbUrWt26BCZY*%EQF1|53AM>nphv66tm zHoa42r{c@nmyp>Fo%P;6ds%dV`sMm-#tdcPru>;i&@i_yMyvC~?MJm;*PS;h6fp|5 zbz%Af_1!$AGdC|W`oKfReB{WWpXshf1{sYyuwIYtvw zMu|*U)zc*IiZHYJo@Tq@P`ZvaeDIxg6zX~W{rapBci^&tdz$e{{W5d&a{sr?u3UMcSNAEnyq%tjhpU}%Oq=yKjO|8T*cQV0 za;)X&%~dS-TDu;e{Fwfw-7kl(ElqFg?qtA%j#3DrsUd7M}XYKg#Yxg z<8ZLB=djoqgu`pbUc2MOK^S4?H}QVx>X#*G{MPaO+qC#)z`8fK5N8e>NJ0}qs6`J; zu}@%m)QF z=BM!0k38&m*#=mcQ#EjFMs}W!Z;#z%DIO0#{jD zm-sich0rC*Ugb2G56vFJI)y>Yq#i7`@Oki|g7p#~mA-)HIW%Zi{q&Y}}_riGz^O4nyiQ{tYQ^FxFY~MihT3-AeGV7F_ z=C=yAC)?V;QbgagrshXvplr=egv_qSN=V!z7vFGtdLUgyy$ z{E)}$)S*%MB@h}Lq_bDakddK|w->)U01djrSC$Kx;*tW2gS_$W7R>XVYadpBbt$lr zuR2Gg#y~`o8I~L~r(nl19d1CQZZ9jFq(5S7qe*DfeK=ALLu|eD#2F=8oSi;-_nK-P z1{3&W+@j?JEUSlhTErF4pvb<@z6cSvS#t51Oe$EWB7Q zDjUkKrJ8&fJu&Y=AQo+5?;0+!eV&wy`@1e!`wY*vlC>Pha>;!6w6$V<0w>IuB5LcaC<=vHEcBY#hyRWBrR>3_tB|+9o?n%UbZtV|)yn zSMaUW;dWn*S^&{op}dA(+jCQKz((YhbQDQ5toeY;jxGOT)arTYQ061UdLM+gu|U zXFKu3GCGeu3Q?*|_FpTscXCwr4`3NLVa*~lajR0LS;LzByikO&KU{a)^N-W93 ztvu2ugweMiqQdW5ztg3e?55*AJ|rN-d%kE$Q4E8r9^#R?k7Sv2jn96fDSR ze~Q*T<5qo>MHw2$Af;0fiaxC}5~O|z<+;5N9t{l#KE@1uX4?=#i(MV8{kfe8uDUEQUBUke?~%-XKAB_9HK9 zZz%^};?>d!EYh^57R95@p&(1cta0%sHmF~hj33kssnndu1XBv)%s6`Ja%x=V8fNIF zo3!5KZS}J>8amT9dYOdEj)ZyNCJ6DTSW&njF<%>Fh)u<=2}}QeL?|@It##RpWG%I_ zEsEPdaJJM#K)oZd)n1nVSyIy4ZuR)MHr7(|!9yYVccb12Q zAhYBQ>+T2dOPCBS62S%D=1bJFGD>eXWXF4&!P}__}x2#WZbdkoBTVhKM@Er#!0xw@%!L;GrPr>kMP-$zQL+e29DM_vb!U zvR|q3PeEuQ(Ce-5kG-SU{#ldxNqglgy6{d2MY}&>wIwsE|5H%pU}gPpg5v)tAjrwc z`u_rgER4+T|68Z{wzjrC4m-NvYTcgkhXOpp#L(0rWrB1v`I=EM2e2FaC4^|+nvjWP z!l>-~%?mf`m>xvhRS7nyHX)QGT==KQ-%|%icmR5mqyFjFcGm->bw z%8rui7iI{&IA#h^lyyboVjCkFaAfmaG2$xRw~#pHS;IFGy^coi2B(}OMFo1UU^x}~ z{q{%)4p4!j!$A|q1DL?DDW*gM)Oe$p{df^zJpW>M`h1oBgL2jQ(C)X^5{crW z1K=nq!H1}&#;Pg4$inD6(qmN`dgf|OUIL~O5>gtO#q~OVNEhO7WK(Z}nzJV;=&%M3 zw;JLe1fmik;F@cIATtyIOO?&QK45=3?zrZ6<6H)&q$wgWUbI}1Vo<^fB)TB@!oVc} zpa}>eRMebDI!jK5q&*@rXP`Mm%Bz4iN^BTB0o<_(9m@(Qhzqx>{f_rtW4^Yz>B+cSjUdlJ6s0j4m`Y7Z|{U=Ennq z;kLEu97PT?bM)n|$4yWH6hcEn=SZY_fSj_D^g0B(M7Yp&+p*b(GfIGCwY`ZWqC@srvoHybG7>rsb0RgSi+H@ew1?}mssR?IDloyv< zW1=s{7Fc1#s0UN_jK_MoFOp&b%q=jAa$_2L@WwnkY);FU=H8EiJPNd9ScP4trLYr| zEZigcDDh)xVQ0YA5#31eg9*ih{)y8dquR?>5}0}+B9e?}n#e40+P*Xq{yNR(heRph zN>og@;1L?>E)Yp=Q%^3f83@QhU}^n1u2H=P34j=#`SCgY<<@rE!RQ36Un9gXPFO^l zCAy4@d5ebUM@8Xe4bUJZvhWhwhG(RH?2$31Dv*CTN5jRyqG{0R zg=l^y$X+4Yg+H1&c3hw@wXhw%AXFUXAMATejPonQ?!sSIc%|D6kJhO^%=v$5r~a0L zJ}fEaAaA^mK^sOsJ41(jeV z*%0-m2Ru)8APP;W#JDO5j=RWl@CpS=oQxe9js z4yuzj{PD(<{p1Ol+P(Du78v~iKnP@hNDb>bfhiZewdlyl=%&%eZyz(QcAE3KU7ePY zd$IFdNak&KS|03blxVFZbG3(5WH($pMkx8eR`TS=;xY178xmqL=O@21!y}VOKmT}y zk}>|H@s5nvHgxDfLzSoqmV0@0AW_q0Zz$Q?+UnZ++Fo+uT4}EycH*x-QS%<5TP&?S z3F$H{|GVlM)&BaI@UFX4!E-ijISl;La7bxH?FrV2vLdbNvQB##@nIJ5L_CS?p;;HX zb&3YG2wNFPJFn^Cc4HR6L!=_0))gS);2HLSR@*j0(5o2PcSyiNjv5@KgtB8?r;x%J zeJi9&4J8mzPozdvqh^Yhhyq6r3Kt5gAWB|&r=-YhLK%!y7`GqF89#qv=S-bd0&tq`7KGVcp&Yqn#q64@{7322iHvplTw9 zdk`);v$(XPpCFbb{^lcpgCq%1!9v0pGAC#YpDjOZYI0)(DhPnO%~B6Q4nk~1fPfsu zIzKNP4o)B*g48YCj63n^=F8Wk?Hu_AP7I`za|w;8{v#)4gb+y;#4RZmHqYvz4uhks zq(&975C?11*e+1!6@_>^Wb`CWfe4X6CB? zoEduUM*G6m*7R^}!oz7_{$R6oHPM>Ln5RTzK{O!g$%&1+qA>v8P~`->V)BG z7QC(B(u0O+Llx9(ofQw;%XJu!fD?eH0l6Yt<4ZBp`n4ahdaVZuWNjk6yfbpZeIyJNeRk&d zi`V}2+N;x#cKNLlahamb+AFU;&N?ek2yfMecZ93f(p$=P zYp&`zAmy^%UvI4TZ@w(v>b*cMhtA0L#din6>X#F5c-3)`&fNY*Z%4lRUAt8L7Jr?G zPN{TlyU&QR)g?`y7Vl&WUyAIm8m?-+Q)-0`^_LI-KYunFRkjrWZW~(s`6j-+ZNT@OMt#02h zq3>^p9oMO+-K>A$?_B-fbi_)_t_Qb2dU~w>%}whEOHSQ3>ND}$)!$!4FNsnPBPNow zmse#Q)>E!e?%^4 z{(^8(hLF2~ZP6 z+n03QVL)m)ds}(*2-JHHoRb_!^KtbBXqX zc#4kOgLP=T@g!RR<(cyb-XUvp{hvDoC&z!^A^xjGgpKLnX7PW|e=0_7Tuhw^8N_T1 zT}(wxjqOcLq51fr|I6CovC+b99se&)`p=XAt^wEwQfngcX$c$=N;5UbjX%VRy_U5@ z01mg2d{iijE8)qcb?E!5?9@WA`i;e%F1+_!^Q*G9)_wK!C6nV&hT^ra$;|Q9_36Eu z>+n|pw=w!XN90@*p$Sh!(q1)_`9sssYg|5^LI35Ao{s-%U(%iCxC^eh`RYRxr6IAJ zxg)V=5pYueS2=snx1$%^m&4nq4=VT~&SCtm+0sOK6;+^~9L19Rs`_CYM$@@8NKamG zHa<`Y#P*HZp)*;}#M8*!4dkoa`~B17#b;mb?rU8NAIu)25D~rBt%S!iOxbwH*Ht`_yy`muPXk@eyUmb``50Druy=q-Nqu8K2=w9 zpnS$hQbWSQU{TSedJlK8l}-N-?_bDVhB@K$0h@4aaDM73*KZPH4KH3xC36Ltl=fRT z)F8e5>5=JfWzD<}rZee9ld?^6(zpp8`LoI6(nv>QpBZX&uCn%s2bpE8bBLuZGbJ1w z_-1+WDT_NcmcPnqE5Ur_(#~5sgHJk^^I4*b>Se8J++33t9PyxSn5(_YQQgMOE?)X~(gAt*=&{K~= zF6^^e47}#8lDkzUjuT7Uxf8@kh8D3 z@iu+5vQ)XTzBzJ{L>%#88lX|_p?h?XB+{EThd$S9m%}U_7%id*{b*A{iI@R0YVJU; zN+Apl*n{&lpl^o$Xm7NRJrl!fB8P6;rvDS+^FO|~xAAC{#EICC&N?-=X+N7M(nc^2 z&83$P^m>sEheIRW;aX=;gU8Tl6D8$Yy@-v-F%6}1Tn!SFaXG8zdc@sK?f*cjEmXUL|>F1WEl_Dg_8zKn9*S+S&Kk?lCp zDom=4zj2U4{IfcFZYvDA{4U*lN2?g0zZ0XCcjynewYTi1>^wdRGkuy2Hi7M(p#1^JT$#un~ z8oq&6LLRY4D3~DP6>uUsUb2zwlLBaX`DM$^WfsNW zU4lr8MS578^qtWe>P$q`^HRpPa%KDC8oB7i>1;cI(IfdQEiBQsZYj-TN zN213-jO;(Ur=z~4*lP0s{|mK5|sg}r5ZGt7pr)B zm&;`Zb$yEb)=X>}y0vD3*LG-!k%EFYo8%Vu=_8yA_cS|FjcOz82mV$PpiT6Aya4;l z>A6Pqv!=%dV>{pEV_T^>XS1xoA#|b$_*>cdrv>_inMvYu3mj82o5bRjjIK)aH`CPv zUqZIQl~~OVhwuB#79_@JYc7B$c`en7?Y??0YkPem zd5iZi&dZCMU0KB8z=b^;mR+HR6vE$Zza|L{hL7fJSI!{%3DZ1x{5|fL9@EVMji%$$c8|f*;rlI?T?qi7olmuLWOyGal z$U`ZW5K+e>fK7Nt$YtsH?=JR_VtqCRnQRxX=mW1n@=wg zx$tGYRQt0-Pjyc)8yFz!#|35Ntm%u!D&2*BgoEd`-y>~bW8Plbg+1g8S9uN=1||B0 z%g3~Zw=~Xn?zI#{IIW+&DEgHJa1bw@klXmFt)O9jAQHi)L|L}7g`ER`m324lc0X}|I842e@1~lTPFGo9cVR>xTc>4tw94~ zehDqoWCu6ym`U=LD%G7oF=pM1dIB$=NItlb+*w_76WI@S(3u;oJ|V}ndK)S=Li|nm zBSb+jD5RPqOOuI# z`GRJT8eNuaS`(Qy;si>Bg^)DSDXjm9o`VY8TaqgAdsZn|O_%)%SN9uR2n;)Bxvbal zuvUYZV9gEY>Xa}ouI4URcnyePmz(~*m&dPXvSz{u!NZ@o2uM{sx-snvS7s%NH0FrpkbzZ`!UWF=)zhimb9 zZb7~`4$-f<4AnZ_5>-5DG=Su8n9e`yMQ^rpOcF?7LJ~MMVW0YUm>DhZ-1xyt=Je)- z2UW95(?KvA^SJK#iI(*rrSptwDwrcB&S5N2WEej^&|+f^G>fY}-W)u>&PahJ#Nzci z&3AF_R>yXI1a;Y+_dmd>&3rGl%!Bp|f8|-rt&#IQZ*gU4 zHu0odjKEq7bL58(x28H-UYG81!cCb@HEJN)f7oa3V`t7QGgWu=#ff``lmDU1>=Qgr zdIw1+fc)!@;2NgLJ@?t-8WF$A(Y>5h(o*6KX#|EV`yw0A%W3T3np;S%!*@SGftUA6 z6=HfrTfH{Sx+=O+4;p=a3B3-_1jlowCUm*J3pxhw9tYvz+2kj0ELU1GylgoeMaD@Qgnm?bGE|EQB~#cKfmDfh~4&S0vpR zmA&+!C@!8G#^r;tPVrVK$cY!}xAj1~D}Y=K1jQ7gUK<1H3KSQ9YVkG254cM`QuTdw zL)%z1KI2Q6r*LitUS<``+qYF87JG69A%V_{PC2B3oAPR_C=cZSm7e$&bf-^}0+hfu7^Ric8vExM> z9L@%xS3vHj$zBmqm09ZY@)mqj!6zK$%M1o;Q!v?(>56~?gW?K~AqfOlC?iMnwBf-s zi{w6NY}C>!`zzQcfKl}|yE4@xX!w3!kHOHm@OI|)Zk!0WM+i;f`i7M<6*{8)#V+Ts z!+3jWfE~6Ga3Cjo%Efo8YB|^$Oy!lWZ9a^Wi)TJ{Rw_HX0bu#)F$fNrEAk#;oXT3u z49c*>*MPFs+x7WupEr6Ig2@|5&KnBqVSa;4iiv#0eH8VHHkXx|H{oDVOPT^uEC9M( z8CsQfDWe`Xf_sVITzWw*PN;x6$9J{J$&cgp8CB`JojW7Fz1!Kuqrugn-)L7)9eX#z zcSD?!&O(I12$8&y*3sw_lo0Y{5f)}iZ+G8Ny;(|_naeIoKAQ{B#8#U;mJo{y@GY91 z5$iHlm+)zPqZku4NRabNIX@Z(J8R}l*I_JzJL12v>7zdoFom}M+xGU4F?N#wU=7$Pp%0Mzn8Y9Pb#uC`;$8(Je zP6wCJ`gv9atu#dhfa%>VeSYV7sdQMxt7p{cyBG3e^=0P7%3q__8cXLqzqUx@pyUUm zWyFzC)O_nixDS8rBpHX3GTmhejqS--VFFIS44NNh14`@j8w_lnxEO%k|7%bfzUrv_ zNTHAY*{`+uDJ50s$^)lR*5ssQy5YTO7A|2DY|i#2&>>U?-&`Xo+9oNzcZPavj8}zm ztds~-l(j5xKACJ+1-`YHM={Cyv$6DN52DGcEkUMDs#KMO2T92PyCR=9Yoi?cw@zA) z90mRDvlxCQ_$mH##xj`?VppFJ`!p(&+70bn<;c~PHRH_6ceuUEAhYort~Xm7J`}vL z^xcmWL>Bjql=F#q2xRVhty0#?qudXn%PxhXeupgz^%f=*#ZdSFE8j4BG^j?8=<1q6 zwqc~la0a4S0GXBv9lVoZZ8uZco=$!P2WLQguw8#8TpPK@sqsiSul&M=m66 z2O#gINY8h|%F|PGv#~;Nlz;HlRii7_?Kcw$z!m%qs0CNf86!#mm`D3nvff)=bfbdg zB*QVH@j`lXo5HQOT%PP|>|6K@{Wq>}i7h#{hZz{j_C_N*R8NKd0S}+Yt$(5Nyn<_~ z2o?#QpjdAj$%vWYbT~;80*%HpmeCZo+xa#pfAe^%^qwj}XF}+|H7^sON>(mHe^@sT zgok&0s;=HGe=C1zYX5zC#qH_Xs5w`KCOel&J3+#=_+P}Dn%DhjqA3PbjmHx{Vhyx0 zU4lofs~t}LQY!q#>PHCB6HUzi9EckO7waVR%9BSsEzReA5a*}|9^%yM<;nZJ$+vTV z<~cuY$TMR5R`%6s=MGdoI_DnD5)~bob4!x=>B7UB{JH5>i<=M-bp_NK+anwAh0OMb zDrF#8jb01w#kUYyYI)n|^=!nD6>>(Uc%X~Ge2p zx^Hm17QAIS|zP>jJwe#yba49gvkY z`qA{(hmebgw6@^L37(7AG37E~wQEE1J;F^h?H*#sDS~4irR=>2e17F4?)JdzVmzEc zqZ{<$%sUih!u?OGv}Dtk+ERs^_7)K%d^@wRircS3tdo79QsHzAaRK=a?cA zbESucXBVYjZH?au3ol@_iMXUjvoaW;5VWehf6noSfFv|$!i{13PSewZxwA00vI10W z7-d+obH@pp50>es+AN!Wd?EDu&Spw;(I81mFXggY(MNS`o6+pOVV#+Nvgc=N*l8*K zh1fwx0O{W4kl(NsOBL3w2*G#h#|{DzSTqR;Q+l2DDo*1@>oO(b;V~}=uty4 z8hdE3j~~{%=9#v7Vj7rUc5*jiGP>mE-Hc zC(Eb5lrEW_i+n9TT$kMjY;a(a6`+9(2L+w-dv4eNpAuOb!3~PGG3q9;txLyNhL?qf zrDeJ(WnpjHcP{DKG#Y@@S2pxEDJk$ z!=b_K1nfMd1QZl#B5DMVvP2oQKtJDOL;D}Vxhs-gc%Sb^KPaZhrhhM@AdL{y7Ga!SZS@xUa zb49|ep%9T9;tW9?*OlmI)0zHp#{IVT8?TkSK zXzdZeqOqEK2TAN1bP{C+9m6DWTdP4IR$gYOLE{hO2BM}Sy3TwAXN$tjldZ#a3tOB* z$|^_e$q`T_5(9U7kUEhql+516_*8Z+&1s1eh(dv(1LSrfYShBGE$Vbq686-N_#ZlF z@G@t>X&{Q&9jbe_B8*6N#2N60+PA2JcA7vg3*s{_1xM(MIi6lhp@~_qJIoLoir0Pz z#zF-NL17SKi^8<&u)oj{oq)`&ftDgLMpvjj+79#Ri@lv5(D%j5DVCI1%$QE@M8u2Z zW<3FQtx1{oD{8Q}tE?{tfn>vClLt9(B1=JB-Ye^VMhGy+Ht68H^8J9XcmIo~^ZIkQ~)p@t6(zN#9esiw2O}Wt3sXuX?nZ&QkQ)>NSG>0&1#>TAp?GXkfb% zu5Io1|Bho`sR4UC5!XOFaxPmfgq)MUY#AR%ZM=zUVLD(`;xwz^MzuC0*luU6v^hve z3N(KOqD1cbZe_2D4VJlX3WKA>i;7l*MfBsf4y^0OOwdq*e1T?S6w3L05WP_W2jP8% z@EhstM~xhRjr?VI&+u|e%1=W{udqtLeE(dG(b8t>i2OzyXG@fhML06WCieq9hsQfU z584ar^FjSG^lq9oOn(q{$=_2`vG7A%34R~#S1iyC9~t}wJ;ugB2?lOTi(ToSu8Sxu z_E1+N*L$^Y8AhYu){mRckXN6U@zPd*0P6+QwhE!BYj(D08+a?Jj{|}w-?xLE;ql-t z)M9+oS~cFs;v(4b+J8-%^y=kdyxY83Gxvx7FA&xX9;@#(MVp$Ty!O8YYHqn1vS1FM`GWmGeyPU`F&AtJy_1LDO$+OWI3o2_l;(_W|9qTnWQF3T{e4 z5WbYXQRme8m=b<|M-K>sLA^iqQYhU|k?njaAc>B4aX#AY@70}1;=TH`#S2q567v=k zkVx&@W3jU&bsW@c0{buj$WJC!K+R2@U}C+&DbaYuR}{MkOD``&MPv)O3m`K1V~EB*>JMekLX?G1D?Ch+ zk!L9;LD3@IICMM%Mm*PoX#sS8cojRUWTM|bAe&*Z8C?6h< zkK4aE_L`)JIvQJb+I59`RU_f5vCjzG`w+ix^;kxenjT1HVQ_bF8DpA-+r&JOsl@(7 zg{xY{#SP%PKqf&j=D3AO8Gi(Cp0@mmIBNN5D^&UVNIli}W~WX4>nr_N{K1z+c)4!d z{$A=oyK?t_?mdt2p&bQ16ED)`F^|i2C@i|)zwhB>XC=25t-evyaM~PFPl`>@U2i;= zgrB*O%zv}AMgfUlgpX@lzA}2dvIcerek~Oq1buiElZ%5o4Ri{)UD6sOr^F=yn+}HTzkJpYWuX%X(V&^h;wjr*850pXU8jp> z+oHBzS8ulVOo9Uxw)RFn6J0+L!r6%1aq!p4OBYjjFO60k>D&He<4<8%!NMDAY>8_uRByJsGanV9ll{0D_3m5U|jZ5`N zo^2W?0IAo--`vTd7V1Q3u;X5<&6q0oaMoSrg4LMHw#m0P7v^zZI5f1!1z>yGu)lF6 znIMn~`yjFRoRi!)6a0)s5Iea&av98&*9RW@oAcje{rJ!o(Ws6aTMN|vPXu5aF`nL+c|8KpC`Hy1fem2r63$-~cj~zmselP%cf_k&j*Jf7>fywb5wpmO9K079OLaYvdvs4LS&G%$sRorNQuO5YH*Q9-6shpz@Lih&Ai>!?eVRDxRDc1uKr{#jz zHGf_X4?}FrRl@6KxO%?Z=RL_m;`TKhqXTnfp7&(FA1)6A__;o>&mvHtGyUIBi&qu% zrY}qoU^#2D>sG3!7&T70%OB$@IR#n|f8+M>+-dW%0ek%0-fGcJT3n{Gu*<#LA*^Y& z4xpIt;<%XYXa=40~dv+rFu^v!$FzrZ|$9)ufq_xu5_X7g0 zvNS&FJ*AFQ0L&5ia|7`;CPL50DS!8`sH4e;(*bjNFeJbjr>hW?@}2}*WEHlEOpEQ^ zr0p&LwtEC$&hv8{v2EAyHzgjk5HRZ0+`dg;G_2mx7m0dJK`qo86Tnlo*;i+;(bwza z(h3K9t+$upEKto5(4)eJxvWC0BE)`je}0?xre zfS@jgOP|$fLU2QMVnJ1wF%Uai6DwCOY!Y70C|!wp_MH0hTaiYO%pOM^Sit}y$k`2z zA$`L`btGTSt!4T(;zq7~_Hdo$j*s%s=7()1s->!#elNf7hxJ9ZK=0uwd3@t- zPuEyo0=;Ob5B4Mn;6p1HxF{Z2-rwqhqt4NtvZ*N=vxh5>y1c5&+mMt5tOwF0wBa$} zy=>^PO9&O8yUI3XcX!INQNm`W{U4kO8F->`rBK0Os^TWbvVPPitnaBwR~WgmDE({K zXZ4{*LmEHE?}J+6V!M0vY_5{#Cx=_mx;0k(Y8U^Isiiu=uCu6iC&xswL_aMwJdLP8 zK1gQEEHf>fKlnU)weRsSJ+OW^-ae43hb2@)ao)}kwo8x|@gYosFU9?#B+ z+BpJrt}kFGF?avV_VHqbUenDWX_ksm{9;dv)uKJ~RJoXo$e;D(fst44$?I705e`axk*}PTB=7+W2eyWikrdzS zv1)ck5X-=k=rkFEeN)&BvWG3g578KZ`D&M(JzIO{wLuwV6{cTui2h5@F?~ShR?LN! zLcVD)UO9-=yX`#Ghzyp#OIZdH6tewBD?~#66+#~?4>RpYHJPmYip_9`{d)w5Er&}x z>T=m&9WqLuVCPZ-#PswRWFPf{oh@Lrgb7#5YD6ir`F$30j&lVk(BCMSG-pIb7lRUa zdhPPqQ48WlZYl?@Zw)lhn$)kYeVr&WsH>}U-I6L4j>`;we5zp@=cagL-(ghH1AI}( z!f-98@Z6PaaO>fgVA@XO4)0C;fz(qTY&J?BF?3*BB)?6ynQPLW!pRg}(ba|M z%rI8oYtRRXV94>PzoR17uc|y&e~)ZutwHbztnX7`dW`FC&N5FYf+I+TvLRBH2n|V;{eFfm zup-$f%uO&gp&1rtnH2PCLUDIL zW6#E!?Kx$H?_Wy)z(v3#kY2?|SNisdxVf(0uWo(KA4ZPT2} z&gYz>lwcjAfY=kl32%%%Yy%&+Q(`)dmgH0I8On_a&-z>#2%5qfG^;Zl%di=NcLG$l7}{zK~D^*5D}TN)WcikIT#vUT-h! zga?PFIB2Jg)a?AGELIdo<=biCY_ObE3r>zRvd}*0G%#t2wR8rlOH z(T3LdIrNs!PM=|IgovdOM9X<;x{7gRJW@!U7zT`kf}I%(PDDX;yi>MA7@y1h5!ulh zLIol!CK!4phatc=VzGjQi2|7@TWZ!17VbXH(XfufgQRbS!&Tg!bwVYjKf!7vjeh&L zGfR?+P;hIt#&;GC4C^)rxfxU>R-glN0`~5C|5_J7LAu!~U$Zxot8any(aMFkfBQ zX>Jv0#gYKu$lB*}c1;)9$M^|PV9t_?1{MknLXf2==CL~MJ{L#f)!}kr(R*j~Kfc>; z(H*~{klgw)a0gocHCije1M*kKk7{Ald%Wd;7qo3L!sFH{8tGN)+=~kpLW-J!eOXC7bxvI4v$4S2ZD%A)8spj%ynAqs6wJ zbmfG@a~l{=wDY=`tdIfl-G%?wzJECcx@K}A`eR@XR){~AS)A@cKIu&-XU8ANeRVo zm*L^dXSzMeocW#pCApwxd;;Y70>)IzwY?l0mAdPI_XO@OdU-~M3l#qZj%{u0sVdSk z1UUUZ)Qs;S6ea-C7EAzBPaGVI`0>t;(qHu^g@`?2OkO1tSDTzZ{-DDhx-=6q#DoK(=Aio-=_a+WKf z+j+3gVH}=tXbfp&AFUU?OJ&6BZVo!{su7vn9xUD);IM^#>jZTT<2vPOMu8B$HS)|Z zyB`3(XWQ@)q)Zx`2fnwSY6ma0Bi`(j?XeOMuOt4g)5ssM5e1ajurU}hbP z#U8tqNp%M8V<<|lu~vZg%Nnw3wua@q^iL-#AcPb%5&2g6cJ=sBx{NFjUv4{lGs;1N~socrA{FHOCyrH3CAKI;#Fbf04dxML9bA-9J zZ!!yS&{_n;lpYz#K$1(Yx`!mu8@B|Vt9EG0I|fj~+Z-A`A@Y9d^oaxafDqTZkFD9* zO|N~sEjTL`P_hGOi=Ld2`{Lx4OmE*5vGG)_B(y$b?y%JH;x_3-#P^!D)_dg{g_CDQ zB|Z~K%w|N<6?t2gz5!ZyCL!@X=<4G!%Lix2$~R4Q&clX65Y1Tw2Kcc|nDW}cwJ zGKkc&_sGvct|)Y+|HfwquF_l?y+F#Ve9j-Kd}`g`7e@KsAr)8(E|)*_EvFsA!Onyo zLHSsPOipUXe03A`0211ml}Vr%?)rqVmJDlVytD@4kQL5Lkh2XmilvL~K&&)3W%IaL z=?>{ZCWflanDlCEt{~gbvp+U#0iwKgi*4K+Ni_LnRDJ{fR{3iC8v@4-?rW30fmR1+ zJ)RZQvr1TXPd;`&tRbe@RwgGZBejF4;20FUO_-o+14yb?>}|yT^OB*ftWqeei#@jA zE)b#zf7PA`Jsy^UL%Hma{!2VoPI4e%)5?!)JCjUI3)8EUNjYu%c>1N28w~Vz4ON;i^}Z|w!S65 ztYfVTT*saso{FhB#gGmc7lKH8JedJto9z)Et|3@2SG#HtKK3Em{smf~HQ>PSv3E+r z;_rcdkLS~T2kfc7@cnxp%7e-`lQ5aN+ZHQDC5csft3_CV4oAi&U6bjqcYk1^wuGuA zc4aQxuNyohO41W|HnFrTq+uYVE2DIVI*4w5{?T^mP_epeDo-lIzzR+2n z%2oz7cU^mk$&dETvSCg8ttFC}qs1>RI_F(ItH#z{)B(eX?PxT${}9gD^v_cT)3<*( zSS0`<%VIuWJne~H(5BZWIG#Eg!LXKG~b^ko-@ztmMD|4Zl*00=l1oN>%cVF zW(YiRX@@{OIT+SjN^=WQoK~ySJJazQ$*J`aF$2$U5PQ?*)7#FITk|A~PUDJ9bij2R z&}~lrvW_p9aWCrMCEWKG@-CV8*s~Wa6_h2jAf3Z$jIDKvye@+Jc7WTUXKx}h!RMsy z?@(%OJPY=&K#>YbIrfb5Y6?CaoJs>5S(tS0D~{zHj`02CMA00^7OXbg8Ln5wc!(0b zKZD>3`+fl36WL5%QJ-galQpsL%vXuFS#ouknj?HAF;Gb);MU_PCii(>Xofs=$yi3V zYElM5%1Sfgu~Dqw!%;FL6M}7q1+K-SFb;Qk{v0pu0>ap`fOjQr&hKVl8!#Xd+_vZZ z8nq{f#u6!spwzK(i;g0gdr!qIhA7%>m-jYTlh)1?#`s`(vTcyvi^L{Y3v{c($g(6{TYt;DB!|${+y`IDnO8(~$rcTVWR8qfs*y zr=UNs&swyW*{zYL96!pZP-P=dMgXzA`>V(JIN)m?Eloo2)0f?Q*qXZT@4?)?LDDp? zUh#9_rB~u@<2Emrr-(sP{3a(~HMRB*z0>La(A^e*C9-O^=zYnBeQ@WaMgi94@gV40 zB6MevoG1~LJjma>!*aju%%sOQkSg00%wPe$utILwF2Z}55XUGnX9QslqQ6Sx0?j3e z4IB05DH|9@r?$}L_>NV~a6^@w1Hh~>YfJ068*!)_YDg*L(@^#F$h70}T41X@3v!y7 zY|wkM=oD}doZ%mdBv*Cw?z!WU(Bh=pS6g`FhwUGW6&hzajcAD*=zm2mM3sO$4_R;t zpK_7#VHY3))jkRdA`40+V|(=ZFnOF)GP?_7r@-5(n8_U-;mJs0G4D$CD$!&{AB@*2}cJdL$-tpF}sW_CTPMgAx2S zvTW|wdZP}OP|bJMRe~FvAODZ1L=T`iCiiat7bwvq-c+`6D*DFX{7Nk;(ziC=Lx$m zHKL_@ly_#-xhJ^p)svsOo4P#GwyPFg|5&Kqq+5`?+3wZ}1_F_*%=l;BlkIet*pM|) zBY_Dac?!Mf!!|??itOi$dsqtgeA~~{k-Q1gKQP5Pr!lG}hbt#nn$4@nY>ou@Bh%j$ z40#y(`hAaN)S2~44Uzn78hO4ZQ7s%l6t6X_fU#Pq^Vc@e4+waExnLCR)dIIB$zZ%E zNf$Kqd(3FlTza}*=F}9_@AG>fy3DWZEiJpP_3v!N8AkE{IX}&)(qicA@c%x|uegt> za_H;w?)n&e4)A@aVZeZv6B!$_d$`~k6wC_JmrP`ai1%wP4JA4OXA{%w+^vWSV%g!M}oF#>yQ zLY!!jDyDK3{@Gazv{%SkqZ~7DfNYu_HHIi$xbSs?_%J41?Ip1StPDf<+k~DaZyyq| zkZpSUUrPGH_yuvGgo#^nSxPhSF|ii>H1ni3yH3`fMnOSb_Rlt(G#lOa6XhaVBNE-d zRvTts=R-FF$^>cF6AR7Vid{r@tUyIf*Da5jCzrfx)T(w z2Mg~NvXqw7?@3mYnsItQY7GzlMl+QH^lG8waHKGeQJrbNlwO6ICD9$`$XemX%aw6A z2l^C~Op|3RwPZrPe6G4_wwHz-Q8bqtwI|n|Adx6(?l`SE^}zc{p`6KKovG$6hc)zP z?quMEoQ$YuiG_K&(TV+KMqTn&R#)N~klCO^fZuU$VT+#}!JK;NHE@6-Xey+w9vuQ& zAk`jY=Eas3{z;?K0fKp@`G1xKOU4gPGOWCmQ(svaO*}1`1Lw3>dj!{xhHkf)z0M*? zTQ$a?AZh3FbIxAc_MS}#=#o1iz8zpK5X_$aRJ^3GPf9nlCXyXv<=X-b|H`kAYW1EJ z{PO@#^|*>ipvXEZbRc&b6v59)(oX^=ZXbs12Qiq8zN+ZPdFAnQ zMwYYP`?ybO+P)UEl@60l$JxAJ<^-)IluF~>u3tgHJWvS=T5<#@s9|-PBF6HOFaPEC z8Be$E+fiV+qY;KV@$4Q9+}TY~DNl=?CicJmxly;kMYrM@J;N@WseS00QwDa9N+lN$S>@^mA(EQk1*-k|rIdUrXVJLdP>e zo1&@!pR!fJ~(@*dmq=Pb{j1sM*wCgg!Z~`&3>C-yeK1y4v(yL_b2F|=`?Xq{yv?bq5TRxwNgjOplBkH>$CIrGDO6>=DdUZLhh;DO~b>N-Ve%vW> z;NIw~>_Xl>k2GFi7XF}X|2p3fc!b#f z;c`4}yp$1>5KuXNNze9hQ@x#}=eMmov2QO&=s#j3%>|{Pkt6@myfddhJpo{prvdTj zgy?AKb2sC&XQgkpZayz9Y5s0$&SblkyKPoa723$8s#ZV_z(dkaV;?@#_vmqcE2ZIv zdr8gB*}{Tv>e}=c&d;>#>)R6#ZaS`vex*KHHH{PnY2af#%!!(p1s+D5v+|z-+623q zORP$g-4b#qJ#;GN3hXi$(@)v=>Tp_Y&LQdRFK~E4>jA=cLB^TVT1U#&L1{( zX}n8uUf?sx&-5+W9ISbp-*@$dTgE~uM*lfTG**wVf!7Upyf;j^SLhAH2_{w!PjAX? zuPg*p;w&}@+)$U3n`5syI$ZrL6_s_xyEg7RwMUu`E1xDN+FtNoMxEaOM*#|ATn@sm zS4fJGtQV&;>T`r!$7k9-f=%hAz&Z-Cnp|&gFTKW*!p5;(@3Wv5rDOl4YIHP?-?9`u zQSOEI^V7>Akv&Y!SMa=84xAD#97Vl6&SRt`@Z zNlc3rb_p{Ur~m5b(5lwHdK}o<*QQ-=XfIDbz<{?jlgr2-sKlOjp?BR6{?L|(Byu5l zBzH|D6~i>u@RSr9b^aD>`Xh^mNOTxI0xa5;$}SAo2o*M6{Zx>cFr2^KaMu0`njeOU zY8r(?v?5aG?`yhQ?d9Th+s)g z6g7mJ97FhkHMobP$`62{O0a)HQ4{ckiU0bw(e@{KV`Lou8F@7R%{Zg`Ia2?C<7t{? z&M#trmYaQg)7@Zjxe+8W6HrrF$4xZE`Hmrh<8l6l$4X+7UcF;Kkr?55wp( z3X*PbTOmDCZH1(47xCwR`;lX60vSG>8$PUhY0Jf`rBbvzUZ}*6K}hA%nzy!PyzW$c>uNP7i`7|K6#avRfCPOcmO5n1!;dkli#w z2<(~M@tOc#*srs2lpmGbwk5R=?cC0rtbZ6}ZlktvVgT6159nv`q9VX!C%F~Sqf8>N>h|9p;&a=t%>g~Sp2#U4WU`tCCct)eK&xM>8z{@n(P?QGP`EYs?4{>!O5>((CttEWiC z$+qu$u-8Nur`TO|Q;nO=|4jdql?I(>Fp}64*!;UyohWH>8BkSAzPq%jYp!`ee!bIO z0{mwp1`ijGLgL{Lon3B1_;cKJx&E0Y|3(GmN+si=i%$79n!Y`Cj zu#Z)6>JmSH>FT_d9_<$1bKAZl(5MJ5EJE!W`y;a243uh7g06^*`$PNM461X7Hm(QQT_^KyQziQ#AZ`{h`&z~9)~6G3>|}CwEW8cqL8*L z;pt2=pI$}Y&!wpbj`c(av#PU*8ekGM+20t<7L!pIv2GiPu{|Kd+v^^Yo+C7x2VD!0 zkJ}GwW$=`MrM^A$rxUZP({LmQ2`G$2zqPS9ModE)!vRqH zKPNMVXr&=<+xp*7)^hpAw8Zz*7wi#nZDd3~`e3w2oq%buqKn?Bv(n4rUaZ>eN7e}{ zzlw9BD_bMhxfdWLkaMQIMx#Nfnshjh_jR6@AlmjIz=vJ=B%@mVcBR3 z+!eIxcbRgWv7{y5OOHi3;@6-OD#`1E(^j2+Pfian=~u544Gd(63xUyDsHZoXWGTyiZ%j@37*NkdbGJh1N14Fm z#_nmluH|jCbtv|8HWOHE{ohh8O4s|h89%0Pud(Pm0x|Y^`-e)-6XyOW+Ay^Q9ze<4 zU1Yr!HTjgnmAde4&Guovk;m!IomdP z3fyIQZyR)QEM5LS^XPM}QJEF96df+Zg!&320Wj>6_mCoBk$wKfX_$P_L8s;4`)t(} z_J*oI%~p7X{a+qvCJm%NU$)O*ynAx>c(5uwCo~JE7cY+VAs)$}oN}_Q8udoHI3E{5 zIdyk2R?nV{Yym93-w_d+G-SSiHLGop14gbAHJLcHj^U6t@(3{?6sGlxBU-2aslujv zC%wI0<-E~j=XnbKI@?TLXCFZXS3^xneuMK!9td^|n~C?&MyF1N6h)ivlMxad?7P#C zHUM0OL{9izz!Nhc{%RZ(a;b~n);`!BSjsxsIHsb|W7ux?^x6OgKgN!u$R+ID1Jmr$ z$fsB&FaG0Id&+|4U7V8OkJe_-DiRQk&aI=5m7i zYrIgQ@4E#!ghp*6-av-i4AY{U=6kO;RA?|gi>#jGb+#i;%T`vY1&zTP7XrkqgVNP8 z7g8r7p46`OaCsH2M)2@svrbaq3NFZBXs{tdinM1pK{+6N1OtSvD#Ffh?==rO!z$P; zI>NK?nLh|OQn2;731=5SZXsAZ%8X*9l*zGkG#k>FvS9?}kPx|&$U(w)r071VZ8iX= z)LbKV<1v0V2vSs<-BCS1JgEIew9K%zyza931$9LNhqa5isndx=MwXdiK(_WF_oYu4 z-N08t{vDBJ#6yZrQ5Y^w$Z6v^l-}oCAQi_4;*HWRLF@7?NLqcvRg?-hatCl*(YAyA z79)Y^4b6qrEIs=T%REpq0Vk&b!$8RJQk6s7Rvau^*L)+HU#G}$vjCs09&hWo?SEsA zy`c2r&TW+xU33G0%Lnpd3-YG*k(MBPsvI!hbUNUwY1rEc{+YA^J|;fh`#(P*v{DPE9qZbTJK~UM>*rdR6?PVh6rV907LP-fuKoO(_h2UHSFl9{Aanlf4PTri zy}X)21iA^CPjT&UJ$xHTO;Dpf#R|Vj{dVd%cpNYcHtJZ)Z5*gfws-m`I8-$W%s;F& zv3wNG%gUEpUUt3j1{pll%JQn51V03=Tih~0m~bZ`%Fzkn9b zm+egl%V)aKJ}$)&F1aSxba5vn32BU(4QF@$&rQnxD+nIn&k4UMylBl8g&6vKv4+GKuE)Qe8^mFy}6V0Xi0z&L)TjXeQEMY`p zQZ82X1}GBbEMl>Ezwos8D_rD%jYNvcP`r#qVh~Z&mavtt`P>z(qkQhmF2lY*|UE>-iM1%PnFH%E-}N0TN@UwZ=CY>+gY~^BmxQH^s*gg&N$|H}2B|^rmKx>%{$Y@y8$|ZcvN#icBnk#v zy}+OGD+JRyalVSj@gkC;ibE^8>89c9bFM!5gt0x(0Zy*7fEI=*IvF|iMK%3&{VJko zP6oQ$i1PXYi0aaGjf0<_229NdZ|!bwZY|WjM)g!_kAMr%gDAPbyNA1t2I}HHXYOok zjoz5iRue#(DMsSOe1N*C){=oNZN#jg%Ca*aBPBBr?!LeF7;I8NjG(0Ywd|m%<#HUV zCE7^9*W9pQd)viy+$D8f-od>TOb=>WLSRS;Ux0w~LN9a(X&$Ag7EB!!3(CZ97C(D_ zJh*IXWFVQaO4)l3bkOffu^9}fMDvEl8DVZ{72?2*LpB#OkjTgeRg9ATda2**|E`PJ zIPf!D1U$8A6-pDd`MI=n^M=o9|EXLm=f?Snbo$=v%b;onN`}M` zC%iyW76rlBZi*5#&Uanz`l3 zrEa#DHR677t}0@dB&7|E@35EYXOU`tpJac5*)s1yE{&xJ>XvU(oSJ)I*cVp1wW-9ox2T+qP}nwr$(!*tR-0ra#O~y;bwn z)bl4!?dv-0ti3JYC@oZ+h=u{BMg)IgfKI#H+j%>!1mtQduWddQ1n_ICjV6yNN*-mP z8SmhS%Y^=AQw0A}TBdakSeqL-#fqo%?6jQH(Q++uZT13n*Kv6iRda0Py1qL^f4%Dl z-{1*Itu(!T#d(89kw%^8j$Pe)y7pcFySd#@(W5)f!BM3937d*4bz9Xs~v zF#q2b8MB^h0>P=s%*UhK!h@St+$McEa5I&jM2GwS6XV4O8!8Q$5w3H%hO<{zv;82Qg z)lT#yV@;JCxD4sF^fEl)EYXDiDbaclUF{eDab%=X{k&!S`Id0Be?W`kOmh~? z->IfLMP4>{VKSel<%egpiuM4PT_R6~iKB9IQ z7HVP9J9+{w6N{{zliOGYi3-fsiB{c$e?c*+ykcEG0CO{_FU^o$Pw%|M*sV`dBo+P! zvyz_C#L=CWh?5R(zNIe3vMJ_$f#vpU86-21_%NK<67f*#5cX?~tpR!k`$WO4jC*EU zODvTQ;^Q7_HdOLfkNlgcMt!a7DlebKG%XUuPDTwzMXjNai;;EBK8X5W$`3^i4H!r_V^23+ zMV14{d>41)@>Kl1ivp*#Xn2 zw7Y+)CQS{00zDDihgeKB&oWn`Ia5c@ssr}tG4@bF%zNuB&|B6aa}wbEHr#kfW>MR# zJa2Sgqk(r!$c%cX#5I6DBKelGE>_YxZrkS_t=>T_om^L(7c;%+U~NYGVK=@5Qfp?{ z`v+~_E!*~Ov#GDkt=eeWkFA0(B58s^E@9x&@O87yZ>5aH!i>g-)}p&K?C~>P0d^~y zFIC3odPt!iiosQ~lp0)HW!rkL~ME{Tjx*hdoAMMj%}#>|A?b zr0FnQx;-}&@mqxmdv$j0c5_S{6_{ZFTP4XG$+;)- zAkwA0&mR^n-hfA=iGp7D7gAUDZYf^w74O&Jbc47D!p##W z9maS7_e{3ZaP2r{+KJN^;v3KSPsc87vb<4u2AyY3wWhZQs$m5T8#>1dMZxcl zb^{s0Q=a*wBKZp8!9YxpAh^pQbkhIEvWDp_b5&maIk>Y!a@UxT9We|S4Wld(kDdo#JV`goTXFV;Xt3YIX&Zf_`3ZEoc%T1HgA+p6(E~P_&lw@NZv*IQJ;;Y; zht_yHy0T%$dT>uhO~=11(s6KK7=SX%pp7mf%m`bX&dMmFGEU&mf|Dn3V0uckvrUv{ zN6FBh3I>^yxqIbOFJJK zbwB}uGqeZjQ7_+-WeCTIOju0A)`F(8ajMR$d9EgB))5@*5?Y-*(yhr6vq)2+hFR=q z7-+WRW?*!w5YkAt0`9J3H(GuP(c-G7Uk`-lYCVTaL%`ZKV~EvHY=LQZT|{2>8q+s7 z{N1B)c8;@*-l9Hqu)Va*LhT~+E7oD9uepS)dRKwES;1@ z$V4{lEozDOG8~VJo}Q&{AkYbdYV|qHf=~nGr{FsrsM9Vm8-&(vt2)mBqBE^ihKjvA zgq3(=)N5-v(%}i6>u{suPm}cix~w%<(YjpftW&gA@3U(rkWr$56NWKn8<;UG#jABn z#|`Ebe-(ABDXa~5jS_u6%)Axx=&8obNL8^gvYI%=W+T>epa7B z7FcUn@s3yk{CKl-b?Q>cNlKOpm*~`Kk_>Eg!KgY=JZ=-?<;(Fw#@!+AUIL$?ZvUxw%lkWbV1!HGExK8iUX zOpuIE!Mb^vbgqJXbD4|9vc`%sU3*ipOGlnUr8vemF}$)2ARa z=x>Yya;dDmRh-*I3Yi>NAvovpiZ{X@tO1@@4|mg|nFc*;{6{<1q2YnA`LlD#dA&W^ zSBdB(eNU4z42}b7+I>R9$NO*dZax!VKs` zIKOfW1|=Xi1O6J<`&1F3tu+WCO8Ise$3Q4OV`Y<$6Eh@4ion{Y1J&tkZGFH9{0VWq zeEa*AD94$Sf4ZZBGg5|JcQO7D(}zMLO@8mf*-xQo$3wy%X>v%TI#cwB9eErv^GK(X zDMCJXATHAP$!_*MY_vfgu|yW#>uB zwjkIYVff*}$%m|`e!v;S;s_`%P5=_!C;x-jeOVz@jJ$&6A6BACj`2R-*27@bF&YqZ z!3cDgk&r06QHctl2F*5kRZ(cnEr3cErVut!F{Q5@HCJB4b@Qf^clP%6Z2AVq&mMcr zhmTh7e#6X>nM*9jw?j!HRx2}ING(aw0x<^4;>WHjdz{*Lm2m&KCTW0E{L{> z<&G1yx<7>cK$oG4k?SdMS(r}z7*rjkSXLpp-}Z!N+0n2HE$i${tiqQ@b2N7h^8}_g zoWO$6Fgo?1N80@0bj?LjL+gC(M6p#l)PSW5MLqimh2YX!Iwn_BZVC2oL&~dIq3hZcBknsufHTs78vz!Ub$fqcfJe+ww30kVd4V=^=HrWc zITG>>oOJq*&+_?$E>T{={O#KVMp#oahjtk`LDoV`L4s2#&G6$dHN(O5PIC#8&9>#n zG0P#yo8=p9HyQ5m6~_)pNqTMU-?va9S*T-ZY9lQY^F3Qc!+|g?LOvTt8ZJUliC;d^ z^U4xOhXM%J!zBx1VSAqI)~uhLu2xeB7TWT)&)E~4e6ZE z>KhfsldKER#e!Q_7W5uxQ42l<-a%qo+bYw!{>KgdyZJxKR*M%x>4XXZ8ZDJVA+Pyb zzOz6;|7H|AD9_X0#Bc757Mtc%f41QKgAG(=y6+_0etpGkUwt6CD$45UMd?Ck2FUvH z8PM%(t{&$}Y9!`maFgIW&AORzZ9~bSyUGH+N~NLSG&-qp@%oEZ@I#ObRMXC3_X60H z{Gmyfa5)T+I0SL&zbDYe72#0Cc7f7-^KBHBk9krC*Q(=+7pkZ%&pA3|!^WLaQ|Rp; z8?&LS8qXgW8E)>lkE2JeelKlc* z+IjszyuV8zRZaEP?85)u^$(YTFqX;&D1oK*-Ci zUQnpr)-F6Sc>2`m=W5MAEIY;?kiBtLfbNrsL8*m)4T!P0;;Ge|i?FXqq&GQ(uPWE$ z;$4<>c#kR)X`;oQlHOvJR5zgDy^zWFtB%O|84IM|4wPYb;rTL8V5UbC+u&ry4R{Dt z65N-DaWQaS884 zwWz&l!3hv_EKx64I*aCd@Mz8S0$~b#S}rW!zz$vm0@$1R{1PV!kt+_3yFD&>u<$_= zIQ2{n#!~|dtJ0hCxr#XPFjQqDK6~|;SEI55FRj~M6@Rt@|Da>Rg7XY4eI){+cZj>P z6B88~J)o$&alPr!RXpJI?4OzUpXih)zgP)MaLedic1}y+dufJemp|@u(fsAWKX71c=R`*z`4bE#ToD9+B_b)S`v zkdHZMJXUp#y3-P5+c8&T55?%c^|zmW-gf^L;UN2>#b2|F9tV`Tgzo>Zfsj<|iM#QM zEWKK%`)-u`U}$U5_(s)sU&AR+*uw?lY40IKOyU?+Sz0wG( z<_68KgPGIdbhsi3pb>jKzB%Ho_d)(YxDL=Nm#DcO2HO7?_rVdq6eb2N86-t97^$~< z2m=1uTx_Ci>8~>s*0Q--)r3}|DA10x`vxdzp|&xo$$x@T)*6598DPwo41YoHgES$x z*u&z>py_f2{UYgp8j6x|#|#V8c#UVm*W7PnF>llaOL`@$902Bz?Z=bh|5=HQ&-ghL z26HYYMxJ0W!?59XG}9e6R%cy_8vZ)MB4nJ3ryP5C7w|!d$8#6o>R)sn4(&bQ)I_(j7Jx%YeAD4hZ5` z2Vmf!0t?c!HvT5=BM8#Ksg{A=bkW9*PA)N4lHH0FGsb8xPlEp*XP_HyjT)U6aSt>C zPFj>cXTf|^xei;2#>ArZFqL^AJVJ$LV}=mL?|A8VnF*EnW9)Ajpa>^K)#+s2LlL-= zA@Y+E6+}s&G~0;9Y~;e)K>ey?9`VHcO46`{SC-|lFm5*PDY}CW9C^zLmmpkNDLW0->jy>NZBhffc#Fo(r zx_$R15!bscr}CB6>GyYsKCzSUrm9qR>>^LjZ?CVe)Q9iycj1zV2XT}uca1Nd$zraf zj)ps(7u*;e06i(Nk=B=LHnX?lqPFh+!B@af@yUp}qOR}l1nP$uMAM#e=*Z@oaj}=co#|dVc+NZ0*mLD7KG4<4&h7+g)H56m{flfnZt60V(NAl~ z!~`ase&(CeLQOz{Y~pEYORIDu>pXrtEv+$I)h`n^nhnJjle&xZxW&TUZ*R}_-~%k6u$T^<~@x~hi?Dlf+tT93!Z%(WYL9?Nbc z#)>X7J_@c)_cP`@taMYgLtG=)#*VQhPV_cexCYHxdv-3#=|DH#>WcB=HYclArRQu@q?p#C9o&6kt0M$MhZbL2}|m&?vsg_qT+8QGhX2)3y#g) zHkpeW5$5itnI0NHHJP6(d{8DI4^{WeeFVJi>>jMFa&!1!k8}_E&zDzSLl&!v!Pj0{ zWQnEXq!Cv!zyavh(&|;hMr3ssE0guAid#(cm}VnCnV$R(enu`uhbik{^$cBMQcVCJ z-HjUtKvm{6x@w&|iJ=TOV%cw-;t@j+_yw%<=gg8m{dgiPi-vHQaL(cM7U8>8gJ=yy zgI-l*ag9#zezM3}RwIKP$_fBcTzvjzeS+9RaH5_GK-{Du^+MT>{g1C01JyHzBMdB_6FBh&{bIIFZ_C*1L;X?dm0e|dab_mFQ^+Gz z4^;d+@}}5T*59so4nYHQrZW}U$rpyaIBd7)ooc5K8cNcf%V~!e@MC!~@xE%?8 zt&Xoj?Jh?Xo;H3xnOtTBN}D#}7!Q~;y2&G9@Cmd_C(a@BINGLzw<+<|j6*LA6^BtN#|$eUfBVp3`LVaZLoc&Y4`-zga)5?8%%pfl*) zC$SebrrZJptLkdzTBP12p$lz_ZL?$7Ww`|`sFl`~K}~*Ysmtp0 z&ymi>LU&@aS+N`WT+Mz)Ei&B}Ch#_W9!Z#XtV?t#XS#byJ@F^=r{(kI_(wL$rWN1h z`D|n@omQ_elc)Em{N3F@=Y3;$z>vb$M*9zZw%qJrM=`6BTg`qiJ?!_r$HRyF_dTw) zZwFO1K6Jau=Xy)^?N<%5?T_784(dv~5vLu}KL-`^eV?al`#o^_Or~HpNWwn6Sv~Fq zHDnUrO55Zai?+?c=Nxa_=IcO-vRr>S!^}|+Wt)=&Nt^!)UsgZbw)xsbGQMxWx5OH= zZobFJZWz0wZ6vOd1VL}yh(~9$c60+8VAJ!Pc4N}@|9)-{+77Eu@pt{XA>|-|pkif^ zFr!<9d8*G~xxVYhN;7<$Oez%Pt_smn?(^FA^V`DoffhRnC3z~Z@N)Q@D<8)m7}}lh zC7exPY67l0Xfac0`1)<5uIj!5<)9)Uj^L|;y^vo3a85Ypb3{SX-0Q_D+8XLg&I#T z5+y5N2L6V$#R*zXz5BvD2mvSrds()T zFywU^cZIAO52Fmb9thnw$7~oj%y6Vhh|~1EIeor0!rI|J;bDdr#cL%bKoqLL)x*uz z{QiVrs0=d5Gh;#coUGw!M-zS(DnH_7Yq zV}rme?9^B#-2tX!hoKXeUTu)z?VkBRU`bx#@Leagc3j(}WS>&yx({i%JlDwldX6TB z#i1ep%Y};{doOeWLtmsM66i8%d8~`n+%8OC_ zU{Y?I3ePRbTO-g3o$NSC|uGDwqv<5CNJJoX+MZ!G=(AmDL%8)|Bv|m zzs)vG9Blt}I=I`RVlwanO^E(yH7hd zCAax`&myAKNIq|2bJ#>P2VFuDNyy&k_QSoN1LY)aP<`za;JDt=;Q>%Xf_+2N7zq?7 zf~JJ0lU7JVnDDmad3%XMD4pG2T{UGj$>lO~AT^{i;%#jqD55J(Kq@w53L* z&55ZM{r%@p;zfgw!rw=XsTGUs>%v(tB`+E)I%QLf>+S5u=V_3c6P**wfxsC!JY9{O z<%q)H)%JbZV)bS5ytj6C`F=l%lFN1E5%-6hbim7AU|+5m?+Tp46#6~>MvqR~iR0tv zVI$h#r6wG&-K(J3*8nf{F$AR|Bp5~-fWI`mryvO)gPO^#L?7s*IqQ9&92pSllKE@R zBfXefHUl3HJC3ELZfpAffk=&7Gwsd2MIH0O+Ym5XbL`Vfers zo`Esw_jTSONisA5#yM-Rb>+gFhk4nFb(j-5nsrZukg~Z+PPlaf5;Aa=?4iCf`nRvO z?~U%wJ&4Q1&TcM@d4qb49+Fj;pKAQ3%T*oE#EI0v#O{|Wub|gtb0q3AqbG`fK`gXP z7Q)kHEl{(mRFF}2WMs*}LZ~bDQP@_NekSQLj*vOqicye=YA*$ zRy6Ben$livhi?$tk7Zrc(?+cY2W6_#=Cc;Uf?aWsW6oCH=CXu0ue3Uj4z0h|^OK5( znQPUl?Vh29AAE{C!|ZRjmQI%;+Ra*1$dG1$ytK8KigcPr59PL1IdzW+qijz#IUqI5-``*4^yV;{+0KwX^^>90|B$^M>yZqxCOEqt9Dzm}DU$FQ z0|(8C#dL*if@sjBnOo8ZDWu}d2E$C!6>sM63kLel1d-0)AgXZy^7Y4m*TL}eA|}!t z+lei1x;HZ)AX^6d^mt9du4X=LQ&XP-r?wDu8P;HtzjxZJW4Z2=ebN`wVZcB4_sEtN zT3NR3v<#B*jqn3;2mFx9gC8*`L(DNU!7wfwyvN0-i9oO!?N2LEiwT5Is4y(%2s}VF z1jE_<RSvI#-&?uuByiFcP6CFUJ02k?uV~9{Z6rwC6HsaeJ(ydAaMc4O6 z3$FU%i8ak(&A7wTV}hijJA}54JRCvi(9}lY8@jzzm0M|OYhEZ!;Tiqnd+hK%$`N=C zz?~I%Mg`D{%4g06Bio0XS#Q+{vT|F6XQQ+slvhXWE37 zz*pu_ZM=nacjjFCw0ZX6?CtmN>S<-ft62!|`?##?*|vPL6GH<8y6mqCDk?CYxoV5|1cgktH^{u|USbi0SibN;;9tg@yRAFZV~ zL3B1DX!F@ZzA3`i0uDZ5m{MUAIl99GNjtypvupN)3^iGuBGeLP!(C%XWPmYiW0V`HZqa%F8 z_xUmwS2FBUmqx2Td^){7Lk55hZ6z_b$ss{%vaq>mbkj6)9PqDIMCtBxsW4T3V|H(7^9l?nfFxiGXQFIbw!xDX%XP5r~*1#7XRc=ptk{&(VmF zx7wRVO=_Giv#O5Ry@l8~)3mL(w}#^mCsx5nb2>QHZTnZzNE$I<30wKQrDUyF8#eWS zc^r}^@nF*2<&Qsjr{g4O*Y>V{weGaB;SkBiNe-;sh(TmlQ{T-gdSdjR^onC?%C$e@Pe zCyVRC+R5?p7M((pOEF|B6R~!# zwPP?4s_Ogl{f2lN#2cq_+F17+)v&~V+Uw8=)^hB1Z49GWL&?3&(XVqg`t{Gi)!0-M%X2Ggj&Y+BF}WKbG`;bNJ->Ho?W(}{S* z%QpsDK4w%s37SgwAs!O(no9UIn_R#ODJwutvBTB-A+~@mFXGUbz=l8v?5(`KhsF(a zBT;b-T%(aqKceZw(d!ev!YN3)Bpg3L&H+YObAn~yv^zIP7}pg%f{)MPY7yrDMz@2# zNo;HZH2fiWtAty=O%~C@F16!_r;}mC>URX$bFHv zVEAQ!UF5c1B%U?HEC7@OU20+WUPE4`IT^S=>-9#2G)FdO>S?+0(oslE2t_y#Uz6%@ zP0J}7Bz5+H*|ua;l&-2?dL*OLgd%23RXxMXz&a7vMeckOax(2j zg6|utx@z&=qt|BDZ;Z>1EK9AWRJERCY(Z@X>@8E3IL#neZhLT%J)3fGIqw3E7COCn zaHZ#j&~v05C2|%5#8&Y~mUk_jCv3bPosRFPmC$4Be~II%_d zM2kb`pw)EdwUW#eR-00wMaf$Sf^BZKS|0jkY)&i=gsmwnOE(MC%}Op?9s6d^egHEM z4m!3NwN5dvKdTY37<;FdwazOrK-A9r~^f>*t}jwk~goz~WZM6%s@@_@IEw__Nqe za#AwR$w+$pI^R*q!Dtwd7*6hMBYG;#G`6*mp9=?#5*Bpl8c)bR4q=>OU!FUut);Ga zz9x)q`a-*5)Ag1`L#_2Vi(-765fUkrAp74YYhahq1^&COShUMw*w zzq#8aJ7eF!ZB%VTt4^4smNSblSh>Z9xrZ>TtA?5I=~Ki;k(;wrbqg~U>0ooP+Ah9t zs|YdjbL}?hf2~FR<^6Dc+?Cf9Cfc*@)CGeW+DjwQGOL^kbYDi^JU1Qr5fV`lc9Xj>Jny-2P=KvDY44KdV-~Vt@~Vz36Q#2Pf7|z;&PdVL3N>1 z*v^V7dzl!CGwT19-auZ#9tu1`1R-ums|C`?1~U>V{CS{HZlx9m!$qhY3tzY*5c6Qa z&Dced&j4#Q_sE;*j{0d%f`0yOSxZzFAtBGRq)H%M6ig4bVl6}=6t{mLhCA3dN^>GrHun`X;+24t-2n7!)3#1zq}^{`<) z->r3W0l5hjHl0~QKc@T4&wN`D9KtpJIS%pcSN@}`Fljt|OW^xo{Yq+$pYFP_*Ml%H zb;VVVGz4FfczqM?vLYck^^LbfU|#BZ5%3*?k^}~YLONRZ8lenh0#3=Cet+hGX{ex! z{OL6_yhkwI>q2sSt9jHjV=|CBIM>0eGM7?X%<~o*m4@tDowib0VAt1dTfT%)a)fQ` z`n;uI3%8wGyl{|-E8iBNNTuE=)b&`~*ls<-8UI^j?Xsqp z(`Gxm?_AxUR*6OMp07hEVnmVqcJX@6^_47n7gGw^#({8YGpWhyPcI~xI5LW{&PtXo z`C&ZRK#K#FR_35WqLi(Djghs5_A2zeX* z{?*846=vOzQVNuDa^l3Y3^5CFB$=dAF?_UiB3;k^^2<=v{;6N~BV^#>4#113XKMfa zG^zmL$;OT6+u7;It!lz&j-&1S`1mor_+1Rw87QG`Lmw{_+fs@qBtw z`+E>Q*O902?<$S5~Q{RDSrUyWIWMLl40_0X)5OhV!M9N zLnWVn^kd_Ku7#a)>QtBW0Yue#`MvfTfR%C`}wNtg;7f9z(=oq&mZe^idOtLw0o|KMQ&}d32RdLG>olvN{sUQz%e?FUU|| zud{PmOC^D2K=Rmn*cwVSO1q8aKDvo%~{av02aN1e&s!=^zlXIV{{m~H=i zf4L^>po{b$ok`g2xooYqIkP5FJf8(>7pAZRl@V8RN; zSF)tI+9K@G_QR7f$Q1z8@0s6fkJUF3{$-w=YB}f1#Il=jCY-wRM16_e2e_b;%phYn zzqH^AgIW2LkY*B6S;CU1hS;gEMQjh_4O(J^Lc4CPkP3`P2u_e0`ccI%57Ab@Up}gO z(sPrH_)~-x|H#X(058=t`?rU~(6zwaQt!zS{c?8Gh=2bzh;IN@$j`;lng9yjYIC?E ztt{3KExsihGsAJ99V%&F1OulP!E$=@G{j7kT~@0Rrxa{*)*{D=oi5*qQPk_?3F56B zYG^~D6fJH@xWrgc{|Cf~h6qNmA5)o$jI``I0x+FXin5jh_l&=f^vdi#32!FtAzwd` z8iEp;!iDM&W2GLTFW1TOm&SPd+I6840@A&E26y4~#zDat0ogJ*&_eIBE$(?Ljll>9 z%9#cgmT$;ekX0-(5C*s-bE!CdBRiZE-SU?PH}fP312u1Tbxf+;jRkWC8b%p0oJFzb zj~A+j#D;QyQ8N_0su}zoosvy{Lp*Kzn09C*sf2CW%l>2gPg~u0F5&?F z8N2nE^_=iGBD^>;J)b?i6eYG!2Ah%A2I~)XL9d}jw|KkG`Ofa#fbpl>RZc~|TxZrg z#_r2EN7#O31EivRfM@W=7>V*K3AMO4W&p=pm*?@c9m!k0Fc#zOO{1u2JLuzR4UDWT zaWJ8RsZFnB$nDlVEnB=NENpCY2CMKsmbqZ#U}8XE_(8zw&@Hnl(vpD1LdFZ206tRn z_R-j!9Ut5ex&jmFi{uX-O($iQ7A;!JTA%u@VY*Q^va&H%bhtlSr_(ieb%5AEt#Xv))q`iHJ=N zHQslAXytcN=rO1I6h<8KIvQaahjm9-Io)qmu*sxx!#xf0OHVoZ^OxbV@!phh5L4H* z?&vN)t+<)FCP+he1m(^SiWnj=ilqM3=C{o2(qQhICye$HH7y$4*-wOrBVt>H2Lb!zBGhcNm!Zz%ZWT?vA1e#+(!*%p0x+}uf#B>{m-*qQ3}VbKK=fy&40 z83Q-(bL{w1AJp^x!3q4v-#n#l@ui4jra_=UXU$i z_(50CUaS2TLIIl#u;qrOUG^UippPK1RUzyk*`$3Or4rtXFB? z1u#w**Hvu0Lj90zVKJ!A2DPQVW9n?}5?MhmOvB<%Kww&TP8cyYIkO9>icKj?pyj1s zv=Ph5t#hPtb{Ng@TAPKsD)%m(*iuPoBAMg$g5NxW_eEeljfR5(mq@d$FEg4{3N^6? zhTm#x^ETa5KTNWi%M+b`l!0IxR_K{BV!@Gcz~;*WGB{4*QMmC~btMm05qARELU&gh zGT1dz?A&(jwq<3=f;lbXUc%;6uTu|AatwS0;S)jJk8!~s4bTsp5!?+D%S$!!}u>_K--vtvyR8&E*_ETB=bd%dStXG-YH*&j0E^2xpb;Up4Z6r94o? z(nLP;X39>DV0y^RqUVvkqNzE0`ea1L?P&J5#jY5@|oS6|A$;}ozytOda5DPL%1 z0)-!LjdMC){BQQXO^=i4K&=3;)|40Yl-5;4`Yhw1%1G^ zLpndvsei-`y+B=xTv4NR6bwu`2E8gDL4={&14+)G%1=pht$Ok=8)yYTnmO}WTcguJ z79RaycB)im569D|(7o$7dc{pyz(???Kd@O4N5m7cL+lMTylVP@#rKTZPJ{wE4yRkI z;G}UJetmRH*Bbjzk0#;BE9)Y+G*1lvp9i%+TGRw+adK$s?{lA4fwqkc+F@#R->{Ye z8;1WW7c&3P61e}f?_p$O|8H~Q_CFeGlNH1F zfsV8%PUOFZGQfw$PiAaK@Z}g7fOmFxx%c+GACk%hLzYY;MJQbrphl8VkB5pBhM|et zd$DKq;pxck{&^ew!+yZbt-?pzotfR!mz`dUnbb5f@_7IFIkS8eV&TcskRYmO_%-ktsV zej*u{fAigsoH`**dOpn@J%czR9L<1jguoM?QP8G{f;jPfvfZb}j*@;w13OI*emmICDMdZji#`xili-O!?IFikOblp1+|`BRm) zRq7nuS=u5H41!oZn!UedH+!d&%?MxjlIVb<`h+Ai^oCxUeTWoGK|pJR8x=XaU0)`y zoAJ=h^wG0RV*`72^&~C9^uRhJrS$rcLUPc$Bjx$}t&`fM1sgbVA4i_bR@$qlwXZGp zU6Hnl^QSzOFiWkf)3bDMz(6-$mo39KLP<*4c>K_Sp^$j1cIlE3$(}~)p__;`OT{H) z#;WB;KU*Z*Kzx3rxsH+L+RTaM zr$2bYqsGIJF(cQTok)`|La{MDim(909^s@aY4>M%00jRF3@5vuw0#jz4Hy$_35hms zV0nU0RL3h@5-ZXIhm=%+vdPdRp$3Q@KcMuB6Q#j)&|G>??^RIsfpM22vTs)o19%&9 zd$S;F>`0*Voze7s5baL&dfoVKuvxoKYH_K4d7qL+u)u>#Mu^Oc$txMi!6Gn1HJmi$DO{Aq_o0>)To|G{ zm>%s3BaoXDCU6P~0?aG%4JZ(7KRrXYsXFlk*_l%@YVVP??)_GSoqs{?(xxDIL$Y@u z>i1Jqe+{5NWygn=Z9XDcE`aNpl9=5W%q;}vfZf;rZE`En$cfX_!34fr`$V> znvZUkWOT4gfLec-6c%4BP>??m(w+pu4uJPhbI67_9&(m-H0TRP*t!73T?&K6KphM0 z2fpG4b$gHnw$tZ%Tge~+nJ?SVM+#XWD^s`md9nh@1tCWaQbscH^V1%LC);`EjdbI+ zQb)}f1)<@4+c^eA$G7Yh0s)W7yNW6n9wg=ajm#{T6S87X@;tYfK8+?xL8*v z-T!BhfVC9l&nv}MVB;EDQk*)-a*P$mPZ7b-00wra$S35Li*T;>{39 zzWUz*kg@z%8Ao!2JH4NsT2|HAD$jUw5=f#0U}4g5{u48`*Ts*#-JW!986GF9I%&5A zb0-x(6jE?GUhWL}2?@iJ!WIM{VnbmEGC6LYhQ7e?Bcf%)sD zKw2K}sQt*NX%QB^$?C@{=+ii9Jz=8w%tjNmefHJ?9A$-^3DNA9oS((FXWaQ9fwQW5J zLN=iA)oTkt3Yf{nJ_rW?m?5L8U7BAn9DSDD$E5u>boV=XNPrHIa#U~cS9bU0KRCuZ z^q_3gzlC-l&8Hn4!vSgN)w3r}1RI#cKYhNBFn!qmL;HZqSG5P~rK}@md zm$E8{rDEHe$-6b<+|!dPL?492i2lcZdLgVZN_4mC+8cphatsHHF>M{UR>FNT9Vq5w zP%~`H{PA7aAH?wJ6e{eWZ{Nsp-J?~TcN*x~U6E6sejvW79A0)#c5cqcLO&V`!`Hbd zirgaDJ`-0dTruj0U9n4OGKt6h_zG}7@O}=Bs&iUVEMkMEGj#&bb@q!20DulWFg|{9 zP+5*wjxU2qbqIh$9s|)@?wCk4ZomqrG2vQMY$+=9ivUsF&J<|r(@BTKv3wH0jOdh4 zlKOD&W!(|AJI_FFW%5~loEI4XT3!q%-m-XG97i46py#q{UNQ^Kl$BR5BBAgMQI&s2 zE9WPqSHXsmoDj&e4Cz*C(FaJEpV`DW75-7PR}C_5!=VK;I$SLP>>#c@iKSFfu1 z@?1Wt`X!jrc9)$egGJH^m_aZ~`fOg;>vMVMk?)(~+)Ol^(k*UDwAFqV$FD^cYu=On zew!U*B8+GNy^8r=DkgSq0m8^cHjvk2kgBwA>*|~fR8SjOzhDNFs-KbC(X25rEnIhU z1anh>LWI&15IV=`Xm56%I_T(g$dv=q7)i8R5bn5OZgjOfwXcA}{-qpvAdpue-Ymhj z2mR)%@X_QYs&(Hr#MC454EfLime3xvwt40o=O(qENI-4XdQ~DBDig6u<&r)Baeho6 zqCK(P`N@684#G7oE19H_%K8!D%&2w*a8Twdy@;3YSW6Mw(_F#LQ5chfb0L0S{j-c6 zb5?G$n%65R%H%XVS{|>=x3Z&!^_OQQX=C|Gc6E)R>9RATKvSTwfr?Zgs&jDZ@(E@^ ziz9MRMntIkwq}Jg4C+ra)vGrIEVqH$(f~;LWIK7 zH5(tFpVxETYMENy|6=SLn>2ye;KsIXYsa>2^Bvo^ZQI_lZS2^#jU9U?n|w(sxs|%7 z&QCb?RChmpx_t}f5Arhax=d~j-Dp(NnfV?Qe1Bx%pNQczpp#HipuG0}5Z1l;dkVvpZxRi>(X?^&oPhK~{Y;ax^aCEbg*zSCGO{U^rh`#a2w+XEzAbv)~0k zy^yUfM8(SWZxJJGsApDAV=EQ_U!Ay_a$i6@EU5E?g6}@)!)-kq^LvQp7(#Hh;MxujLJ$`MPb)Uy zE>9tA113NaCe~&d?Al9 z-Mtk88V6|RA~AG=e0ybm)k;@)FPnycWlimZjj5C|gW)w!U=8_fQbN0t5sueA7#}+S zG#7HX%d8V$QW6L5g>)LObLMt(qg~fFotEbf;^tNoNv^LeTj2XMy;VvYtJUPY5+2z5 zby{E^Qka|R6`^%kFrn#nyuA?YN!vBjNDgh)lRg63)`;j-V zLDHc^lkOQlppV0Xl&pdM2Pc~Lr`CNfgH8A~xq*aPRhz9jfebAXBUWso-R83$lf4#b z&*AnQaC>Pk%SINN8if-)DP97t)?LU-${m*Gc(_`?;<0n?IuqY#*;)b++Wed=*j*R6 zb+uU(GVgO{K5L2Z{F({0<-W>s>4w1RKTP)P8rP~9ILpgh8!et0Ff3p7VSC-bH0QO0 z!U8)ELy)JAG$LA1p5wDt!e-Y=gbUU`Ew>XG0^EF~PcSNBYL8&H7Ml8NO1jdP)F=Xh zweY2gOOulaMRmiD!pjb1*5xa$&ymHE7zXGFLz4ss(lbOr3^uyU?#77eLvDCe+B93B zfwH#EePEP@XdsIh=YR#z3`Wca?`!=5hdY%tK#nAvHS85jfI=D7m!K0)lx!WGFN%WD z3o(;peXw*hJ~f0!N8h?cI8=~DlaA3vbMO>3cdz<&gh;5}>&H_)CDUp}}Q)(7`gBZX>MaHn~caN)pDq7YQ znrb81{fMD?S}JOw5SDJ=19M`A^@|YAVb{1H+B&+X$2gH5^R}d(8TkW+jW6qED{|G% zD?;LflgvqnvhGisY;F>-7T1~?Due9Ab=1_j5Bw!UfgU+|!s6itOw4b9TPAgI5}jl*PRML<*~+LP)0BtpfGm5U#yVHnI!#2TTV;Gmf= z+#92?=ElN%bie%=4S2s7n(Zazi_%gV^%TGOxb5sU+b5*uOfs^kq-l<<6zgKY$)epC zJ(HbNE*a?=9pP_t;1i+S(w2_pjAT8 z-w=bg!<4z67lUVD7PHW373I~}Z#_^lyY=EurZFTJu?|V1CE@NC45UKb8+kqzFboG? zgQFZykN5bwHre_gNg@XG)3;ecQO7?e4~>tiwzfUm@r(xKz|KWuAUTWYC3yoczir( zkB~hS=>u=yKq^4M@0c387kjRBu2&31+7dn@8%2_2nz69>v|*vNVau&YOxk2aruW!2 zURN*NwN9eJ^3&(;UVKMuiljwDuc$}6WqllFgDeIy4b$4h`$6wt+*G3+&=yhZeZ307}iI=BRI(!&`$*;S>F%rbsQ<*x7*V-v=C*J-mHg(e2<8yf6PZwmhf&% z7vCH{vEiHiU92Ym(Bt4O*<621Vmx%(ZfAvgh?t&@0-8;h1yz}!{;H1L|*!y)W_}Jb%GUXtc7ay@iQRcPAZ%}@?mZM;* zO!g--vGwU8E?#y{AN_%QJ9GKTpWXaAg(|~H&!MtxMYJq3KFQ}*#+4^f0%tCvkvYHc zkw2FWBTtkbq&AqnTt%qJK;KoDrE(@##LPq;i`LXl<74GY(*0n5p;ZP2h>CaJe7CzU z#^(-18DC=}8`Rk9pjfNP6Zq=h9(TY*x_I|yv}JzvyeU_6fCenfXvYKm6r? z{s|kiqb=)iY{YnmEH~E-Tp1IWU-9wGrQ4CUQMF(v2op8MMU)d-(R$zjO7bxVp6cz8 z-DFGTz6Uq3NAr<#A>)54Y*fxKZ9GLnx2(~UJ3W51!&L`ZJb<_Af!joCjndj{6mA|_ zMXYQb1pTd3q&13YT$aeLE#_Ae6kbBv8xgInVnb$+Inuf_Kh}TY4({1~v2Z&|Wp4+F zK2!{llWF~C>RkVLQd`3sY9a(Q>yE^7U?0V<2NpNQ(kzPm-%5C+wbFHQ(Euk5da6lb zyZOi^C0MCsz*JIE%de+pGt+TeH@!etOETOiAG7sB+^X4M)a(fey(jBWcPQJdNe`W5 zm`Fv2H8K5e>;2TY^gW#M{%aeR`YxMIPf<(+PCIo#WVrxfeZ!nmWo|{JVEKT39@mGn zx5s?g92rj0zOEX#;L7BwhmD3HfqC^5$)X3IIS^Bk2n;5mg!rJ-8uH@G&vIv-dcB(1 z@9C0EHodsYooI6fxmy^2{Y23X-xDT=-7Id0pb?Jac{bohl3=Q%>b_-MA!hQ()Y+X)Rrx@Q867kH1L23pfTi;Sy+T z^A)Q?3Yh+EN}Oh3$iPf(#I`@_Re#<5!a9Kh(QW|kCjYRa$XR)Gx>uP2-Gs*m{$;k-UNkK(xIDwyb2-J z{6=-^77`@ZKn}VkDR`YZu}Hlt!blaVHX>=$qob+vAsWE@`E`8sgryO4jg(t?5ws-W z-%0GKdCaSm>F31VPYo^RO5E5PxDTw+uyNU_#|H7LPJ*sxK4GR!hP)Z8%T&fM57)j? z(JATfHw-x}_Jr*E(HDRntayv&UL>m~zRbT)^9)Vr&0e;NG zVm@TWF>*rp-&~_0*B4(GD+?QAI2AP6>h|67P~?oc7NXnNuhNNo6Xvm*-&HqvWoTeV zik;C<>=vviaa8+Wkp3<^{@?DOl9;Q@=(l^Ha3dfn80zT@->|ql$L%YVh*m992QUI@ zFsja9#Qev3u8hE$j8*IDc=?3;($lWZA_)(ucFZkH%W@QP;N49zny#L_eEo@M4v-x6 zz|mw$H$VFlH1VZ*V}`r>DL}pmq%2rso`V<$Xa%q6`{ZRRoPg!;Oe6ZiOui7k;M~u<`J=X zTUq|~q3AtuZV$Apxhd9ii6jlYZCFe`Nn6EHiy!ajO*Iu|MClpIoOe&2G?|!9=uc9XIfw^WjaxfsPhD+ldD?|CAlP9(T=m>-j}>MWLymDB`RYG6I*a-6 zO-C5D>i^coJ^g!qG@9V&t}>U(2X%eDy8^*1O`)Q50g45C$(Nh?dcrW|o*2ua)gFp$ zThV_JARD9;+;$S}Xk{;VzVKO=EP&!n4)o(-x!IUECB`ps(oibkN>pp?oxIF)y+r4v zdozD#*Wi$Bkw1lpy9cj<;9BS5auG8_xh4<5!rpxY;&=|_I#g)y^Gag@>(q}WIURH0 zcEv1KN-B#qJ|G!)ixW|`U;q@5a$K#-Rql~r!pP=XGehd|i!N zOuQTiflr@2I&sqi=+4-FTr57O+}97 zKUnsx!%1<$2js*4oCro%-)BnOQ`;Px(};9vd6GOBiv6I*RhH5l^f`dymAwJc2f&z( z<8B_&8By41finC7C2{iMWT(&2k-kk)77|S*M48wXQ&F*+oM~o6yrP zGex>sdfF#-);0}nTn)_s4gT_)?K$wJrX6G?PVxznA3A(N)ReeHR&sL_Mi zNY-D~dFznhG-l6aa%l=q(^Jjs{sJt5RjaWqV3@XH+Y==$^mEmCHLeH{QVg|gMjYu# zH<2Vs{Nim6mdD4kaY&c3+Ysmof!b#2?Ob(*pZGL)W%xA0NS(j0?5^7<%959StFceC z8$TzfRd~Zs3ENSRdvXomhup#pA&mqF-Wb9a%PjDyOu9E5(tV%krnbFWp~nR@LF}wS zNBT)dO8>0CaFsx>ibb*2{>84YLG_5dkw&E@)0yQcY?6EY{n%&ND&zS>`AH@F_7O4? zJ|N9A7-e5~+Lt@9^8@4txbpi?asUVW|7(w9VfpVvA+B|8?QuC!zHbbOx6*4Jktf|5 zoL51&G^O;&1&-csF&s&wqF#zAzLHM)%w*y!86Y zt0@rGq+I3dKbk~E81bblr&v*O-S#LzlncP^!0q&Ub?##3P(YpplTikn+wa2J%w;G!bpM$5a#1uv1IY`@Ok;#z#1SR7{KjZ`SX6=ZJx@$aKZ&K zl0uS#Nx=(iL&y1Dpa#BtDDNFj?`_XZEeCnN2Y}BkYyE!Aq(9q4jFQ^;Qxea$MARA% zC=o>(hOX->*jl>FdVA(V?m@Gp?x@^4O(KzUty92W818jq%uLgGv+0`!bVqyoHDG1l z(sgLchM6+uu9X|vS^E&hn3HN8+bC@;oRhVYC#7rr)SG_$(zLbng{wu#N0!KjS8Dw_3O2ixg|UMjIq4YBXLew2E#;jV`hKY}==yxE>tO*?@x z$fLupZ!|*m1Sz~2La=Jev(;bPsACL`P-Sb~b}~(KDoma{jBv(JIsN_(kz=R-hq7Z| zccm#a8NU~9=Q{Z)^^5;k6Z5UXY*~7f5C4k=l933zW1QB9Wz_(4eykp)nYdtJ6EiKv z$kDJbm#tG|oAFM#=IH4O&B#CR{AJ?y}Y71P&5#7geBw!y)%y zEnYI~zX<{HC~oB)0jM%PQQ@@GW>wM%oy^kDsE&xsEjYl-Z|v`)iAVju1S7I~#VLv5 z`wp}OY!0vUX`=&P%iC!bM7qDM`34sv{3PAgn-Vbs7XWl^mPvoIV&s&glxc#wK>8pu z+NmdKVL{)n8T)DjUZrCFo*{{T1zfH?41jU3YXvon&Njr9g;!>|W$;OBD8K0S@otGP9o{dfW zaE9DaFDa~fPD80Do%56KZ_a|o=b!dw~-PP?43=*?mn8V8pjdb5%b zXL=}_@&#k7KI|^ruIYz9(Tu%sGX=y!*C0V{AZd$-oJ9P}y_cF(AeyBkRFF&0r?GRo zc^$Cfw(BtxlS$sqTO!+0w{ZLzgtr`@DNxkFbFg>leEA@#To5*L;vHYi15=g(Rti7t zc_DPX#q;|>W|kaLy)FCAb#s?eK(mhZB>(K^c5c)!R2je;`$SeIX?UY(YsV}`lbr12 zWov=!&MOgp1b`r5oe9idC)Ce|fwPb^+a?~2j0{i(?}c3SQKVGPv_;BUYduG0NDFX_ zeaZbL9!EZ}i4y^QX4(&^h?u6?M-p%qq{Tq(r(Rum=^Jcamt(4{%mCIj8Eco8zwG#A z$(Q>$R!d%xo8Hp)yBMSC53IA1aS(NiViPs!h=dRH9!g;wVG#ZR9$n{dT%ZsZ zsOXvJkTDzHbl{aq-F5{*m1~Hu&Y#|NsH6LU2>p8=CRsXt4~0LKo6Gl0g{~uXzsyn( zI!R2}(9Drd8H7dm^i2gaXr;tFAtj;)B!`> zI|wv!ZgL=5E?9t*cZ<{QVpLvzbY~)>BHY+q+7%_)6TCT+2rhZj&CMxamFO?>)}>6y z_Pscq9@fEMS>j|jZm)O&aSw(-oJwu-PP{tG&b*MS*10cne;ru08o5uF1^NW`8uvx| zxAq%U2ni^K&Pn>y&V=V(Wro0TNui{x*@DhAns0<$@XRJVd`@a+ zZoR{Fwb&IGxErh#P-4V|m9u4qbC3CY`x&zN@Pz}iQax~<59 zl$BaujaC+_f2qs^8w0)j`2sDj7`$$@En4V@l1jcutr#SPm3cL)OF_bg%Ei2p4V)wX z&`@`K&Jwiserq_x|6qN0y;9)p+A!zkoX=w6u~?qf_5XRX~G&x=K2gKH+=EVCv&T=DTp5nuYHr; z^D)?;+`DbIk2u3mo)0#Xv~`9QgVb7fPT8+AfJ#xccA816qS*9J$}kwTy2FSzoYUN7b=!Eu~sA zDCeVKby9!6yfk^?zCM-P=8WNe(AVdsi9I*j(M)obCyc>qHU7w~T(13Qa5|e9EUV~< zhR%IO=RzqzOLhe*r(QqgOy~r35Glx%ct^&hB^Le;$G{uca_g~W{c!EklHJ#X~QRC;{;4%y1gA zlm-R7QrTA4`dL@f8Yaf@0bi~Zq~fU&fh^Sz+2IRw??GZ|LtzWO#Em8rvHKSna%@x^ zH`t}4>-%rvbwsSVf?d>_Wh*-^I?Q9um1hmNi_4(&HdjoXrX|{0zYLzvU!p?fYfvKee$5k|g#*+iI^NdVq~iho zcNYTpRm^X#?!{iefBA96HFyW&baSdRg>h&)=W1+nge z)auI@K9Gvi&D9ts)>O+nIYR4fDQ*r7r7DVFIbE2DW>fe^7d^S|sAWkALQgCNV~IR^ zo7Y&5xA;&Tq_wZOj@HBEAZVcatKbJtjISFbz>ZCF5j?NQq;azI;ZP&lIQ3uP?spgbriZ;8N6k~5cuCBvqC{9CXjW`A+pZ)NIX~<= zxbdv&SOml<`VVDZ7%XZLA`6h|$;Fs|f(_&$|GXGz;BKXP`cg0Pd{E`3gV zc+^)dv7=?tpyj+{wZ*RNbUh@C)N$;w^Yd-6zaD^s-e4|8weplYDp%4;+8)V>G`uu; z%xkq^E>B3>%in!?=UY?Bv#~0XGY-SD<^bEuT5OZ1WB*Hg&L@mg8wzsvkN_Ixa zqH1F3hytz?6~~8;x(=T*&dB$Uh0ko4%BY^ouvNfnz9U8{#GuH~?Jo*D?O;1hgXzV- zgCwHbk?2pYW05n8UZCAKr+=m3WaGB_Yy^r!gxf|<@hB`v!};_ZJrLw)hXMi<#*^bjdI?{*3 zy@@FdKR=AKi<7CLEsV#;wT|t-CG7uXU4aUGR@#Lg{^L*Fhr=f&L3t zbdl^h*u+f86Hu(vb6j36B6CP!&+d88?!A69tVwHDHHtrY)WMY}lDJ{9p=m6S+)^LA zr9F?~=?dI>)S8W#46I!8`CoG~zKieBr{laWpuT%$Y)KM~QdEL~DM5TYW$O3q@g zU6y2?JXtlsnlCq+%g{#hHmGNE&zkSfsjzd}G}YFZ0r#Nd@9hGvk!P|vz?&aqZiiAK z!{q^@;sB~)`Nb&URxJlnY<(82Jdu=sSS^w~IgZtNf5OBjSJNLgzrbw|rFLUJ*r`Ks zbjcEoocX)DBYj%F{4G^wd{S8}IW(@H4L%rG6A^hz(64+L7B-Z%8nrNVy#KZF>P76& zS_$Df$`y6YZwyoyQ)SBL44T&+F@8{%K%IA5g%iw7do0r?Eq6aAtdHkKD{zOoP*zIn z5EfciOO>p!%Dw((1Ts48gS7;JFN&j3P$x{VyH})^i8h|DDoI!-K>v)*6BnZDQcMWM zL7yH27GYM)SF9mye&8UdQCTr*tN;g=LUGk-0tA$k2gNMulh+7Mvj8U!&;Hw~1@ho`mMDawl5+u_inN!XI)JyuvU6O6IDD75Fp@1K=8iVvJ%s(C(Ef z6;jm3EG5DMIu>@UHVV)q!9x<&AhzgJdxR@r2jt1!LJ)ntfkgNV12uF_J!1g*e#`@H zNETBCoQ*;y!B}r1goF%kRlo?_pohe5#tS$3aL&y57?YATD1cOSDL$GjAUz9Dg6jN z-eZe|D`ZkDOYyiTGb5I*)LVKr{ToHeWFJDV^eJNRqv*iSecyf=lv~p~9jA)^Ay7I8 zGJ=>Iu~X5bRoMe%vflYDAfd{Uq3xB=_2?BAp9}&zro9M5i?&J9X$0OAg&ybiA`LV5 zrN=p7$5lA(^FcAIdZ`#>m55?NyOEu`@r#NW>g#?!#UUKchi~W)b)X{MW~HK|46%xq zYQ+?d^lPPL&uu!UpHqAuo@VNs-MFC)LVgh5PQt~Spo+KnG3ha6t*MS0-7ABwYQq(c z9~5DO`x}EnG_LMXHU)f({Q>m z(9QuG3Xk_bzfQ-jxyh47-j5oUrOrOa3GZF1O0jYt~je!I0V zi}_zHDgEwqryOJ(Fb|@+E_1E{?mltOCUcl3w=2G(L3LJN0H6x3vTqvv7PF>hsXqgGHvm$& z4Jw5EBN2tq^;bBGM8wgVSo@tLQ-|Xmdxtsh1#pkEKef#q& zB)R6~sQs)Ft_=x@fFCwXu1u6RtRqR*Fe_i8(W*5Y5%D~g2CcW^pQe_a!a@No{LcnJ ztva#04#W9Y-*Zc+ph_~*rG*!EZppk2eBEC5ivN8Cd%_*E`s#ar;yh7T+dZ&C4!f*N zvhYRkgh8oHh>KSXlpG3746j<-d1y>DsDnN}_zv z)XlXeUrr>Sd*)wV>ox2-*dULAtao;WAdX^)wrQH#iX?qJtrjPmjK?$(2PK3^tC7Wf znR$8T`Qb+jkVa57jDBIt&0O{&xEIkCy((zSku8f$h)W8GGLvMH&1*ewLd4D_0?ZH7 z4`VUwGUCV@w5!fu>6F6)P7>K;u%hXQ&h)l;zRhpzU!I>P^otHC3K}Y2?_0Pt_hx6eHZ2J`!uWrun2DnZQVGd+v402pM4MY?Y+z0*SNU8pGIiyNCTsR zZeI6*M72y7oa;ZzV3XWBr59f7Up{V>_=7&4@}#rQREn=F?a$s}ivgWzovK9Ouh=-W z;LxH0RONt)dDWzIeEZK1;10Y2XfbG1%Wi2@cyZiYc?;HIiN2y?w$=GRISy#hpj7PL zJrQy2eze1rq$1VIgK`s`lq3raND~7JQ|C+2X_f8iuAK38i{qTQU3v9aCL8f%*?twSw>^4(agGm>JpJfLQm( z0K~yBXepPJ)m_J8;oLttC}lL6wv>wlWIc3RUUx7iv8}KmmB=o6Lc5`U2TO}E=$2b> zFde#zgN=A@&fXvO?k;FpC?l|=DJ~I^0Odakb?67VCSeQ0SJV7tH(`Ii_8pRB%X?jY zPH>~k=?HY?D5%WM4%SD^cT;?%AvBs;d49bkLLAbT)ZfLR=`NPBf-w}sR=6*uF+WNQ z^NQ%zMVKH{hHWIhWJi=JX&}?^4Y1bx3?qD-g`{?U#pR(nFRz1?2-eiGrwRcsk$I|% z*5MsUp-kB?4i=<&=4RQ*DzK@51uwvtkznl9Vo!DsWOKwONX!8=&HXgZpN$=D9ev9> zkr0D(wbs6#PoX z)McZp>Xm{0o0%KGO$NK?LIE8{olpr}^Il(GsoBM90T~#i9J$frKhCxe5=;C+_KSH| zc!QYkd@(Ez>gc-o{*p>7K|)t`OEMd5vdK0XvOdKR1hq9@XGd{?SW(|a9?a+Fi{Jg% zQwnQE7CAFMyG}uL9d3!?geV7oCxokb@%FD7GyG_LqgovC@RrVpN%O~3@J}59Q!W>9 zfsv4w&|n0J(wjhz!f91-nj{r=Vx|?D;TRRnKB*Hnwl~+Q9fO#aQw9Ex`z2Xjj&=M3 z%`g?mbZn{tt7`qw%(*+%J9b2EmbDZA0&~c)(dIeh9jhntDh_S3^7PS?b7Cn+`XiR3 z(kEuv!71$*C)(|CedfiKRcT>^-N{f$nwnA7-Td`ri z#QgD6JN4tlh$D;|(dnE5g*JKn(k=mx|I&!N*O@5zZ?K|0cpVUooV!9_;iX-CAl&l2D)&E+rdOP2KGlb+P!1 z8I~>x(LhuO2pW%MJ=k|52_yQb>RQVPrbRWvRV?$Bbajr+LN>kr{l#K^oezIyV9dNF zpf&wO%@{=%qc-SRH2`;O?yl5vDk%QjriH0~uU(~{kr^|#TR+>1_J;tdYXn?X`RPmAymUV&YL8J668;Z5OWtvO02^jw8mPq|wrr zR>cQrbn*7jqjtnl`T5V_2>T;3)<&vb$m*74*7kDjn*C1fQ53#1Gg652dR*Fisy2l# zlZ4M7X$nQqjmR;uRnZj^W?w>b=eccekB8gTs8Lw4;?N@7*k9J;eyP5t98Zzx?`Zs} z)E5$O@nQVvdZT%Ol$g=vS^QxtXaKD$BnP;%EqtYCDN|@R<+D~%Dmb&TsCwo} zL5NVY#%I_|QbcqT%ZmteOn$;Wuc#JQtMuJ($gMWO!s1voN(L_R>{E228g3J@)f+Jl z7V#5%yPhaR*Hr6Cf592&Gt~0$`G%zfmJ1$zsU^9_k!(Rt&S{hz{#;7}CPVnDv-)ce zI=^`+V#dEI+a&CXnEafB{!OH{e~#Zc7{&o@9xCw%(q1@Rb^^OSsY!gIJ)<^&M|-X_ zQ;@%$cJ_QCy_{C+sd2>_yl5K+OgzB!jTq~k`Fe$XBf=%Kr~@W7(avA3q^rsE@x;Ns zD)#ZhDT$$X&3`A~4|RMg`3vvpUcPP$Vi%L{Ibiw)l4ZY$f=O~$1?l**vb>PA=HB## z=2vacq#JArSJ-HZKXu7G4PzL>QX|ZKIkBiQQ8|tG(#PuEh8SqO#C$=1Dj~x^6U|rnr3%O8qOocn!*5s$Ii=e9TviT|?He$#m7#Z6PXZ$_?KQ4oYqPAAlx(@h3dEj;}#ljY8qJtF_$)A&QT@KdLx%P%zC3QAc88!GjdNnpc zZlgG~>o?j3PLUq1o3|EdZL}p7%T?P63n4)xMFsrNxW8#qJckrTRJU9 z6}r#*W^OP5zo<2K9|z2Ns!k(l@2zd55GACk1rAhYosQc_G>NRAL#5@4WVmg{ps731 zLnvKrqHP%K;Nxe-xdzL)P!jB0fpAHH%4(8-SDz%PT%9DyRa$gTJ@Ty9?sz~()ZHk; ze*{IT3*z;I7P-Tzk^KO{AG7q6l=k@Phj!Ue=sy5dMt08s1EBtYnkl$Axc+xB1sgNl zf2)Q~Ys=Z=a-sBGYW!_?F4Ppm5C{MS#2A}{nwUeTL9XRiBN9m9;vPx{Zt0tRe{~yG znYxn6IN6M62diw;B*l*yEz>rRk67doQyK;B{iwzuf(z4$3omfY3@d{(cYLR;r6_~j zM~G&Z1ID^4P`scMArt;$jbHMxDkyc$npCtGposk5Hmyie_J&j1@J}=4z1-yKgS60FU>O= z|6)Rjz{AeRqmYUtu1p;(Ojo_&c}(*44cB+7y`7WU=a$lJDtTwf+^e`Sl}uEnq1X!- z68s}n2=<6uQ6bD27@U=kM>d6ulDX#_iU4mA4r4(rs!2xzU(n%#ANg<~3N0Oo?8oZtQl%_#y#9BvCmVDWLz~m1%1RiUb=B8P4WgJB6 z)uj=zHij$S;LMnkDk3ech_(M3bjQ+DP+j`PNr)-6l?Ozguq)1*UMO^0un0z+YX|@c z`eEfoY)LC)j+ur#>`%(@`;7OtOB7aFsLF4HrnqZPH6?sfMVxLgHmqJI!oB#;CWYz0 z20!0&ZK+Sy!5aba%pF}FT!f#m#WdOb^N(iSxV|0jc(}XlZ^uQJqfL?f&v&oZ4{l4k zti~cwBLENPT-K9iS{B{`VJ14|CwZVK;5uI*x44Fn5yRbSZ-Idz??2nW)(i@*NpT?d zv&o&yGN_U{MSl7=b?s9ZZK_-^(zLjV$kgggNm$AA&TMrGv$6s z9FF<~kniMV?61FC8*_WZ&whV0tE2kjAObq2Sn^ogI#+2g2L8JE@bqNs#o2FGsP29l zf8M$G9_zP;y5uUG(M2mYqF{;D)2C#|}9MatHDZxC@_w zorkPJw_MtrD?#GGNx1iMJiUEA9mNm)EkD0H^iXf$ru|EPI6E8ePuPn~uumQ)uxhD4 zC@9n|#%M^R?&9BN)G&k`StEGr>YA8{-J6>y2j6{fpT0W1Cg1DB-z)U6zHRQ7;-{D` zKudF_a_Q3@ejE%B#r-Rm*6fP^C^N|>gazd=lU2}!Hj@y-4J_QMY_&}gJ&zDwxNiBg zFMu2hB}>5oBP|`EbyI_$)5JgFrkQ_Zh8YpF@AUpQIdbK7fBx1$ETB`4+%`1oz!)3y z1G&acIW!|Xfy=p(lo|z|E$oH0aW|hme>r(q-2u_=>ya5;ndShkRsMOq*Usw0(3PoK zDqJAPE@tX6PxJQI2z60gQ{%^RAeUaG@{K+9!zWtaSScI7VdrWb%uj`vBxvg3tpQU2V@-(55Ipw*q)DahV=wQDxD=F!i9|IY{h zA$3Mv#4Ff2p{+GAoM~MjBZ+^o8eTeoc9mcL$2%gyRy9GDuDy(MSmyRAV^LZfQtSY` z0ey$EdL=+VQe6{~Te0QnDf80J=V3SgaMR4qef1;z{_G|D{FqP!vrS|7gpJR9m#gk6^>iIl%~K2W*lXgd zA!pAb$Z6WMuf{qI!+LF2UE!PE+S}n*O*t5}Wc)aXwTjb9U}mV~io{M4e!!-=1Gu!q zkgYGID8Ulwz<{~&M&V_NAxdn~rddA`LMEd%9(co+ttC_`u*Hhq1a`{{$H>hNigew# zH)q#Uc0@hrxOn0D3Spsm_xi=X1d7fSm$3G?zkf?Pg7UISf%rQ7;-asdMHeu13rAzfA z*rM%+LFZEH-$GlYjb}m_=B2fOpa~k2FR1}rmaqFyNySGi?uRiNDSJ@K4i=EuKP)xw zMKk_!`hEUCp8-(oqVZyw5qn%x_Ujx(+yy$;J4A)xyw7W{>(x_x zv&0vAsC7qgt{X9YQPM=*oK`z!@L@TL1Nv7my#~oUyB@bbT)RBEE11j$W;cAHFbGQW}ru;l&$Q|Dq^Lij#c;YCdD}cKGdJ!5M=?Z)gs45N&}+Nn7y% zUN=(5F|)ipBG-gcbwX%xg;AB3iap{qcp|5tXrrW`W1VI-JUx-}6q6|z;}wU|x*y@N z8B$5AZ%+9Ozv_Lz(tUp=+Gw)jw*e$QWUb+FE&2?IPl*z{dUUUIwhd(lmzBFO>drpy2UO77%~I-gROj zzqU-vz!2p|#HFK2!EX>?oQ#A204JIMQ*sXzI~&J;3m31oZ0$GMk-qZ`2JDj?B9D10 z-S87I$z9V+Y_HI;HjET)$T2R`Rh1K-cWj zm@+QoSq{}l3Nnik26=qa@JG)o+KxcC42xk}K>x0wh=Qc)420%{H5#TJ<6x%C#0KBr7B*6)j zOF3Zl5yt(-zS@)^k^22BCXOM8$OTcn0vZ}V5(xf+&P83Cd?YAp18h;fJW`f-=dDqs zic=XEjT~;_ZwiDQ1`i=WGHYnofEp7MaiaLey#!Oi zB)!RTLs6H~acY%;;?Sv2+8m_YY3nNrGsc_r{EOtG;gJ_@9sdew-OK@$dDQqPU?lT) z)#`bV^U#K*!Nh0oEbBDt*dOlJv^ z_jhO~4hm;1Eu(%16*q@)f)Gqf_#kdI77s;A30YM1E=6;GBp@kOgCaVzD?FB}Jm z1^VY#W2`93sNu700xksk#9hsCJs2U%~W`>Zus>X|-9Gjqn)*MB;EfhopByU-2 z7mQ=$b;`U@;8z?6U@d(QkBu$^`!Fi7*=`O21px}B2I#C&%$A>Ft5;4nyY{=w=9iA# zuEIos)w3HrN*yl_Atxo*GX0Kwq&yAJtdy4e9P&#BIlFt_8Z+umb!}ib^%YXhnyl9+ zoW7l{#08_&a<*$Vh)vzrQKj0|S?y0_S=S=dm90cQgt(-8nigrD&FjekXoBBnlL-Do{2>=fRx7A@z@hRX z+S2|n>ktZ-w%q4(we2!PGN)+4UZTGVlJ_!WvZU>+dbH|#x{@zTVZ{jZ=?js+aVpk->oyt^)zYdUA*F z)Az{QYp}Ljl8YoC7Fq(4veRxMf*7u(l;E@19d}n)%`BN+W4aK6B~{J+H~_h(>(yJt zrb!+mc@Eo?XfR_wiS#PB-F*Lpv3F_`t?8mQ%id+%wr$(CZCCBGZQHhO+qP}v>=WG= z9ntT_7m@#9<;s~k$C%IHvLsO-CT^$bGF3&jeU2ip8q;KuUv1gS=Dlt}n>mu*_EZBi zn`9a3b(<16J+_2Zbnl%`QQHyLaPYlVkr4Q6mp7r+Nd+l_*G1*R22Ty6u7Qw8JDt%9 zwC$?4=F7yry@@ltSp#K!sgm!7_Nk>Km}V9Ytac)(Znj;9jdP)hT` zwtP9F5U?YS4JB4Zxh8T1*ETNtCXQqfwu+P|HV~Y+rNg|=dKVQ+c5lv2uTbap@FGS~ zHib%|To8GgtL{Oq8ZoV|fQ@9C144}`$!v((bZ2AE!Na#++1umknf9bj;{$Y3?>Ej0 z3}zdFSTipNh~8$RM1$2AX5+_!j*AQXIvY#VANBj8(3fudLdDbOm#X?@191GRx|f#Q z=b*Vb-RIA*K#>E)P6+f1YUfAP3V3Sn=FH8F5#x(&T!Z*4(#Ng!HgNO%(S3|sS9S|H z=}n{_l``bB+ia&q6 zA|tvtOp&N?J-LFO@`MC5y68PD}YNYcz>$BNL z?jG4GaDd0GgGZM){pNr+7@X?_uSJZOiWdIQelGV006ea2y}X1T4WIe?p=PT z2!iJBtTLR$S;mXb>YUPS*0JmfNy5qnC zN%nqO?(8LQKx3IG|14(C^CLtRDK^KBk>X`{bKKHnlHwK;AIx=HB%RtIL$+T| zx<2|b4f;Ek8!toqCx#Ke2<|uhtf|Bv>wA0l7i; z%@y*~KI=>PC3jg|BFfIBVYAB|)Y9-4iJA`8$V&4Nl!yZfF>`(&)aMXkFSlWNOu2G? zwYMdj!}*s=MZ19wfGkMUMfYuC0ZUr$GG2H@oh!hxS=@^eaj*QtcLpK@6EFI2=NT&I zsUpTK2qILENUJ%UpvQ(rI&@vd|9xW5sDm)L+7DMz53I!Vvr?mtL#)7va5kmMG%Y5c zLX8Xc5BiFSIZZC85r=s0(h$potgygCSrFr(kEh@-nMWAvf>uYT8PVwckrXk2x)$** zE()73{#l6r*u={cD(RB&K9|f`h}B9=@)BN~8tKez8WXd%RzfMnRHI3shWb%YUlraj z1zM1$|K$v}LsGgY3M=0UP+nh*ESIXVm%=5I*_e^-?L!)?^|#GM`3e8G`riIRb88G!Ck`patocY?#Izi|~kLctw1;#`t_Nrl2=07KpZggCrVBc-E{*Om@v`z7kpDSR`_ek*%XjlCe={ zuN65j6gn#t%D9Jfe0P)MtczZpxskaD_V2wYO+!({St~bsCoVnbdb4<#vhn!b6&sIq zWl)M#bK-Tuv@Iyah->gx4>7*rsjyD)LQbEZwo}r!pQ;QwlTV| z^IExscoMuaTKScU6JKZ$vCd?aY6Dk13}%zb2KOh26M;TXVVj}n4Qa9qzeKJ4J*~33 z%ExmH9){FWW6&23L^oG5iHfxrTVHDnb)#eps-7!_LZEM&cj?^f6f8H&6`^ol;E&lv z!lLYUhKAJ||En56gs|_;!`cT~IVB5XI6`*Qhh2zr5Vz>!FJ*r2kMxh{7Qf7)o2 zBnaK#I5*;6McIqcuD{IlTix0#q`0(iPlI_!p% z&jZQ%6omwUd49sKP&(Nk;-i=m=dH`EdI_<3U8#U=t}@wOCF&pvpQbQN-aH+}x!qpH zJ5l1=%!nJ?yM8~iOl?K2$!dy0Wv0>Okis%i_-U5j3j zwz4UgS9ReSZj(19Gx&N^7>>Nw^W`Puej*fjHvu3{2JPoS>kDh2S(@HT4=|u5`=^n9 zojxpxBF}LSTxMwg5s%zR;D^PPPNy1j^2jYC72_7=H$HqqSEde z>DFu1?uN$9Q@ z{f%@+1G1CLLf*{oG7zQD5^Ht*c^8lN`tyF-mEMl$t%)XY!IfM<0bG3@I*DF+d{UTx zC#WcK@JGmjm=b%OK1aF8j8BVMpmRHf;VM1mu+m}un=_}o$?e>kT{lXyJ#iA8wp?0^ zl8WnS++3kD27=G@eFM!*3JYfbJ&wKBWgQVW?=AgNy7y8wOwlBz`7Jk?yemx7-KKd9 z6u$dG0GUx=B6E1cp_XqAvrMJi5%n~8f^k@)V8LcH>B**-1)X>o?e7f_v zRr-oCa{fUrkV@p5`H|GKGL)P2#mt`V-1&X5&11Z`P(+t3aD3Ict<2#9E)l?rVRwHt zWtonx^70p8&N=Dhzpj5Q9RD9-?EhsDGcvON@6N4^?f+{7@7w)WyE~VhP9{g)6~84x zt1RcTx!91sC71@LnMWOMI8uCA@9yn^1}YLyZz0z>Bwdv@6@&uu-yZh);(vREAe5|f z_!Sv8d0ZXeG)GnVBC94%uq-4ZBF-1YKtR!OM)-E*FO<5vd)eDH1K;%?btVp9))X;A zi)RF3j%_j+Qn$ts!#mhte;rKR|IF3>gGizNwV{L0i_`NDd;264I>{ z`%%(5=r$+{JoNUqeSQgOcAwc;n7jKvf)^TU7fKcwYsTmOh|?O+PvXbL!49B+8vKNa zjYEcij<1j~LN=%uD?5p>Rl8eOl+Mexk@Fccq=ycgC@)^thr4HHZUKcD2B09*Uv;UZ zW$NyF_X(Kf3Sx##B3*P(DZ|{s`*s&EYUKR{tf}pUvz?4nOJo2r9n!jZ_OzF(uZxRe zn2czvNIF-;p1>UBc*jK5flj;?@rHLpXe5I+vmiY(+8P;d_xTQ1%RLj}oIYy?O=g+o z*AOJphqWXbH1C6>j#aw2X&nau5b2v?0vuL*+USiOrH}cbE`S_30oJP^f5T$1O#}Cx z`QRj(R$=3sMk6ZXb13}qSAg~7fd9-d1oZuj>Pc5&SFKF^&`_TIIsi3gxo-4Ut~WFW zaNc~NtOCswn7-VI93}Y8JtIcmBBm#`1KLe)tM(C)=^k(Lj#|%j^@jmUM>o|xSK{Or zZPJ-ppS6cjKzu`0H*X12KTSd_J*s@KXAXvlP-7@OzXkCnA9#UWAxLu9U_PHt>^BL4 zs7iAa?#U>vk^)s94(7r04~8=h^L*6}(?!>v?P?1?FQJY_a5UV#w5tgT`r; zxhSRP$G1})y*5=DA*&>@Cd45Lpj6qPl8#Jck(GQxGhwZs?wD(V49*=l4g!NHHZcDf z6a|nV_cr`29(DLAm>a|$Bt#3sv@k>|zhH0gB?C7Bawk_p<>37pt{^mFMkuJe3XO?NTIZ9;iQNnnBpg z#^-Bn$4tA7(`NhGk%m6kn<>lmY{Op-;zF0^F#-QzkAIuZOIz=lXd;@dG0;&`HKs^1 zOeZRaJKM6OQ#ed}DgU-o)8a63qsU-ZtJi94e-k z(S7_j7~)PjDrD}#?Ivu~HLkCfB8Q+IV%h2+d^!@C_bEiFS!9D>588S$VH zSxcMUIG~@ACQ*0Em>oXP%TLyRLm(y54(@ZJGU3F|Uq#k-^W0?Z*UudyC(7TT(n#%l z9;HgK4*DE&XD`d1DbGe^5^AOR?LTN*Ov%D3Vz&$N0TB4_+#y3WXN~5;roo}0`V=}( zgUyBhS;JlPBaso?V?nJ$K~?TKPVeg?M&idK*YD&Pkb0vfH%FlmU|unePF!Y*SeWTJ zh%j8ZXaf(@?}is-sjiQKx03jChuR4S2;V3W*h}B#EWI~n?rD$U3s|fU%%$7_Y<83j1`T1bp-U zFXP?cQ$em^L^JN?h)0%9jyiK^&mldn#lKiv&&!o|-J`Caa5Z%s0^!ZdDwKdhYI8aa z={8RT+F&o`2J%umbT`YCZcQ+z;Y%)_p<*`6al`8sO{ujW&7Una;6e90ZwV{f2T(5U zCa^)OJQA}wJtIzPkUy7_Vxko~ZN#$4s*vm=xalRsO-1x-Spq=;f+~?~ccr6(UH9;Y z*g<<=ETQt-NAOo@Wn3)WKwfB$SdyABW|q%_aEo^`LgyF0%9v{A*NkS#@^m=^v>k5DJ|P8hFm zl){x|Ro9qTCah{~vX}Tiu4lz@>u!AH*jf`Qy9pEgIwaY^?Jj_r>Q$;-Q_c;ltcj`_ z^sBsqsTnlh?@p*pnX2_q-@o(#$-PNhP_@Ti$K7V+Npqu*#z!QQe=^h%G8>(oPxxo@40$`MEMXJOX6d6NGDpGS~c$=s)i#`=drm z`G#Em43fbp_`IJ`^q)dH|q%^mT#;(nC3^(`?A z0Bjc5J{K}e!BKEUx@sj2C_Q@0Y&CRP<;Hwj6uABY_i8t&oKA%yN{KVx@8^*hu z{sQpVGv{0C_IZUgIx3$OUNPp=?0&ba0N@G1>bz3^mp7UBfSI z*~jG1#Rr)xmm1A~U6kk@+5*`dG6=7tQ z)#Zm5#p74$4Ud<6v}-rH0K-(pE~rg?Oc^U`>C*b~_O!kW0WX^UtY_??<9mr4hhgxh zFe5)4#WEx*lD?#xAR*QMvkY7mrm?#w41!gEF5IfH0&kTRoVLz%l!< zv+Ke3>)5q;Lq6W9^Xqp-z5BT^J-Fo4lbZX~(J2;c_U@C$IVSh80b<6CiZxF zd4JWhjUa1U+WLm9QIB3V^0>~34X7-m1s;_@f{wk{Zmj%TZ{xzMw`WSx&~J1e%f+QyZsuRCsd`JORiHgIf@l`<>(V2Ik2 z9y9tI5G;{CHYO<8a7FZe`M}KC9CamdU;-|OW;GQ{ZHJ~ZaVXf3ftKExptS`RJp`d& zSDsebm<<(u2|Ak-fUwL&A&kTl^a%IKV;N{isY}x@upp z@qP~PDT8quuZ6T87N;CihaN0^fS1bDtTpq%D+sYA(UA^%7rl~A`x~pYDhMXRIsp|Ibtbj25E&|rPrEz zIS&Y-#3Je$sZ^}$P%{Y(0lJUh{mz;!A634P<#*cd5GMM|_8T52ChSg((zyp&U(3~G zkoF0Q$G`tklPWNZ#F=B_o@c_Z7vbZ$c~3#vsJAQ(gLTETub#_K3)~w^B~KmjxG8N0 zID$ZtP_eeO758r7z`h5TU5(lmala!}+3mgqTot{xv|dt)TPY5mFHD6u?@OYpV(yR~ zL&i$K@^}Da_gbN z_l1^#Q~u{{Ha=Sqq@N4{J8*>Pu#VHR&Z2dsW!%yp|AXyE8Eg|%2K)LU&@*$ za&PXzqu2Wj(y5sf5|e>0T8ob*#BQ6VQA)r+5PmJXHE~xTn$w>(bd&TFDe-|y`9ptO zs9CrtQm{~IJZaeH2Mkc%lR@1@QTN8F!)#0pc&RKc+@GntZkA_1W6iRmFY0J~sV*a+ zx=NYFCq#;NGRr=wV3#+^PK)xh>>>_HIzeB0Jl|b|U?O22hc~N>z<}=uzR#=ZiPNm9 zy34SC4qV*2$#dr;AI5c;HZO)N-#LHoboRIJfBOzv#^xT^0DP^Ugu7TmkF=b`d1CS> z@S711(0lB1}S<=Z+Sgmy;8BhW(?<`#w6JNY`t^ncz^+ z93d+j&&aUMy$~`?>QDA>E~wP^LFc#Z_c61!gNH)>w6AAw#^Lwww6MqPsla#5*UQoQ z?qk{EH`wc`;kV_MClBZC-2PFYr+;nyY$u)uWB!*@behy} zto(@|Y2p_ex{Xhz6Jk?Ki4wH)18d%%CM8Fk@}~_!F~$`M2A)@FM<&9Waz7W~cgSgq zd_&+N>JA?63p{6;1&(u~ZlLNQg~{lEbH;KmW<8o~?3qOYFsai%XW-8PuEnR0H*Z(g z&J5S|bK{%-XZFv%4H(o&jaKm8tmyqyq1U@99?TL3SqMO>Gle+D^tSOR=oOM5=jx^E zvq`8EB%e&;l_|SIcrcZ^MTOYms;yH}n1*aEVbmN48v8{dd{SXQp}*}5xa1Khmq6~})= zc;b2zQ)iAs<;!-Z!Jhhk>Pr=nY1$3YJRSred5K@a6yy2D1R{DM>o%xVM1?u47Z{9L zVG@L^=js@+XJJt%iy6W^C`jj+SwxEn{04`M@9BrVz*8V|Y4FEz@5m?&hSGI?$s&+1 zvct+@F8!z0GIs(zj#j4w-;koq_4j z=yLHj5BZ*X_A2?WJ4BesO*roAx`n<*H=u7@3D>OG$me3i*lF`tPi{*~mMu?;{sJHc zi(Y$pqjx$>ffVpcEZZmu#wiLc^Z>OtIwr1?5fN8g0%_;6sEgGK%MurC5D3UHlm+@a zK?O6o)^yzW67-Y2MUR*Fgd!=BK>w6+YiWVQpoz_mwuoX@O*LsxBtD#EM*0&|l!_8I zvvZRW4fL@7=AQ2OnlSBU@mXR`%1^?zVRaH<0uRF(<&TKH|K<77(Wqk@!l z0nVbG^i+fiuNpAc3;>qHP9myI)%v`MGq5JPvhq3IVZ!+5L$oGv(8A~LIiGPzr>x6% z%dzJUjMYm0rieyc;5~i=Lm`j!xJ}1zY$q=E()y6?P>3w74b`219ZE)gtOS!yw>>ba zrGX2?_@MDAtGfYuv2{-U%Cl3j=1WhMN#0ftWk_X!-n0#OC|wC~ZSGh7bR!qM#muKG zN;$IAY0-c1?VP{pbX!E35a8FjGvGSz+D%2-^ZMQfk1Z|ZcNJ$eneE_#7VDkQBYSLt z(69e!gCeXsIYuMEE!?W%uoe$=OG#wLquzp-7#Q5ReGOd(^7T+z1LmCSdEtK^I~wZi zx93mMxdI+5Q(aH3xW5P97Em&$tq@13ELk2`6rGJI5p?<^Otw&;qpFXT*LH67XR@^; zW{mBba@GR+mxp-Rv9z_@+=TXu;BKym-5F=Lv?hzSCuX>D*vUw6I3w2S%+f6L!I=H^ z{4JQuqfQL?%^*~^i!6cS?`H8c<(DO!412n>efZkYrDr4H8sj&Ik6T?g7u$_6N%i%W z6ky(asLq*V&Zo9YBh!!lFPGI`T%29*vGNZJ+%w?vg-?ytE()wu`Eub(A{97Ww}2bQ zn}KLpop)7$j^Zxx0~|%(u#|HslBu4fN|eVawK@A-aCOu?o*}2RUwpMJ-6|V4@p^Zx z+`CeSn!E0Tk3kh1qOV{=20c2++w52=)t8Q3D*S}5>7dL;eYs_7>3*muvYoWZb(8rf z9W55d4TH{1#7a!;%(X91!8M+)b7ruZGoG%LsG3DuD0HeJp3S-=^KA)Ir879-beo zsD2F`V4zyG{7f5u>8b6BDc~yh(+)6F(!*Ktv-NWe22c8(5GEj+3#hU~bl`wH+0%q=X?POrLejc1U(sJ)Cn%o4Qyg+Q#;>b8j_Xu~a6MoW>X^mKkhIBxfyDDTb&z|V z6omw`1nf}zL#1;#cT>RGmp?S+#TN3Yy3)?WC$0}r=*s}HHZw~R08z;m0jlK-FL$7a78xWKscU3SPpaDd z^`w*=SwtZbGK1fVAfZs$OV-n{QoAi*v;o~TGZ&e2%J&gNE~E=%V)lH{uG*cQZz54K z-6jn=rV!F^b!Lg*Run9ug@=Z8U*)$h-A;&QhTn8S@WDr=w6APS39*Q%P!?IDAtdW{ zMQWgog=C99^mhXZ#xWdL*)x#li29_LqMsJ`LQx3#Gj_}0`aE>vW)qgNIb)pG2 zbUhw)Qg+lpyxU(9Kweo%4hlJ%kEr*<;KPw4`Mr+R`6 zno4AGWoxDkxPZ|~V~}ACFtyXT%>lw;OFz~)%%AjRoQij5x3$|=Hkc?ZMXpK6N1y8b&b7qEB~)vh zpDXoPUK}PpgIB(mu!TP5ZFh@5Q#N8D$y10$EF5-u~RKd z0~jrNw;+-9eSX?dPtDbI3^JxO7p+|=83wxe-*0@-M4Bq?F-2iRx7e{*b;MKT09sEy~AA}6~)5G4|-JY1SD2%!A z)D202Do_73bA`;%+MJ6@ySZ@aPc4}kx_L}^n$-Q9MsWfpE1_vnXe-24x1o4sqF!#- zT$M^kG}r7bt0&A0Hy_;0qaA6vC9UB_ykb*+Shp}t#>}EZkC5H=t_W*O>H)p|N~n5~ zzW>9->m6PVhX&#)D@KzC{ZOwM1kaHz)HprxZh6DBf#7FQr# zI66>4)kBCi&Lbgz#W`Xhc*^WUc>2KCUdM7)EGXa?rSv<(@X=<1*W={~9ZCbOFQ%S{S^Ie9jE~T|oR$I` z-|v<#Rz_^v@%aX>+cBPzsNt@im*4Pdz2O0FpO6Z6{cxU>K37O|JV&%!?6Z3u;O-Nk zr+OlfjVCh#*5djahT@Ide{SQBrF_J0tCEUM6TP z)*d&}ES#^dZ-bFOmu9=zvIUMG(>&z2KrgUkI>zVToMR(+HjU2LZoXRjt00Boryp#A zjaA%cnLiGoI+DP^ML#w}>o5dS^-{ZzxbR_OY7EUn4&EwD4*WY#bg#8cin;3;6jx!$ zayP$GOPF3^v)`)gFQ@9b(})sN9>;3}M6>Pv`_#|kaAxJCp^Zy{$V2N!m2-`9zna?@ z`_vnrt~D`9K(RVQEo;Y29NEK}Su+PRa%S^dd0Vz_+cztR8o%JBjTNW$6K^i6KgE$i zk-$CXuy0t>vyrnTIbhyenjLk8>&sn1(7LcEff5-W<~XO6UUxYt3v-^}H|yrSnaUaU zh+mCk*jIOaC_!*7T+%~?2%ld@$f)Hof%Hcywf%+?M8x><@5}mH*mhpVB|s>;^K+Xi zlO7%7-{yr~E#L~LHQwtzo?$o;mqif%>ShVBB~sL@_?6NgIXTgEqy0sbcq!5>0ePmw zpfPd;XUbKMh&F)Ks*h;u6Flg~xcQECsWy)ykcS!CDg8qVDh8T6mot z=s%vkGY!s~zSGd4nZ|w3mIPbH@G+30sr$6Mm^Zl3a{uaFC(D|NNS#!K{wo)R{B}aO z5uoj5L*@Gt&?^q-4W*W@D-*UcFbqN{X!UNjR}Lm?DtMI|ms`q_z;Cyy&9G5tsHxsL z*}}%VSR3Q;mjcPIFhd$hTP@Tq(1dTZh4;4XG zVM95WBNF8yf1id~F_2X96@FVIL(V)DvmcI{^y0pmOQ}}pp63dP_AKtJo@#rq)QMzp z*O!&Yj^6YqUesP){D1U0m>3!UqtC&?`ahG@rn$A;Hb>@fe^9)soDB=Sc10F^cp|3R zWp!GUlb`zU-C%_U5o06*0Qo0xYHz1>`2jQ~i-=2YGT_yzP0dWrPGP@U^N|uv!G4*_ zYd_q~YDq64{e6u~lq8zwk%){XgBT4J(f$E%_;TaNQKa3UuRb5me82q9!=;(3myf<2 z3#27ka?J-76Z^*uA9&NVf7!V*zrR}T|Y)>GY;&WO=iGpGNWASrPa_j>Eu9nN=|G z&*|O2V=0o4j4OyGW=wm#e9Q>;wrhnG1ohCfb=v&PKMjI1DDssE^}$@IV91LTN&+J4 zK+M=n52voa*6n7?j)_D{$PGv}E%am3rqpJ4eDM=Oxj!M*X_2$H*3v7(>5<>SQYXhd z&3>J~iX9CXq$&I>EpsSSWSW%ARkvtlc=ez{^W>5KKp;jarAtOL1NNpivNfuel95Wy zn9<4ZcKrio>JR3eM+KuTjVC$MAVKxs^&Z)YEFP&1JLk})k}378E7r)RNo-7PH?Num zs&S8>K3YQ0HWax4vzd5ZlO9{~nXIEebJ|VHu~)Y}@8EHlaR7v}pbk5=p>embdB$OJ z=`P8vHywXKmHYFEd1Omdgw;=Bqg=B9oJx{B+UTGGQeeM16SC~p(_p&!YApMts>G6E zNO0u)lgZTUBD(~+P)nt!7-;tB3iB(lV^(d(%C$MeAVLX)Q-CsaKQ!QKpN=2L{D8UNS!r(y-bPp{EslFucOv3e9%D9GFw_R#bqVuFpi&a;BP2{~^ z)h^RWE6L0CB2uoHXsP}vxL|N-h?YiVe!`YX2VWf(wb!&v1_wem1Z%>{E^(htAEUjV z4Mc}}WSa2OeQEKSFd)MwD?S@XAp(om|7O@O2Gk$Uk67Z9=tCwISYbq0RNU*Sk z;tdkP0bdZ%8~cJARM|~{RpYqJnOxQhCPuvupL*{UH0|l%Z?-(G*qI?1U{k-_f4?)L) zgQPTv!kPO(0<~s7HBrOESOxuCX6rjrD1*a(htpbwg~w` z2_dWQukU#5irSZMi9*+r+m8^5t>K;nROgfM@N*02J_5vvrO_$Mx>)n+iM=4VnGVh`VXef6s>|C(ynUtEW=g8pEDJm)62>@ZT>lQ);*UV z^*3>UDvL$3o9!(!QhZl*!Op4{7E<{;&&1VtsKC>fGMpS&OBT;!ij(DyQfTiyV;Se! zd)?HT*G4}kIP^T$o1Fj{0a)0!E;!x%=#e3iQHbuRM>UZi*ji7;hV4lg20Atqw5CIO z_xXAfDcXJ^obF}(a)c#tNK#Yv1h${mT|0c$hnj0Am}udJq{`^%6qv`i_R0YrXAe?0 zEl+opfVZOsWHy!){JF{4BiFR&2fJh6keQeeriJNqnrnC(-qyk4$Kwi1P2ag7**`vJ#O{POROxV_%o?T-~ zZ((ot2*_fk7blbf15Lp28);=esq(o;@BmBL=I(7@PC`=~-A>KOvWWS5*?ZaKr2gil zxT}7r(f#FC^QJw~sF6ra?5LO?G8Ak*A1^HrMZBNp$9j z>O4|onm)^*VmpVKP0dZ>u8C$*^|Kay#SElt$r_ts$rj>L)*u5jDG3;sssSk%j?T^KIpbzXq+3$`nSd}N~QG`S0_aV!Rt0v2sz9UT< zS_j$3!v=6y7!v!(x6DY`9R%ty+KU?4c_q3UvOS1-8M+1Wah^1M#f^XTOXD(# zX87-Z$|Ma&RqW0mu7l}EdnB{i@=A(!@2S+cyYEgLb(iVHPN;?oKG>&1DT-OmTkC9{}vP3T*UGRXCYanE;bGPwu(4DF0lVmmL^ZCHhR)^7jD4!L>BuOkn<^aKO1i& z_@sdb*8qW@Xh{hBi23Bx%{46yMT=22x@R7Suc1T{gdLJ(RG*A(2;xpB#dPC#7@S$^ zIsIn>N>fkTQ@3#IkVO*ERX+~G%Q%l0whDATwPk0$uD-(zPD=ZhPq~)RtE76ku3-{3 zK}Q}JrltLL04cYQtM2N0wxg}z740_9Dd&pAObCtzyU~HB&28$YF5>{V_sA-F-iK@y z1juT+9E`;{4&hLH;Z9!3zMW#jJQMa7=OPLg&V{)mNmwAsjp}4Ydly56k#&sG&tEwY z66OnYwqtR+M4fJ8mSG)Ul{&!jPd^rxDT2s~%}1r-9|LAm(n}d>y_~HhJu^B&X8i}y7AIjLWK`=7fZs;8Uv|X3u~Vb6MKC0t7iJ)pP2_oa z@?qaXRQIX#z)Kc4JCRb7n{B8}SKEy)ni<&=&hiRWu9O0EbNR}vunvVR#CLNDu?L`n zKS)L)!ncQMiWr-XS^Yp(Pb)fRRew`181Ab;sWWcwXW7*^v0IW9kiYicxW zBG9G5ptSi2G>vb0xrHkdlnQ0pz97EyV;Av+rdbjcm$Z)r{A|nlnMest zwFSERa)%QzTel5eAA0*b>$Y_`I~K9OC>qTwN54_i(VxhdhKp(5@y)5<>FK|EYGsUM z%va4IUspYxY%VF5UbqGzsF}LSy<%~KGA|dB`?hS((dtl$vETkF_W@G#-l2C5HeQd6wY~0NsF5A!83f^V1tjww7}(o?FM(eYwqtBu16gGr5>LrLoIcd!+-A58*&?ccS%Sj(?(gFgxDnY0ZIVPum^R8#f*-AE7w_!%z{y=KEDzj~C_>4ttDI?~XNOI+XvnRzls z5~!-U4+3qJsJ|-x8&wf`J4Rc28g%x@f^W6m;Hp|9(T2_XY~x$owHRx^BWgBt_WE1- z%8XJ-B4TM=_T@3k+Fx#!p9lKghK;c`{XV-UQtK@%wug|eW}KVVF)8cl<2nlwFY;PO zk;y>X`E5ddxDu|<228!VNH$EwzfE6O$yNKz+<%6n_0}#|=#o}lZg2(d!@6Sz-sFk& z{pUxvR@M!MB*|HRg49~tWE95KWYgk^vGnkPxGc;IR7|&kX2t;oWVr!sv25I2P6ps~ z)g6RWjI(*fiC&T%O=3rW<3ytSKpRcg0Bqf8{Z%`Yxt}2VhV>#jtVg+j&;A8l91UGV zyGf2PP+T#i{B%x@jDk0`eMQm*sZB9*qq@ zobutbu3BJX5^nxH7^$yHEShrb?^7R@qvO0Avyr}y=b5@$Z?M+v^;LE0r@K3B_c}vP zSOm0>j2OT*MrK}B?hm6%e3I)1wP15xI7ar2{hJ{~f_2-koT~Kpi{0wG*dZnZ_)_4o zdhFS=MLVE#<1^=tQd4cLVWZkjY8|9iHQ{2ANWiIajF&BlBCrC_8&Y!9&?sgbaf&%p zuIe)pa~Y2hyaiLx`DTIsDEe4X@M@AE&&i>~T0f(5B_Rij_xxeRj0_z@kFaJjkh$QA zrg_t2*_T;jz8!2O4Rz%giOAPA_RZBM9H>d8XR{TSj92aYSlf3m^m+cE4Ryt`_3Wg) zwn<#PYv~U7iI3U)F|hfvjV4}~bX(6){r!sBItLEePZtRFJ4FF6C4!PM$&Ceu^1Ur) zIe(;6qG;NSwMX%0BX$Dp8xa7KPNsA2yrLN%aSUKnOn3w!p#4~CPqA>O4-HQ(a!e)&19MdeBZTz9q=1xe zj6`3z4zD$qLXJA7tHd;t9JH9d*&}QEGWue6n^xsU$w%;}%K(Ys#kkM<8IW(3_NXDV zEr&NhLd|n#@BOsVUL%pYLX-|FBasbbG%$QK!E<=4<)hb~%hYiOtK3od z$xWlv3_z(G)m;@$x|AKrR7!41xSN&tp~_qtg8WhT_!wLz(lN_FuMR+PK0j4%@hSFm zd9RMh^P(q1=h`Uw^zx*y>M5Xh_5U7_GrcB)$!~}KL9Y#MxE;7}36p9iRUgN3*ABIi zzC?8Z>D?7B*vDaJDhHM}zT3kSj`qV}#qMJ0CPhs>1NGeCdMReZYn*&dK%Dm22fmCi zd~-QB`K|B*D5Zg0Kh*l@RY&cA>~Rx|ZSc?TsHnX5bV!>V%=LrxY42y%S~gDD+p+ad zYCUtQ;alLlaC@3Q6Mjx8$y!bqCs~8QuvuvF$v`62I1}5zOq{_RV)HS9x>8( zFSpL*J!Vb4F~V@QqkgRUYMqua&n=qc(U=x2K@hFB2DA~O-pPkKvP4UM2LTRBfNg{5 zC)94Uzk-YI+{CDZ$Ve&`c75*fXj)BBVy!rY?H%%Cud>4U;N1w82-)pYZvuk0B_ffS zaBe*!3`mq1u9339lYPx^((2c`Cd@nO36f_uhZ{$h2EBsOqraKm9@NEw-lbdZX~Vxy zoKUbe(yHz5+3=_CDAcLGWgff9U$%00ZiwS9Tf7mn%vjhagIil0cwM5lAie5`VDN5| zkjgY*J2kigcU_cZv7U==>H6ad;Tz@JNioIsVl9bbXG9tZX7xIb6||v)gogD(r#~Mx zU=_7}p~y5CkPjeSLdg<^7kw-b=KwH5uuuZR_Y!X;GUT#CLCAhF?wgDJQVa$oNXC8&j!^FLXSawWs%x-- z%s)Emiq(Iu*0@&%#(Ad=EPy{|*)SlW*ZfRA`gstae`6VLzjaK=K#Lwx`Pf^F?Wdj! z){tO(XGAc(JYZR`mPcE!AV}&Je5h^*m$#+r&Wi`TBC_(Dv3644XRzKRp3XX>_V?y% z(i^g3gYZ=4v^h{swfTF~zz5HvVbd_H!;vSb8te5&vTx+a+A{ZFdTE2!EnU|)c*{;N z&wn-TSpLhL#LVzNH|>_SwGua5Q2wuxvyizSUK_Gcc0&S(!y%*X+H=!+3atBbJFh*c|F)KmNnnVE^QA+6*%$_MP+!w z#+iS7guDhi$687tTwpIxeqb#9UM87uhxfy~R1J89dUa&~aj1X+#G+x|AF`2w?DxHE zd&l?dBg2PRyqxF}$%lQlxBd`2Qo0`>hWpl@oUXL4p02lxPc=JIy-%%OXSpZl@vjJ3@j$RzW>@0 z@LI@-;IYLi!hnFI+VGQKM3?_aS((dWnFLdRep9s=F|jN|Qq_)IzUtOf3hR|!+j<8g z17O`EeM7Y(vwycz9y2vKUio@Q(RMyB%YV1KzfIfqwCM&DGvN%FNHy`$BE%~zr@d3x z>B9V20~v^#;C+@X9bR$Y9eU~9e*BGRw*tu51fKeo)cxy)*3_-^9?yL^4F`4F;e<*q zJxr5T5ldug70DvIGHz<@g@E*u{iSwOKc@&s z6C@4Q0V@Gq6jyrfb2O@mH7onkMO88m-n`m)NhJiX@iE^_;5{&vLd|uNPW23U5&rbG zrdjrJKZ4;0CRei&L(dnL>A?%TGNUTG%N_)$$^$~dIHLXz;UxMGf_T)1^6AoWvwV{$ znPD?$(webNp5uyO-tJzZUdGPaQX#qN`2+JR<`Cm+mR24GNp%)7WcFgNa&;3o$ zLn19A#AGr^NUz1;s59=lyf#eEo`e7MfF3jY?!+k3Ix&`_PpPC zrOLtWk}?dj=(A-jk7Xy&4jT;LW=#@F_8Y!{?S$lTL&zd`LRTwL!Oy(!%aFB?=}5JA z2a;TkGB=vvmp?6iedj;z&5Ox2-C)-`v&=h2sOHIp4*h2bSCnkSWnHK`TZLI4CHI6} z*kDBS*EC(mkBhk_^~V8dGGc`1+JNJ02c5=G$-qj)nq9ecAK*Np;BWD7F9f~E0kx*KZpLG{B7#^9I=L& zPIqAYF{rSSP+YNpEV(Z`r7pqNcK7)e3nd83ypKk)ZEPY9MlJL`hPMY|(bSEucTOQ> zT6IeOop8o^!F>Y~cm04fV=e8Z19VzqjWqVRD6nW?uc*xE^Yk)XO31>bP!MtDnSqrZ zYoWLj{*)wQ+sLhYkjukh$3iR_*j4!ni$DTxF)|c5V0K>{LiPmBsSXHhj$l^#uD$G> z49jNWM9(~>aeQo*jV9v{t2*~eq=^i@OlRX_j(j#ERJRy2ABD)!C|DF6GmO6rXuPXW z&sv(kS10fRM&$!gh+)qT8#t#1>2u)^~k;3z;=a95|oMdY098Z zII|AVzWo6O?qVgtWe1;eC})dvaVuY=Wq*4!2@&kpTd(*hPM;VjFmad{t-VUeo}-P8 z2p4d3dPhBTA_5sw1lmUk3?$D5&pRmP+>>_@`O(;c=zr+rfk=llMwEmwwRHB%&J4@#D`6-#k*b{%N zQ3<>9dyO_WLuMGzW2B|>8iO;4mt}rb0GAuQyS47xzAA}`^I1cVmV1tsGe#HYRTl z(>E*oul$lsyJun+vOb}$*BvNeFG$$m6yY;#P7^lVdOHQDn2_C-c8WjhM_y6%r6^n; z+1N=yB(*yXsZ265Xf7bX_cX8~S8^@bd_bgGE1P|d>gNR4wqJ)9W)oO}8uGE0fO^4t zShD8PWRm}e{N>Z}MgYSRZoUaw7mHG+8YovVDkabOV;7LF(1LH}DGy_%f+L`Ae+5@W zy&>Ib5}AuSRr`PxF8wo+5JU5lNQDiVssJFh#P&1-MHCy};T?}c!e7#!3wUywCz#g; z$_$fKN%N588dVss!d${u=WFH;tkm6GKwT}aN`7rv)k!cs=46eOG<>^w{I1=)`pgRp zQAH58OD7NxHSndG*SoHH36>h3KK_pJ_`ZIL`>8ETCH$C{1G0@dbN1SW(_$EgTjh?z zgm|;^aWpfUwcY_P(Y560tu*&UOi-w5FPWZwKilTx+*$s!Fdn@#Mdla67GnnW+FtgJk}HnNkXR@bU`~pfOIT&r93fWOEEoSp;`+1 ztcn`Ggs)d`>Az;bCWry=avN799Bmdm=$Xk^Xdm6&=5c?-CjNXi367?SG<2KVBAs@S zZ|R&#P^pa~r`+Hd)XT>q@?IrE53<7Z#mbJZT2L#lWwTgoj{aXTXjOTMBT`?|7~Hc- zpg=&^5+$;I9K@m4D_7}HVJ|5cGYmrBbe;X^7@Aysz@#Z%}f|&{1HN7&X~K)y2rb-#Rf`|@pzIJ$(MK`J1hXZ5dY$DhMtb_ zw%V2sb@T)30bC}U%J8x5%$#CcOxRe))>klnE_`R-fwp?WBt(xaw;`IEf&?@@zw(pZ zZvJ+AON=*GI(RJQyE{Yxef;d`^$MmNa1oK3I~9SsF}#hWWT+M=CFeFiP%LRai$yEY zmW7+*JzuOH`kP)&$1KKMOlALj<5T{CW|X{j6@}*RFz>92&!f_SKO^NMqrf66$iOOJ%MDoMh#xVpTGGR%x!RZ*BLFc< zy)jZn@9-a4AT|7QM-lflxDL<@6C+pmG{a5?Jz}d@zP8`_Ac)C5NkA!Z@+L0Tnz?mf z)w4~_!=J$`L___`{PD3mfG&agHXv{)O$#+Cqs8Hx9O;SRX?KJE0jTvU1;eZ_txo*y zlVGQ(nr|6oZetg>gd|;Dc}N#HtFdC+N);woZaq6B8bxlE%Eq%otc-*!!my+*X_{u^S4;uiB5TXfm-Bg-hAzG6GAW(zjh znVq`uldtgeKk1+SQ_%9A%<0yk&a>iLZt_#1sIckzlN;9pV*6l}Bh^=3 zPp6k*K+4VpbnQM*;2y+lE^uubUr2|Z&p@)KLEY7ua)~EU&eN=6j00D*~DG znvv-B!YY%L8gDSPF$tnQQKkV@0mTO_9w=kbU>X4jV=!SBPwSv zV~u&Kqx)U~*EJ(1nRMEyg}a%Cfk4Whe{uiYBBfgR^3;&rW#Lz=>UvbI%mpKh*ongR zgB-l_NwA3p5Rdw3<9l^{K`L!2H{b4xNTYOZIo0owK=?83q!@i{-D-lOZLiH)@p5@t z&pCDGNKzEvf~z|4x)m`NHoU#In(wmH$`72wW_cuy?riB-j@#ihJJFWOjhE#ko;&TM ztFxw1#}lh45tPZ8{HwCVb^eBl?Q2p}C`If4cfg(fUrj z$EOEdQcNj-xi>YA8TMqiDVvi!0;hW*Pw(E7pUC*P5cF0nu(uft%7=c4}j5nOFj;P-p^xC=hX-u()6}s+sn<;fipZD7}OlmHk?;F#mQaOivERckD3KPoj z5p*yh97F+{6(6en^MJ)|LM+y52Yh}R#oWVJ?6OOS_!dZ)UapM46yr{|){T61)~f-^ z_3xpb7lNFq#TWmB9K*uO@!vdD|35xI*MH;lbFlocF(pUZ+YY$n$N?t?O$k@i&K4HW zuuLFa(pOxTK*P>K?bQU9=ho0k(iz1#NB#2-&z-SYQG8l|s-WKuZLT{xUpC+JyU6DU zxkU4SCk6H&z_W(j&Pm0~Bu4e2?37m8@Z}tw8#5o?YR(z%N8cl}h~ZHb-ojZZ?Mx~z z{P09g>VLK~<5r8|=9b^!xupVT(2RL=G(6a2xCOpP|HYZF9SW z&|szvh&5V$B?$-dHccsrVV@Y1k(sml0u87OruJm}ya0#<=ZXHkw5_fkey2!sO>+P4p`dj^xs!%Q^QcPm;;h zs&Yi>9mRe{Q3*OzfTJU!W~H8^g5^vo-69yL;HMj&?3luMA`e&q2*}Xo)MuFoHC;!(-7geDO~{SH$@7Gg!qGEr=7oWr}z&wVu5&RYd9 zs~=D43PARsRpY#rWw2hF2~5h~Ni8%(V&AFEb6 z(M%m-G*r0>&RSYkQL7$~C!)|hBB7RG$I3V_M=Pi~9zCZ7R0$nu6<3qGWpsNOw|ORO zO1rh|H{I$KtJ(?2#Tyc(U@}rHIm|Nu3zPl5nR&eVd98pRl*q&lHDO(D?(FX5%JO|m zW8heFNXMK8ES{|QvgSzc%&lD5w=wnge@;KWKP`Hu>C2nei~j6_g~XkXwY;W&SfMe@>cI?i*hL<08RfemKka7QNoUZ^{u; zjdAPHG_aPcHl$ec*gm?qX1`(h;L^PLTFA?v@6*@MG4V5^8uShgrc3na9{ez;Wg7IR z`FhWY8AXvz_<*WyvO=l|4gjqc;LRe?^V3|t=+9^L&z0@hub1yp^ZVTbd~Eo7 zX!^eWIQy7mVsbsEj#PnB8T*+j6y84Wi)$g}&KO0lMpx+B4 z<@G~>nx{fEIPh9B#1$2W6TH$I23T1p@Zy6%)d{Hxv}p>C@-Rxt?4%$qMnNy26N7s* z&@m#_7&aIjgt+m|r@9g%EDnGO9<~{iWM3zdO}0bA^SwwqA#eH0j&m8B9uX1lDrpIo zfB>J%5ftb`Iu(w@DPf5e#XX`~33T@D!md-m zh}k|6w*-~gxfTl(gsLCNBDS1kIHrpvV6sJ<%h``e^)b5SV&&HcfBU8UdTk7bav1-k1+%NP7=Qn4VaGOTpmJ0&sR zzU7Uk)**OsaetNt0Z@|3^TQG8jl=CuD=u(oroHo&#>lGxS9k!MlAK*ZmnF2_>knbKg5kLRUE{M`A%bZV`5X z{DxwEL84xWSI|l#ndlD9&biI_%7=_nS`B9uI-?GPouHd0RU|Itv!fdpXnbc*$+Axmb}DaIr9 z4jl|^g_ycZ`U_IMX4fK^@)y)mae!V`;#x%yF@1M|`NP}2brZqx;N-amkT3!z7zg!f zq0;9W-B4L$00t-Fa05{;5FCLp1yLLYmngw_UzH|`=B)OBtmdEW*V??DKv*46A6-pswv(-hF9 zI}xPGA9ZFX9JD7BAz-#;CdMjB;)1eryYpgeSkY#T#)@;@_~&`<1|_T-t0YnuCQgHk z&QQk1KD?Q9NKS0lyEry4~h&YnNE*tX-_Xnr`xz587b%p0?qq?t!235LNx!P3Zsp~IFje8O@P1UQcZ zLcz24rhd_(TS)a_Y0Mm8DW(G`9_sZH+B`?9yo|)|04N?QBQR|s!a^5QNRh&eMxipi zZO25znc>+|x0b-pzdb<4{V(sIBI@Vlxn)l2V_N_32B9Pu zYQY%t3_wj<%@R$zOH3^!5}{u)0k}NPwjG^mzage;SCd^g@)|vVOEK z<;jLb;i-3D#=%CgNIKYt;;k5YW_ab)$3VVCQ+r+AYAwodO=AFZkp0p7mKf*No10%&;9Uz4PFUmzGN2yg$x+RDcCKb<17 zvvU2f5eIym$y@DBHy`M=e6#6%OiskWJmVEINh{5!;*#m9ud3AEdvlH+Rn26Way+cA?aR^{?5u$~^SI$%K?M7~KVDP+ z13WPQbCYJ}>-GG&zMiv$c%$$80Xk0toKlE)x0jmC21*7GF>jz?g;F5DM3&#n{qgb8 z(GBVQE}1(L#;3u;%L%XIV#KVrlqqiljIWxCkGCq z5Qatu3?i>3p**14A7au%<_@7a#~YkNcf5@TLRBh8gCl1I_?Kj#-i6EMxh~2)dX*J+@Apd77KGFB1ZzlASF%JivDzcCM%)~1X2lwz9wRl;9|~fUxk(L zDVhEN(!-MO-krY1xmR_wQ2|D8p5zOJiHSO#bcEJzXYTB@T}u6-8!{Oqad|rqDf7OR zqmMIFAjE+*&p?*&kWWC(z8$0)k2X)aClRaFL;}n*k8mU_0^ncyn`K#`i8+o`ga7O; zrjo!cqqZ+AQEfIq57+en`;ZTH51?u@?zs?T{&|h7mbcvcK{`ggCW~@8S)4HPJLl=R zoVbfkmosZqfx~5>sCG@T&UwVJ#K}rP^^S=zliUf7f~%uM5!vXHcS3!W_z1jG zIWoPnk;Ty$Sje*)N&AR`!OWoxfA9F}fpQ0~07lWicZk+&-bvY_Y@M65W>?JGNQhGn zgOgw4<(JTER1AmRvKTQ8>aZ&&R!8y5D{*rU zmLMqWH=;yob9B)zu-o;((F5T0m7;%v&m@_?aMSN~-B~rcIxA`X>itDAz<+#f+@hJ; z{uw?S(IZ&bg&_t&wS? z^W8IhLV71~%PM(9fPRkCFy2e4L?47*Ik+8o8Rx;%MXeome0ab~AYC=ied5Np_CV3$S@q!oG{HzLixhC&1kA zx7Mc5r_#Q5TAY=WIuPNec?>KPI0I)0!HKxaO6O-cdjn$(`#DvausZ0TT3a@{|49LR z6ed@URr1tijkR8@!_mdy$EZW2D#q%?1vrvyLzemK!e>p4P%CI)@6s01Y3OKvMP5wt zqEwbRsJ&xW8_m#%T1!3JU|Eaxr2Q5jlO*Apqm?prJtqk=amv ztNrT80Oow$87ra$^!^Q|nq9VY&0@Jifx3g-(o;DHM2mGagr@wI>HU^Gr9t8Q5J7e^ zM+oOJ_5@C1K*Xm6PY%1`x+QnJ@dl8~p}CTh_bf_edK%cqjd_b^jt@P`5DPRPu699& zA<)TgCPjKF#Bpycqg7^HlR!A$Q>TDu#4trFX7H3-rV%Aiz&T_YL}l1wi>BS|5M*$?|MmEyr@Q44qM%NwtTD<7ut0pC z4BQR|(N=q#T+HdA-B0wH33^wFEIoMz0<|2+TFf8p{edbgxN7$4-rU`UqEwpD8Z18U zxf2>JI!Znl{^h1#DU11IV0#(YOXdk$3O#-1ojF?VwU|9irg5W#<-F`aRUjVbEruAf zLvf&N$$gKRz9WSRP}A!FY7xGUk1l+WyE8C|9#{af?@K?-Oc*0Gwx;ir6I`GM5K(@= zh#~P^F{v#E=-^Pzc}IK0Ht0`8E9r$5ns-joZ?(4a#EKxp;8w{f05$Ph>$@z(a+PJ8+{m>Q8gH^_ zPmyU#mUpV!ouO~lLZ*|2$T{A9cM-3#XiPJhFkQ$^z_Nk<(fV2EM@H{~fveQO~Jiv`H5E9cWF ze#>W!C0ywv?{kxMS7(}3CRgOo$r1RobsRtn@nDYt0akb`yJCk4X&|03^2~{%DogI9uvwl4 z7t>Mbxo^-EUC&Q|p;V(CvpUwGPaO$0D4GeG9Pi4f0GrR$qmUt8m&^?*h3bB$WA0%` zdZsB6vyZb=MA+8f5NT%0H>yb#>PmI(lL6>XcIb9&YZ=n2@}2C;eX3}*68d)U*Yh2GawA}9|zsx6ax_1 z{%Nfq+u3iPA*foN8`!%LQe|J33%&JIOw5dFvQN(Q`Qdf32I%A*yH_VwjmbvYn4a4K zIY;d4=gQC9h?)OTZmh67}J71Vu{W(c^Z4(D74g`P0wasG=j$F*y zT828m{Er9Q==NMB90MeTfSKwtW~12n!d*2#SAbTVLUuRPkcHbOMkQ~ANS2@h6)C$Q&f;x7p@BA_IpDIUnQGT@m~ zgp&#+16HRDm|rtnzUL3DS%G^Y5+GU-copmShhGs~*~1BpKyC~zrxGCyO|d%XqF6Df zSCjKW_ks0{g9C5B5~v69tNdT6Mzi8O4C&1_>c~@y9`RD3!3-LuZV~KM(&y>>RiE&% ztK4Bxf&eERgvuv1UG*pIBIYq3ZR@O*Alg+9yRL6HIepXvI&=_!2N7DeodZ(ylGe;U z+iiUEoayN3Z0zikjYX6`j_97qNbr-OCbx_uhqpTYs(`-@tAdo~-&ZP}+Km+j8Lx7G zSts;^`!1qUajSiFRaJ}af(5OPWGm?kk}SAGY^h6Uq8$mpNl zdVaiaflhwfH76nt&K%6m4EcLSpN`=)*(=44Y%zV2P(-B8qz${&4X0=M2asD2N+ zrukf_LfH?|@*}In_>qp6=(pMP^bsLYKR=E)Ng*XP&g)4Suyz7USdGvj|GC5)5K4;6 zeRqRT6=A7GkX))n(cO1L76;M-J_QELlE~;zZbdeET8}5UiEdFi6ED3O>nA$!YjGgk zh{Glz8lqUIw$w$M=bIfk01i5TpV$T%hFw_hl5ULe^9p!`?Dh&c069hw%>#n7O* z_UinUo$HhonL>`DExspi_Mrv&SVt5Ip_~o3{?j0k=D{*j;&_^c@yMoD8T7%_WMTuYUj(Nk2fuLlbQfj z^aZ_euoPwE#57%p0#ZDhFUwC_C0{4AL9O%d5Y)!<}&5k2J>@i(V^G$IBM& z=@zOYfGzZ>2wdP=y#nvNVg#1p+(RxuH^j5XB>w?VM4k3s#R5ExS=MolMK9K_H1 zr0DNaM%j0Hn5sD~UcKef!xG!5-6;9ig!D%k#B0-AGhYKnP$97z89EFcC#B3{Q9n)B z<)>Ov;~wBe!*3IMhj5xC-BD;+d!)l4clHA&vFLX9(5#Q4R`9-5o8id=`4LgU4Sdk; zqb-H0S|o_Kxebzj;A=gs+MopnF0Ad#}o-~f`e;-C+Xq--Ua#n zRuczxBS7&e@9h9Cf$|Dq3o28p?12{KlbhZUS4{gCe~d}FS#GQg z%<%l6xg?XDk8kPkZ&*_!n(hBV3u5K`-&TxsGyhk`I2-r>9vyt8tLLCA>FjsX(3vnf zZ59v!GzRj_(`;gj8E!_GOyyl@IfkK53?Dt`{jz$JtKw(jJ(5tQQT&()K9Zf^2LJ%n z{$o52O=Mzpd}Y1vsGF727kF^pq?P#XCfOSoGtPrBTXeMRY*R;jq%LC{>dD(T4*Xmx zE%$>OgrdMzLiaL|0x@7BFc9~o+e4WJFl00EPUs3#nV7XrYikfwn<+?xwphxkgs78B zVF=Ke)tI&5@s#cg?}f>JW>bDgL(3`d9I8DWqLzR%aj_T9uF>(7)N{m z3nT4tC>hpE9zj9p&r&po6u1@9 zJz#BUdK#X=XqnRD6h_OzWf9X144_Z68ZD7QZw#cm#R4#YA)Z$$q7!cMy6oCwacT11 z^gppoYc|;&TzrHL8Zq-7{me?aQ^j5KXpuR_^9 z5JYPj`F~+8(*L$-Kpn?N;I&Uj(@PBsKTnS@mL(5IlV={7C!EtU3+K^#;G4Fz z_~LM0VQm8hE6X$s0tNyfw%mSwx&CfXUjXO#qkDzje}dR^g+{>dF3*qo=^KBK-~hrz ze8LqV*b#H>vlJ0~8);L#%bAP@3yeho@v<-}}Uay9eKHq0>I_U2tTwZMK z_s~4+IE**?)!!mG)=<|w4vsg*7?6G%J|Vwzhi^4)@4YzQ);Y$EuQ6zw3|jC{jfdlX zojcJ8#NxqZir=c@sY0y!+eTT1`OLQs9vu9AooK2hCO9IM;OZNDAS`!A!;P-ux^YyN zIviisM84Z|)x!qG{|m-|Wx+~9FwuaYA_d;h#4DCXTM|mTRu@RosHdxgkbr6!xLIUL z5QV1^uALw{raU=^9K>~rE#aT%`&zQ52rYVWsV>Gp-Uu3-+DF?7h$uM-k!EeZHj?{t zoTsbk@Ar0b`}#a-d4LVo#JRs(pZ)i)j!-Ty`aiuN01r7WIk4|EuDQ7aJ>9)Yq~77D zR749HJ1rAJopFqOxkUyaLoO3#@Nr7cTlqrSX z%;G7$d_JFNTs*{dVB}TbAYuyk3Va-#uZrjM4>N*`xzZ2jxqF^F%-0Kx4d(4%IC{ps zrHLoflOwNG`mtqi;^4|}I%;p>SlJxbDYZ*%;G zWSAEzt9BC9*6jRG@Ap&HnzXnQ#h>anl5&&O^(IDGUD-H~arcHD-MpW-eqHAbjf@io zBzqE)y>LbZc^oG&F007tn3I!jr&oo;<4?G)UStEp{0ai%@^UKTmiv9A(7(1~(Y?ox zlnMrd$dqtssVRu+BIjJg2Nj0o2ensD^Dw^4+C!8^OC ztOSx+VWAjW{4oqQJ(ODB-VgA%!RS8GvPH8n#O=Hze{cDh6`E&7-7;~rX*PC)AQ|yo z5Yn7K*yzyJiD~ZJ+RZWAs3;;n;f-wQkL2@rzVD-dn7*F?NAI)Ir#H}8CFtbk-2}u` z@^Pm~c|>C?jMSPfL21vv{byqTkDZC0Et2Y(#AdL=CVHB@ycep~Wm4 zUSID-iLM#K1)!@;#1VjY;gzKM-U#ma)XZueODgg#QIz@3cM+qHp?~QxXHkhjW%e6} zaPuA}Ri^LVFyeh(0SEPq}4LI$w5{{OOrLKE0xq@LTs|aIn*0;WMkvHRw zT+~G*A!nyA7!?T374)h)2e=(JLa=D4KAR1PZ>o*7`XerZZTzR9N3+&KHE!ZB@Y=?=`mrrAfXn@1|S;2 z;%jM%eJ0?mc#^MJPD9pxeDjI^WK(OQ*lfSsf3&wrmuyM$nZ*zcc&I+~2kEu%atMS!VAqHhwLRX{g z2xUkFcETg$V}H_yd2^57dY&4T>sx2PgK6e+MB-6Z_|rz=pRu{L@v0p2Dp3v_kEA|h z^Bdk`-3;mBU$-{7RxBr}~S^A=6T{Wyo%Wl9Uf%aWaE6^u=6JkkM|8r-yb5`cJn4{jdllHSWn4& z0zUn61a7FziAxr&g^}FFONf05xA%+XF0!2&1$pR^{%w)8scM zX^EC8?7Srilxww8|5O=Z&&u8)qkTmN(HhDENP^m=HG-mOOu$y*z78w>XSNM9j;BSN z-3dunqiMO{F1M>)l>qX~j9vM4h8cHnO=)JGs0X6(dxBb#6}gdMK(wo@@ImV-Hg!T; zMwY^*6d_r@ayh4PNq3oldT+r-QDOPnndi*24H^M|7cPUsR4yx*tZ%=}hSo=E`Jx>0 zAxa^g--?&Tf8jvb!r5Q*d&M6P4>lkD^K~$RgkRt~fMwpV0)3a=k^z~IDUy@QiSsyL zIc$fZnub2ELKLa@cx`Xwn@Sc;Tuto=GcB+>Eg+3q(I2fa@6ViZLEWfPIE=wjuZHR|4uzw6~+Xm6QuY=PS}_Bq!}cP!a`kj?ufF0b zuTw;9r~wyFyrnRoZb*DmEhUm&{IJ_>gp_(#LEdSS)TA>*%cgUojS49U#FoX{4YR6^ zw*xv0Z;Wc9hZpSInMcRb$>FH&)Mk0ehR!rpN{gB^=cqDTF^V8z33(RUhZ#A93T0?? zx@HuJ6F`|qCxV&76z>_?Kx^pqXU4U7`(Ks-!(tkuZ6vvpX{-+}c$-!(;!`_=BmIwk z(rYS!F}c~chu?_MHqH!8%MRfjn~$Rn&X-G$5;3Yz9%Nmdok-7Z^eq*fRtj!Z$wA4U zgb?0TK6O^sbaPZbe}olG0Rf_nLY^*6AH{l<4BMyK6au(+3z%~%@nw!i>~?MXQ8Gtu zNAZ$js0dY$!}H>AV>Y!g>#U6qj43%xh%b_7$sV2k3@1~4IBop}69Qy$Tyj*K-MP~M zS~ecm)~;7;U;G7cZ4I*YE4Y#>55^2z4<27qJgwdVAk^F=qRrFsGgU6%SML4X-8G%e-+FYFPx99~>SVr7dPH1VxD4ai&a zoGzqpIikBdS57BfASZ7WvmoNNhf*|FE&uA%`C^_Pk(XKj1+ogbE83(_o@2Qs8(o4~ z^QSEQD&f42?dBGaFZzi^P#YNx$BT6c-s~6699+zF!8OdoVbFRd9HfO5c*WN{xxrbp z47UmeoSiH*aLpP_gnvPqGjG`wLRHzHg|t;`JwCcN1CxtA|Grw=FxhbVt|sOV*A-Rk zp&Z^Q|M;_RY)_dqBiE}YZR<0YDG_-4GAyjpSmn+?j91&2G&btH%Wys0Kr>mRo~v@Z z`zocseKniWSDe7-#NdVCf ziR~K>{JfLF0nF6WT>B-0n0JrIaeDXCwXEFXSCmaEYN38Wx(N^Os~HMd-rOnE@N${2 zEiLduvzEOCu^K?MMX#;E-}lsYp6g{ctsF>fx6uaOMi0IZ$bRCt?ZlXT1qseFe%!|t zCDy{Pf>lf33x;4F!c%H}=5G6E8Y-2uP4Bt;ToW5Dt@g3oWdCmY&PsK_FzR0H#INTk z)ShzvS=kY6G1J`Kvt?w0>ya`m&c_Hz|KqVKJ6UDl&{45W0R7|h??)|+-r>Of`@~oH zC((o>hCl?4I(buZ637qE_5nG+eNu#>9I|}#xJG< zzk9eP`BWOZjTxerfhvkI6=~izWAnG+wf!TJPLOj$7FI3C0(;l615V6Q6)_t9ldzgq z^N9!&_ISE;krC1j;^q}X!Lc2IGKB4&1=_$3QdOd@-9A?~(*@eF-UN#ED1d43`x{Ls@=vRwX^V0Wms0o$>?PUi&!pKj?RCY;6B6g7E*EP??FCIk>p~ zQ>|km;%4RiFYWGM5!in|AYx`>-I*Vv(yiU=)ctLzO@hSRn)$VD3W27*V_J%fVxe_<5u62beY zBLt*2;Pnu>SRx>CQc2jvSr;)>Qky`YWiU8r*N+TX9${EXNgaQ6bxcf53{qT3jLP3# zO#G+=;Fp%bivN5)mwCeFfxF~0qSGHBJc~1K)j#S8WGvt-B{}(K=U9rjnGgB zx3>FW%;4*w`5~aoX6Qgu?L-p=reT86vVr|`5CdaF&mBGewE?^!qTfs$EX+Y0YdFGN z14u4`*lRdois{ORPOfgIAXvh(0jP1c_=WS&5_1xUHl%+oh6uB8flI~IfFTjJ3!(hadnK9s}H(<0a;8h+vpIzCVx#5&jQj z=g=$+6Lr_?=i0Vy+qP}nwr$(CZQHhO`+n~rNo9~hX8i}cy7uXH_EOYWi?4uOUl=}| z)A&&OZ+SabBZvSWr5yPEtprHl6d34F?5$g!RCNw5Z0L#qw*ZLeZl+I2Qcya-v=1%% zr=v*p^;OiCe2&IfR2u-U^-P8twBwgy5I_|beEDGmTb`h%CHur}DQ4O(t_H;{W?7sf^l@BCsP3*e+Xvgenpn9l9I8b917M;=IRo6T*> z@C|+}3tYZ6EkNrb8~2h*chC;v3LvHo7Xu4`oxV|Bz|HEL;e^;Zv4=t=gFB$s2N@z6|6ibOpNAm zI(P1QvVMNiY+;k9m3oGhF@wnyl5W*=(WFh~Ebf8A&ajIVKW{;&BYC*q-7r1bp(G0M z;^5O5fpP&I5dD-2*6OH(e+xNf#5It zIhet!_=~X)DoV}XlX|dTqxZ$btjyPDD)64xjv)3}3rz+_tZC+`+X}ZD{_B}BXl9YA z%-IJ2&!iCPB_&+;9mp#aPw3wIemUaN8O^I2sqQi)=4--S)Ph2)WYtBt#5!N=U!zFC z;jqOi5k%}kpApFZB@PwfXrM6Q9l+9;vpbqmLjxC^YWP`otMTXU14%TU5@cCs^Ec@e zc?B9N^49~SDUyj6BVvc^0b`ahx8p0UI_OcTE_WZj%OTzy$Q0gq&RU6aVh?@I4mdxI zf17aWwI;5Ds>u>JMY?JJqR)QNvKctXH%-6gb;FXgNN!;jg_Vs*x_}sgA2uQ60N;!U2?G7gr=s{aTfsa*H-oLoy6f?EYE0m+@EFM~PnJ z#UOZv_AlmONb^w2cZtjBsv5y&Z{c=gY1cnhs@datU`-wY*Jah;cBCb@;s$vc-;>Yj zv}O)4fMs~u)4=5iBG|c5{!o;#NNvTCGJ<~bR?9fCn^E@xC$^%=_hHg!a=0Ou{?BaM zx+S=n7|I47O==l;MqEQmVCYH?p9!Y;Ck1xHKwx@cN{4T!Q%&E6_G}`0% zDc|;%mh$e6%^FSZlCme7r0S&LoNMWK!VA%Y*C|Je8MuX#7rO_$$cee_Geib@8)D-q}7`AV`Es__*+<7Bv6 z5_DZWTI@{^Lmo9u3XG!LsNu>FGK*pphGs*3dw07A$@JOcq5D(08?Mz~`7vl7Nb=wY zgtZC@R4#OOgv}KI-W+FFeaMZQ2&3GwOLgC?#KlU80Y8&oG6f(>`m>G(M8R#THxbXW zvUq5C>zoI{IHB=T z6py6$d>#?0#1!dBlfZI&CD!yM!ME%aXO>!Uw7nsdQcXw$m>BcWbw4Knn`@HP?h4~ha3?uNmuyRqKq zvVM~$g{J0n=7WSk4WNoSu)|rN;2u|*%0QI#&KEK%0myx$?l5b?>!oY2MpVhMR>bXt zIj=Me_$MJ%7K;10R9y>rmW{YioBk8!%hkjXoAXE{8Wi%*d3Iv!I5aRs?8$=#N)U*^ zQt{~U!!XFI)iZUtTGx$F;Lq})O3lh`JE4rP>t2aBD+Y1MMbAJ0E{F7jp)tj~66+r#f_= z(_pdGGoc-9pC1c6yR>5(bJ2+i*naU~E(#3r{tET+F!?xg+1VPGHdQZdP2kbgpi#&X z|0stKV5H*bo2s-?h8Gx|JL-F<&cvPpbA{PQ`OPY`607w_=Qt_JEJ}oKnXs)-8$A}g zh}-1rQo3dHnt_)8?Llw2?gAg7x5?xjg7DH3%r&G$T=bV?I&vOGF}zsksW4q4}0h!zh5H9#_;mQu0E2i zpj@uqJX9PeKdiq?A|S^|fu0|&iLP?!FOWVW^dZ(g6>4T0%O;eK^ji;AgfPonrsa`Y z+pHPUx%K*N_br%ZP^sesq+9`~OK8&Am67dzGe#IiC`Eot2p7JZ4k(+zQw2Mnc1vFNz{Z>$}LPic8HOc|lC^vZ6*eUw`1gJxMS_Wy=lqd3LpbgQRmc zbH>>mLvtUS_=#;tNfk>GV(|po`zdnl4G_H4q?Kyu=MNEk3iU;^OHW48_mO;qE`6tm z$;`hYbe~4j&**NppWR@zLzIz6>J?J#YqooGmyD0Jh2!mLQmX%2nWxzADXS@Wp3FqWzX>Ue zjS%S`iG_ATE^0bM;uPYM921zVR~ep^d;|656?e0U(3Jf#0`owpdm0PUuxmC2{&*Of z6F`MqZ-NTEmH5LQfqfyu<(cpe@L++YPIlt- z>7YeSY5yErB%EH%5tMStarTq)sq;9}g$$v0=6=y}}Q!lMx zWzQB0z&7qh{{-@BM52*IK_z2Ha+0^uP<1oQd!h3OhPCZq_1|y}0 z*CD(HlV4NlfGO>azUdXM@ngF9MWE&r*`H4-kGa^r5>H^Ov&dCQ5zLoTX%iYOTYe;D zDNfVKi_LVOZX+&CQs!F7Fv)yp$7-&=ncwXeC%$p-AH?qpj2QzhCJoX1uRO<Vzt(3|0WQEr^qjL|-$8KL`p9En! zy&l^3Nh?QeRNrtdf_>=!vd+H0z1r|%N&Q@5-B`Q3ATuyXj5y3;)B3%@O_^;Vn5H6I z$uN0RdQHi(cvbW?XCszID-2ax;Af!p6Q?14ipPD2hDXFfdIFu&1grNHukJWv`?q~H zRC5vrGf%AYZJtvK|9YYm9WO;Ho!a;pM~lvIQ%3}?Wf{wpO)Uvri93J$!mT;rfgGtjGvF)P8n6Hd@}pFw=4EzT@hitueI^;X0w9pI=x|et zNtP~UF6uz&^1r0X8hh&UGIt+2>soV#&aod(I(H*-Lt&t@`%^wj6a_6ca>LchdCI15!S4q{s>%$HRL3q`s1R&=YaF4riqnS}s^~=M-9HBs7nz zCIT-|9E?o}BvPq~RLEt{x927r4vg?uc#iI(XENcbH`CZ@?p((hYK(zBofwKrVu*M5 z08f4b?Nsw}eh0b3BpWDyhwDzL`Vo8#1k(m(tm;F5uWI6=w$d|dqDK^OIH%x_WwE9x zfn3Q+k#4VU%z6fvTia+wxIP=Hmsr#um-)YSus{Z8N(HQCHvD?F5u(N}ln_7Cn+{_J zoV#8U-qef^ft|YDkXYm^>t3q#KtR|Hjo%b+R&LniI8CEA$T39O8y^1YoooFQc>vNdfCJn$Zim!3*DcatB z0v>_}oFn7@TOIzAdusbmgR6lIMy=JC(-gb_FsO5vP<3m+NVVE}q2#dI{~*HYt;Gp- z_F8+?Xwy%zsdP2MK<{iA2bNi_een>i{)*Qx!Huo-tzjG6-5x0xlgX9!+q{@f++Pf_{ZqPqdYcX*zn{THJMaPxm}tW z8tV{IFTjb|sW%1UQ;hR(NEQ4T*334USgckU8)>Z<-e6ltpA9Ui>jtC=Hrpw5ycGTn zpqd(sUocO!>+K@Q8;?YCNiP*5Vf}xuC-tAq<^I*~4bFvKy^bea!Vg-8I_n}X>k3dJ z`;2k^OcoDrgyBaUcg<);FNqR|84H&R;VIT3Bxee0L7Pn6YL=mRF@}Qn zG4T`h$vUXfHQx&D-s@>v>MwDn`9{}o514VaFRvfjW?8Rx+`7^k@8}Ev4$T8;Og`8B z63&$_8)r8W9_5b-bzLeZEayv?FquVfur72Ip|_cmzKg+QM$e8Kpbw{xL4WE8t^6>M zHOA!gC+(uUI+HZ(sV+%+TE2os6;YlH7@7WL--N(4Z@y)7u7Q5LpNwZnJvI3?2{3QQ zH(ir>ivDdRC4eljxlxr+zo5m4I~Am>7TO_8-wsa~-7&Yg> zpS`IPMP>wXZ-_7i@u*m<5UrXU02vXd)|y7g0d0PB!)IIomx`>{^jRMp*ph{_Mgqr# z(2Gymctb&45gIj4qKQnPvK5U4B&x8%G%+Q}EI1httfD!G#TQjnIb+ zq!rm3b`5*Z8)k@O4?EDhn5>%=KUTP;jt_l>Kkd1CXK7AOG)ohA``AA}4=V*9Szaw> zsXeh3%k&E(V=cJHE6tUk!|gabIqPrvlv|8ieo%9QsfjAe6})gx(yJ_B{)>d0_X5hZ zLa@}{_Wrz_4Dke7NomTGZ*mDsye^V(o-JJM$wcJ0^6Xfu3=@8kL2B2}667)}FTp_C zf;5>GoX+&(pt1G~$DK^WB6D<3!ptvhWKs6^!}fO6U475dlFY1* zQfkAq6jXF~^zz*Pp7xdL0$gSto44cpnKS-;i6gVZVCc|70snU70K zRS75+^mT~J9WWa+&;g$1%4kOvg#BzRyJ?*=w_WJLr-x-_klEf1yqAQ>VCq?O77vu| z(vrpBxB$ldS6tEgwW*vC^zfl3PR0K8<}Hz&{+^d?)B1Bnq1hlK8zy8_!mZn^dkT%P zF+F?uH0b_LE3OrcL?Hn96Jg1?Ab>?zQlPvL$NB*64L4YORFcUOf}k6fQ%Kw>oA#QZ zd+zZp#s`SS#NX?|B&c5l5g>haS34JG+qNb#i|zrbVRlz`>@z z&_3z#{2(6?EL>5ujs6%qR2`5WhhZD@?Es$ch2G~c8@3avf!)mbbHIluG zun?|^J^@*b^{vO?=uIY9w0v>(wdujf1j{?eoB>lEC)a4wRN0Js z9IWy@KYyppAlVuCDTZ;Z4gC1NLp!!U}KLKJrBe&csq+SKR{X{pWS;_W`S8-PU9-n69({jIltviMuD^ox3>js z@)p&`R^1hEM*s4(x}vZx9>)& zb{(f7ujuFFJjpYF?opr+SZRLlOU}ez@C95t!4$|GH%_F~-#YNZPOFaQR8HI}dChNS z=Lwf>vv)j`|DmtgNTN%h2Rb9a)}L-Y`Y}IF+S?#A$NAbQLn7bk4{~|YD5B)|YJu#s zYF6wsKX;rnWRSwTvQ5;00C*=i6Nv5jyz1~}rV;NTdMQ~#Q`>KP;V3#CZg=w9ywb^F zL%X6TVhJ>a);5DhzlKKQyzF9|#%sXG5((f-%Yik+e)_ZMj*E(JLm|14?Rj z)t#63%os1?9K+9W<-mi6dNo=mB}!%+4!2+niIBAd^iTUL;)TOqYCVR{GJ{|k#F?syxkcLzk*kL%6MN8?VsY(+(BSs0mxbljFt zglQTJMdJru??6CIPV9UB8`YH6I%gn;iDu5H3wxr`9#`V)N2XJB_uPhDYH)29jZPhx zLh$`R2Iwf2iB7T&;kanZLB5kE8uAPO*8l__lc694 zZUfgHRt@jxYpK!o3{1-2REIE9m?z%j!2p#c+VOTr>gp=}b*ua5f|Lp51Sp)4EZb!8 zdcO~$3}&4_xW(lx!yxwn`eGE}!LB!CN^H7)18zn3lzCJlNEa=kVyOsPBTFt*?a3!!vPHX2L6zFBSRu!g^P5v~&DFQ^eiLBX|_I6ul5(Kk*Zb z19RuK)Lc)wsP3iQCLKl{ZSD(3cd(la#W0$5lRo1&l?a&_nuEok=!|!+-ecE=wcDqM z)!vVGg3-D!n@DFnxs74RC{lF{F&|=U@Ff$A_8@PU)#wGhL1%_3=A$S%Ne8|D+c|0T z%AF;(bxmTuo3JdVT8`1dtuPM&LAJzml_)BtwF(@2%T+t_ zIV%?YQApcHCQ8JW4}XB^Y4Z#pldL;aaI*G{r{}eGZ_ivw15L<(?C|=oAW29@mP}FhFsHpJ{@b=&Y$4jtn zNj69r_e!maitOjpd2d3OB>RkNH96VLVWBn6N4l24IYQvIpHn$(iou_In;%xhJg@MA zwJFXe-i6#Er^y%*k^bZMCT!sBO${iFPz6R(wEPhy0UP*Gg-r2|cywhZuUOBVHJ@N_ zcYkBoTh$kq3%2o_jvpJyh=w*JX;VEd3-XaGUEM69c2Mu&)7G`DdhA-J&TNw4v z!j4YCE0QMFs?wQOh8@gwS%%3Q*f`C2(6F_SvggfyArmwT$xev#> zD9B?K^BK1R2J{``efM7{>Wl-f99MGhz6dOZ2{BEw-Ig!9Hh`n{;2q3g!1?m;JBo@M z(%aw>dujQeI;Kw;v`C_oy|e)AgakREIpoP^Fyhm65GVIyuAo0VwH`&ir_pLZ~qj%8$oe3TUShESBR%!Yngo?SkNe#u^r==M<(|A1xS(l`O&BF6qVe?wBQoWo@u+{0BN& zk+LLQtB?$Sb_L9ZeJUNhMn-VDyW*m~{h*rJh`=VjbsCjex2a1r0u~Yk_eUEz$$-k#t*0NSr9(zQ1cAP#b!{(hNz#5PQcOpI=?&)+=X`@3UZUK= zP@5i+iKWL^<5bSuomnbow^z}xVVd#8mwuZR5>(sCA<3ewe#yp2d3`N#Jfq@yb6#J4 z@sxq922t4OeZlodLG%4M^)J~z(r2@ApT1G#F!;Huo%fMaj4X!KzVVOY@*ry*`|*kb zRCh*IM9|SdHYWw@SO07xUff6EcQv&XZ(Q(tyQbRW5%J)I;GKTP>4#V@LFD2Em$(t{ zw$E{NkeN1bCDY*c8}HUj_P_jKYy7`x$Nx@thL(^F%*<^6FSe4I@&C}2jQFgq49x!< zsQka#N;VdD=KtS1y%@KD%1K*`tl)~E2*MX2@ukW0UUxVk7vKaC@c0nH@RH{;fEOZ> z&d2zKIKrNHJ#3&L%8}v-$(LwTJ!iRJe^x$wo@f`9E3>@o%9aOj8xKX?Er$jHH?AIbve z*s^dD0OnquK*7QQf`^NOh>QIA{OI7xpJ?zAiD2b{^z`8Tasc@;!u&kr>?-lLyyWRc zNSJNYeY}9&`nvw{$;lvlbZ_x&dBg!uBv0B!93>QZR>`(Ps9U{}9j_kh3GF#O{D=X)o=#(&fx zLf?{L0R!UgSl|c1LhL};`nB@@0iCq~n^-gd00{8;0`S$~h-vYH0SB}NUfKKWW(5FT zNQeNy+4l1uxckY|u{MSJfloi3ga`6W?7ON%{mbzW?8$*{1YVo?RL~(IM{T;|_V1Eh z1n_&{*ZD$$p#dGvurIRqB~81UiA31}hxJAw0e^~nbE zPGr2d^ZNn?`F7eNz8h@C+5CZR!OQuk0VBN<40!m_$pK;>gFlV_nC|7Gq{YDj0s|Z{xey_Yi@zgETv$FQS zcpmzUCMU)108;goA^Yj5!G<4Hw1MymNP+JE%rJ!DujR1%`l{Z<#n4%MMR@4sant@6>~qrVV7`ILUtCja6N_^Q6`i2v?Fmw9w_{6ai@ zNB;8Y!C{?VK7jiZR*_>-%ZjqlSRR#`XSN+hqIGR)hf* z74(IaR+q*G5G>&5HEt&w)i4C8hL??iFMp$h1O@?x7iXpg^~ajU+xHhv_~DkLknqp{ zkz1pa0uN`>`C|_dU}!|=&DNnt=}0UuwiMpx~OAjS#K+X=*_fdzPU6M1Lr#`Yqw=VkgT-OtpN&pF{f zc}3EWxW=_qqa91SX46zNnuZ{q25qs5l{R-&H3Z0w)LC4u%?|hGw6saJg}ces+?|ef zcjI2)>X$@E?A?*oqMS@57S;;%Xx2jy*<$d8h`OZ04&zACIrtgKY1j8BjpGA24|4&k zCiZOGb2C+T1_03NtXMT?YV9?@@&2T%^=`F9vTk)&Q7-&2 z%ht!!RnI%i&+y-!6}JI=2KLeB@<=DRN41m58p^I?myk?!o&bL!0zU);^|fmV@v35r z=%NN4@k`NMQu${6cQv!)=y6H&u-yA5w%r^l z81qADvq*UqDdNzbEoOs)+ub1!jYi49Q&+zHB5LKo$L2G(+#JYw%}yf8t-71H>=O{H zEoz)`_AWi=giy0GxNg*qKgqSElJLuQOGR+Ei|aX7DW}W+sFv}^_>)t|jQy{BiWBDEyjuV>-lfYQ9W3kpzlGAfT= zWG>FHgL*R5;Jb`mj`n&|Z*I%6YEJx~XNAwG#%?pTl0WNCvo(hlIX4x~)}eVgUoB%X zPu+u&d>{;d%JCSbMJ_oK*K29p@$Zw5_5^K*Xp9Zd(&8z=EIGz~UQJs5on))(+#op? zG3Vc*u2g6Bx*{^K!6EIiHk+&il8CpHJ`>&NV_!02>|VDNPZX&flXr>a+n{ph{s5NS z4~=cun|A&wk|O)f8R~CH(t#1Y7@+C0fwMV*+&JWJvF}D$ z>F?Y^)boeQJ959(nU}tpwIbPbr-X=}GodwbIg)z)TR=8;h61E!Z--P@;F2 zyZ;uZMJLu^{19kM-aE|rS7xuBVl<-XAGt+ZoT?bB?u$+%2PtdA0{#)*;r;5XrPwcX zU4;2TBQ_|0KlkFhK`z-d4UJ;?c%RY@e@s}M90m7ze-Olp!^seZ2WbY`^x1Q~NW0Ty z^5jrXW)$1!ydl$f@t+cFsg1gFj$TMxgNrk^Hu*~^SPUPtn9%eQSdV2BPdoLBQ-6D6 zE{$7t4{YqsrfS=vQ4GAc3?w_uc8U%fv)US9Iy|WB93oM{wWmMJoK6%m;dQpp-8i!` zUOXrP_4;|b4f&GGO)>8JiNGvu9e8rLT8vC{r#2?gHzhakRj&fb z*|Nvfa@f#Ql-iG37U@>%tG+2b=FWE(juOB;JP-8P)6K1)0rz@A0GdElu_w zzEinrObz_Iaz-Ef@?O8EZF&LjCh8KyQ7EOPdl`h#{qXgAt`8!iM?*kcbrd?$eZo$bd0_A<+%pF5%uWNs~sE)Bk;LAZ>(vW$ws47$0QxioBbiK6J=n z&8PI~-jvDVDtg>Td1rZHbTA7%>w%r>t#JIZ1v@ya94V%&i@O2O$re&>*;P0mBy>EY zplO}o6q13KT)Nrk5W#iV@@AW&4rlIt%6&CPWvGf8?74J)RQv;7o`)mpgl2K7YDbdw zdR63Smcm$C#|ql=0!p&-;u&rBWMpcfKZGZqNf49vP5V{eX;7eNjY+##JPg* zO(f^$Qn=~T1NziDOdE3Fiv&6+)qs1^+wHKCskPL&&y5}Epo>+CoosD(LR0MwGk&mP zjhQJ|3KSU*-Q7B~RsN&6O?JW^>%VxH*2}}&ijJ_S0`)32r&tfk$96(W4BKix5uN4T zt#`IxkRr@GkNb+-u)Auw{wBo1sw2M&46F0qSsLxu4FsEDB*eGx^GFduv}Z zcgETv<&)PD4 z8e2U^TQ$mzqTgn!r!~wK{cq2GS|?Gcr@uoYRrW`v2>O6?rPEqNMrx#fWX*X@w-$Ab zY9y@ZRx#DiJQ6~AwzXz$Lk1ly>Iivocegn#t-&0@l3nv)>@rh~<9-+KE{ioh5**u{ zvkTIhr&C1vCmo`qw-Q>3HA}1yf@t{h!^i}_DLc8Hut=@cH$;@^1l-vR<>a*4 z;VRPgiu8rDqm_spupNh5QSt{A%hQ5q^irx^f-0dcilU-Xwv#fqpb2-dO&X|Wtw*ON zJc668&2B#&2gF1M9%2a!fq{T!8#F7Gw8cK=}h0P%A>Lski z(9N7X{gDf@lPP!v_lqs5vB zvu7*aur*FY@KLtdK2oRM+1n6tPo0k_{CfG+ro&rG-`uBe5bx0{j*9(vKx1Y5GoOPM#8XwJKIQ8)j?G(W-FV&>gW^%NphPkx zT{gXmzU05|i8Lh{?i}XEC|gQB(q+$&&A#Ee{sMw$E(1fY(ZOu7$;1@V@RA$Ti)n-fwlD!O{}02ODWD^=sCz;4oV==ZbI0bb`Pv@aj2w zSGIe|m7`)eB&NFFiHWltr-uc`_UEouRx@CV-RB8maLvaSBmZWlM)lF?y`PrYbkT6ZB~)2%rrJRtS}pk4 zQi3UKsVFFEt~F>u@>cIvVL$sk`{FNu zK!TR6Zl(?#DBFto_6TX0B@mG4NAEvoqVmRl`aV`>;{Z749!5V;T&p+UnBF3-h#&0B zFrqw36{FLuwx(J#YR12QZ&~?5=~d&%1!B~QuFtxN>lg*!-FF{v&${YjXnlfvbb^ps z8?Hp{HKzKOCE<0d+%vU6C+c|G4ffBoZ81JI^`iVdNP-MrFzo(5oKP@9IXSn^_GD#s z;U=H5YgA49+oGI~@KiwE%_?I{UA*VRIC@=~X$nuC!6|yzuw|=4C6`SxDjH1DqvUTQVqm{TMZ69Esr)8XcAS%}AhrAY zqk91mD~nw2d^~Ol%gveWl0JAxFY~S!f7gg@Dgt65XxTYN5Lv-5R7JG0zU-#K=erpe+$GQwHSXMk zBRh#G-(Jm_yjTq9zSB-j25v((@J_!YPD&{l4i_$7Zj>rPLKr#1yP_#xtMEs0lCnh5 zsJpv+JrlvQB}0B0p1aG)qDMCGhrEIKJZ|LdMWA)aNQ1+gb5oF6)cyod-C+i6YF?{M ze0H^C-f@0`p!-h9Ey1KN#(oo^a12Eo0!mtx>E$df&9mi@p++O3SKoWO_5m=GS&VQ$ zv|wjFet!z_pZn_JSwOEJ5pDC^)tOKhLRS1%@9`9j4<^FDr76p!s*$sHFjT-~nx>bk z?qq13@A=(Al^)^_Ck>~I^t2(T8FF{cXOr+L?RVq)Q%Glf^2GF>hV`)0;MWGqhn&xIUvOD9vA{0YKv_?kr-_z7t zlAAV*(Lki3m+izzgQd{Pz1*~`W4fgB%cId5-+6DCdW@}^X^vU`d>ktIN_1dG&i$Mz z(jZlQLmhg+DVo-ADGOF3Pl|4`%FX!#f3IxVp-Q@rP_6`v<$KYqI1x?%MEk@{h5N&sIxm2C+PFXisk$aqq?N1snM928OwFJ{A>TDm| zqbQUel2IXaNDAcdw+`&SY-(FIl*QHjBD6a9K)L53#<6LIAyD$xW{=kvX*-7p|2jq* zy+ermhtvTHGnd6Xc8|4Wo6Ih|TJ;vvXmP{7_{lq^0NxH<(%mQnU0$7n;H+&YPl}jb zepQs_l~6$Ia~b;HiX>JOCg%EjL+hm#`)x2^B`|%jHxRa?T5J?a%SOi+p)4E)_5f=> z-#MRx5x*d3_;ehdH4~+yyPCE!J)BPV-|ciCm;4HHi@4aE;u_;`;rt3FNfi#=n2EE( zRj*UJOej@)*rjwT2WfytqMOYXX++mdM*5dw)`n!J>7+D$ho+Eo;oEX%b1dLF3 zAz9;Lv|%hR+e}G)6QZ3EX~mPa^26bmH6 zKL$5L@^BPXjga0Bv=*Oqmya?FH6VW??!%~2GzdS+nj{xcgOX``8>pQk^WUfyH#oUg z29-<0ON#iTRqf*&yhj!EJB-clE+c6M-ufeE^{hPga^@ktrq2KZbvqn0=hgXy9~)k4 zmYxotn5V^V%E;Wsx4xVBmnP_wz=bP!1d?Q6*E)%cZAN!hR6;o-B-m^e@|uMu^qNs=H1L z_AAgdawlWeVc{m%_Axh@gP~LnLpdz*NxLpD2`?~0YNJ;h zsP!MoB07W3`k6M4B!;q%?Ahd47iHv(#(LU+fBsPn+?|61Yn_f}s+2wxpQI^{{1HOCnpr#~XNwo~gj&eix#*XKdSj3pRQ1CvyY0i3Fl)DL=Dj z_Yr_mkX#@pOcg8>I286yK@?!Nyk36rGZ%ArE1BO04HQ1=dKcQ3AImcE+EX1gk$E^f z&zHGEIm26d!MN=?!mGNtQu$aDV9BH&<6MJ69Dr}5)_9JAb=m9ewCiVHXm#xlFsruY zp9k1f53lEI$za|UbEmp0`=>}WMM|rgIlElhKPwH7tX+6FEIM3cp#Ls*esHY zUa0|N5G-%Y6M_q3&>iWIrtU|=YU*SaaqHc<#&MJ~K;1)Il$?$G7(0JNybvRw1@{7$ zXMfx&H7wg)fT(|`j}9Y1AaraB@AB?b!f9{Dv}M!?wkIqf)ib|GOFBLOb!jt0wKQW{ zteWp95slo9L0;Zpj0o&awdx={|C7e>>09r4ZH3n0!0Z}s_W58($L7+tG}>a|7fk{ z7tge8dZF){a^hx8MT%Zv3)0=mkn)mTO=}~yBg}%F^ak2`ghnw{>2Uf5mno5lFiRHSXVik=weVXt9R3-uDt~NW#?PYKd1WV8$~QUkWFPZ_*HJ4#3SOX35q86L_n^g=Zxc3_0fA|AG%+pC z(~J?dn9Q5<6HmBKyhjs8AIfj+pp}2uS|o3a5o%zPQXXm?mok);qH~71U~a|Y*8+wP ze7Q>AX+Pbw7tSdJGU?w`5kQ8NQ3>}Dx4L2dHoYKye5UYpq`SY4C7;hHk4mDiV~pXq z!53yBLDwbo>mmc&RLykS24T0z1!d|J{Cl&@usYU`Hy~jKienppg+UExX@Q5quU_vz zX{kLE8lq6u+0Ez=z#qpPL-a&uvdqpNGWL|4iG7k?nT^#9OHLg>8!3}~8m5%ez{uZO ze{qo*so3{j-9}3+86?#C{F=bCc2WdW{-}UsNnj@LjwZq1)X=Oekb&)hwp6u43XK>g47LP#6HMT+Nt6DdOqdaKZ?`Apa9Gqy~1$+5*NP4$I0F3+?P*LUHb{ zLXWdpaM`Y5=`q3e$qko{T?-HsmR^H?E0aObWNt3Cv!kgSh-(aZkw@a64aGgOa~K7}RtZZAbd1 zCO(4Zs@!w)%u&hh=hsBe=4U9SxYH~GB#chn5WknrPV|iZlUjfvX$ZaH6YdW*&11LR zpT(rKu|uOwd^D`6Pz z=k4KG8zG?(UGiZGBP(t&WZHscKX6yTI7+70qzER+Au24dNc9G05HcEWeylIykgsWg z5r~ub32`w1Gm%)#V8yZRrGbdfK(-^#^nw#cy|ay59b(b*m|}I`-VuK0D=B;DW1yoKfF_Djsx+2a?1c!CvxIsmRR*f?vHt= zW($B*h2z`#Ir-5_TsMe6BH-v4)=fOuk9?&MS_iV}4^Y7*RYiwKHwBOvIBZKaH-q_L z1@8nLaP4P08^q594rDyE4A^%H^h-6njsxZ5WN+#Ww)ssLf8CmSN+->&E+KSvEeJ<9 zL(%(~2qY|cGHd;6{P}2VjZ1I?x8n;aT^AU9d`m>5jl152+b35;;9lNKF-w%>YphCu z4gk;1&5ch_4{!tm;GU+{`0Y}Ad=Bv;JbthBrR`taO8gJhdDjLRL$`wT_z}E!0qgJw zpi@wbt9|vQ{)txL-~d3=cSQHY9D};@dx(8CV;p;s|MGfQr~~hd`*wff0J!Sq_sxyU z9i0R^&_8{L|Bn4ML0(l#VvIBTXguh3MnXb>_hW~S1@H?_48`s1A0GzZ^W=N`*^I_Q z_)^2V`e*KNs|x`D`I>%i{m0yS`DgC@Hsiqj$K3Jf`H#8tI~#{x|5%sF?`!|XANzq% z_UnuMvpM-|J@(5^h^fZi$-ngEd-lt3na8^}^GHANIM>m^L+{6Q$!~Tn-~Muo+X&30j{GBd-exkojagj~^Bb-ADEde*j)r{uP*$Ug1mZ;{uSm z!5@a)S91R!bmtxZ0JQG>D;gxnJL5Z=;~%;M`#;g0>)D$hT6Y%{NS9Cg2}cs?FzP2; zKz4Y)>5awtkN4=0%t3H{N4J|D{;bm_!r$oJL{~4LC!8yRl;5F)lQ(IoZ&#>Uz$`(V z-|OG?tzq1Ue*t5%x&&vr0lwQY?bJ`}xs&*tk6zBd{k~nn1aaVFI3@;YhIAOl%D77o z%9L_fGY!0CJfe-&pW*()o`4${9-;n8V+!#X9fL zD78CYw~u!(g(E{Q%oAT6y1T7g!1o!tO2$ZNwDq{T;^g?*09tQiYc8M}GURGLFwIx1 z>^Hm(c&y#S(!_*~n-|=uT@hvQ!-+JC8}VX*po=UTrnzPi6nbrSaXrREeD`jw-tMfy z+4tAz?E~UuD7%9cH9WR~&NFA5n6=4Dv~s6#LY6|nKuT}YSMiXVw&D1aP;ZVq!SDOc z8jH-J4mqRKT4tNyhkwvygNTM+(u0kPFdXMZjB^VmZz*rzz`?g^zQan9yg(jwy_mjH zj8uFb`&}UcqpU#h&#@6yFE;QeF1>qLvMaX9olrK7Ohs$M%2Kb*qAA)<%3hKc!%cNO zvHg->se$VneK6>E`oIQuEH!)=Ad2m!Ct^SuA@k6CJDCnR<0IOJAv@;yO7f=eP;n2e z!e$}sS)6(>V?Ui)=_+t$BUXvQe-$IuNz+jFu6n?%TLeY(azFyN{>dDayBC!G(m*;* z6@9oV`&)dZKFwk*qg%R&i0s$nhbSKz5Znx`HR#6=4R|JnK+TI?D9nm+9o-0D{~`p) zPwA*>+^x78809`)Hr+n{!uXw#|Lg;2nh1<as8ImL;wnI>#^eFjisX2r1x*J_>)-t3bM6BkWeBw8(ek*bXC>S*By8c8stm z5Y9>yl+R1p?1k!nX1s?tJXl{*QWzGJm0MFukMPycQZ*j9qEcIOfI+{MIAv%O7o=pq z!y-mF58uDyt;|?d`gj`v5W~QU1$FxREk~5QEsV7!R}k=wh+*}cu@s+{Ovw9Zb3`zU zz!1x9;F`{jiE(Nmf3=$+rqN>1XO1z%98GCy7u(8)3dgG2w>3ZGo`{_R`ux&XBedm* zIGdQ(n>yU2AWJe-L6iqV9-|u-3k)HI(e2X0w!t|^Zg@+ZiOYzXGp@{7V~A~0oVzPt z6Ojl?_viNTaT8tOjfbL$?A>roY}#Rm?Y+PrBLB4k1`4ONEBpyL+_Ug7Yv65|M4Oz4 z4Xwz@HSyI8WnVDa;nk|BmyWLgJvddcL9>?*Y0OR z`PsB6{(=ozbZU;QIExcFe!=&uACPwPep!5grrsARqF73NTL)#X3Cgl!#+xv8OkWbu4`)ol++1Ti~0a85e8!y#E^l1i8EZR!1d! zJK;8{rdAC|Ke*tPViL&E^Qxs+Pe=zS@SNcAK+}I=G?$JeP!~bYtU#ficTR`Hiso4_ zXfHe32fVDwUqH-OL{Rj?q0x3a^Se>B69 z!{ffQ_M?p5QxP&`L$LWo$>!mk$aHK7@DE-rTL^ht^XJ3F?C#z@f@Ubq*?Xs2Lr8k* zlyve%sV7TQ3;8%{T{Be}4FQ!r5rT5*QIDM|>UZbBI!?~$u##~7{*}ifEI6_F^Vls8 z)?GrXJh1k6XP9zB}^Gz zjZ^(~ITc>0*_>K$=k(BVzQ|$QdP69x`M+S&AvsZN@m!m~U=K^F$+xCFuu-`tE?!+3 z$r;S$?zwL-H_-_e%V(s~T~>hR(1JnO9^>~mQ>^-UkAwDO2(i~%^R~}oo*DS>WR@#v zQb_UECX{#!Y}0fLUL;J^`x4VG^Zpn?o6B}>u*oUCbtO_|4E%l37d#8p#&I}zW|njn zAzqN$WO|~h1|TXs5FZ63zY842kJyl}n&@gRz$MY!Xq6oL_V?1i5vq|ewNkAFLQ!>l zt9gP)1~88J%3T|j}^*{G-R4xxjVTX7P4PY!L>i6Legm>h85wW`B zeHNBRB)gU@sk769;R{T0GQ|Cx+x<|T^9}F2Bcj9xu`lfKb{<2W$S33L7WbLkcgf0Ja zZiRXp;eeuk>-wKhmIi^RpUu>*&4*B&$K@r79h9q+!Y~(5gdoZIVn*ApELEf6DZ*3l zvik7l+=FY-F(qEEjV~bGcAN0hQA>+qy^iPSMOUi3+q)&zLy@!>SBVk3so4LaxjO32 zYf~FXkQwXP;3HZ)pPXL|fIg^8bsjDd5NaQJN;&TQl z`MW+a6m9AxCC7PR+zKFsh&PVU*MJuBNgg((DMz9!_{RZ5g_%sRaBp(jZN+}w4T>VE z8vRVe9t{|dy{NpjZNhc?>oC%cPUIb@xo8$kezNxo*Wx0LZv#p$wOAM9cFc%x&PSVf zvDC(}*|hT7lte%Bwjl9YmLf+?xQXWVA@2Ojt5gX$e`JUSjx$TeR<^Qpc%WE zRw?qXjN(TkAQ?YB?l9Jvb!RjsH+;cB?3xbn>_X>M z7NXfV@BkOm;65~JCYuNqr9hcUnW+HlqPv)NrSIf5+CC*~*3?KW)b#Mn^F!WcKf}Q{-n9bh(aksg*H^~?0o=waGO`;!EYaCl=8FRhxd;RL&6-IxHS3a4Z zgfaWzT3iFTNwWb0w?a3XU!;J$Fq^G8Jwy!63NF2m=GQ$aXP(V1w0 zI?JZ7ZV|T|6n(n}sTDJJZk9VaHGj7ReOo13E*Bu|hfu|r<&!wn#Lwwh_TqGE5ZHN` zBIf|mEuF0!)^0&GikRi|dAs(gF>m4Kc|<`fQ=fc|`>lC>Xr+Z`8KMdadjBM-qikF> zPJk}FBR9qXH$q4(#QkkW1}fLy3K=XCE$92Q3V#|!23NHe%+_#^=hzK$B<8@Hh|kAZ zjbUx)>b5)DUW*PHK>xB>J|qHOm#d@TWSw{Z>q=uDUNnrXV2pT6cmq8y38vUtC%T5u zW0F8YRok(phX^;$7xE8i)Q7Uc=x3Zd>XBy%4(js_PExpz^`GEB!`MW|#_JUhPB}*n zB*$cF6U1agwzAh{e|ArM8%9?U>FnsXvmlM~Z|!rs-Po6-QC9O%T&P|-LUOuWR5e`= zRfmb+3&z0Ev5h_}608F)#`d$Ra>F09J9*Y1V_qczCzCg%>cO;0%YcX?w!8mi5n6uw zQTL}$Xt%MWVLOIjH)rAj8L4T1|45u{(P+0@UGMkIcI>Q-@q`(MTWwY~kdy`Qo}7ef z65Nf(rfDyixnQ6kyP<(BMJX^F;cH#0DY$aj{u!ntuWuI&ls^jkfrPJvwH^y;)r&DY zmXqf;N*iUXzQZ|U*PvN8snoMEo09YPC`M!a$T2bpj9y5gRT0 zgXeIIu>51xPVmPC?=QE@_zr0R9m>E}{CfuRqH0d55l&uKKjD ze3@o*eoW^oonXnf?VONc8Ic&xdvtL^=x^D~%$#~dQf-Kj0bT#>eEzZ#Ihb1T7oY8w z@GNopnfCtG502NeG;XJ*CU@U^Ps=6ua`arZQ`cJU_y%9QVU>gjQbGIh?kd?-#=aID zyc?)JgL{E!NULOs?vfe-VX!-46fB(B37JKe_41lSH~q@_{P|L^W6Duc)nP+vvd}f; zP%I&=k^jiaKNxU^_;KLViB&&{PQKQhoV0!y7erccIr>C{YDtMIJx$+(`_G+4LSonp zFVk*LZv#2xLqA$$1hx|eOqGzHuA=M@g}Hj*&+%26xyO^4R8K6pn~dj;rml&S=`_x2 z!6u7jvzrTV{;UA>k6{P&@gVh}zq`h2a~&u>fjfH_m)h-*n!h zCVl_V5MoD;B{K!Nugl0`4#r6muxIK}(W@>bPwSZ%BzCOEK57GdbR~%6l(~o;y@Sb+U=X zmq|N`m|w`%M3eGmr|C@m@5&QU_y-R;Hk^k8`RQwI_ zG;3jA?LZsvz>zxlP*l|BRlfBDVE6`+mUiN@r@xi1r~S3XA51X7>9|q&Y&v8$(a?D|50IB@@Q69@^RIfb*dJOr5KmL@MF_j*e+w-FV zl;kB+j+7DwSHf~N1@wW&oMb@0!ZKaQqX%4DBhWcl#C}}3g0^pElpqj7InV6G_NztE zHon^6;d^w2CZVtCgS~#dqQDvnI;mW4=u_}8MbJ%gWWvXr`xvJy3DPRq@J1lI0Yx$k z*?n6#{o$#0g0-IOq1sd2g9YL*%Oe@W-FS(X?MUiwAhVWgj+%X%z^o-E2Mx>XJW@cJ z>U!N9=-M5yF+;M6{E(XovX_zaXHWOB(yn4vRv<)EFkcARrr|l_0~7{q`2!P&C#P=_ z-0nMDS05g`h}p3I3^nTjib*KuR&9CPXo&$fDV3;?pa3IE7rPWaT1a8qQcg=%F*J54 zX}2braaA}N8+=&F(vrIBzII0@nd{;V!&^5HD#`DSfqh4WQo}%BCm_j78ZV!x93I0; z5uedWrKS%i{#AzlUSu5dq;xfjCmFT)Z0zV>m3eeM4@Q}@tC}YbBLl^|`jtvA7Fnsn z74Gb^%C0_SrUxv{mN0a(E^*q=aLNDOAkMFVG^(&lIdsq7SeThL8=iSKwGLLm$Yf96 zzg%Y`o95wY-X}t;k&NBTGsY!;`Uo|~XQjY~YBN`_Ax~OBN*{sYrp99HziHEFxsiTn zED6kzarSU!<<*dYe1F3I9U>Z!mRmu@jpc0{;UxCrr07`w)11_``CD#P5wg3DHMgu8 zQE-2b94OH_-9U!68*l-tAu7+u_c&Y2i*^HF_8n}zzatQR>`3R}EYH*nUy1g{tY?@| zqUKDj4cz_LrwLrPH?Nw4zpXh|+A)kOX}O(`u-O`4+C!nT@g0cXuzPl6`Fr7k)*zGFyE2e__NJSGcCYov zuTy?m<^_2LQpx9VM93QaB%2&G+Fowq-q*FMVFB@}l+)3r4RKrda~rMbi5 zVUs2ARN+=6^}3U)TT!G}G?%W8PGXlH9>wXVpZVJBtr0xeH#3=b)898@pJ#Qaiihs5 z?(yS?KsH|A%CI>)$;C-FaS8dxd+f?oH|p15uHYD&)w#ag!!&H8MHD20dhT=14hZ@H z?m7*-l8yG+c-Ce}^!kp_JW~$ztxCGulUkMYYi3VHGdLwAQd{WSz+_o68TDk7FE=0= z_O_rIlOc{U`t~$`QzCFXSB=-;2y}UoBq)5GbhWvXX^9x?j~nyd-OyEXTcs>@H&qrR zB9{FOM;oI#)EDoTd{vfJ9wSLq-AcxYJ`SFKJaCzHZ*0Dn?C3GI7Wh6u5>$?1!c_YO zIp??Yqmzg8;agnpUP(x#2M_1$cvvF^6^hW>1&%j3iQX-HOtjMPg-`TQE6`l5}iK$zqwpBY8n zm1GM!Caw2D@TZ#uDwFvdRhZ*;emOH2_`jKw@Bwis1tsjutiB7F=w1iys~?oQ*}PbY z&b9Z)+_2uBsO_MTlw_jK%pOiw!NzO@U!1QrYQ15ZPL(YEY=5)8O_c;?UK^_NhVE5- zKc^-H{Mb*F$mBcZDk7h~HPCO^8SQ0Xg6x=!mRH$Mc51EGO06mbt1p}co-*4biLz{Q ziRohV`VTfr9Gzg=4q*+95qi=GJ)g2mRI#Z>@u=f3gR2y?s}gf#P#uhWB$x&dQM68#vBH2MZvXSXTk1ZwC>`&>CVb%3u&BkXAJZSq z1t1QQU^dkQ$aAg_<;i+?s3hAm86vqkFBC(#9ts!igMrRF59zwBnU-a@Ft3`}=n;g> zBsx{RX3cK@uyqyS`OzA;?yjomAM{M5O#~GYpF#Z4i;|dMy}j#)|WW;=g*?IukDP+ny?oKqegVU~tN;k?cYGRNxDRb;1{E@;>N#sj73hBDQ;h2bO z_dT4Bo*KKNEN*l`Q<-Uetj}C48BA(+y>%I}4ymRyadVDxSUoJeF^Z?e(nhq+@7?`3 zy{4=&|2lfG$sE0@Sb1UmzClmt-hoah&)y!>3dSntfyi&yy0dQ9br&!yVb7#UOrrFo zi#WRZrAm14oQ@xC#RH^zN&Y-;LEcH>fVb-kg!_CbEl9Ac5mku4fy=cqSAYB+3QlE@ z_GlOna5?TOhRh(;dTv)m-3cn|WfJmSEo4R(%@D%K-S8mZgBEk`gr_<6kuPk)ZBz=1 zby+NZ>k;h{tc4ZE-<*rnjt=tvF5|ulR(S(c4vTFlE)2dk(vA~hdC^AO3T;3Ui*hU z3x$tz{j{~E4fmU`N0`f@L)1O>)DOi-V-K6*0zS-&hykGt9)wO(E!A!V%1Ug<)M% z(KTAPn02fRn!oa*Qag3)Q#u*bdPCVYHmmT@@#7^#>=M1rfSPsi4+EhA&FB_?Lw)v; zkQGd-8|%j1^^t;EWn0I(^k~(6JLfPoiJB&_LzZDIEBJBQ(zn(+=Op%Cf$}BI zH)pLGg=Cw%f0D!8_h;=IERSH&r_Z5%@;Y$^Sra4nXyYdrshCR6F-`mma7>z2auwIe zMEWhyfLLw#n>h8JkV1>5d6UbwVtK|UzGUS&pA;Gbk#ti&_y^<-zl2I7L+eb3Cm`E~ zcH|x?oO5t8lZ@*pSJEq2qdVy_HeAiXKGrksS5b1JgmMMWrmj3f+*MJvSCNQ>3t8Pz zv>5ISu@^aA6yEYS7eC-6htHR#D4yi{j~$M5FtroTy$7?1;sI5j2cmXef>2>H+DC1WwGrR#97ON zF$Kk#Gj^0JLBt;mP=46{>#H$4Bn~8}W*Z#y*q9nh2hp@(S^SsU&w!wT-1gs<{eN83oy0!|*LV{zI+O4q=+FX<F1d_kynD`HkbGct#Yo{F z$SJJbdzcZ!mt-m^LR#mcIiKPy*Hd@whR<}{S7K4j#Bs@Z<<-?6`>p38U5)whgu7f$ zQ9i|-v&CMVoP%)O(_xX1z3o|IkkVUMtS4TOT0cUl#FML!BE+e^lb_RH@_fY0F(Af= zQ!u}>ZE&BYx{Uj7Oa&z{g>vX!x5eWf_rR(FV<0Q;kavtIw{$J1$~S6PhQ5S^pmj^h zxrGLxA~I|5QY8u?!*pyxOB-)^Lu(92-Sn)sjZ|HBk9?lm0zjE3@&G4yd)irP+8EiT z%GB6`*4e=fSML2bW3KSqZgKVggkJgR9HYV3sp0a(s{iKOo9%r@o26xs(*o>AY#Klf zE}PR@WAzhBUaAWC@St^3B1Cn@0+NUqh-q4vi#v#X@sC!4#cb*<_Gbh46NeN)PwLwI zHxO43$Sk>aoMVU59FH;1k?x}1GNaYvWqgiB|cWz|%Jnf^kg z)fMv#n%dA}5hg&#qyxG?MM8oTflNB_L`f)78X<64M|GE+79Mbe5oo>A znvDFlift!29X0Xzi#P#s1y05=h=pfpouczY)0MDwoJxsoTs>HGC$k|#*c#*f_&x2- zy`~MhsC2?%F@S?+4FiyTwOJ9l+9GNGD3KP5(E({mZ!XTK7Od%!ci2&k7qgTKOyS}X zNt$uqi*q0S_>^95i=szEdg|j&UF2H5kl~tq3Z1GMu>3c@o=rzBTgkW!!tES-ZDRs$T}G&- z*D9jZrgh;SkmyA z=oh0cvErwRqmhLtqnb9y!uxroEeX5^>{Td^*jvpYqi*3l31@w?b*y=!hlZ2j#x4&g zH3O(Usp;^kCdB5(-(BFuH1<||M76Ysp$R6`5CczMJTI3;|33RGI%_m7q68~Mk{>Oi z%4RtuAd#DG4@Ieamk zaFL>(^~a6;aC>Q+^4OSv0l1*k+v-K+2izH?$Fz7! z_dFmB%_6-&t}5dN$7$+>+)-jYgQ-EIeO-K6NfkhofhYI^=xzKy z?&4mWDN#?!2+w7(=Y4tcc#9X7oc@pHNr(rn|J3QHI$h9N|S4@zt*J>75DMnQMXfrIx7JERD0vmBqfu~s>0x8DSjF~C1O!N z(;Nv(FaP?F;Gh|A($p7MgJg=|TSnjnB`9)2aaKQPo5@ z?hUktGB}q2vMA^Tm_HGlrkscb{nkeh%Sfi^&pAnb){THPYKLS9Gds8*-_LVx4GTNO zX0&-YCNyLY>LLzt4{R6i-IunlB*+y^uRoL!Jzf%~?uYY3o9zbS8{vA1!i=Y6mC&*_U=!&zh;vOC>4>~~@j!4@dLJD%_o{B&^=3H|y7&(~Gl11Tz5Y0M)}2Y}{AIR+$GcwD0x^P;7oa!S znuuPef#!n66SfL&5Gc_2sr`&pgptR5qWu^C3&+ykBW=&3Rm>FY5H*Yx=|%p9gP!it zEJRqP&5n&P%z;j>-e zgzj88-K9u8dEtZ)Z;_w_LQQp=MQ$j~)>}xqnmast0bS_X;h~dJsDC3mXz}Hxlb5O; zLNiuW6{Rk)Ssn40e{#|OAHDnkLOiUD|4qLo6Eh?Ge|1VH^8aYK}8x-YW1f*)Twu0D+|qSv#k7l6GeBd#t0G&DCdG&D96X>mw& zChr};A&C@iUSuWgSp2OX*a4k@GJBoOz!I!gDTD*aSojV zGavwR@UlrNfTV1{m|qO)FQYzyH+frtDw(QZ*jN19UZ8c3pKB{i8#o6$Cg-OX`z9du zjWuAv2_+~Q8(kY10A=yWUKrVH9YK9xWq4(5Pi5x1{@vtEp#Q`imgook=AT;L7#<#- zOdMGn{i2JW^bYuS(wv(U{@V|LtD~Lh`%i9AH1r(KmW%C)uiVNE;?eopBfh@Hp}E03 zIwZ6!xv8u;wwY^Q)sU}DA5jrM6LlW8Ut(}@aAqVnfD;%%_f&QIFI4URHOQCN_(v+n zRNw3<kowQZ=WQaPTNjN$%*&4N)Gwc&sfM*ErG@o}FUGGLIT_dk z&>Mrp0|3T4hXz1ZRaX{(&0XN`FI=Ia z9MF#|4Jm?~r9VIhzpzc;z_=mYkN)>B&xLR2*Kg)sZ^74pk`8GlCboBeY+0vwKYsC> z%LAjkUwvWvgfDNvbOA&W++cBjYs=a0a*I)c*R{U%va2#F-C#vbo=o?jt=)6#JSZS>Ir(z5XTkd6YLR^1)! zfzm{Ok-h`l0HzFm5!n4SzTgi48Kl1iy8ukbe~E0+02-I@hoJORegfA3rkH#YxZR|F z3GDcS`6068@8N+?l|KUe-jjYK-TK~DehBQqn*ZGp{DwaOVEFqbsNa&|i@?#jf)6rN z^Q|`oEmra?dbOu1gPYYS{JT2*tcP8zwR8@RzOn z0qqB@{#}B;Np5aUWSzU$L(^aHMQZSqZu&+Cd7ZlXw;j-@ub`bT&X0g9!z+J0XMau1 zp8szu-WJSUu3_Iy-fuBjqWwo97&;IiF7{lmje~!?|E=R{ui9lScG^KNRv*;K;YVp$ zFT&iRUJz&hNzImGl+}Gy>*e?2S;O`F*7*Mz0iA3Zh zf#VOtW-a0F&7}w=52kM{^o+vKid><|lZMl|ldnjyd`b26N7Ic1b;j2t_{KyF$#nD> z(s<;oq8722n`eRLXyR?-J$iHbF0Mo`nLQX;M2rabM>ql`CaZ{xw_cWabHG*JCPD9{ z;t6NxV_pS{{*LF1q$lf>8cl4-^snl6^>Ko@PfeO>)N&Lf1XXtN6#Hb(AaS6h5s6UV zAjhi*zo#R2U_AG|7}0Am-uNv?O81($ZQ%9e;MV9e6)fB84Ll0|(_L7eErVETnb**Z z@{t|7*M!u;(LjMTO?cFaRuI>2CYR$=EN@Q-A*8BPtv19z zVoDeKw0{<~{YQkLYLGTxvEEgrA2T!&Bx8}|0Fh>Xn#s6U0zC#1ax#{wDLlnDFe0_L zP*yaPY@CH#FfL=Yv_+bCA-}Mz?e*|M3>`TiJKDYOk|*IJ@*mR#jG>jF%ki&dt;52I zCC!qUl-`lkD+dGjtr9$9{msWPpt5SLSDcGP=eXfT?OZ!bIqtR%9mjUkA93x2B7VY2 z8S8r1BJ{jkV0I$w)qT9fg-FFId?kOlB`7^^4}-YSH;VNcVVlb(1toPJGDlDvs1>#gM1(F68v+y=WzNk#)K zv1}zMm=-&8J3q-PN%G6C2>$-!mb;uj$b@l>nf{E$I)G%IVdF-=(S&oPCUA7m(u-5c zKL&E0bvglKdRI``if)!$47yMb;e?d*=9N5Vqqq~p4qQJw-e}2VJt#ZEkCn1Os>;4L z_;Mb2qnqQ}LlJjr0!8Np`3L`HqbbD<8gBoXM`k>Jya33zj!4W};|MRQfsgZ2oIoD< zQ?zZu3@gVbx;-v|?o{o1ys6SW_|CV=m3hs*Z5U>J4Z+4&K>?oc(rC9IX#4vy^?47A zdT-d)4_?cH1_VvOxm*?FbLJ9Al=P!>*6lO*AmuEILtOQ$l;>CLC^XGNB8_Bojn`}(L z{8I{*Mfd{tPAkd8S$?i_o()qWm`|!V`}*YUO}Mc)`lb}1?c^6@k$2*HSbtg?$0_#s z75M#A*6oj{b-@;6w~N-K9BplUwB^d&?ex(;q|xKSos_ymE&ps@XGO=D>D9v}n1r!I zTkQbT!!ZZ#4!zgn$4tkO>~n-SB}0`H8TVk6bzsw!H%9wzd&q|X-fOW&et2>k`H%ib z#Iw+Yc9Fko;fjdW_fA4Xu;sjA0m~M|<>$ZAg9-X3t-p+XzBZyNwTj%Ll7_0j?U_wF z;MH#*gn1xeI;T+~eRjCe;Fiv1koQ(`69ON6JpshuEKxeq*(&)q#&85h7pwAkrBzfp zWnwvY>Xa7FCvnl7YUtJ~s*;$3`OxE( zTOi<7iaFKVxb|(scA(`gk^3)e&qzxYX|pb?s!J&vV^)57tYzu312Y0H`xTSZIAT<) zwC`e{h9@$FF0DOF@3cZ&_bKM7P|qBRTJiUlfG z8FX8wFj*U0>iW(0m1~MW*=Mi%yxk zyp(pKNw=*t-qPVPmJKBX?;$W={d>PNzh)jgfnDzn^hqc#oP-+E zG(#{+;-$_KzQylPcn}ttO$x|xRz|4$%`wpZg7+24THujcEf8T;`)JD-)wsdd4uzF^ z%(fC{;QR8l=UwjJbp=DB1HRn_v=+`ZD91aXdG1mAC>Cg>&GFb9O;;mgQw9 zM91i9Bjex`C!O%d{I3f3eCb~ktxVtjWQ~}q@69)NvfpRhrYgm=b00`*4HaYh9S0^L z^x53+wiSu}WXm8%)}m%01|H$p-%L<8y{JFj z0T0Gn&7!eJ7CPAd`PYC$faKyNz3@?Z`#Bfv>6P%&Gzv|DDALEh42W) z1?K4~0v>QX36wm>pd#CZZBXhgniVN>*r1yop6yl(;@a0Q+AZ{4C1i8){4-JB6O9V5 zpsUO#S>U%sK@aK-t-4WIznC50V<6EFTkFUoy>?{$mU*9Ex`G$fv+OS`FW z7hzv&Q)qlYHG56y_!m#$Z$-IIg!A~hXd|`y=9uPKEMp=C^hacn3sKgaNxqYIvHMQ> zoMkH}lKZ!*kPsxP+g+T)C*r{7pEj9>ETo=1xx>pjk1J9YF(BDapozvut&pS!BXa)~ zItN*B$=b&dzy1yFfknJk*Fz}EA``3UY-`Q#I$#zjajn3aSw z*8?{t$YfCCqG@1QFNbfr>zPIoaej9<{c@9H-_#gd+A01N(`7X7VJo-;hlq42;?T88MWmexK8$LH)=)E!D4sP3|z}_yL&V=Ge;+k*4rms`7+ZHe| zS&14adk4EC!MoGmjp9oP75pRj5(U2q?0gZ@J>olbT#q%gy=Pz~+X>ebBe2-nyL>Ga zx{!=tva}S#V4*?p(X6)4Fnc5c{RpVnwJ#SIL14ZY5iN zmaj5o%j!ZFD)X;=v;H! zWU?RwbzsMHcpj=JT#VV9BO`Yg$flDMI^W=Rpkw9@vlxd!|EU@YH3sD7K5UNkTvm^fR;96A+s408w(1Rm2YQUuu-G)1=Pi$}|yJB=Rxw=c<*TXJ(m}WDl zt0GXJ_q;+4)7Ol_V26=?I>~JlPKM_K3uC0wBx>1$@%i5VuU{S3QklfTjttjTuF{XB z@H|CmXQ}xeHN)l9-DHEmg6JVB;1ntOXHJ0se=v4VF`|S`0v+3)JGO1xwr$(CZQHhO z+cS4;+cSIrhuvh8eb|>ub^7b{TcUceDfE&ta ztR-+!>}F-O5PYWdTFHR=%}lVY50*SOU*VIKHRPQOs8W*tEK3&`jeCOz2-i~f?=AA<+{OA7W6ksXKoUbwh5K74uQ!qkiiEpjakaGS}qaRW+a=8dpBIIy+&*fq{n@?Yx)zSnyL zXx~JwN2C32EgH6;PF`T<4>YlwfXB3(BzB<=%^U*0=?nS7myNOE5zvWPsM^Nx&^OaS zl|ML|NxF3CzogBi4yCP%Z3`X71Cj$ua7?T+;3tg;93gg;%y@7ij{6K>eYTh~1`6{p z*%5x~eHfB7<8}-lN*oX`6G~l!JJ)`sGsK1oVQ8bqodt`MToE!gwD@hxRFNsZhP~!7 z8%7Eu+%xOSc~=gTFc{u?pvL}dv{Z-m3!~*b1|%mJ`~_mjz$Q+S*?ROnw;uiv1jCaM z;^k&iBIQ(juBo+6n6%5~1LC%oS3GfTGTR^NAlJ^ll-Gu)j@bAo=Hby0YZLG4olMU{ zj2BIkcX5K98Pzbh2S|)*09(rKMt9tgHJ2rij9iO6G zry2GRP@d>BUdCscB#&YtO&72SY{bF?(}9R2lqobZ*s>9+?$}9jZ?vl=v@qvbZS)b+ zxHD;98FYBRCX1*&x(r!2p+(dM3w?+k1`C?Q z9RYnC8A%K_q5(L9$b<^#(TVud@4r%Iw_c~?yTxF=Nz!@9rvAJZCqA&RU=XmhMlAGp zdOV$y9J)AV<=q}Vy)3@j-T1J`;YY@VZ$~&6BiUHod7`+6;q&G`d_76#M^<@!;*d8RFuHv;o;mAZn1C=r>hBOS$_M|0p{bfj6Q9SZw6v87Ve(o{+h*s z5$^uzQH~aPF6DaN(?<8NCwFnhsbFl=I+SzOdBUG{^d=)2yirth&)0)D^a-qtE0fS_ z3#8r2f)5mcfvMXwhUuse!)!JxGg7`H}m#je2y%n;K?k`I zfpu^WEZ!ixp-wQMx!* z3qO{Lh~?^;o{l!TP#o_KhKZ1f#hh|-A%wmm*RWKs&%%z|{v_EkH4)V1hR=p69Rbx^yy9wvs#-0D7uZOY=gl}$$JmWLmV(%tg}VQ=N$a&o`?dIOS0 z#}LVi)Z>ytd9ikhBL990$>W@xbsK4Zd-R~!wUefv&cN!o3II(w<(W{-COGpe8!h+7 zN0=!|D+!w@UadCm!zjjF`{A{hdJVmxsnflGn&BPyk_t9`@k#6FFIKcu2Yr<(Wo9%! z{~#eYd;oDWSy}woju8~IznX`4|15w$QDaBRvr%z?=r(jVpEifhQz0eB(>qC?%%g6J znF$l3vv;uSm!4`-b1s=5ox>Ph-;UqT*HHeYo_g^sD#!gCc0%_uX=Ml%@$6%*^}q~| zh)GQMclZ}|&*QV=9=obAxmGNyi&zD`2V?mI1s@E&;*~qW$nL`@XzyW2U6m~{cC+Dg zs~tkcLj}Ma2QC>huzBpE*C4*n!q!i!TI^)#8N9$Qi{+(HZ!0UFs5(Isv{R6A)ggtT zdzUfnOi$!^L|Hc!xtzX>MD!=zYQJaM$-zM^wt?T{B*hZ)QG)z9HRFw}-B(*$nk;^a zpCi}Wjr+*4j?$z&65f-Wy%;@4(2}S*W&7O9R6KSp1SPuOspufJE!xH-r{dS~t)P&R z{=F(PZmV-|lu1LFqKOvpOnirn;zcVqZON;|E8Om(NSDT6&*x;`mz+P z>bfp5Y~gKwoOswtR+u~M!DIA6vCSf6;a3Cl2-I*`r1BP6;l}GdQ$L{(A05I&NGd9Z=nP{fY~*$EX@oRyxC!N8vWM??e7*Q2c^V^@|uG%cY7w zE0?Le%!nX)$YA3}{~Z$%3xeGLL`J78yE}r>(<*Szxm{|`d@BsL_W-M`&KM`woKI?} z+^q&xO){d^!vUdQqE`Q)^tNNN+qJXoT5NSPBBZH8^k0t+16(i{XK zz(alx#h3}~pa;C}Hob1pzI)rOYhy+qqxB*b*k}D9^IStmohiK2 z8ZSv9n4T}*zC{a4d?tWQ=}_6&<$|d;bfD>uWof`K6DB7 z_m421aMAiAwOWNZZUaip%C@qiIVjc4RD`rfiR|6M$!=eJ=tQB|Q zeyvjLZ03bTlFC{fVUIoKSC&ktL$rwkaU&{oWSAi!G16T;vNvYkS$Mhcl-@`omFR* z0HRkv?5%&Yr(1e+G;p(IHEY;_<@asc_+=sYPfv996Vo`C9?9+Q#JGj0p}ktI~YX6b9>ejk%Vn^$RnBEpbc7%nbnNsH%L%_DkX<6Hfj_OdGG0k z`kYCSQUy?4W&<8zflt8`bF7E-m1+Zt3^x9li=GJ;kuceXk=$it>4)QCARe0gijE1o z!|LCUC|B4(dLMCMjTeF%nNaec)sP|FXe@*5-tQFE{~?KO(PA=@#;kFFILG<9wQ0La z&^89uOk6U7>sD|7BJCBi&JjDygtUvhIk~@7kdnV-FV^R*c-vHpuDz-9vqpCIyT6*> z0Qj=N4AYtzJ@ptsOa*8Rn_bLj#V!2vy%lCD{|>q8Jcn~Zdr!rv>wp|{X%rLkEA`i| z!*%PfcgyH8W6Qxie<=m}FPLqu^F2CqV`e}}drc{j*~+y%C-66CnOu~Zd7jhXzXKB} zkP464nJ>&&VCXJ#kT?}Io)|Mu82aVQ`ouLY20K+_!g5@LkbI1t)-+H&X@0SnKl$}L zXIGCwdKP#^W>e>Fsh%3DAx-h+#_%Q%Nu zdeMpp$_T@)(m1D`D54x@jALz=Sz&?0{~#~4@$W4#^~$-8(?+6=jXzcdQVwj(>T#%j zke(}kS#7q8F6C8LrQ*1~zH{h~1h#%^jaab~9vnP>-Z}XrjCcDCI-boX43h%S;}njl znYA_fGpB&Vq<4&ff4g&&oEnx2SKjJJ$aK1+#9rx{!bL}mMDw36?$(P;r?1#PIb~w` zXl{Iua*R5vxcL+sF464}Crflqqk7((=95+DiNR=@b0ngY0hIbM88_eO~Of0w@Y zWW}wPQ8$2RCKSjRL$yO{VmA@y*nUh#Fru!i!0a3cjMA22L^)g-LCU(3V@U<+s%HOk zTxo){T(f%`hR_TetkYZ^TF*CL5RCk!LozVtX~{Z@;E1apYTCcJBY7kG}%GBiY!XQ%(MNXU+3pU|F-O0Pe@oHvxroa_`W7Ciw zdG+yo61~>;kxS{|oR4Fan5XMR!AUWju|S+jZ<0CLAJmk@Z#Y_UC@3ASRFN@Q9IwPI zm?EtU9aNJELkeehEi_vwL&p!y@uEvp1{2l->SC~1yWOlmO!xw=5`uSIgn&~9kMv`7 zDN0v^y@b`c{Z*TBPSV@2Zq&}=kFafD8?RU4g@x4s~> z@Qa?BDfRLVE4*)AEQSpz#LDo%+;(W64Fx=$A*}sQcTdSepfXwf;|r$YzWVaC5zv&) z9w$~QtNR>r;ZD2@0YSW|R}h-YVy`@DOCs|yI#oBxg9ezr>dB)^QO?!E=$@j}i zC`n=1wU-R>EAj=xwS}J%Ki2Qy%G`(5$~Md#9K9z!e1GmZoj4|HPaSN}3mHKZCOP<2 zX6hLMf?vhJEIGuZ9B4moza1FrNu{n*m?OqSo&kHG(C(L5DV*@8MfwDS)C^l%__b;%pVG++Dy#uS;ajzJ*}j8&wr2pI(NhR?(TP4vRjkk0^QjSZ!wH^kf(Nr_vzd7(_bR#u;H3SE-6nXnuU+$ZaHov_dEx3 zrxx?-v1r~Y5qDeZ9a&}1aKf8m|J({^?IbTQ1y_75qs_Mg;S$=S`)pi-5!wm-Ie6#P zsF;^^=Nc^Lp&bKxSZL#31h$G@(VTWWZw zyGZn7MT=hejJu(3H9-{q zje%MIx~Sg-(QCgZj_Hs~d623;)A2NzLMYWxAWctP{m}>o)AlJ+!C1=2;7bWJ9@w(I zvQ{iUu8TAatX!m*H7ZTE5u7GrLhAUW%K7ud0Zg`J#iuq=IDRKrD=K}zyQ1^ZsHoi> zp%{0yMen?(JdR;T(G3wk#qT@rjuu|NMW`(912gVaqB4|L!?eUY-{eC(i@!yxsXREM zNl+2FUa&`tdCTVfXK;bjzKO**$&3ANlQI_O;qU~zbyVv8QUBDKPqE;?2M|D8XY0Q<`E2}TE7smkdN6@1TibC5$cJ++d%U=6~J z{M+Jb8VF-`X5^hmsYEcf0Y_g%Oeo1-@$P(WBZMsuIhA?ojrXZV#Axkv7hw(j_=_(> zaBsaSgisBIsc?vUa=BfHq)1EAM1#UH*9gu8OWSZ#yhUiAn9H=y*&Hc5i1H$rmR=7{bTDSsgMwJu*DC{-#3Ulaic}jbqv73}bI@c+KR1vH0$TXMV&VWN z6IM-AMFtcl)1RW(D5{i{?Rvzot*iju$OAEiP}!W<73+_fC&3n;VuDoE`VGK5A?J?o zi$_gasA71qNVW#wv(R@gssOlKPMDEU&6O~s?H0+{HT#B%`r#rEU&r>^S2|+8^r>#o zBXH(P3yY#7`wwB+nV!lvS3KU>w2tetoyERUy{|1~ zCrM9QK?I2?K2`gNP8t(;(IbLt!eZ-+?*orgJU`Q*g(x?3oX0EJ8UAh3%*x?GvcEg! z;e+Yfd$3u)xH6)ln8)b>*N}E6!NV58wKzQXWq9NL)fA*Ybk=;3jN675$KXaj03xL# zhm9eYsD^BR5Rbm(hJxwKB5TBOlG$kE=EhRq-VFMdwBDQ0h>srWWB8dd7JoR+_05}E zEtp=CZg3#X>Ob~OIWB8&FVLIgtUg~-n7?9*3Ycf%>s!&GI5*@*5Mp^q+^jHU>ej`U zAte&J(ICUtq#Rri9r@Qy9(Lrj!r)Y&G4@p-=WEu*{Pz(bx=j+S@%<}KT!#naqH9#1 z+7(CF9=N@NP1A!;kAy{fotSv;zG@e|u7kzh`j`BqndUn1fuBL)tek)BfbNCxL~BOl z?FsFBa9S0^qHB>HVCY#bT7?3jPv7m@Bo#P&J(Mm0gD2MT5X%{VxYIIca12K>9dy_;%6ITthOn%#Yx0T$?n>`oD?&efM9NL!9eAr)Ury7k1`0}?r(MK! zkVjeZ1Sv1o%EVz8)$jLbbG%Y*(d(wjyR&#Ga0gF8+>y#B3f0W z$e54cl|-`fxn8+^N9qek?g$waX5lH;7swL-yy^a~&x6A);vYwoev)oXHwks1WZnV~ z6c10@K+|a#L!4{r7c$9!B58gU^wV$}nfkptIWXt#IXW%A#WhtT*F6aEDRoohwpDeT z&^*PD&;2oN-?v{#k|vFKA$2(hghN|SRxTMPk5myTGX(nl9_dW7Dlpy8s43oX#W1?X zvExlYl7jPm)OcMwu6K#rn;+xnzf91;?nL}qE|6xi_JxY?h!u1SJY6hKxt>qt>VhuS z8E$#QNzaxzXgfR*|81(akH=AS1~=#qC-+iz`VQH%x>NbpMK$G!Hmik=A9?_I9ve~T z&AqVIGp1?20oe@kk^X@eLf#irJwVm5_XnbYvu0S_YD$gl{! zw?Zg4(Bbwq-gZ`q=n}lcE`3Q`i$eOdE=uRs@uKB@Jf zi&Bi==xUFc);FtmsZc27JOWKBt>L*jAOFPsDFwH9An)K#G!&MNJx`iZSeioPzs5E_ zhHohb-{k7d3Av`H)8wEC(|2lB(s~%p5~LRE#%YlyV2fh!DSGPp)PS-bf_T+~ys~Mj zKP%%~3n-&m!Iq^F-n#5HgWmM-dB}8=5rsrM?-c6z%@KL292{e4&*9&+pT@%;@Meg8 zd_9Gjbb3!J0u4Ov@eIiHX`X-=rgS#UaR}382Ft z`Kk^Z{Rk`$eTGx6 zO0NqGi}&Q^0yku}`i@5JT@Y7NmI2f_jIYo1%H@>wnj>@6=PQeGz3jx;(u1Lcqm`N^ z5gx|}f`*XpHRyb1s1&`KbdIvVRt1C?=xf*kR^Z_3K>(T2dRlQ!fVDX4! zsDl!reb-0>=(T`9rwh>JiCYd9?ivZlha6`i9yX$pjy>KoQ5Ch0wxYj?OTv<^6A_d^ zpAP{W0!ym1qsv6&%)_Vtd+lU>YT{6>>~2-|sVQ;o*E_fGVIkFe!Ll$Jz7C^Y(km&u zg_N4EYE!wVCf@_Xf?Wayvh`p4a@lu`8FoJ01Wgh-I|GJ6Sv? z%EN|}71xu@4qqw=wN=YUO+L3>Y)`j(23wKodnTgYEa7$e>{d7xAA%I{c?~GK-tsz@46=jb_?ELy$RauK+s~KSX3Jj#Dm?(-+Ny&E2GxCS&UAe zsp^*9HLvvK6PoMZt7lw@z2YdbWc|jpm#1qCfm0LAf*$|IXq`vbhZS&j5t~&JCbdN*xZ8+8Ova{GOaa%#Dyvb+Cl`KSXWGv zsXF&RGcplx_iNiibb)wO%2x_xdva7Pe zJLfnP?O%6QlY{M6w8=?vFuh$98Fr(T!^s8T{gx5)wqtZUzvmEa{eDl>It@j!>SUMM zA;_vz;%29#?dx99EzEd5;@U6Tgem73a^yb-FNUW5U&OLXMVMP#v7l^n`5D?zpU^}B zTjiTFa^afrAdoGgf$Ffnb`>((6}N8Wa8(A$AnbdCTyOUT@6;gKm1=67s6nEi%O%Vs zFaH_BD1xqe?9P^(d;qC?()-h!uZ#!8A&&>m+Z@idCEdW_8vGhA_r*L(Gv2PcsA%ke zPs57!lgu5d?9(8Jr?mi6)5Jn@@HI55BcpRTN+5>;^&T_{2#VNiR2+OmC@?5QnEXN= z=@B73nub+*YZ9e;IwfUHM546@7sz{8l^WDeyeRha@l&8B^|mzF0LQM#{KuGUE_Z%H z{AKErEtPww!$JjdUfQWNk0J?etf#!G1f$z@HbHqZ4<-;OxH?d0@Xc&$24!%p1X2ty z2kkNRtsbzlJbyA^e3w?V?^T9%n7h?w<>&?v|^AvHNoD!?a84Mr3f_L+S@9 z%rQRAj3+3bjngI?Z3EK=51iQ(GBjLm{Tw&P-dnC`qxdw)slZSnmn2tnreGrG*Pmin zab}&pW5K#i3_-fGjPJ^x&ve+`^KY(hOBs*|_vQF%^ox*T)<6slAFZSaNol80R#U#1 zlj;3Q1sNi5%Y>*fIZ^c-yb>>n-yR5_STfKnTXlW+GkKtHy`-aflNIGb4UiHV8CJ06={5UhT zfDUYELD}zm-|d3FW&P^?&n`M6uGoEd`@T4vCRB(0vsQza`>#@KMFwu9^&ZwoZ$d^q zLn`s<1swbXV0j>%!0j#s9A=|9z+*=cdqQ*HBv$-NYXS!G<<~ec^G`1~AsvaEjGP4n zRHg8vAo$S1D_%J=LSCmXAX=SAIGOefKP{PQm3| z(Z#t;nKw_I5w})t_tHD+l=8gYYkGNkiow&9*mv8OMG#t6<4b05_3Ksdw&B|J@xQ@e zz?hDUp@X&BG;D|}@QGIf!h4hEqYJ4@(B1(xYO<*y8Soq4F z;A@s+Hyb5?|McnM@KZV#-^T59sU4-ntoDB-sDEpUH+ZG&o-mfflUQ0RhF5;CjN8Ar zn-K;$RbNQ}->d@=GH%yQ4{g-prqa4$-rOJ8mhoqO`rk#viwQMN-)=oiF9aG#C~jM> zvEnnO%?)`ux$Qlm#MW$-wIbY>x7Fj$w7_q_7Kp4dt8MDt^8j8^WNGi7366Def&@GF zOmrULWacPKj(lsSC~F|YNpRX*E0;**hbK{{7O`uLJbZuMrrCfE+c{^?;N}8jha9Qj zUrcHcIKh>SROnTJ=<@`05#VXof2&?;&SB97KC1lfFtyiY%g|Z+D8bP<)X<&BJbH!t z6T#89!@VOy2r_l%>7(0Y$ZH@c@WVT{IhCBFEs!^8gJn2`V5~G3i;BxC%oft5L-#d8 z3Igc*Vmwsn8+VPFY7OI)MxjJDnC%PzRfYE&RCqN4__GqX>TI>c-)|81nxHAtkWPuV zdiOw9p+${3M$@f2Yfw<7%b%rf1ZTv{LK5Nn{HQIA=ltS}m7SHWoKpR5?zf~u>&0lG@h-V5EJJwu1@#>O1MRF2i2CB@1-YI;LaBc&FwN-F%ZPmX zyxznrAQHJ=+#-j89A!jTU==7n@qL>yJCx^f%{ zF)DsYT_nNEL+Os-+KgEE2f+YaDIf~`oE-tnCxkqdZnr*AIju7fXi_5Rex>13K2H}4 z_B*|#it3L~I;FCA{e>?{Oe5`QeUGE|0shDx{UdH=eOQ-auSF-bR*jE3k&B0g{rS)f zdElt}G51JOr&OW6;cqyBF<2pE!d?mA5|2e*>G?MFjc4JQ3m+HOSoFriHIilNvai#{ znY_vnWUDmO=S)B;4Ece@mhTEwXyi$IPU`U#wF`x66oj&s$Ku8a+$?_@1)Lvzo8Zo= zpa$AUacOg3`D?MM(ZEU|?kS)2%2U?t2F<#UI{sx24U*6^g)z%NxwD$ia%w)8JqBMw zDy6cP<33em5Wl(W`*~)%w}Hk;ROQfHhNYPs`tj=_`12u&Sj}L(%1{Jx>vMK}IiV@u zHGEOxBiZTnuyBc#UDFh>5lJ$w>Y^6@8k#fD5^Zuy9pgU|I&{n(S3=y|$c1H?kh_;h z*ClhqYw*vJ%PzWa63<(O<{{~1TULmxzwd@Tm+F1d-;p6t2g@dn48NG@RDwL}Y_^We zvFIqw3nzRI$@&-b<2t>F()N80u^VJXv?uE79@E1kJc$+P=zG>fm3V3l3JypDht*{d zW36K&Y$XCT?Kt|B-)Nk#{wMWW{G{X@3xFW+5HhTz`mr53d`)>cUyACYGkB{FS*YE3^4VQ0ZJTdGC@ zlVZaSg9GyE;RzQy4w`-(%3^JS4knMk?D~(eKj}sNjpHY0BGy=ueDh&ZnuGh0Nh+km z%gmADiUkqgy&dq*T4U(@pMez0h0}RyUh!$z(MU8>{Rhd^u$g0`E9jAX}^SaD2}uY!zpY3R)}C_*m#6?Q8OMZW-0x3LcTwWdY>0&RQ!m425Y zFQ6tD2#;7U{2@3f`K=~m)%|OI>f(D{Mbgh%LQpNQ?M-f~>6P?uMk;|(~CgmswM)PS<29@pGAPX|=wxL}X z=Q$8nW9UteiPHj){HU4TQtZO+Ac)P8@;T@1iWxH$XeSUuLui4NWUrtQ8o!zlYC0O0 z6TFaQ=fj-X^qUz_aoirzTfAOrrAqIc^bE#nL@D%iE2Dsg%pMI|i^l)boFHC3>?n4g#A1zkbRxUJvA%8yOV_jR+tKnPzpp1X4`qnN)%!i z%8~=wj^=Eh+bSddRIgG6qge?=P>(wQU2T-|LC1|ytiAyT{;5{LdY?KC*L?v0|0rUk` ztWZ@b=}%Z3`U<`;$IUoji4MbTAmso(cYplB&4{5Sx4`IzJ3gK4{xG-wrTGRcuKB`0 zfc*}d1;=pIlt%F004)`6ZJ|N<;Xe4EfA6<025l85eW)+KOkYPt0)iz0yQ!w|O%sOxhcpYxi7#M3eJ|=k7xY>5cC1I&`%$i!zoj=r=iQ8Y zd>k+;@;)XldoXfO3P_#ie*G+NCI@+b%O;d}hdM!MsGNK=*SS7Z;?Z5X0$W&i{-fkH zuw_9;N!%~Z`liT=k-2Fe{=OtfJ|=b12v|NPKAN9ZogT%}&f+(U29ccSF2x!&XKqgv zdL<@9%Y;!xMPscQOXk4BCp-wQz1!m_e{<)g0007VH!rz#b-N(sd;Qv+ki5o!%_5wVxVm zK`S(`s}s!*9{ZT)9XTKQ_!JuhqX5*u{!KCAu@m)jw#u;bw%cVAv88BJ8!VVTSz=XelW#a)+-79y5^$kWVD1zshiLEDl+UYqZ4U!9cxnOWY{*=&c4@4=N&!2Vhx$;;2 zKJ=#D*7fxO@z2@8Y|kwcLs=EbG2S~7EI!5MUr;x3Mi6@&4*5(s5mQf)$=TBT$kT62 z1*fTbR23}n%JuQXCjg#Vc+FB1`pfg`Mvn%p>DK5|`YrK9 z1a8uakmg-Oj9oE3k5ex0uj(d|b&Xn2n)2VLP`bX%8tu1gCj5IIPd!ygUzN%QmzKj$ znW~CzD3)o1LGH{u4A7!J?$&Ze{H(%0VsH`O_rO}Ci}HWw)C@uj@M}85=%7%&h7dYu z`pj^VPIw2Z?W_H4qQf1zW0}vAov==rj3@GbT`2n_S?jO;hZUUq1_vfghd9^W_d(Fl zH~n{^bE3Gx^hBwb%;ch_fwH7$0w#%*@?@E|b}pQ@Yjr>@K%}B1)Kb={jjEza5U7ZC zoUTiDtZ2+fLqUpI1{{S24V9ReKEr-%dxWfX?GWJ7?i+{gV}#Css|ge6Pn;VMn%sw% zn7qg|X|_+CF)(hr>}T~a#LiVA06#?woNUNN(bo@^5||Ef=#Fu{`Y>)tHI?JD^z`G~ z=N&EmFL+3{e@wdQ2MaH-2oPKLcqXWuV57L2&c-OT+z8G`EU}%fkr!{9q0N6Nn1og! zV2G;df;$^CDbYyF^?}>7U-P-&g(3V(>Mw5+#+?)oRr#A}eb*zi?Ab@QachuD2`A^K z%J-rZNeYiD{dIa*dw8?~n9rT{**D}DNZ(1kD+;F31qG2V;?ask(*;4z607}{;{_QpnM%KPwlc`8L)3LYf^jP)+ z?PwL|4YL~kfPQE1=|EGP)8k^PgOfdEhsJhacZQh} z#Sx_5yYST#S>SHo~twk=9UWc2guHG5E21!-nGPC*zffmNe$ns`0QN{PUW2TA~fm<@v5t%f&Rb?Uf0k+_cCxSIIk_w zwe;ZLbGs5Qgi^DB(RW_rdU14sbMzca!-&1?Zmq37`I70ZryUPxpX|r{`%SihCC7|* z&c#Rs#r3^{{7;dUrxm#No?5SAHky$@!(v4J^Cy3(6htocBABkaZQ{h#>|XgX^2x%4 zio8=2HM&bk8Dp5g@`OFQfFU5HpM?pUyrjjjVyo}q`6DfgMHY(m+I7XYYghv64WbmJ6fol=*9p@* zw(5ecy=9e(-S>3}6Fz1Y6k@YYf1@`x>>^zDJ|v#z)UntuNHSC?o;G;9{2A8G_{q%fH8#p(S}*!LN}Tx9xG3@5L05ryQ*g`%JF} z+myrf4|~7_uaISa{bgZNKiEF%qUq!Dlz>k-dTF5TXl<8skm9zS-G!z|LHqn(TC30i%GzG7C8QZ8)`a6PC}DCb zRR!uu!Rsq>-Tx;w=^q9O-_Fnyiktht!AK1FjP&&XgGu^FO=4zX=J@ZM|BIT$!oGqU6d6@}EmzVZnM8*_$F4s&cQ^;tu0P&_4G_`AM0m)c!0^H$^fLav~Zh!X}};g0dQ!e zp{xKJLS#<)&ttKpp{f8TT1L?MNuR&P`9~~nj*W+=`t~j^C2Y;E#ceM1hh>GJ?V9Wv zz{&ox{NU*Mkb8B7fR3T7{lCki@M2){3~lybYtfB06-iYEzzBB?`X&Z2%?@Acht@_w z&H&!l@ban2fa6<$Hb1D;k97c={e5!a{larkyUxG5-)e-=S$*hOf3UVRw=g%`wbs)C zrD>}D0X!HmJ;~U}H2n)=CiDVARbyN6E@5?GXsTgic!7RaZ6Oell|e9klizNEaAI(% zud=bvacHW4C=>VVnDI`jEsY4Rt!!YM9UOx{rSiffOL3Bfq%Lj3932(lO^D`$xwo1}4X005*aBZAVXF{A>yiY{9?0 z63^@Q<0!j%uC1>DO7TJfdT68r@cj0;abR`){{f=R^4m`N$bQoH($fJ*(MDwfi1IT+ zV7K$G@P_!8{O-d*v8lHKHly+2jDhHXo*#GRI`K%E8d@40f02J)X_z3aA}gmVm%hqQ zerKT|H#z~iGt>c{r>&y_NJZh`0LI3^Z+~Zs^v&<>aDLS(EsQLo->BB~Jo(@*_%d~V zY=9^I*dS5&{E{X%eB03>^1qB+aYR`~599QtfAeU5UlV`*WPhoqe!Dh)>xdc5sH*ya z$$xR~f06agZ48coZsXxUIk|kA1FNsagx0@y4b&W}!C z^qE=glbh~?F)P&DGqV1snf8{IERH8G_S8d=tdNmwgk+0tAiY9RSgX|D>^F z0Kyphg+un^|AeIj!XWvDgZAUUhw;87y$j)ePW(H-=ScZg5JxTPcSaQTfM*CwU;ghh z+wzyBHZD8V@2m){i0?@u=-w~lnP_TE%k-PSDf)1+}E7(6Wq6$ z={M=?Fnwm{dYVsngAWnU2<^8Yz9jWus8IbEYF7R3iWD$^5-tvN4C? z?&F+y%_sTpPKbg16M(0P{TqNsmHjW9%>I{6YX2wG{>6U`V{G%=3uAokyZ5uUy1LrC z+rR9?%Yv8t4g3882LkB?jM-O3vx)Ht>|F(S;a-J0=vcg#dl1wu=CPz-l0mx|V22H# zy|5!AH}la-p+(m^H$z(b+$140{!Q;`a6ar<<6l3U^^_AMcQqC@M`?TWh3CvWd-s>? z4&Me!EXySn?$2PnMbKq|p{iHg|pXT)qo7xCG3ETrNPt-uIVwhz-bbF(>T!=(16 zZE3kF@p(ZGk4J$z^Hb&IsZU^+?>0r@=!P1|Vp6FW) zm`b6^=x@ez@$e4ZDjHZE=m{V&*Z*|$owo9;WeFAy%yFJ0Pzt+rBA=FO9?gg2A9{%z z+;~|YVl#fa|D@DC1*J>7Q1dXDO?wh0`*g6mueiuI*S5B{+ET?b`NUnJdK%p?E^fJ( zMMTmIypO-^YtoHLT0F0QpQ z_Yi`Z&h>(S9j?8Po+lIzk;iZb3e%F9YS4$~Z zaZJFBWXj5?SxU3*NZ;W_o1^RXZq>V_PUuvV%-~XmSc7-O&IBh?S)i7WFER>rQ2i*s zUC~p~VHp!$7UGy!StZ<@ChI!+@gW2D-&aEx0I?JYBDf<7=}|S(TbZe$$o;nRV4nF2 zR4tZUoEGQHHg21?lVtDW(@3AKWGMoTBI(h#<{GZVd7O# z^wJKBC77qW(3zI z{6)gglIP_snWz}S5D8xQ1*nbv95+8a;(aNxu9_^(#w)gm$f9w0E2u$2EZsRzsG1m8 z`-Qe$#!~!))Z)_jkj*2b!v2kIYOH3yyQ3@2VulO|p<<>WQSi=Nx_LuhkJhqo)aj8$ z8x!Jw;pplEv-JfdmFAZxhQRG5qIP2pi#=R1Mm_^qH~mG*U1d^N6+N6fK_D7&xt)5# zDa?9u^Fti|wp{LY5(thfY4@u8(`3IZp#1y+6OKrTl-VtU+$b;*n{%B19JnUYA&Zjh zITnE%tTTxzR)SdyBIXWkOd+PNr@Kc||2Z?^O%jO#J>ivp69Q`?M>XFbf-Jl300{kL zMl&qcv>+Y4?Eu~r|3ZdDbI9p6jc}NC&fSoiO@Rr-ywGBEKVv zs`D2{ajDwFHLGB#k-~74RzWdvtH=D*jY_ZnK-mNc99=T85FT9wzUo}&L}7+^>$nfB z)RY4X@HP3sP!)NdrKa|YifBR#S(?U=;8qI^OF3)}#LSdgT3RNq*^l8aQ!3l+?({F^ zYa`3AP6tTJsyWdW*p1QTUXW_RN#)5$u?_>|>lCAa%^@8FnxS)e@9 z#sUeh$^^3>GuWAVj) zc72BHJ&)W`{D8_R#cw|YefnOlC@D`t05OqJl0j~dcj^LfBZ9tlXPH&Y3t2n4pW3(}_{Pdx5p&`nz84HbS z2r8)cdnio*XyJ{ZC7wx%%sL>kYd%pONUNZ~C0k}k1Q@U_K-@9n2l)%hHH3QTr5ZJL zL(SUX0B5F+K*hFL7ee)?^S^)aP4jQJ?szOXbp?auNsp~{g3y#vH)M;OI^Lz>AtET5 zv!vLU%x}$L*G%*F<)Bd8C?_p?g#0F53od(>z3ByB)-ygb0u&P&HhxqaNRT;w1+HY90oKk^Czm&G7qpxU;v^Lph_=U8LYPfH()CYM z^;i0TMlxe(U}oaocqI_#mmMqwmN;F2r#c`kgG%f1+VLz9(egeaT^1?OKQYWRAGc5s zQh=%G`_Mh3AP%{xBNG_9uYqy5co1|!L4V&y;;FTCLAXrPScL=5M^l-&nFHx4unliI zk3(*kBg)@%q~J)5)yDVq5SF4_S{ubzwQ{(WBlAm90g~&`_HKhQGL&%Zm8Ync-EHh! zJ)7%$QM8R=aHN=^tn!XE#N`~+z+I!yGJ2S`g&M|;uV(w@kS3MX(Hl#je#%~3G|Nd; zezI`kNHJ5zoEJ0lwb=OIga{s00&03PH7nXxn3s|ejek}P;saO_UwOfM0ueCsPlIRjzeb>C0yr2oz;hJk7aVIwXyCN?6^ID z=IKE7V;r@t*8*v#bgoYHlWb_$N>{0no9ek?>E_~whHfL@|69PCEFC-h0MZl@*rgZ{ zV?>KYCbm_q$#=;AGHZ@(6>V~{tNkowJP@K)-7uL@>A?JAK63{?M&9Xdn$cPyVu;2K zy2}%*V&x-dKkNPr z`zO9AS`R`?Nxw%^F^cy3>QQkmH|YFv8mEaz`DUK$%kn4&KaF+u15ve6Hp&QWzZLTnmFC8 zf^bAG^PTan(pGmr>0nC)HbnEA-qIq6)-C_f?s3M|&!NjL&PhpLNUiwx4X+8Y-EKsC z5sLR3D7FLE0&~h`HI=fD6b#QrG@fkoJl6`?4ZGhX;+ynEt z5%i$RmUWVZkuzL(nFn!25^K@XhSVvgyvW9|-2I4t8ZxY`oAOo0SJCG_Li9AQ2(_PP zv4##Ty@-79ms|RwjR`tPUz?w`QN{O4C3`QS{7fz-K0aH2S-+kjQz>ta2kXtytlxnQ7I0e7#nyf#Q z5wcQzk@5Qc)RC5J#d=%WycKk!ymt61$YOUn6H)r2*AT;h~hdf|} z)#pmQI)|esa}n4rFGskzz~r3ZgBkdkdPQE=%_3Qj5Z7@q%|%rgho2w(Q4%&HW!7xoG1F9Yh^mZkB@=WjE6#n} zjX+4{=vOr0pVs=R()6uC3?|mS*B^vJ$;no=ig{hIk`v^QfLT!c61*{G=Dw$^;z1W4 z#}E;q*P#z%M~g>Jv!3ZmgnSp}+*OPmd_fQlS}%|T9L#S4WR{6pmuQT^%aN5H*xsO| zvRVE=QyW>o;l)A7=yK!#@C!x9ueiX7nB#TuG+-uu%W|vwqZ_gmugP!ndXe1R+}7?= zl6Ns=ayhe7ZXl%kJs$fWgf5wmjL zaf||TnhsefdC13I#}lK+paG{=CnF(LMr}2o<75d3$ph>X``ZIzEDFZwfFPM#~gGW&8nJziB0-LZDCEVGVdLXDK9IeC5)ex`bRnI(3N_p=qL&V-gNG^ zlLu(vnjvV+>U`@0?n-%yl7iO_oAfG&>*{!oVf3#F>+Wt&U-o11>0}aLF(dHkmdUV!1-{V*4t^h6-L_pHd^{JwH@$Dj+vyUuvVf zAa&>jR;*YkZ~g0oBO5U;A@gbYhl@OsU%{D;G3}O+8?}kJc)eH4XAjKX%@fIT6y3&y z%Y2YM2`n>IYSQJutaFc%T&qRdJ4^|aX8T}&9~%1;hK)B8wz^q5*#Tu)nBHy{0Upva zfiKI}9ELmXX?cqtA`vL*L8%y;y<<5G7jKSgBS`NYvwasyQEZ=W=#}E3US0mNlv2+b zf?=28Q}_7g-3c8(14l#P!>LRuKCwq!n{x$u=ny2(@r;?iP{GUXz;Z)+*w7wGnpKkp z+51+==Zs_XrU1_`O8h0kMraXo6V@9(6p7+(@qmJ1eQz!z7bcTZFn%XPD%Qa9YIefnEort>oulptcEIZ`YG~{n04WKL2X zlb~1}0wLneL9mw~J)s^c&PwA08j@Y9b*2$puET@P0pqx|Ll{ysC!2jLtA#0jgE0e& z9Y>kB>DE0~NREH$bB*5p#aZ0{T~u|W6^CVCF6Vjq_jQt(rudCUyX>c+z+c>lbao7| zqLX0>Vrg4*t+>GH+vdQY$8&n@I`unTzPQ9Pgnn0(Cplr(FoiFX0*)QWKr&myR9bb7 zN%N`>-gXYAB4$5GCy#XK3&flLHZlC<#c0U#VBtjiLfxp@W$;Tsmm3xv36tXM2sBe< zTI#DJpjna~U&dCA42247+8P&!YRnTb~&41}5};e|I*v)r|L3o=p;pDHGo) z_sBe{2lUn;S&JP#4aS)|^I16575k|h)JGB%NHx0B&q%6(vPX7Y7tU{FfNm-vKBJLp zrCRpbb<)S*G~jU>gppWmFbl;vHa^8|df()9Eiw|`nXOJA(P7cjq&WuExr3fUEZiNm zaO&DT9}>ETV*Bq=Ldu~L&e&3iIaH|Zg%sDUnMz&unzXKvnpni(eR+wanYn#ui3V>2 zl`zT|WN4LO_<4hF$u19nn%037nu;&u`RXSdOF`bUipU?PGV|WLksKp!RX?ciq3j37 zaX<_0_8!3wopf@EV9D$koV#jf+dAhw9BybYc{m0vyAA6!d_OEMNtJGQa4W_rH{}60 zE*v*$11gkWQw;G$S+`q3iINA#C$Z0pXQPbo2T3}ojl1QSldFZKx_nrs*aI?44?@4< z^>b$U^P_82`fXKUBS>Hl$cq1c;Cc$^J0@!Yn(=%)9m;sr6RYE2O*GLrjOTn1MZyz% zrIOS0skRk7l1h?qjNW-@9xO()#P{KxvUv;1bW37clZjFD z$<99`?htAGxGaZWQm8KdT9)#3bIqMWG@9p`Mqx!5)J5&|49FraX>+X(n$(}&{R59) z(?+T{`(vN^Vrpg{k0=AQ7`;e5x_7wJ1Pko1uS-bbBdInUHx=w8fms`9K$pfZk%= zo)*lJuh2Tjki!mQP6=I8bxzVwlC_!0AXE1U#ZH;{woWtlrnf^4wd;|+6SusJ564@$ zBRAp+(@J_)Gbe!!^7YhSiA~s;jc&zw$0FPOAq)-V)K_Q0m)~?~J}yXFCz0IOfU{ri zY^L?*WOG5sBO}mT>Qj{2E#COJmKO$wyw`mmhNH{PNHdlm|(E{AdQ(Q8Dt`f;5ZBu|$W2vE;>IPBu)|CBmvjlOEU&QHF8$68g(g5QU76 z_J;9N>WZcix}txn3M&4};-i6ZuZli2JY~mAnv;e)kERj@4!YQu@JYO2&yvAfNiML) zC+-eXG$t`70w5mWfkP3&dAPU_Z|{#27}0pz48*2aCvt`s5n8gm)vh#_8+2&?W|GoN z;JAvmj&+1G>FDVW@c)@_ei%_vnSpexPXz}Afm%(eOb?l8q6TTL-_zC|AB-JA>Q1}& zkq_Sc5a>^?Y!L8@b=bk*Is$l%00ur=GxCke(D0Hs6_M3YDZGc-Q)tB^5$(zi!j+Z% z%qcG=gTA-U{}TKPy5@L5op_24zl3*a+o(2zA!Z-@x?(Oy;9H%-h%~F9jd>B|$^sNd zX|>y%>Eakx6f-{lC5aC?s%P>gb^N|-PP?q#5HL9fU|hwMkM(S$lO!6vA)_mEh|sq2 zkX-1*^3Q8viN6wg+pk!!f@6>%?*b*I-kYyESwMF1q1$Lf ze5Fpdi$_5}sfZG4cQzM0a@P*}U%wBog!4xE&aqTT=0Vx1Xwq3(3F6(em0LKvGXiHn{(Kr3wS0Hm z^?hSf{XRk?_dHHGa*aQ2LpR(Oywo=AgsCkqXZDSNv#-9=%;ad=`b40eE^H26?JQf1 zzVrMUpwVd4ECQbda+F58(z9$iK-X-4~<|Edw`nVuz(3JG;*7PZVHQx5WHp) zo2&KibH)IRk079GxbwuXlG4iUiBn!za zdn0ts8$Y3yyw@++;qWjMX976p4b~k;Gg$!ji((^2xFs`D)NB?KbjHz^QI)?Iqz#T* zSKgZ0!~XYZiaSv&E@RAkh>!Q{ZBEb6IgtcQj-5tiSZTPkZvDSPY8w6iyHrj_W%&0E zHzeHbjO>SO@ZnNP%UYd?1;&0a3fe+DO-n%NTZZ$zVy62_WE)b5#bF_oF>!z8Dw7j)iM$T5`RU=qk%|k^$sY{CiwLY(Vht+ z*~1ipCE7!7Wr@_$CE8xhMLYNll@X<5^1OHR9VR&Yf?v})S9@`BoFcEl4CMB;!T;LZ zi^-aCCWRrnBAG#|!^aN`JOY0+v-k{{CD9Sfd{*5GA3iRVdmEwbk6qiZVQHU4JX#uQ z)vTkn`_Y$)VYb@+*64+S>mLq!Jz#DUSM5171L+7BB)WRg4I+f?arMNbMki?+BYV%# zF8t)OB*VAuyM&_(fnc_)eSa)in#qz)s29ficZ88R)>Ad@!s9*>K6o-o`36| zWQiw1SL?kZK&HYJ?r`KjM;0crddQVl*IjXa#1rY0=OD`|%8CC(dbhQKuS}mwl`%MD z4x(6AOdgZbOGhRu$x+Z%S8WZ9S@Mj^YMQXmltUAYMR<&hxYeCb%z(k1s-}(|H5 zl`}olU|Viiu7yWLyRE*MP{87tJmD|fJE;rZl}*Pu$uGy=xHg{9*ir+S9c4^r?c2Y( z2uFqp?<_|}X^^QhmFThNw9hk6TQcccfv{N1u!z#1LUXIwY`S6OibQiyhJZCB-E#VT z6G-gTiW7km_{yLNW`v59X!oB9g@>HEMVkjZBv_! zW|!qiooqHnF3O9Sq#gXt#~qCeqlcHqIi+*C#lFM?Pw(792Z@ILAfH})T_q5Ou~r{@ zw&<`K$ONqk&`dO|EsVv89%Wr6QQpIJKP03ShD&jDV*XTMF>l~z(@!+;Pi`R_gaeO? zuWi0OYPv(sp*h-rn+N2ZDa=g^mYO(lzn1G*;hz4bP-vF{%Jyz+%tH;9ga9rOh9X?w zmBzk;)RA>!JgAQ-t*4|6VWC@YL}-_n?UwbPi$u!!qW=M}lmpB5Nb>P9LVtF!nqc{8 z7&(Pd(LAiQzNVSt#+L-C~XH=wP_WF4;dxK^hfz>%?- z3W7}O(NQG1?03@Y97~;!OCCBux&__TTHs|I&$RE^9c_YkinB8AQzZ!t0?vMK<7@Q^hMUea(OJ?&Y-fYttKbM)hJ^bh@wxWn zWcjx2>yqu_8BWjf;t2M}TCzXkICiXZRP8avZyn_J%HK*JG{~QlKQZ*7k`7+qG?dss zUz)JEb^;MPQGK?tS__yTZ?ZL6Fs6W zDSm<;^DmWtsp)}(!nyP-OGE6OXQU<4(Kv~?lzESgwJpV#Hykl+SVVg(%>)MoYI+4& zC6uKm)zJuV7^SQG{yk|{Qi`ujztpe7NW7x1f?_i17!qHP8} z7ycr}Dxp^vDja0+O?s;&(QKupSLyb1MdLCq;ikI784q}SEh2;IV=h#?qTcf!2&8CG zlq$}agA!I<-5_5ub!h{Bbvw8lt|umaotoQ)yEaXPfliy@X@LucSD!R)l})E}D=Z zwig)y3J8b`pE0l597)lK96moS)^55=?QRA3yYS`z;?|At$9?2-$LEZLeR_ec!ijJ6 zg`S(psKKJA_O}``I~(*-P|cDaU)HWa$$Dm8G(J_vqDQTHT}Cx7Q0aB=on8x9*h|eY zth6a_D^HXKC9#h~64{~rAQWv_i!d6wXZ!UZ+f0u_RN0=U)%g@^mr)Jzxc#mY(?Ilc zlROUyI4@wBuV}W7;wg}DurADq_^l?E0yL-^v^K2+`s4D#BZvq1yAu=-G-pQKk3fEr zRa>{e|bEx$*mQOkOctJ9R7d8L^M-%$^UH#|q5w%!kr&&;>i2=k(0k zlG_h01ON?)x`#y>OXc{{@~AO<*ifZ8T0uZ-3=^yBaUMmh zo!->exTzU_fZCr-tg|myw0)+{Tqm2kbx9B$+GJW5NyH@PO5|V1ZB4}= zwZ{W5bsGsrn0rAd8|H~#oqHAkR*<2l1-=z};#yaH?#W*lk$amTGNte0q&^uFnIR1x zq>8>7W#wf$-Gfo2p@KUUJ)ZX7W8VgL~g9T^~2h8MwN@b^fI0nL>Z1tT10)? z(^p}na=tP?wyet4b|RzdN*=TAECTIt4!?#lJCYM;g%&D402EJ_5uVK+_l`7s8kF8N z2^4l>;_>qFDk++aWQl{tDzA_j%|W_>M%tEHFPcDYD_B@LNz=4ikhH^wlO*l}`w;Pd z_&0U5H~8-U4TyT5i(9Y2u4Py^F5>y8v#rkn=R77bHS)6;L>yCIz~P%! ziN7e2E;5u=c*~)mIlGGJ&Rx=#sHEa4@nz(9vw7A z&`1QJw~gUfWV&yON3O6kc?eQx`tE>4n;d!xluIq?f`yCsQ^jqFAlz;sR!XY~m)QKh zE_r&Tx0?`#f7oRpUCgPb+R;zt=LRy%+Jq?NjjF9#ujv$2bUr_8KcrbKr=P02br6>A z>grX)N#t;9Q&dob^~dCCHX9%D{|7NAVy&=?lzUrA$-o5)xRXh z)+~ZwS_6|3WJ;p1W>ND@evYdu5F;AZjG8z2vP&ySOn+?(_dw$cMHMN4vqli&GA`Tw)j3$1=6_bDiM1foor7NUzE3JsTHFd~kR}(Fr9mDhJMQ zuG@Z(JD=ixLDT@OixK%)dGo}tv95qOEcEYBzr9S_{$sJnYV;wjpsu_E`imF*kRe65+@8IV#Pam^kc!qHFe3Xcc~fU-XyMz^9Yv3dvQ!6}G9dZ;d)o}s zG<||;i)e;Nm@p)}!UfazYm6+&;WcFeLZAAN$aKV3TguF>Bn{A+7jKmn+6bfPjFI~U z|0TzVBxBrntYx%cpUn`M6k@qyd(?A8qj8iPF`~I+6!C}s1i_{Y?ZB%=AQbrxQp4DK^Cedg~A#ibpu1?vUJpP ze?{f`E%L&jDaCwjh15zU!1VGY9AP_vl`YTOQLug3xT-zkTZzTmjxef0Zx>U<)KQLF zhTx^wB8eFF-j0fAR|^Pq?(|A;#uQ}E{IQ)f zFx}GutYypD;2Bsh$mmzwxR4N|%bN>PL57buwLme$miDg}%Z387Z(vYEI-o1=`0(8z zHPk>2d!9B4MN`%~7H8(_U62u7((gv;^~Z_6aQJez;QW0y;?y{lb_p8%j_`5;DZGuS z_PE(%YS9q;+Z4B~qMwcwGB1`-3Ha9i=mecBs0q<=t1DwZ)ov=TAuxc4x|!pL5;?Gl zuDtwYh8^i@hB&z`K4e$K$ni%{)oqRQNH!z7NYL(SyRK0=UINMyOd|hTrw1S5RVEh{ zO4z!RvbDBLDz~fH>`ZNSf-!MH(S0zlSZhN?=^1|WG)m_U?m{PcEuU%1+z-zwpclav z4{xp5!hL?BotC87V5v+NI198H2`CbmQH@#4_unS27jHFJYeR9O*|tqcFp7pEogO+3 zz`Pepml2vC+LMB;A%|fNC8elQbnWQQ_qK_pyF?2m6`u)nW{;d`0!@6{dmWm z8jrRC*RYi~=o3Yi6cxPYi&2e)2-Kd9uSX zPakp)MTpZzzLdLKVbOP)!i<%3k4MjrlZb?PMFWvwU{LCc2j+|g_!7f0b_}F(1%=vn zRoGPYz1&J&B_7?JGQ!pLQ(q>gK%*@>E{bewkgBlsB);ZbGRmDp9>st0qT6&CPE&(F z$?KidV@9;htWaR{+xm!Tp}7Oh<^OX23vT+F`kKhC z&k`93ZeFY{&?Zk`w5rNEEuFBsl4?yI`p{U0^Vae5g=t9BNBA{)PtmNpAfyA940ux( zHp?6ENbzvVZRj@RLJl6dtEq|h#Ns{y8AvWVhXZzFTv^UqeS>}#Zg|R z;<$({9VqpEul1Q7PutSg8GQ$pJm&QBHiV;@hd+8? zS)i3xL6B0bn#*WMDyIPr*l02Pz2RSD3TnF7&mtcnuD<20{mWh$GUbxs@a~4_AAKYN zJ!6M6nai_`yyF`T;Ya5^buKA`94Ct7M*1??!PgI8n%z$GQ>+LL{bWih)g$`(Ud3m- z;lA&+cXK?2Onxa@;U}HGM7q_vlr0G^-urECDK)uMF}BERU38#Ynad?Icg}9J9zh#2dkukWBXu|HfUFsiYf0Vvq}r!FfGruw|1wFl_(&boE=Guyk06hst6iB z7y#?arq|x{%Gb+>tb=J`(^^LY{cZ?w>N)L3Xwa5_=FLZ#HQ&0*WG|ToWHN=`tS23jdT9 zADjCHE)UgG2G0#^)r7$oQ;Ax*gWuhvfJF@PzJ(hy_oU75v}L{T?<{v(t;qysWioVe z?uNMP!-)PR5@P)LN^yW{Wgi%j5s<6d3h&AIBC+vG$B{Geuu{gS@dHEPNv%C027^qx~&l{OX3w|1hYaRM2*YRSYe8kZ%6W47tvK0;Es8AY zm?+$!l7>aDlQR@$CKmm)&lpmvR0PlXsC-t*~_eq14_fZMe{CS&tua8$}40tzff zQFq!{l?nkZ`blAu|m*#0EkkN6cxPR;0cXK}8W2G?7C@(iqq8QKN z;ibc&j}d-#_$Lup3{{g6Z$JI^g{uJAB1VbQlu~>^ntimIm%8rbMK{P+U;jaalmq6fo8z(%5 zX8gzWe6x7IY7@*!k>u2>bnOl!;dTLc6KOHIW;1aaMq)LKC-(XyXNR%%@^ZwSX<~QG z}+RUlkj@BHGu$e8_>ck96XlY zK_3=&7X)WkJkh7nDhAu0f;n*I$R&k!=A$sbT!D*w?#~@g{_$OV*U;T|i8eR+R|qTj zb5TWrBoD(9&FPL^c$}dX?YZMk%519+VgfBR3}#GMK^F*ag9My=4aodP1eECNc}Ta( zY$>y%&N24`C^+;VO>+G{%j#%&&>DR5J&KtOflmiA%X2euA`+HHwVHzFL4;I9AN*R$ z`v#NKCmLm;mWtT-QO2SyqfVh-ulSFyaex;3wRcx}HDw!9IPU!DZK3Xi2B_AWJ8lQg zbx)v}e6}l{mHZpp=4hngY0XKy(>nCG;=O3JzGB=7IBBT7G#L;fN@|~SE^#oosBLv+ zE$&^I5{0BoH2iLQ!7^Z{MnvZ=x$bsxgd3HZ_UQN`z3jP0_Jr@4{JqEMKrDA+t}}fJ zul|QyeS^{a4RtZCoeK#zuVYb4@bWGk{YeIACFj5-DJvgF(%a?CnaIh@V<2;1ywbl4 zo*lFj*yyNqxWi{V@4i8)S^+P@62Eq&eLI-A-Ct0{@~>jupkGc_w8!7gW>XLlfb!xwmAen@64> z8;v0#(psp+;_As}Pje!=H}Tt^b2jCdC&BDU3sln?Uh4r&goaFqH;RW!lRec*K{vhzvQftH1}=_z9Cr$n-tB)EgzJliR;Scf%h ztxpQ(pT9LyS8&FfkkzsiUiRKpXl!)fJb`UDJ&_&2YdY@aW;|r#OJ|N+;lpHEu%2oM z8D#{EHmW(VeN!q*%341I0`1H{*Hq$X<#I2`yy%DUc%0@54zO6gU*vP~*!4q`hwz^c zk=}+NbV6|4o}i&!7EknN@_7=&e-?cEo0&vu$SNESGulVhbR9dfaW~debXB#R?h1NrA@F3bIuuB~?yoC{D2gU_3~llGW-pxmri=)8JfhK_?Yg zeuKKC^i7XLtUq((<4tLOR$L*I!4 ziy9@lATJEWhM$)#rHZYOsWx2GHX7ypBYY$_r6msPGAk$6>ohHg17Xxa3P^$Wjh-#`L|Lw6 z3vx(Z9F~ZIny5Ai0i<@~eNef#7G)V@-fa}}`y^U90w)ucsPnblb?NQo$MvKXS*Sgb zu-&7>*A_97y~}Mpx2_w>o$YJOfbODemW#QI#g$4uX#=R4=L;aELy zv(x&`2ByN~g<=uAkcDmK3qrvJf#*F@yFur*$3A^+K5jK$Yt<~wW`D1{W_M5DZyxD* zR+sh?K?bV`py|wsQEAu|VDTzRY$%`r0pHvF1o(8wNpvU|5Fbm?Q^oKB#Q6+n4Sww7 zgM_N%Tv^$ukF#>Hr!exaP9XP>!0sW#?ja-o`~dg}6rX&t4DA^FvzHtwF!D!W6hqmB z5ZYuK=~3i3mR4ciTc>`%KuHwZ}81QjjU0iJ`$br~kZ7Ie_Anig4t^hU=KtO(QfWW>iF!F7Vf!_<5 zY;?%{YjBb8L$$z70-ag|g#KJX#3&#RqT3?v96^Nk{X3@sxTGrnq0qx0@MbG~IP8Fa zxv>6eS#NdDexiSpATGbS)}TNG+1l0FJO#6@0NCZkAo&IPlQGZyjzHDf1ARC(IEeLK z?p0^1@?z9iTw!}DT7W3UEdZ)+u)iC4Kpl|8fF;^>q0CuRHEc z)p@=vfM49|V{2gG@Lz@79gZKliMc;zfUCTv0kC&BI+yhvYeIn4J{4Oi6p+B%UiZJg zmS3*pKe7isjbA;gKRW>^+t}DX#w)wuzWNm8<%K7?Fs_wO!aFkl|Hd)!**_N+|8K?? zO9Y1HnTtMUNDCJ>$i>;#SU+51lmdVke}9$&@%SBl$B&`fH>+u!f>{I^44}^|T|oN> zpnyLEw_AV|2x6JPt0=J^4JKB>R0fzfJ%p+tJAoYO*)!g=eF3JZ;D4=eSyHG@! zhxZyo0Qfd$7!P!ycB?sbec+&@U(Z58ZvZ^2c2o$*GgolmEf9adO&mg2am@0X8@*#$ zK0jouV?EabKT-A_9Zx?{h#z1Ao!`bMpgX1jg842oo4@T7eCcQUS1q2uP&Z5)90P`T zzoGZ{U%=`=4HkO&ce&@j#fOLg@G!NcGC=KR()S(nC;7V?)52eTU&8nfF9aKT z*cJGVpo<2{Bh1_KSP_I+6(<7{eKrr_uV`a`s^aP+Ws{Ddf)GwK>-hBV}|$- z1zuMKXw6aW*SE;jk_rgi(S`jO4y{)KhY(`VRXZ5ujf52|=-j2$Mt&g*7 z!}i9QSo3%cY|Gy@Y}?{y9(}{G@ofmGfU*RIgYofc%T+jwS_DfaJ&m7(kcbb@FZyk{ zV+Kz>EY6}p9e?^KRq>#-&4=B*Za>TWJUu9&& z6C^92voCClK7p|YEd0R#>7>GUgHgb^4}RRKvr~l7jXsH|81$!YnH;<{<+CAQI+4;|#3!_EmIleGGeffjo~ zJvb44SCua1vb#fKc!e>8a*I)Ew{RO0^EK~QcDsmYV;ZSDTH`6&sF$0JxQBlz*MT~o@Rn6_P1PE6gveT zX6Ie=H(4%XkWqq)QJhh)lGi{Q-}Cnh4XVJal(_)J89}jSfw=t_52sssH${yNeg_SL zGt`zegC2o=^FtMDd1|B{*DI1$hXNmFx%dV)Ak#Z@Fa8Qrn=<*qrImKPTSq5L*DqMt z#mBM(cIY;e-TkQ+uEH2p4zZpRc=_=)W@v?GkQAA-JSz0 z;J9iwv5jRu*@x(zffZjHo!wd>@b7K-1~qWrB<4kurY_4H3@zA9a;6uHq4bKjZxoKk z@l^|Y7}}&0QggPd{6VrJs=EvnuF3>qtacNIux(!-rA1(`(rJ305#m6kcZp(jaK!Ph zlE&O!uF{={2Wg{Ny>EYk%AFNCbAO#KQulzfDn{T^1=)CQd4N*O=Nh%Dwa8KNO_%qp z9d6rR%N3ZgS~5#La!=APdBs)`y-XPFBNDR4mG=|S2??sWp+msr)nuhPn; z@XfU-aqag|U<`Xw*0Ux@Cd~f6s;qT5=6y~64hSQfCY>_2KG*cb+)j?%`?#gxPyXfs zg%$q6ou168O-#_r;yM^p2%*#PNC5RSeq*YQC60@;US<3GYFGls?vbmChZ-(&)67NU zyWG%}ohxnkpowS4=jXfoDMyKU^^G2J0Fg?9w49PTEa+!renpiRwZEx2<5w+M#*ys! za0Mn+1%$lf+YZ>i)8WIvIpC61L{^5{F52`n$jE5nq$mdexRjzH+xdfI+VUl4mbx}W za$&Maq0*_T$&baLx!yZPz=VlDCM=zX9=*iAvtBelMSndGDkE4!&fIq}WYKi}jl{d- zf-!t6g5Aj~|LghHnkx1i&GtjQx~0#Vaid4n{r%b8OV*vG!>RvD1gtfUGsiq)87*Ix z#6-2W+$s)gWoapqJa9&;w@R=>bss#`!pr&qqGo{IQMm}d>O!8$tsx785Ckbo_*BKXawzVunN zk6+A(i=fxChC8$>39deKs{~;o@U?;_tW`UWtxoiYC4`T22!oJQC-dy75F;*u)Q+Q< z;S5MQX`!PIbf(r*!8yEnp?0W@n@x~DsIJRU;5vpI9XM$C9`!MC?cq^r3ho5bGm<9h z$^o9?oCFuVbZR~oev0~{e4gP-|Yr5 zeM1-Jg%#W`)15;-F7w@^P7e&ndp($QX>D2I>0G@H%)7b(C_mUiyW9-&z(D zO$*u$i|RF^>0o>9*(e(S?`bJt{y8Bfq~G1q{Wkh| z=r2W!_l$%c5nt1@DV{@4PC|Mxnn>WX)~xAdXGKZUmR!Adq{O#4FfaKlw0~g(YZ%h| zqxX!`EAL@2uZQ#Ztcw=U)ux9Vg&Q%v_l0|mpC82pTeqs#lg8CG7_TQ_>a;UX9e0z) zt`ozO>K^pwzFl^m8VxGTb8nY~HUzNLW586*TuB-R#yL-~(2J|r8utdX@WiIP= z&{o(w``vZj51<3WD1DYY2nkpMNuA-CQMQDBI_D{ECh~W2x>D_iw#ka6OIS`*%G_l0 zlQ5hNn+pS`TaR~GFIJZqE>amcR6*-mgdf+pM(hBa=u&`~pz`Wl0Iwg%x_XiHulEz}1wLhXm=-A0SWzDK-v#j|N3ASV6M zmnDuJO4}P!W%0G%=#hKQx#`TXcX(s(zPON4LD&MT5qDE*JW;~oen%cRV%l4Ni_@s? zThuQvXAQoFr82dZ1~5*H$X)11I;X0`VGG;Fr+7v2l{pcMtIy?xXLsv$QPq!YiwkET z`VNG+FM=sJqGcbp;=%J17$mDph@+8xIv^oiRA_xH&k#4^Whx?k-C;nZ1(i=RYzD}4 zZ^A#3Gr*L{IIUk7gQQ6jO=Cq@-w!Pd&J2aI)hXbqz@0%d`Y)l-xht@w-I)$~AU0cr zFtb)J*@_2JU>CtHT?lkYC~RyG}Fha9i~qd?d$ADT}${a0B( z(U=$HrL!rNP-i>GdBK=6arwCGn$`y4trx?9$&gT_x7J(<0MWa^nFH%A&sZFxaLF8D z>er!caRi5V;QEW(IBZTHezIH*}O`6t0i4VrWQtQkf zk;(rRxJ|1ovjeO%i-&0I=Ogzk?@Yq;-t@D2VznQv9f6y;ynl=-GFbMw6-rcFhle2R zW{xd_7RTF?BE$VLo*iEAG_^e>{MJgrVnu4oD+DYv2nv039ZdpX{adlG@^8ege95X% zRHPM^>qCyk$E@~>+A{WB0mAeNzkb~;QWpEoupyRhx#az91LLee#%SebpapoC8x~{9 z-fvRQNn}quKZ90 zWJ4iQeS*`IBHNyrgs&+;Gwl0n68GTIMh>8k}-~f-_a$%BeMOK9k6hOo=+lj4$w%`;5PZ>YY+{VM9CdmsP+`OdTAqGbP02flA&Jwx$=q(2+@E z@hQ|BYI}T!ukZE!HhID3zEq#hn-Vl%{WcUon3od|@^q+AGt&e8as^4Zq!YYy+apdB zWv(s>9CqKdN!fGW&L_nVO1rvnaYvn)2RoQNqjwV}a}tCHF1i$)|% z;NmLhftea1!Er&3?OdC!N4L_8l29%+gg9#!-;7rT>@MIXics}x?=IagT+~Fn*vffk ziT1gk%20-^cg?|o*!yVbc$W8Zu&}+9-am{cg%nlKec^v)N)=90!>ZOLd^ZO`+AG&w z_eroH>8{(9MW=Z55E%mS+cNX z+GtjE0M^vq>!G>R=by3JUmE#nd*k)qDTbSa1-xTGzsfcbOub+*GH#u=fA9IulJ~0_ zYj-z$DNDJv!^f8DLI!Sf!a6pONiRv{^gf2iQg_l!95dl!Seit-6yS8KkpH3Ky6}#l_2Mwpbdu| zlqoQ+;$!?*kaS4$b;|Zt`ghPS=Uiq8d4{<60qzTB4+-ohTrVs2)mE`>vCc`?loZhM z%Ck;#@fJgKP6A^Nw(gCz=G?xy=2N-O%_NJ6VUP7b>VWm#>%Y5F?eXr*H&TWrkY63c z-o-xp7obEtbnnpeeD2=8$3o*>VY#O>v&DYx8Da$If){QF_uQH3`E+CCI5qcZ{Zd5HbcU5v#Ucc;wZkNbA%n?Q!lBa4CbfYAqH|^+n*n?BKw3qvDcu#L zejZMd$2CaTYd@M8q}Qy*t2*bP*>hg1c3EM><~+15Vvyh5Q8zow!G{JQVZ5q&cXjF1 z8&vAAt8#8Sb6Tt+f3${`y;AZX;`Zx7XJ}=u8J!Gt#W$W~hVd_h(=AzfvmJX`+$i?giZX zmywJOEbAXgeYLT6n1i4*&2p)uOP9peZ z-2tDxy!Si6az*2v<)lldF6tZ4(*!4cy;4t{PoZL=y^Xr?T%?C+MrchR{|vm+VtrjA z4E^ADA&!le7t=^10rRp!OO6}sj7$FSCOh4=oFaH|qK{Yls!OCX=3kA6mF{6V-BX;W zhoN)btDFYwiv500UQ8@gB+*ggzN13p1Xyhh(N8G-5E>q{J9&;02!zQRK8hRz4HM-! zH+&@)i#NF)U%G1;oc!c?upX8a;)+`NsY!o%F++kQy@)p&2M6pseLBq3ehq9SsCfiOdb$R$sD$o`@-jKpb z5!&PhUpd4z1qH{vz}Pfge&Tj|t*-1+*0gC+kbcg|!0Z&?i*VUDwJ$r-Wba))d_$xB zt<%F50Q%8MrN6Vb;T2wCd=(<~bKJ#`hIQ=xVaQu3*-5U8KVD>B1YrDY@sSa^lr%to8Pf9VNKFm$U7 z?%sCT$4MTERVG0%ic5Ng7tvkabr4$K@Hy;W(4nudOv<}AVC}wsVy+vWZE?7=>16vz4^C^DmlteaQTspqzV+@`3d<$H*{ab{#>N@fzv#tNQ18Z4e9Tk9fhSnMM;ePnVC4t=q731a zzJtr-=%Ai?QducSp!&LVff3Asg_a=*{xxjE{~E8t7q$<6-Qj=-fEfVZ7$(#B1M@bY zYF=Fox;HngR&r;gado5T?0yTKNLAN{iWJ2J&C@Ld{O#6k6AY(YUdTX8JAUP+iZT#x z93T8A!L;^ACQ!IwZjlPqaah(_Ij(8s`mg2Xgv1hG z=+e-~dZtJc^~xb&y9$nnIR29Lr7W>=(0f=4HbIq z8KtbZQ*Zdz<)g&TkTQ3;$w`O6PyADES6D1mA;R(l=1(urq3pmk07S+7 z1izH8G!$l(OW)}BiF;i3iKq!tCwY=o;!sBNl(~u`czVhdf(%X|ic zo=>#vT0Jb+qM9kAw1U13Th}(OAG3s_ZGnu<>C;5|kvHs-6kxLI`6%RNVu9BV?rch7 z5dP|5uQ}SF0w|(gScy6mPaKC2cgr3<*`o)(BRN&R4N!f$Sc@1I*~Ou}lNhyiZgzXI z=ezasldE;$$mjzTHS5IKCd07pRha{t)g+rB#EGX5q*Xo4L6nz?gy_ zqF{}+_t`W&GoncZn=~?2)P$`ohab)iQ<>U9U51gU1<+j!(`7?cNuafuc50c0LG_dO z5pSPqE`aepG6*;tU?EzlI#lQ4fT;DlVG?MLxZbED4eTxWIx6~OA|j-`<+>fLP4*(c zV39F(NWySEu_fx{5?3UUovMjyUnKeSR3Jt!YX*38yZ^WC-AfkHK+SnGT$qk3Q*e#% z#=lOmrxiAVY}Sb(i64s?y@6^mnaP#qU6~KB#T7_@m3GF9K^c~Kb$UywVy#Jb(5D}^ zd7IwHcjA%}cMgBc8n>`8xc?gr^;Ef~y889P-*MPcC0~-IJ1-Ts&7XEqifio*k03GH z{&W~wYvXHv*B#$r+4WJa?P!J>WLq9n8P>hdMFJTbkOP3fBm1rm!=v~MVfFqe#{7lL zU7LMq>g43MWAPeV$3!vXL>bHWV;8ntEe|6Zr${z+kZd15m#;S|bx<2@BhP>MV}=x? zHGBEMxDD~EFQNh!ehRU6Ml{YeGW%?!1)l zR;+H$IOtTL`Ld=SLFU={~>Wn_i4|)4Wg$9VRYI#mWkc2m`*%AO@E|{4tVLGS(o(sZ zNxvgTv6`6k0XP?AiG;!5sJwIRM7gDc6x^xZR-Py`yz#2z zN9>4XW|1AR%`iz#_c@geLpPY7c$=UGh~cEMhdSyw6=HoFl#!2vJ*-FJT`A)}!`DuNRCGYh5*&2^f|T&@;=dzM9g z04Jk|S3ju zk6gTRwVYux5>#Djm#dH!dR61RsG^M#{eH;c?4Y$xhYDtLnybJcrezy5}E2JQI6zF(uS z$1oERAbcXs{2(zCz~#jj&nP}W#@hRVX7n)7&^pboJ=(31CcxqT{W~Ur!L1I4DdpHZ zcLqw_AkyeEmz;lOIB~IUEMm}x3La^*rY6`&)vuOvsewJ0bRlQGZkg1jXMrsH6K3Q2 zX=lFBW@he|o|&)BXyVu|Wsg2IG|nz`qa}%mH!|r6GLIp*U#4&!a!77DvJFPbUCJ^W4-^CwofE6RscZW z4Lp6aekrAoicf)~E3DZ$E#Y`23&Uiwwb!uQk&~V_&T8HHcVT(zI-z)*N0-K#+p=uC@4h6@XAvS>1r;lDrFDYAgt~T1Gj6?{xH>5@!fFPDY`LtCNoE`QvTFsD z_!%~SBb<*SoYab`vI`P(Pp@EY93JnqDbXVP&gGD&afG%?5IQ$VVZQe~?D*G)v7jEg zCCDAMtz~|&54pkPr7>ulQK;U+LQRU3FrMEE zebG{pMfCLS%^ySZ?ey!Nv>CtClu~@0jM&{UG`289vad9Jx0=-wws`UEdL_F>oKL4xb- zEYkCKW|Fdlf)zxGxOI?gf>pGI84(A0l_zTtdY0Z{q4BN}IJ=40VUAo@JRG2ak zQB>jl+kY;izlF|`Y-SedRe$Z1epPp~H~>z@&004aCJ6 z4}R@ea8(_HG=0_VHi^X3?9;*yTxi*VZ+8bql2(Idgb+wZv?kfnZNcn-UwbRqf`QyE zoDXJJkh$yi_Bima?1!k7D(|e4!5A|=dGv4vOdc3~Mz-_Ep`_H$`XHuNgcyy^Ev2;a zGy{h8uM;10P!_}X{;_JbH1gKW-DGrbu%n`Xv`CT{$D0i$UPU=mV|Rj#n$Q$x$rU$% z{|pJ8n4rHIm7GP#3aGj6>&Gny33|C4@b5TUUFLXGNvK(Jt;a5jggUyRCf#x8Qz8hP z6dYkoKSmtrx|@TvT49v72Q2)60uN(3{nro}$A1ffv2gy65Ewfn>wgV_v2$^;|F1(} zF5s$3H_!Cj<;V%alB;vu+rJW+89}4_;FwsU7P66%iGKw(5fV~w6XGQ-;K9HJ-4YyT zJ^W;QuXeakYw!Aa-&owZ-?$6Rjt&%AjFBLOZVIdJF@hloFerlLl~q^M!vTSSdj<*u zgP^06P!3?-ugdiqgE+nf3>YE*z~-I80~0ColOclqSqvQn!p@li@)H8;4F~Hj14D#D z1OgfU0T1bv0ZJ0oS7a2-#K;2<6XJ!^MBT6HxmJXf06S0f?*>`B;sp9UI4IcaT?D?T zM|3a4gMyfYAi^c0FGIN!oBJ<2y9-SHhZg>Rs^m@nnIR8>kJ~{|2IOcJk-O$-mJbEoi`xBKV(UpT34LjRExps4k3K z1gL{ry9a&gRD&s;-nK zmkI9t1X@Ys9ag9v>if_+fDmXvkV#31i4f=jBH(q6>;8+{{^$bc4e#jZSX>VA^ajQq ze627v08IFbs7wIFAK@kQ(M-=z;Li?2ZeUkrY#{z>Zp06siekVA&?mSUFfYh} zAgbPe|t)INXpc~GH$(y32{3hpU<_&vz)GjvzEpYyc~2H>@y$Y9XhSz~SoRBIxj z=byh@$dqtRB7Cnuz2)CL$3G*t25R31q(3*Is=V3R{$cC>qd#$sW8mkP9~c3|)f6CP zK(?IH5OqJH8N%P;>Np^wULBwAs(8S{&_ehp0mLi_y@(8or*Q=5`5;e$0Z(~QJfi|h zZ-*S;WNa3ca0QSr0pIT}c?|)5Kau&5W`K})KaV_*Hwv(O!H8dX-Z8y4P}1^0mm*l^ zkdQwM*#UJ>Ku6c`_hf?A_-4?cpKnSa;37VLEI56mu)!pXR6t8pfk57EJpHw74~1?s zkRQh+uM&DZ3hwSp{k>-a+>Zv&_KqTi{D?e3?UrrXrfZ2EbuVMsp4#>~F-TOGg|bH^ zz&Y{6*1V#v_pgV`sDoQsp3|$;&U&BJD+>JQlx;)?^wT~M2DKJ8w`kk|Bh_^`!zQ_m z9zKa&*{9w-Z$`Oyc)DFyy+EOYrEVO#IR2DNlpfl({LR0ASOcnSoY|K%pY+os%fw&3 zvk`KwCY+im&xYild$9>KY(JveLwZ#jk9}RG;Pj#zqi5#Ez4EA@_7ez)J2PyG-Sg}N zyP|sdp3_4$#zyW2p}^W3ObN0R5bc`Bg@MOi^~+cFSMdCGmOGui_pT$&VqHwLXUY%X z&vMXEN_AEz$~flz40s1}*@G`Nn3M z(6Y1bj~BNrx!yHIYimG8^yuWs&_G=@c7VQmfYG}y9vv@kF-m{sG=^p1V~oSlE>#VS ziwRY_fGLa_>&`$Jk3?`hK{!nx8AMg;;2T2}mww6?_(jKz`|vM(KEm|gvgV{F*A+BE zG$>@R)2(>k@Z0UbnAaNreODMfg%OvC5G0U|J~`Ir$4*G0xEU3wu}Fd+&e2A^EaO`B zPJk@4vT{32F7lCfo7gPq7-}#i8|1`w{O8&m_htU5;Z-h-blj-KuH^Ae_;jn2muK{u z_7v?PoXV0u27j`tk+Ii!n!U+;C$5qVeE&_|mLN5Z&E>^+Zd-1B(JX%LSZ$4bpN|Mq@nuI4Sj zQ)tg{s2)FSpIu4twbcmf(Y)U*BAq~DC#ul5;ap!HbQezwduQQTB!Ni5i@gVS9SMoP zbNjX9kr8dtciPDZB80-x*4o-_?5FA2v{@r2l8etuWv}GF-D5t=(W3Xyek}AycN3E> zqId<*mqAblOYDvGSSbx=a{mQKzZwX;6Hj3AfCrH|HkbCbr=D{KV=*0yMfl7S8AVIL z$vC-a|9U01Q`+laiQX|aT|IFqdo_x*o0)eXPUb89e3CaRkO&VA3z_?}wH2LbJDrVe z=kFXOZagXDPl;Ti*MkndY;JA(;ejb#3Ud_Pb>^L!V~rW4kKMsY9D!b)69-9;XLNsD z9f);t&Z#$I@xqw#E0?d7F2!1I&fSx%;T8D`SIqbV?sv4i)wkIF`93z};N*UQ%1G zT|pFNvuQonQD(@96WpX^bwxeGk3a+b$c}^bZbJuAR{J?b`|DCUZP{U`=|E+SbIkthazj5E5PZs zyGllNYB+WI#(_>S42|PE1GvS(lu5zhHW4R?G!$rwToPxfz{+Se%sGV*Fw?ZcV_+NPG>3*#OBG* zSt3QopI%QIC&kzxu+7Jg53&e#Yk^Sp6YRT3t5I^mUjo}N&6ALy*ldZ1tI?(G^(NUs zi@cd|2vV}^x}{xv6o!l%j0?4X@risI-i|JlXd&gsqnp248M}Y!=jxB3da8a(23@R) zlErJ8>LQ4-8vK|EUusw{okNwF4IRCGGxTW7WRID>+)0hJoh5t5o#?m=4g=N>G3#jU z2-^MPDSyOXvMKuNF}=D?Uc79+MnTxLNDz#Xz}AF!7^lOpNyJ_;1BC8VT|Sd?WRa0v zrLIT!hle_Fx9t~ndX-RXv70gUcxaCEGz;o6t%~^?9Pby&H9xOlO3a0BJsn4jm6YIr zZxS&SAmG-(;5kLL+#kV*)C4KrPFp9O=7jc$ejVG7FNj`gRMhwecSdC(9T2bOVt3+- zKt|_!Q^#}Y!!l>JgZ*3eeQN^b!b04N!c&QC{~U1HSaq|oWiRA-NpeJc7i5yoZmZZ- zCm&F?j#G{y;?}^b2%dzbrclF-9LqPk;bG^L+A2=;{pL?2*T~9SHfLX*XY&2(UsddO zU7sLv8#VVRFogOj>=FHDA9v9Y^nVHDN=z7LG8#4e=Pk?{i71nt75ybya`)ljCG{#- z*va<=1Qg;s#}$wna@ahoLG;d-!vWT6t0s2&)|E8eT_zox9kFFaS&Xe-ker)l&Whud zV?7;;<|RaM38eysyo#}LuX9RdFXdNw7DhBdYQ{2=ZTfp9E^{Qh+=Z@KqmQlJQa7wP zqad}^eWm|5r+d4z&CAK4=x|gmp_IAM_LbQx1mfP~9fIA4ajv_Y0m?^|K(xGH5gldE7xK#ZKZO3G?zR zYZ5+yl7ahvG}ooL7}dUfuAi28oSm9Zm>OY|sPOg0@3cqd7wm6&RAziu7Ct>sS96+z z&tu!x2z5nTPr_*1#RS!oX!At_lWut5%8N)sR38%$as%!J%!=V^s=inQd(AGY^@E>k z%Rq9U)no_WhC;cPIK8|QHL@#iw$n=}fET;NkQq&L;qzY`6|BX)?abtZJ5Xa2Vd_S; zhmPm+N3dXi-h#WmY~6CAguU3pwK!+?Q}8MdNc386$r2_&smvpyK>RqK6{2 zb#oaP&MaqH(Omuwd(q1gia%o;S=|(D&I07LriweBLoHlll#+~!v$`{*at(BzgLB5z z`b~?^USF3Lw7#DFuQFFRpjkiGS^|^iLDU#t;nV^!T zy(th?8h;j1k=uiuMpryGg^s`5RH)@xOBp(~hw#X*z&Lng>i_t)wTz*AtjziCgJ}W^ zEUX3$OU>^`I;CB|d3@>Ta7HFuPoM&FtW*bPl;W1VNqQQ>yspNK@a944dvIUx>+wdHUX~`)$)ZI(S-bWM!enRE$c5rY6pAs zZ!Ntd&ypy^I!r+IBz3}}rtKgs@2Xn+U>>r%?8v9CFrKcFF}EDKQHU=q7k7&W^0Q(n zhynF>|7vf4RK@(rDPm#NUCCrax7kOG)UW!0OG3WP1*TKTV`@qk<(^x=>IissSQNhw zJA82>Yu(|FoiyL_ZLH3Y_y`C+Q54bgk18imvy=H$DCdrg$;`I$$(areM{?>272YwC z%p6tcGe|hKZaeOTzD~RDs9Gyhd}U?|r}7qAR2P#uvG%Nap=pMXPh!?((hGa2Kh+4) z(L3giT^ZB<9GpfA`LH?O)^h7oA$}MOvjJF_R9YUlRK(0y=h2MIw-2B{@yiIr48~dn zKKD~OZrU2kbKXg*&UI!2o3sGArC0i2&SAwn$hHo-+a^9j!Ju((6ADQcOfvv=4_%~g{$_{`7zgn|gPC*<0DbAM65 z*#)>o71n);O%M~r^p>$avx2XSkk{{!NnnD>6WxHAndzqL!?gm?cn&k~>FY6QFJs1) zQ?sVaMO5;;hC`{nRlbQKN!O}a(vZ33)`DR+`&WobTCbnrOAxZd#y`AydCtI-EXDX#!I9OFK#$MEXE&Q&8Y z1>0?0@K$RzBN#q|lH41xhI!C=$^MSUi&*=^s!DYp%nQGDdl~vVls^bTTRw>AX9d64 z+(b-lJl_M zC%c^ra6Z10q`NgkDTQrrLxqE19EZHy92xNe64C>^pwCnzA(EYdZ%`f?xGq;HCeFND zi_&%tU1^H5kveAe^_M~}SR8N5D({T=nDE`)JNtQ0=wh9~W~Z+OC?iZpytQ1tX?=m< zGp~~33-NT@B2C_)kHn9JaS>6~$-fbwFJ{QetGT^#{UW4= zed6gzmn=sCwY_8-Wyg))o2`A;RBg3@k7LuMf-{&XUCRYM*p zOOtX(MsR__yTomnhGwNOMq-FAmQzXFqX!vcmdp@Nn`nmHaFL=WqF6P>c{o;9t#UAu zKJA0h&1aec_jSc+oY35~8?r{f0&Jby=sN^{Ue6ErBX}BQgG^ROv-7#3*=grUsvKD#&fs!$?FAueD~nyPvS1IvVT1n!}J^Hq*@wy z#RxfhOvo1{*$4QKQEXmcokB-%W<$AezGEhjeyhHDLdccHu;uf*Gzgm0NbLrAa@`ZP z%zWZLr!zdU8O7Ok^puEOxrnA5dvYqu}2YhHUll z8Ye_qMrtx_PowFRKyxI4c#0Wh@OK=*BLbeL_Q&wF8{^zuw9d3OP1H0n=B?XnjiOe& zH&3-Ms3))9(9CkA!0Nzp8pahVu&&;W``O)Z3Ty6aVtEG6;inOlM zs@`)dJ{Ft?f@)%b&>C$P!`!Ic9E8=Gy7!?EJ0It|qAP|e^IwLQ*)Umoq8oWuy2dnS z@5p9kGp_C*jgKf%t#H%roHb;U?Hf8EL#t87;1X}BbXDLmVZ0W6J~u?z;?sHw$6O!u zOh7vfB~m-=S*N9uv=iLa(~$Qqyi#He+wcwAu>KLll>Emp!Z!vxT$r0`^<n0S`Hie1d8?g_YPO^+Lve!=5!KgHs zZ2{Kq3isIZX=ryH2OjT+vgJo;22FzVe5I!?z>4ul%&D_N7AbwXPZ(3P>P|L6{t%>L z9(U*Y{~o)jiZ!fEzaLI-r9kMbdyZNB_V*h+J~w(MQ(UczSC{oE2h|KlhZfVCn4jLz zHW@h#Lg^1xan*?i(?w-{@dCU9uFHl}eAQxrFbw9k%H?kTFp!ulq{)UWp6D=!%R>AL zZ2y8LIs~?;IdAVEsprZqQ?iIuwjZTW&Ml$udL0svx^X9M)VoOG-$IlwsIGwBWGlC< zp>J36O?s{a5JcR3`7X!x;vaqQ#G}xuKpLne`;V1X8cG>vxzxfQ{f;=uWue_`st#aa zyBcy3Z!(FJrobRao8VY_-C~m z|D=?1saVS#F+q(;UxCKg5$f9kaCkpdUEFg31r8*if13=4RwB}pbUXSz{q2l);Pcl& zA!c9Tg3HkWY(@8AqU7%eM}t>1AyRP#NeQq^pd zK%AG&;hMDTdUdS+C5-%bNme>&JLp}nh0!4r6c126k8|B%RMD|y5G#JR&h1}{U0>Ke zQDRlT%$GqLu;Jq|V<;f$_UD_I08f*96i~X}Iwe;7)>dIj+X! zMX#9Lh8!q;Si!5?YV$S;2m)M8VkSNvWAF-dnH9(p6^>uf~v?9N>El7XIAGta0i1te;Y8VMF)e3)P zr}hin+|Uv~op;NYd(Owclo!(Rh!dl`sOyj{_f8)0eA?lt7B~Y@)EY-S9Lm}NTzhd2 z^N}|dug4mTk-w0Bkljg)D<4hne{mdejq$srAVlgr%@(=Qg?v!qe02=K$wK$}lg%^- z`_GaHP|+gmK^$69PsJ-`tYvX#C+5;MU6O*VrVp7UnRN%yx-tgSgL7M4-t|Vh>A2bs z3+-B4jK6pX6Q+32h6X+YG4I5i+l?ET>#9Y8d9N?dMg!of?Tk2DRsNI+dCyAFU|JOF zC-(Z-HO~3_uUPF$8RSi>(%xG36r=@e`H$mb8A+Zxq~(=l$b)3Joa1R|}v8u!30`^PSI1t{= zaKK(=?H9&%4bl~_$l6RsBO^}ui55|1D{5#sy=t=|T+j;77;NOZ?hKqwUtkkbTTiA{&6;Mnrg{dE&0eaA75U+I8a9b z%LWa-+*Dt=Cgq0a+sgv@y2P<{VSw$M09!-m^?yC)as9Vr9w#I7|8qF}tCMGDX8r%S zz5l6nU}9n6{J&0z|Ao?_1zZt#qlGTg+kryx5OHgJTQ5ilG^SI=!QI_`bq~xP0n9yY z4<96s?&Z?=`bX_XO~bX8$+w2Y7XQ$h-IYxzI5LdgHw9yOvS)O1 zWMm9d$H?UP6PKS&f*?3GhGq)$*8*s4Z5<>Vky7;Pk`Gtt1bybl@*4n^$DR+&=s|92fQUXgARn2hcY*h_8aE4&?q1%{?~2o3??EakQF*%Y41^moB52Lc&uPwXCJmH zNRzAAi$gsdI5)^nBB*NdF;L_`l~8Z=@i%iG=%+6SkU7N3PsqpSN1Pzxra*R#tn8)D zWsD7b%OyPL5Ch}O?M@gafHj=k2_it5tL2*mG;%aB_MUt>avyz!4_Z^mynEgBsj z4xQTGK&-KqrOP;SS-nfFWm_S5dO^$jUb!7HsGqT^z!@Mna(a1ndUK#TU?3Ncdc#kW zu8c6gTZQA?gBN(8uFI=SVDlR}AYVcAz83;81_}}l!oKx+@YBO5`(b|)Fmv+&s<9y~ zLpWB*b>dHyFFiQc57=IWU8E!UIU_FsK1;w^+^oO6*Uckyb7S-K>*(j~8*^mYctx4? z-1qXGzY8(3+ci+_OV%Upr7Vy+I=eX#;G-YVTS$o&_+1lpMxbG-!@>i^vS_f}W3c$6 zdil-)T=t_6kKN}FsZ!@{L5C>#g)r`#zLqY#)0_5_TmD@-`9m=H6MpYc^7cb7IWWBO zuE6$``~DNRF$Q6Jb=TU@W2u+5iy^pk?fc8-r?s5?wzfDKG9yUW=DSsWWBt?@Da3Yq zcU*RMYNT)IITiPa6xazegE}xvj`q7?%E0MKKz$n96jrst8RYA(rOTU%>5F0e!!KR4 zyO%)zrt4G2?C7z_X2w7E4gt=`p!BCkWNT$;<}t3@#0UU{$;FNBN!S(ljaT2xvhOP- z7kKT@jMFz}Xbt$h2JyIAhcq+?gx`*)adGa9KZczu42^>rCcQ(}gJ2f_{1cRjr~4yv z1Ss7JghxU5l|3SO#TDHDXT1MsJR|%oov-+TbaV#6jQJMQ1rk5}A$)%ExrvLO7I+u1 zi~HA4{uiqc>J!69!TOuwHD~p};Fgc+)Zq3Do%RQO7q;>?WZEENc(U8g#561pkPRhx|@Ht z*WOgU5_|$KV8J>-o$M2`)mQw@zP5U-K9i@S8PHOCulmvml27a4jgR zjg9K2G^8nzX=IOd-l(Fu_|EKpTOLWrI}6+f?#Dbo8`RaGxdYVjA(# z0PKfI&A!h%x)ob^ng6MQ-@aA-1E;Ljb4?Kf)~dZ!yC)&xATBk7N|8t^4^k7&W_ zxDy{|Y*W{aZ4Exg&|X|qigl_#l7LyTR&oDEO5FxUQUESxi_zA>U|Of0qP3460ae;Y zsRxb~HjM6Opq#6@{sGdi?A)6enjztleqSw9=5uEEfyB)o_D~1c&DLTO^J-fX%pEng zSx|AgG3&0Y$+o~;JtCT!BgBHx79KAU@I5{q0)3Y+m%x=g%V$w{%3aNqCb1nP{X*9o z)b>jSTvW2n*diLWHBZDBqRq`eGVChoQNh4a&UNJ!xBB)%KZJ$)J0=YG$Z1>JR1AzN zWKc)X$<|>oBM9sv`j|00s*J@MY`-LU2he)vu|Xz|qKVJ)41J*a=G9?>W*4LT3G>qB z(cMP-KDkO&5{Cb5MHCV_walu6MT&A5GsXWk!PO?pb36#Q)>I-`!Gvdyh15;HaLh@( zBxt1A<^#S)0cSPCpe_kcR5J=Ikfir#I6`eRE$l8uw3||eouN{FL?XyVgO~~nDWq7u zQfzAP5jCA=;twk_>`03HWm>i;`JHtK+%R^|a{&XTV$e%Jh@80HqYG@rjqfy_ymh@S z((fEpjWcphSbl1XRDz!bL6|tUy-IpJ0|wCwaj>F@(yj>1yJDMz7GCAnKMJB;XHVX~ zE-8gtkf?fBKd;%0twaiD(sgbl24g7Gd!dr}RSFL=*ksEr(GXEBe9+A3@?I6t5wxJ% zDq7)Ytm%Ttx={Y$K7XDz*4{U&70ka~UN3GgZN#MuYp@l@!T@*pw&L{b#bN$;6-IJ&2SU$>GuYJBXOLU5r3_#ZOG^**CvZdEThH9@=3kn7)&f zLafyG_>zJBC%peHpf|eu*DwlMj~+2;`SH89I6*C*LFeY?)3fa2-?~|I2rOLwTBgr` zjM0oJ^}mVn_<(vv3ryTo1FOLLDn8zS&`=E1v?e&+C5dA3 zc03!J-@YsSJt`DB;mn>{i+(2B3;y@3?cim-z@dxxRoUWIuVxBO|4l$C^rEDnVvLP$EWA`ryFGw8 z0sfL-9d?arv1#Wn+I!JKis>n%Q5bO?lrbO@nW=KgMOt3bW%QMFOyu^Cpfd=&QpO~^ z_Tgyp1lqa=&&L#+t3$miYuhSLA-bX66~@Ac1RS*@rxCeomi#81x5_9FKTSR=yafRP8f8LPu`yqc?%vNr>jkma_YYo1pZ1 zFzGdZYwK_B9$<(C7byxQWHA(yPX12Gwd~~bhX2kEimH}_Uu1-U-hmuUT~Yxz|7H)a zv{C)4n%g3(bi1AmHMp}!CfFF$3K8F`+UX0*mkqufs+n^>4rIe8?*&=O>jjaX>9ry*$tm zTK9~ydEC8LQs#1sZw1QB>L<7o7xZ%HUf}Z=WEj%&H*%7GLmT!evZ*sAD?vL5lJUYgsv2)-2)mAN?0vM%f=-Ic;NLN~UE@%0lEje-zMSJ4Tk~RzjQj)4 z=GbC#c&&~To>of##3g<9!+E&R72uSG534D*7J}3S*zYy+)(f)1g;y%8@2W_Q$~1CM z>-@`@upb(H>0FJhE{2I}J*m1iXRd!x{1DnG1X;$0$1HaGD&`k|j;Y`nE$Tfr)bW4OxTcMIUMCyn7mAytIORmfmrk^jr$vr||z>}o_1)jf?vZTrvdm zz{nI`)R>mfh3^mLoK5pE@X3s&@H?(>-(T?3NV%6k3zWhOWB<)%Eub+dPT=Ru;!fj$ zAv%bw#Ql-MhE6Gmp6eIMQJ51-0*1?+k0VCY{<)digM$pJ$`A0DiU6A zR|q*D5?~I_C-3}xrOJNe9omM{vG2P($vpD=XlJ+7L1U8W18)}YMi@Cq_8aarQ+MaC z9p+Bcv<73+>f}Ka%_l*vCNFtYs^QT1s1N88YN+qP}KZQHhO+qP}nwrzKx?`D#jvIsfG0*2IaZ za>0b4C7-||!;EzjI*HAIIxF=Gj7V=KDYS}aL?`{@FJwqMHVw^d4_Yes!0{eXgtyzZ5c{@PbfeJ|IL7dsA7oanYo)o|HMomK@ECFsoo_RB zMXU3v8OvZ)5N*V*ilq>M@IVOj#hmasyE%mHu407DSRj{u_}`~wWIY2Rr*QJIm{qqp ze#Qcn5vhoBdm>1-5)KxZMAx2kr)Fm*vO8thgc`>=|f|ZlQ9v zF1F!{ZTwta9x-A(%wZ{N$|(GM$_-W!V*OVSiS>yz3>#P#Ue)hUj0Qc=)eo(ui$gw- zTD3rQu(2B6i~S1A;|x3uVPE}mT1OT=%<(vc!4TW}-YFJr6fJunn~O)}d-|1C4IpGe^{>$M+>hH3(9dz363l|#BXuX(^;*=oh77Clq(ubO{vUk>cX>?tU{I$|&)*xGM48%04`#FsHBkc;oQ@EiT{#_e0aIs*-VREV;} zc6h08|5!_8GMW1Qfq9zui0T}~dlwvM^%8~Pc}rdtz_$~i*wjGN|1C>j2$ z-!BRSsB+A@M+XnN9TC$_`Gc!COAa%TvcP}U8h2f{3S0zQ1zB~&OTy^K_nx&cjDU4b zWX8rB6=&q;<<~@NN*wqCFg^_D2PD69=3aAxO;a;mHGEjD&jyDOlOan4lwvM*drNJD zz*@Je%|+=!V)6&6{|Hk*_Py4%&W3sHDMp@@0?f}yIQ;Pcd0$a>-honuf1KC^lQ2;h z1{tpO9#o)x1F>+|RUr2D+JgVQ8j@@c|up5TJ&k(%Lj-E~--AR^{_& z`{~L-AeO!_J0dV*btLP_%Q)JuhS2zV^Su;2aev+`BSv!^g6iui z9Ho0d57dnx=xSeO+^FD(ZUHCV;64rxO-lO>Y5us$w3GwlJ(tMR2t48B7!XI8{Sd-5L~`^pOGQznjYBeS~8& zHbgbp>JC)agojB{?xi8^-%D@NMnBJDs?4{Hn_E$Wfkxj0e6BY_A;_7rIKKmh=U@U2 z>SItDtro7)Atwi$G$}PX1Z=&5Lj*^mABaEn`hz_)ogr ziOa$LAk*DrcU8*t-CWHO8WIFxqVriN7;euAag{qqOlk>^Gq4-#*9n(+&}?YQDCB2l z%C?97?g>%VJz+8(+xm~JO7pW*obdJhgZWyj3jWHp1GLoZ39VLGkZi)BD}keqSw|JL~aHXfK4^f2dn<$3b_kVczG6K^jm<3=|DOsJj-u@xf#*KioV)A zYhCkf)$(@qIOs{Q3&CfFNZI!4;#jelYtQW)OjzW;&lycYYYLan7}~L``{!}tz+JHp zea=-$L*-c4xe3FL_ctUSpoa~}+DmWqdf{>Di6n#ppKY4`=>~?wb^4!jX#qHsUapZB%f3ffzHSP5B{t%c-Fu#8C%O z!avxF=>f#2EYh=xIYA>8xzL5@aD%bIO-I9dUQY}&Yc8CY5q{nS24*nT+MncZ?sgh; z9T;Z66av8jj@Ok!QJyyV#uV20OdW4}JJ?>yp5k_--fr7aH*1G3u>e2l2 zl5>gk!LGwm5{V||_E$68qQeEfZSYLvu^yDthQ5)d^3=_VM#qp2tIZded{xI-Gu$;g zQ_;1zdm5iyWQ^Qn@A&2aP-@l2^_-p&{}9=gcJ&@OWZSfu-B_|R5 zIQ1-*ObXv`6%2wq1syG2sf-=jFEmf(mY2lpJypovSW?=3J24r+EUkiu3`BT_)|f*? z{p`aYPYPd4?yZYq5VULv-$t=Ig`B^>NTJ>+Re$QsHv!ltOZL zE?I~gc1U_+A~S9-cbvOmksX88p>LFm^(y7lnUQi22eRVzWS6mn?M5Vh0QVm=&L(#V)nr@^kKj?X zlT~VmY>1R8LNUIjt|?DIX*C(x-UgLr-2gpSaIXJ13qMfJe<_B9EBiJhtYn6GV&LlF zMD*5=3H6@(qDXI%B8ds3I}h#>pPbJwy>JBXcpFxaAXmL%AEh#!xWha~BqQ}ab5R;; z$7`VHpusmeWto@wnKW@a68jhhU9=re@u^IwHqZ@)|2HtG_`8iB}DFw7{Ep|Erh%Fw}a2_ z3v!E;S}b(StwgBy6Iol>(Kpj}zG+Zoc)tvf;d!fd&5wILU>~x!rKE}uC{Z0<_K!71 zT8z6hQ^>&yLUaVeIU}C0-rDkvFb=53BLZ6Yj+FyttTL%Pk*aPT|brZeSL15y8+}Nb7GS=>-arR8R|@k z=DrE?ibrlaldK;Sva>}ZZa_r^x69SM_FW~AoGlhiYG68Fh%0XQ!m$@15m3MYy?@`TDO!{~7EGlDYbp_nnMIly8L~){N zL+5f{BX83-mP65SbTk&pPi)#feih97JqF{qoysvr&ZNsiQzF_#lf1|gkVlL$( zTsm^e`_G9X9mTiv6bmpRVXX) zQYWJ*ft?Ll!t39s4`QSXdBbju@Q9HxJ87Tzu7LRrxMZ4N>*!_Pt=UARVd^RsMbFpU$0_^dDB>B$rK7VfaN9;mv?6%O0W z+L=(b$I2lO9+#q0&@Px`!ln|T5{8afN`{0dKLW zmZZeV6CwHaeTmkzM=I;Y>mC*D0s;^~DQmdvJ+P64zU&^u*V2LNL(FfdFyCbj2C>;4HqTX+e}i3eLK-9u%h1- z|AMgv4QrgmyEialW>D+|&Q3LaG`0&j@|mAG4Hl8)r{H-g{5B;}XZOunG{LAW>*j2a z?KLTgcGe`CiVg2Kyi^3m6$Q|HQo{$2Xc$kzW&Si^coA#cA4jM2{D>MFIa=HjrGTgH5MJUAn0p+TVkWy%LEMLF5!$P zDc~6cJ9qdiUV&z2n9T~r(%ZMSa}D01B)aW0lW8Mk>C<02AeY@}NhG^+{bh1G7YdZ!%Me;j_ROqSd8*F=8w#riBPq;X!Cvg&Kps1PdcX%5VJnY z2UdZSrVG1A^k~I3g?bNeWsFfsR2UaNXltK>wFy-h_oJITII?Iv8@c-ZDqgI3(|y~- z03Cp&h3K$fK)XQ~Qsd5qveeY~s8sFBiZaVBhyRGzH^F=CbjxN*S|mb~NQ0EYZrixf zkR(;^J^881l}$MPCW}eBo`!(Yv%3zhQG~DR5y-EyCJn#*g_5lT^D;Bk&N^K(lKl(O zrR>U-UZ(fP4J*w6)xT-FPbi--3QYlW)Wu~z_SOna>yKIJPZNkmyXXpcI12&D(1lZi zPlrHZalUkL8p3t@U}rd+AlBE;1F5}m;htXcRE@>kl%vQS?r0y?uiyfpgflN*-P@@q z-n*tSx;){!iFRDyzm4a&RSnyvwcoR|dub4pI)E6p^b7j<7q0fTRORc=m9zc3*6pK? zLA?|5uw_j4vx>@Xz-Dpi^s6KspNG7MF1hSZKTz7RHY`y-kNJ;n1tWm68M(loke>KiEQ5ze+82(v_Xq}-nL#pw*u|xTo~YniP4o_tz#^9P%-`gw~y zXmU$lr7MU8=J&dX1LSnpbxq@QVi!MiqxrD@+|H~rC~UOTJP6j#_;D~DGeoPya=K;h z{Y4iRl$^#gAuz_WWvx7$YkP@r`heHaB>FLZ0TF_7m@GYPi+o-hdX;K8sk2X#uei+Zm4H2in#oHz*C*$uPFm+H1`vo}>2lET8;8AG~9Cc0BJ7(8uh=9mPFwzd@m8 zc*v26ZMBm%Ne}YnmWLQPwodjXqBuJXAr=7O1I~csH&5xBHW;BefiAteY!l zm9K+uX6@biYEzAxaI%HNdKrJ}&1IMSlQ<1H`0nb?uubDd+iiipAoC++Ia7Xrjg~a( zuW0EpOd8DfA*u0lEE@)3n}E4BRw42uSke2+chg80CUB^3X^=o7uj36rG!P#-ap3X4 zB4MBDrA?T&QZ8X~M0*7bknvFE-y|c}#sQ!{G&w}=5@2ysNfgJL7SF@+;d%cpwya>! zJy3=MuNK}Cc-hRYgKo4NCvy1wbDfhD$cM820@X*qmqM`oRe!W*5-Iw+A*$>+Yo+gC zzPMvI+W@VEc3FSXnEWNqEmMdYE5jGGi2TPtb9{L_{M^VH&PA?WwKdLI3mXKbYx(%( ztNyNX?R16rs=Il4g+>yCfQ3z;mzO-k8T`>!(pgn@x=~c+@$QI5d-{L~ZWOmPx*ZRH z-<;1?L}+7%np;;0ZsU9Qj}&0bVEHhu6E#-hja9oj)l4a0$@YRuz?TlKQ#)3EW41&N zr5TBc^?`JX<4d!QWlbbQBK4_<;tpuC4CyyW!YWA0=w9~fH|NT1O$;bd-J1Ox+vhjQ z5UGGd6IvO9#|CN|bO{^3&`69C;;*iN)VH6VvzFVYYcfmtS^B!EeMDC4O=^n9d|A~Y z)ojQeS!b(kTh~E(Yh_MyHw)jIsu_2xyQ9Lb-K(7#*3G^z^xEFpCY)T_$_YcHWN--u z4Pw;W%WD*zX~j!d&K_!`~KB!I=qdgw3$)jfiG_@v;?XE9yl|G>DrYCPU*n(`jQ@sw^g6YX zy2VFT00ac+<`lsw3ZVs0VG$h{1`UG|>xv93AIv-2u#}!lJYS}V5tJ?LBGWvV-xUMZ zB37o*-j<({a~#z<;AB^STrhZ|IwV_K{Y@39PTpD312Ls3P|-XR-YHr%B&k`J?qCI( zwgwQ#zPNko@VDSx+$UZp=GaZjByiey?bG;7l}#ttZBnv9bjF00NXjl70as4IR%+ zg!Mlu1X=z3%2#{C*6tu?4=G+u5hMDg8ZFpI`3x;`56ND#PGO}Y;0-%%#PNRZ90;DK z?!+$hOA;M^IYXUySTKnR&fbw%2j~?_f_q);JgO9;)=}; zp2H#;wt3a`vTD*hvSa}t{B37%Vk@5OfKSBQjeQ5=_~_=B#Y znj!CxDfF^rW|vQOJt0o`bg{8zcnzf+5kjGKtFyuVxVkl&u+8~23s1a*?k?Cf z+Ges)mo%%A*}fct*({-QV6KiIIq;3NqL>2Q4}~~&h5Wo5h?G?j_}8%yX*b(qZbX|6 zP4uqZ8N+RW&swY%X34#0e<7K0eq@EfyMwls35xKgZcD0vAZ`m}ki&MAU1Y(FUC6bI ztb7!*j@WOe?syfwX8V2HOUzD4BT)CV`irdl%*bSQ213U5ykR0Uu94`i7 z0b$-~v+Oq|G>tmj6{M8{js5I~eFY}%#0Ad}pVZM22a_Og=S(LV!7K>3l?EjH3{xS2 zPdEc7$^+adBX2moPwnS^ZO|QGuId^><_IlWJ+`B&?SxN-r0ARTiI-<3Jg9v&DxAlB16qE>lxi#&Y$&u3a9PQ{;(ljr}Hfed~ea*F~b+e9x){Gv^iPo%p4rTvK z=PY~t{%Nj_a1MEK@T^n6YP347QfjgRb|-u?5L}#;t%W9{XMNaVGXF!X<(_awvoL)BL5qzJbdM zo-X13!3Mr{a=Cb^)7)K8kX6TTEZ_Zoi6V4-r^o$t4ZzkbFYf_sBiAG+6-!TFuj3$y z8MKr!#{w;-WgpogCwp)a{#;WHiYI!h3`I#NE~SY4Pw#_gp)txvxx*xMq1K=8K^YE2 zJ;6^lf1x!$DLha=e+Inh9YDKugzh!iaVP@rV|s8xeO;-CvxHzn=kPv&Nw%WHdiAVd z7GxZp7sGgPwI0f!;>SiWV0z702}(sx28$Az{On zwGM2jS(ZR^*4Q5(BmtHd)~^B4ua*cPBa6+~(3DlNHHyJT8h?B$P^uP+JBmDtsAv!U z!y=+QcU9`WlhEWHy-nMg-RJA8N#IF`jv>p%LnMxFa#Mwvbs`RkCg9fU; zLhmIS8i>_#NJLHoPD+9W&Sm%=c6nQN4faxc90y}8xbK#;;cjF}XhA~BqcTSRdCaGr zCzj3ndI)Ll?Jft$3eQcU%gL2cpeKYLhr=<4uS&&j)Aw1FK761Mwh6iMK$YPZiH6e( zXZM09AVd@n6f|NBt;@GU_S_6FI?m+hCE&i_NbH{cAJXTtvfvM z-|dQ8jQ4C`ZO35q7W2;}5yj8d;TKt0+V5rY#yn9`W~P-YnZDYnfs|(;Xs`P}Ld`Hc za6`z5+%XRfLS43R*cIWKosD3P&a3l}UPdXEJ2{!l&<}Z0#I-xO5wNNmEz`X+<&fav zwMP(OA|OY%G>k}2FU`P6=MpVXf|171BCb)U+RO;kg-AaTb?<&#TqQv_6czfao-(H?3usIbLQ)ZW$5Zw*%HeMpUR+x% z(mK-$YkvFQl`LJ#P&H!V>_w%VpU0NIkq{V;LivSJhRMOlm6L z8Fnv7VFOFOy=Ak?qHnKo$2RyPoyLA184r1DWiP^(>G}1mrjE)HWP{{6drSBSuL&1* zHM4CXOjPF_3i=fP??j=7=@h>I5~l(Xls&Kz#PL>};VZ=%9N-<8*(H6_&9Ka$mh&5A zDWs+=ed?rzwF=N)28u}T6)X>_l}q{S)`q~p(`!b1W(Ra6--9hOjSl60zomhXW*3YJ z`8M-8K+r|~y>)PO=+fxHD*p${gGjJ<(;!`NQ(rnAuW53%$z@|9 zh^Dyy_}32%%{W7qC3Y8{0_)s1$UP1vxs-Ow_V5FOR;LJ$y3ynqI2VUP!gm-t^VC+k zTg;|>@fk7$G}RAk#SjA@vd51%P2c6nFB(%M|7kl_V37L+jH9(ZN!=u&^fWK#u9zqa zSQ~vLq7rU0d;dNh0V8KN5u{-C`2+WL#()3c`b%t#|670Q|Ai4UGPD1mHq-xIUt(wA zWc>e!5rV5I-z?GvN+?!HfwKqeA!o8&^t|l~K_Ey0kvI!-Ngx(W*9GSL`{x%v>lLd5 zUMPux6i0nGWIO%dZFjBqP+Q$xXLy+IX1L{=H8Eac-A`;3UGGm)kc7ey!lweDG&e5~ z12AZWMyQ{L?w`+ZnbVwU=iB3Q2y~2LP4lKnZ%G6k^oKMuUPZ_v!#bAOs+y z0_>m$1OpEISO4DUPazK}fOr{G58nI^=z@Y2OJ=Gp(DCI#gpZWNNJ}vac^k@$2<8F`qrd=ybMzL6l&vI(5#1H+?;jTj&%X>i6Zhzx ze0m7#jetQefFB#`4?utaW(xqpf4q0{Yx+kOEbuEAI{1%*-Hl=qKEN3S z2cgzpKwL8k|0wDJG+*LNU!a^CD`Y0jQy8&UftzOE?My*HQx4wW5d51P59>6-ek}iE z0b)&`80woUsK>&Ec`xrsDAC1{NAjIP9hneX}|8kUtp8_8*6ZP zO1B>(;{HCcit;z)pYHJA1Lq*4KZM40ZG1Wcz#G7RF9Ugi{t4{Q_Ca4zyuR%hs`(A*b)-VFZzc_yb0Pc2TAj$8%OAYqzgSZ&o zUh+ZodH|yiaKQdP-#_1`!Nn=O5a*XK`0qDgP?l*Jmz8CYUzzW_^lqL>bclUq6tH&? z(S86BAV6TZ2KszqY8JGQXDVpESU1zm);d@1}G%C~0ku z{tx_A?Lg6fhHK!*znPak%0KqVzskoy!w*09;_H*kPwwdt?q9#)0$T|6zCHjNs~!do zQ1gO%E`eY6WsqO-7AniKhz;8nA5-?|NMsGZ{)zj2Fsyuy(4<;*p(&zF9o4N zh1b4datb0S0bbq$-{JKYBU(fPfI!u9-t9N`7C=B>5~v_qzE@+7K zZ%4$xBAV%`C1kH#JGOsw-)TSE+xG4BIAT1^5rLAS+-t#o+!d)sZwK061R;G{4u(|Y zZw2d_2ul?#mQBgV@kzW@inTmTfQqfIwyUXc922_fTo4*HJ<4a~-otL<9zzeYx`)Rn z3n>rB{zhP_l8b8`pkx-0GDs!4IUJqQ4aT%0Os}yyVAjQNoR*tqNj~d#DU^GvaqeY1 z%SyVbHIgF)w%;b2_)nv?WA?Jg+_2)ijoL!%QrRa%&Nnh>uob1sha`DajU%_cxtx!1 zqpRx(E_d@ScGU?Oj-(TKV4?Z|a!p3JB#>{32F zL4E6Om;W8x?Fr1-&U+Ug8^1yMzMMfCXVFsWocMi`eBOzT`9XnO;9$MJ-(sMNbSGI` zn%#K|D1-*bAUIJwOWf!yGJ9`LCXWUbU8w?-;&&ydjdFBnIcr#VsCEc#EaBla2rINk z1T3zRCha{)FFo0T7YD~sH6UG!C}YJqW){io)|vt-uG2^Pv)D%MUN5r-+GYRusfzi)v{{@b%^r+*=A-BHlt|k}IxjQmETrETNdHJiM zS4@+ZEJzqbjxR$aC^^H!Q*Cqb&`&!*>W|E`&Zz~)Cx04Y3;^l#q8OZRiq9*QE>uVx z`yoFXkZS+qp(Yd*FR87w^C2_n(#QGcbvs^3ig0Y5%F^UArcu@Rj`p$azm)eq)j-;u zR-^9GF0A{ztjFIKt(2B)hP+%Fa&KmFmmKQnsrISoiO7L8nD>w8i&LIQ?V}bVqNk=$ z4FP2x%v%Xt!R@HAnaO&8T0-ZlW#k^4(k-EG=Vv?qk>J6V^IbVA_v@XK-xw^i32m;T z#a&zB40L}ouR$T_^vWR&nDTg@P-e+(wz6RL(aiiO+i`T30ORd8^kS+hL>mAQCDv7k zg&B$%ldwDo+)M(7GS=I1R0 zvjEr5a4w^=@Ge4@H>mhD>n3y+5a%ngHc5y;%q=F&S<{`^`ITZa4AP&#NTA9#ZTdKS z%3@FSo04vv^@dt=K49!u2NCiJ)fbGz&P2vAJ&4ykdF;=NOU?x+$)Oie(G^#VT< zqlF@feNKF+q^GwEfn&DO(-6ntK16J~(c-8oK4wkHNrhyo%&tvY zcXa|N)^ox8wA};L77q_G7uOQS_UQ0{VY*slN7K`Rc}bGu{w8yl38t&DH%qk>!YH*L<{#OMb@Wudkr2uP9A#@ z5{;udDOObeW^eiD-PTr&N~{OlU;-i>{jqZN7=h}TZ1o$qeS^Zlf@mI9B&Ire zTeTO62L0McA7xLwPWpcjw}sY9mKb+l&~{S=$?!Wp77x*NY&< zTCkpBUKqDd8(?mol{6W0d9SsrI5%r258$m(AoH52E@=%d7_sjCa)tL(i+AZu5$ zPGVV2@Kda&`A|;L=b>x3wvfm*GtiKz)YpwO=#*7Ik^4~C4DHHRy^t8)*mkJ8wmbj| z`iu{JJiokecx*JH1^RyQXr)%rLrJm~Y%IrqJn2Ch?2t*8%2nnt&ar;DrEb6&JsMhNgG&#Y!$&e8Cr{;8?7FEjF~r#o=Aix4L7>e+0fZmHccQ?#Y=p(CcwO z`*_jXv9p2lGiF_I7wG#IPg(dZowP^QU7qU_X06{`gdx{e4}hK)M1TofKUp-PzAfg| zeMF{brc;`t+afTC!f=MjbG1Z`^3!;pEXV8flj{4?N!w?!QTgdAm{qC&v5`NK z#f;M4UUpEGilbxJDKp&otmZ+MO1`>kkYo&OKl==?*)vf6M_ZRoTdq|#yfiJ2cuO+9 zL+GnPSU`w_mH)S$lb^n|)#DZ@rEP)G-1Ee^qj0`g}^R%(L2g8`opq2 z_HoK#(sv~JXH8|Jg+rz7RFg781F@!4^;d`*->#Xco%ZgzFJ`oMhK566c)s=U71*xb zfqj?ml93gvb40igaH2Mi7IvZLaC1`yeq*+q&IN;B=A!wN&8eMpl$< zxEct}iuql6iI&==s$g`H$t~%uj`bS-rGr?jGU%K)ejx7hi;8N8q$nl*eP3>ns7Bmi zllq3sIV58nKLkDxdmpkS?jEQU6eKhU0&n|jYfw0TnD%Rn80fuh+U2U82|tqWQZ4<; z4LK=K#XeU810zt$2fAChGyJmy!fJN~Ac0~q{?fkV_CU4vw*QnrFmIzLa3hyB(|?qA zX&^UjhZgHER0&hC_TO~kTkXI9s#lI;Wk1s56VE-L8l3+mL#Qs32UuFdV^FzqZB z;j5y5+5cBx7z6Mz0{Png*I13|UO8s;V+MD!MAk2@Ck zj}y}q+r%Xc?OQqm>6@l`ZV1~-+B*W%P-i-;w@)YA)M%)nS4asoJe))zCU?U(4PEq1~=v}3-KMVI|Kbf;pq_NSTe z)?C1MzS?AzlCr+c;>9dp3bAwP)f~%}{aSm;j19>U6gVo(iy2iyYs9ATXWeO_Yw0?0 zPV*aff^yyi`Ec>44O)dc8i&fpilQS_fbXy4CkwLawJR~P zS7UQsfqk9V<^s#K!a#agewa;Ko7m-4l==ih+%AIdJ%aFgsnY3kRHw#+^Hh%c`Q8(sZ;nQ zYl%}xBF7HFQ}vU+(xr!h=OOXCw0+d@p^6WXyvO>O+d{F4Aw5}G0k-6o@|(;_Y?spy z9op{HqxTo=5t5SSsFE-}96SE@lstV+r(xDAqy4?-OWMW4CsUR<*>tR(wtHh4`WtH-jn%FS?$nhWk8jZb+(#If z)+{MCatdId6CTlaj*#pUgOn$drJwaUCT}`(jXdjX4h2S=3P9XE+i`hYX!QMi$bSP7El)!g*fIot&Ys zR{1G+aSC=mVPJGJh?*k>>wlD3UT+Rf32^%cYYy&_o%L~lof)8i%ODM9wRBQDjVw5^?lSHShw4+NA#t*K6!$L~uvEGck5gjMr zjLC3fE!FIG+F!09?KX$Yn__&CoL#`15R8BAqulLo1#Z8}ePn+l^VUBrwOQ~%MUvD3 zIIRe!_Ca{-aPAd~CH3|>ey-NKk4HU6b(GpGhT`UZH>aMlz)sXmoO_#m_)inGW}YeP z9bA^W32sKYk8t7D1*>tnK9;^4WUQA&U&*jFrWRJzWv~ACB~1F2mu$CCq(M11PbD_S z_v0BD>4g=>aW_S~S?*SE)djV1bqdX@QZ)hgsRFdTFEWAZO+W*tHvtUt*DdYZV5b9k zd)qeRR2EUaA;axdYILR1e1OnT7hls2fy$(G6s2vOwsF58upfR_F$X1z3pmRpB+rEJ zj9T#(2D}x#-{+0nw)81h4V(tT^uQ^b*LlDP2>*nRC|8}w@KK!=(OU_$;u#+NAL1XZsCH7%^=b5f2pX(eHNX996d<(_>{q)J+Le(Y8= zDW9vn&zI(d>w>RsOmwSF&zo{$m$FWGKqen;nIu#fhP#2NGX&+~ln-YGwg(&c+jocL zubVxMLYk?EWa-<%)0L9KGe(c#d+Q{wY87Hl=A}`gW3ms!@Dm@^NI>g0a%+Unu5Q3T z8^qKCgKBWjZJrk*996m{xjXG_65EC2vu2{2KBRs!k0(YsvoJmjKc&Y7cNf}^8L`8QGv z1S2ttX1s`wC@gd|sX1H7*s~TskIzK9aP=`OBd1oPs)QBw4Xf*3$vRkJM41Wc|FM0ZyeH758uE~HS|L5?mWBs4<-cu;yYq#=!)F&QP!L)(?xO%Fx6Y+ zkMoKdfV;5|2MbAyDFL3g%}TQNt=O}*e@jGS;@d7+)&#eOv6 zmk=9;Uy=QE<8nUP!oST*y_)58egJdZGOT;4Zcf^F{#zCD0u|a=S2b})Y9^6Sh(#M; z_Drt)z6dgR@;+2^LS*6<4(>+@51t2xX*&}^t^@z?wv-uC-xk}*$H=J+ZE!R>7uC|S zD@NFl^38NghU;v*(wclu{G-&zuBIrKRaHr$+i&m}Pfh0FO8oP<5L6Gj7z*C7gUm@- zn+j9XiADOZ?ryd;Tj~+TyQRIx=a5k}&r4|2+oq%y#u{;@7SuuAiWi9y$xy?cdEL;R zJOcq&)`hN3&-f6C;hOTjVvOD*+fqwtyUr@uJF&M6qC{Rl^zPNd>1JJuEj+c(hn|b~ z&b4PZAK!P1-`4vAdx0DIxu@9M{y~%6Dz-j72r<};s!91r0MJ`_nMb}Fo=qd$<#Urq zd-JVt0{P4sa0?zAf98$yMis|gyf^9!X$tNX*dV>x=H(bL7N5*$TDnhDeu3@U$0dqh z;qx^z5uM#qVs>hl(C!;y?cnh}@_ZBEY`)@rPpw*K!5BMy(pHxYt+W@}584aga+I|% zWm|{6*&4cqmw7&)1+1~J2Cm)xcdq4T_bsa^w(`6AfvM}FlpLWtov1q0F=w6k#ZFx@ z)d9T=8A_LAihm0{oh<$*trfU4k*Cz#jQNqVe0Dr$1=6-x$(0LZqbE~Fg+ZNjiaAOU zEF4Xh;asi_;M3Aal?Um{fhtrBiy1f~xR#u!=Y&U5ua@wIJW5Yl4cigcQ(5dRm3W>S zO+}hhAEOQ($V>xHG?!0tT>7SP`g*v+E3afpQGg{3R%*%;ZoOPUp?%@*{gIsys8Hu( zpDz1Q&|#MkoNZrN7RPbDT_en8exc0zurp`VSC?2hZRX^nVWSWie~(_ZyoUg~(u_~* z*9$LQSaXe8mOmx35!nW{(JU?xOC=7y5NWq;9|*Z&U5Gu}bK*0$vZoe`1 z0XIK7lGvR}h<+Fim@pq#$3;&%?*_8%Elm{T`TfeY1t!^Av})9%^wmP=IEgdVou}Z3 zcj2`|CuNO+YcWEZ0%@fo6%*LDc5=4xvQqb7YGd%_0Zqq-bgb7!NF46fznWG0U64p{ zlNzPOyEJ^Ry#dA+xz45Q_4hK}W;)j;nN;w1is8MjywfQU zdJX?W*gf@%5`|{~-Zz=iC<5 zSr5;<;wK5zM9C2}%LWk$q$9qaaJYoMLrf@+w%rsNGqxR~6MRSdj}&x$mG0C&^0Dt9kK86LlgcDAfX%+f0WS*~Pn+r{kO0F&%Ph&_4(oXjMh^p{ zLZePuR+j#v-ky3@i+#G1Y0{&cCjJ&cZqMs$nx26vXvWg}lz@N3Q3-BJ{xvcz;8Cif z;9KibJsCmnzQ=8%mwo`7T)iUyXIA(x{lm92w1nj5{_i}H0iThPiT%G<|Exncc833< z5C3;q$iTtC%=BMr;s0+PMnC_v4%b@zp$=~Z0@-f<^O8OMcSGF@;`-y}261zP3oZc6 zZF;hm)c*QgwL?{z`Lm+iv$`Q8T3jwjW^8E(jojMmRA5wSb_5zeHZI`+h>oFghJlf> zKQ^XJqhsy=i!hi_0i2UfbA8?RTY`V^huQHxJ_57d`)quD6R=pv20)q`fYjBN6xLQ$ z6o83{X!VzTgUbO}IA)7l2GH>dz`~0wp9wo7ygR5YsiZw*QY`)V9WtM}0Ephf!C~&l z1{S^ngi|9EeI4*9TASLx1rI?c+8TiJg*25PZT9y#FmZKYcsL*{pnrQiXJ>3BV`pbP zJ1-J-&-UC9P#%;MIA_bh)V~)JbPQ`9=(i#oHx@eI(%}3nPJ4J~YIu7L0{jhrO+6Ff zI-8GL`&v3c)<13!0EI%sKM;8C2G3;O57`{>_Z-GQBKN%a=EvwejYz7qH|9UBLmQmv zD{h+WDL~UyR(}7$HtO!EFesY7v6&}25h5(JPdG0kHXclUM4o6a3~7EXkN&# ze^NWCY$`16%+pLNt6$34U0PNgZPa>3~$4 z%qO3|sfC&4iyA^{4J@>!Yieu_KgIlSxp(;9&p+&t7JyY$78X@j6<`hl;EBFo|826n zvJCj{R;aXh2oL4WlWUC&V2U>q;6pPLkngA8gA1!25Rg{3hF|a25AVw^(8v%dT{E){ zAUfbA)z#jw%P%~@^!IM`m`lSGz!{y-G!CNgZFSeL_uMBst)e?8<`nO__cl#HT2(<; zH2fql^4E)$+WHpouGHuRXpW(g0Vo}vV+{ZsPtW_e6-$I@^0&DEZB%t)X6k3~AkUfa z^)&*R-M>)|&m zzO5=|dUrJ0FYosk8*5#2!~I8W-^fx&hnJOq=En%`>Zi66^e(SD1vpc)W8-I6i2|)C zP6ob#={Mb!lT_7Hbj9x|b><)ymtRRl3JodB&-4VZeM7I))W`x%xyh~N>(b%9&d~Ua z&kPUB)bRV>pWP4ogilO#25y?k7;oX^ zZ$aD{%HJH_3M9t@gcH;Y_xr8?Gpjr!TBx$ zIKR2mUtg#HlswJ@H~Q_1Ax-^iZ;uwd>+xyhCH;yW6U7hr-VIhC_udt;ss0YcC0752 z;Gt}MIs7X4PwNqV?I!X?+x&QJ{F*!}v|smjycih2(tVZB|LDCX)DPyB`UE?@xyxSt zE|>OxJk?tMTukKsQRjuurkS>h`Ed^aCh~8LNqFp)H2n~N)PrF3Svvcm`?}kIq5Bfw z{f1-oE55z|x4wC2`>EAoad2_`P(SI-TZoy zvZ-7V2lLR13f6k+DZCUL)J~HJW1O~Jo*yH{{^ zv_I}khH{mn!#p7**SSB2#mhL7M z)j^h^o}cBD;80IiFd7qP5O0&Ogq^njpon!Z8TcH2i|GD}dV>;kW?P_0bthh#ieg!> zYMf2dRMEm2-yK=!d*0FdJFn8J@kQJZeLpeJTPMO!cM^8uc?c&9oBa zx?^H)m(1yK!+)0!^ktM>yVL1dk#l1e(c-e}V6cN$rcqwx!rj4Ua5#w+3?rmqd-|1H zKOjgC&$P7 z`?fQejLw9$s~`X{y2)PC1{jfQP3AP^r?O8A8v;6JI8%|>`(FSpW#p~rKU4CCj}WuI z=rPKKq4-%MZQb=c#zftiCI;c|o3cBr*+cGQ6P7ZX;^FW~fW2q-w3es~i4WBg1=VqD ziocuT|GJYXDHt4JzxpHxJ>-YX1b#Z9M6I-vZGi)~7F9L9H^{Y$lG*0jkJQh_?J$Lr zM%U?X-(pNtC=HC19gw2Plr+O@DU>p{{EmrJkgnhrM>-(yfO zu*$67b|ScT7XkHI0vkIsn72RPMZr>q5lb7o#nwbB3uov$a$+`X^h__1$3twnMqQlc zS+C1R=@&#sFXHJ=^@h*3S-X8Ub~Y-iC19F$rpQo=Ta-9vkv)bP>ca6;Rhu?9dCk0b z7p}PoOW4PVsp1@3CL(W#T#i5$BgQT%n@I-kJr8cZRVZ9uxgL#LxSz}3rY`z$={sGw z*60EZwRjNqAn2JzcSTKa)JT02x?Jv=ZAu*HzoKc!@e07$khX)XxUDEm@okWX+vPeFB)td>0ksPDJ|vD3TfoB@a_&+GFX0BX26;A=`z9$9&wU-mr(jF7 zF{g_Tn*$pWfQYV<3y~I-!pw1S}s+I1>K5xJLUDOZpEcxFAwV(ZRUzUuEiT(CmRZ-+-kK@Sk7)U zlNGE(@c0;8=N7Qq(G$xIatd2@(=M1(7DPT)=9mE{bHVUAMnt0jfjcGzeL4y|Kg;>s zPvao{o-n|=&Cm-tnJ~|cJSkuH&LZSkrn8c;e>tg!F4XkO7|zeJRBwD>IwHyrh-f+? ziz z9tM)QSS>T2&gCKwc0SQh2B5j?Zp({*xNRP>*!Y;sb53Y4?5SApD8(FjY$K=6*X#8b zokQ4b&%5B1iQoH0=aD8c!INs*X^g1wA_+Vgmu2~e2p&@_kec+z;^?B6hHA&M1f{&& z$1<-Pd1j>zuvXSMfNj4VHR^A=E+A?}ZqX~s1!w+C-TvCeTB1eK&h@xGftKZKn(?*p zn*z!0d41_Yai@&SfvqdGNxk9W0G-!+6hB+0u_Do&Zvm&!XnDazb+__3`E6H)QacuE z4Szy7=Y9}Nay&_YX2#FVP^?-4d@kglGeSx=m^F&GrmRF(79}%2EdUV zrXT-3rjMwpfok8X)t! zD*S$dvJ(zsPA~JYtsK6oG1qAMG~FPiq*RfUB?6*&uC1efgZes)z*hq7bKr&6HQ`Cv zm0%&0soq5ue-+x&6YM7#^i6fBd6YfOM6C08KK8*j^mUP9(b-ekU*nt-wu0|&0L}0? z@6gM3ic*WlwZy!%dpWgF=n=BiFihKz0QOu* z+X}>yzF9NgLV^RU5$90ep5-72EzW_X>qeuc>Ixd`7{s^E`UBJ$R_89jj=I5W(!YAm zz#YJkf@&>OuUI_v2U1(n&D{kd-w~ve5^LDu3-@yChzyf$) zH>v1na92j&!=^KK%7F)R@+Y?#(iqud0H*`T(y2p$UaRY0HAtv1N)@ zSmv+B$+&E=MlNDj~l1F8^2;*O<@(&LUC~O&oYhG|epl7MAmVQXUTBj=ib-g3 zcallEP|1LbDGg~b5p02-Ax3F>@&DGCZKhLQ+ZG=@X%|TpnZI)jE}ntrd3cC=1R_z^ zkk|@DNm@g1)+(2aWvrh)BVAiH)ew(q%~<1#BOO0#vXOBzPYZ-tQMrZq8^8MCqKsQn@QA8cNb>yEfBxxB3?NhoE zl+$qXo3kThN$PM*ECiXet+5@2t0sgfjfgxk*{%3R%|)^FgJreN00dkc%hr6XYq*~; zcdp%|b`LQW>m=$IH^6Q~sLnI*{V@>tn)`Jhbx@UN%N|Jv^7G=*4 z-@@({od$n1s4k>I8Q|)E;`zP88viWX)DQhtQbG@P{l_Na-4a7zRX@wX$WD=}-IJTW z#Biosplh_%4y{n_0v>&puIAuWBdnuNP7dQr)uA!W0(Rbv1w4m_i6h)vd{)mm{{Y=g zfkub-j_0aY20+N@AezRdu{2N@(rpreR#q;7auriTKYnQsy%LivPV$0nGUH3mN1?R9 z^}8B|-n86Boi4QEY83H;U>}cqY#C#%tc4Yb&!TJXND|Vh_H*n438skN_^sJ&ycAj# zMIiODbIUqBmeLsOwSoqcWV`jgclnvR<*<=YMwTPeoK&MYkF9Ps{|MKdjn6RD%V}L& zR#KL*HfkS`;N(g$@EK#9m^$1sLiH%c(GoHnr2<+x5n+&ncJ zKJcG{L51cQbC~YhuX6l{FYPUD3#$Z@5mghJkm%J?PfJT_lRSY@YfEtty9i4STg>fqWxeOPSFc!7cbw z)08t~!}Z2JKpZm&pAS)issh^}vY2o`rHiu|@t1imcJYi$kuyEhCnLMvX^YU zLH2CZf=uAfZmgZg`}?K5<6b{B-IYhB7!nQ6dLz807Ot1i`N@4(ti*wsWQU9s!$W(I zsUEzNvGv=*JercE`WYj0caX`pBx6YzgBH7ydkqWJs>qFwpzf{|BsurRfx~nG;1xp0 z0w7x#z>#r;WunnEq$}ruiD;NV3~cY)DCIc`Qc=X5s*WXpXsCK>0gedAfP>i91N>=O z#o6TnZTJvr^;rZ{$o{r@OZs@psI^aE8kGc{J;<40EJS&<*Xes{RKdK6_Z62ZswL zu*n&LQeu&)4uThhw3G|cH{m@}6(rg?5u`++mZk|f#mbiHNM;V{JRXfPcbk_`UsSD9 z?>wswjJp&62Hdt-H1WY;JT{c8Pt8_RL#VJqV%JcqR#FCa+Jv_RD@)dghWA)88t@^) z;0E8l4K&z7?8)P#*SFEJd-iK!i+#(L863sj5P$g*?LOLW^?3)8_nqN8d#WH|R zSl*0?^}JQ49ur*1NozkLR`^qSpd%R+tH~sY(?T(RX8461ME|9i1{;d$IiOBRKjpT@ zr=MC{!?iHw?s%qL$$PwcNT_z2reX2nSYMoQUU$#3NWazXE91N=1G{Z8#OC$-;G!+3 zli@;}tH)T{3(OZc$8T8Al$SZH1%nSc;R9g4V0>|cB2{C~k9ijLhh9_knHeaWH)0t= zM>aWf`(_?k(AC5p)bacHGp6-GfRz6#iF6|HPx6j_Xv_Zcg)=ty2Nc;*j0(e%_}f(m z-?cQ5iO2L>?i#cQSnoP2$mAuvoa_ca1437uVAK*R;x7i!O7>r&wVj4-D&CYTgZ#`9 zI3h396|^=A`@&soZMA*WZ@F-jGdxkU{&lq!>b0HZ`R&*})ShMypB1mT< zyqXBK^Ml%qBRElQ1hKlp0Mw;NR);mLdn~CL#)t(w=^3zW`FEC%>pZF`Ed)rf|t;6`>B4cfv`hbEm*2A^TnrOfxGQaXUf8zV1# zADxrZc0bl-rpfh6aS{)F7sd~RBsCZ!DKW!MS2l`(V;W>K&JmF8VUQ~09qRxT06t;r z8)xa==*_1}P|o%q_*KPi0cV zUd9;D-Kr*SiPK-VoQw{r^w8?r1lI_z-H0xs8lt#XxVZ!F;AeD^8r#B%4RpuR?(Iyn zZ^3!Si*SZXrQxZe3A`swDNL)9xOY=0?3@C|cO4EBT2sl=-C9lPv6=E46OQFSZfH~$ z!gBIz1uv_lp5b`RrJ#KK(MSQe3DY`#gw9)x@Cjbt!XB!953{&f2+KD`}!>w<3Ea^F8FJa@QOu76%{%-ng z2(wjIkVASR{WRJbRi}NW>Bs2IVp`l;hkPg+O=Dq`3~b3&Zj;8DL1ra|=F3?A)DJI# z0=7G?4J5b3PUG*SqR>WJj(Bmm7}sE}rv!C4zU35lZi$*CfTLStk@J?Vwi(JhA}RwB zRXbxti#DIXBJSxHrqRX5FoZ>^pmi*9(Y3sE?0LiK5d{OWhvoWI;w4{yYTajnjR|w+ zn$iV9FKX(vwkaWkm@h=*u(o2nsoP?>vVVnMxej@q_IY9&n3>T*4Ex^U%p`HTq6V;h z>thUxmvZ{VDL`pP%`(oGMp)64;KFU#`wK=)O@x=zbf&@KZbo&dGK7Yo{as5^pJ%i$*d9|H7pS_KTQ5Uvz0b3tGDde++SG8Nj$wdK-A~4&583!B|vw=*TT|Gjr!Pu(% zd+y_V;&j+lVX2KlsEltxhfX&pk@T<*BZ;W(KQk_@fFi77b8~hRr$l!CRqX9GD-Gn$ zTsr=Ctr41QCbGz#)KI5){su9OrICu?rRniL>M#icUEwxn@tejCSrd-APuFO5Y|Ang zPj$M&i86DsV*@#=-;cQ4^+AbeRLqtLIs^nclZ_2qJN?<_wv&`VGRed4wruPDR$ z5?HS{PEY66uIwb?O!oSQN3Oh|Mv7L7lRhIzKJE~rmvm1(Ce@H#&q&hdJz|aO5gUw$ zM%fN5Rj`c{EK~U3cMJwRr-Lj{9G7dml}$9)NY%Kn$smT(ptJCLL2a)-#TonM_e{=} zuP+aD-7&sf4g$eEzOCS0cr5O}H$liPVi;|-Xey>2TfF+&uLnHGS@(vb`Ms1|J=a%0 zQ;mY9T3C7;J{bZ+$3hWoPO=eM``~J1)Ax(nT@abDp+@4g)(yh^Tb#4{cT3*A`sY3@ zrF46)V28bR5|Se=ib62uf$sfT(JoN-j>Ux)ixSdCgw$*&GEQ8G5MG3ui-#zq0XUJZ zV06;0uf}0~LN+pg#EL#uGDf0i3YY&^2aII?A92Tz7$1z!2si1GV4z8R_M`QNZcZf2 zk(>Ba?yJl)I#YxW1^B<>hwC|UB8WimM&-V?Yq)JEE)7$d5pd&=`Nj4n(}(V<(Nyh` z6IAB}`%>m~_^nZNY(R(!Q>%Sn%Sgbnyvn^AKUV^(E6@>@%Ap`OrdTC!Xd}q_DErh_ zF2(SdU6-$>-;RcU6u@ei3X&BCi(f>3l8;PDC?5mSXs!EgsTI0cB|Y56Glp|4WU^~f z^F%+$+Y&hKh19e=@j8p-3%V8|1Jf0A6-(ZEMzVaUsw+3u;zbo)=Mgl2^O9e(@^ggk zBIZZa-4k%_t4g)xwcMWfm>*H_iP?EtzAPKk!6_biYwLJ2huWUsuM|Pve_G5T}Y z&XeSIin=ny6uJ0*q|>%#&;a;UyOA8zII*}R2&^a6x4w@_$-$?X7+i%ZWLTJkCqbOElZ9Wn_M;$- zSV*aGdThtekJTKzv#F~qF9H1_)wE+o4&ObWhPsg zlVy$tmo^>YF#gGjZ%A_=Nuq-V+4@$jn$eU7l=lzM&S}v12J4QgD3G)B(mr?cR1I^W zM-MO}JuEMEi$Gc!peM(frRsj4*bAJQM|-TXZ{a=b-XxPqY^|gH&bH#c3|Zns=*N5m z{a4G|evOg_p1}}}Y_2_Rcbmc#XbX^H_dZ87CfgOUyy)gi6#DAhynD#jj*_laTp4N_ z;cEk##I#qcg3)a5KP4!kt1zU3yq6quqPa0887Ec?he?CrP+pLR%0^-3%9}3Uf((Cs z*>zy_j#$?bs-H@4JtXFlgK5D1)If6eYpnwjkG(`#^eF-A8s}Nhrqq(_tEVZxBGjXn z6z7$`Hv380(KUF+fE(cNs3;S2J{6wxD%A{&2v`YTGLSrZt0{PsN#60UrLdCLeAZZZ zo<7CE^2-bd@@z!>bzUbD6B1Q8?Y6;&%OT-~&iWKW;`?DvgIrPkIV>N3S%N45p%On% zT*P9$92pg0)9g6O5cr^G|0ES4ZycRKp7;0E=SD!iN3+fhb%|_U?eYOlU8+^&x1oQs zLd**?F4g~w!+p^78~hanTnV+CYg=kdc=`M98+wbf`NMbCffhMk$F2t|iThu1u4%>E z1$0|AF5bK;?fT{d>Wre9&2g^86ChxM*BMMdHq9-x^G3b?Qy;{A$t5z>!1g15j6l3$ z*Q@aqnGM5%Nc3E~t&B!t`0_EWj>mPwvxBDF{^jP!(GP`ahjX5*2T=w$yK4wBh)bX+ z_@I*Kb*(OnBYl0)v=H_N3*2n8ucgI0l&_ zES46CyPNB)R}3Sr@Mx?Pjw3IniZf!w;xsxWt6L>@YE*a;at+VuSBtJ0fh?yhogQEf z0RTJxx^Escm>?a zK^F3DxM#c$U$&L?9Kee`!VqlZrqrV|G83FP_&z-&4ofkXn$DK}n&{a&Tli2$yG-z1zsa=o`6RFP+aUWGyDDOd-ZaGNH ze!SnX!zi*SxfD*6#!7Y8Ox3Q_lm*ncwWtmabBfCRSQdB)O64YLtBas3w+6S9y+9W`%cdzLOIaLL3=nk&cHZd(ul#}jXFZmb z00|PE{)Y9K4Ti2h(EQNm7+rE6A0$D4YlWI$xTH|{0U`aSKwn$Ht9i5BHARt;i7dX; z*|!i2qqQR7lxbVu&0m;$kEzQ%bR?eu#K`)kI^2z&``q?p<(7}|v?1@e$lC8&txxB8 z)+-?z*+`+Y+3;?|&_ANsiwe!Kd8D23iw@SQ=DHEiA@D}LN zZYYfIv>RTE_Yw!M{ApY?qpkv!AUW)D-e|Wg6OD0&H2U8dn?*>?;G(uPbgRK9mx`hj zLzW2wjL6L`x-mB3)4o;F70hBA&a9U@1 zsU-5b_KI=YL)*ZY@e-Vrz(MEdrz|cNdXaVstXIiS=7=OC<@xz*d-9DV&`h2OsQC{X z?N}=ble40R-mL;$L;`TqKaCm|PlgFS=%r{e>v&n!EyaV~ND)fSAt)yiVa9BE(-=4t zDC!z>%Ic0;y)(>IuvfLKafV&rwCvro4<{4?6q=eCr{?XB?9@)sqW5&#&x5WvFI~X5 zl^&evM^*PYipyP01;K1G--YgL6IX{W!z@5Mrj4-Kuc&_rEqYZKAWF;FEUCiVjvcZU zg`0#U8@eWjCzoG5x!9BQ&pg4_NjH(y-|2yHJASk0j6A=u>Aqk(tOdyO5ND}1T$kGF4Y&_aQTi|==yCP>0NBjd zd!C&Ma38Kv40gJh54up>W z(Owj~8Vai8ny{l(5|@Nt2yus+em9W|*U#K@naV8d18(_(NO0kgq(+hAw9cG?8D)s( zmkv=GYy!1Xn`7;Zz<0qQ3%}I4ZyO=A9rSTlSO{ZaW)%7;2mwlDmY9}4Z$@@76dtmH zx=59@-|J#o^cg!~`o_`Q?w4(VKNIGMdwWt*LE&IBWR%E4B)7~-eAVe5PoO7puhFN4 zWl5M|IXNCdTiS$}m7Ns#)lqX)-dza47BeGH^o@`|T!V;xhx{ zi-{XZAjL;vhRa8j2nQT01|#!C>+`_#?>Tu~_)>epvwWg+-+tCYT!PXi!;nv0pRg%P z!kWAfPJvhTtO2&s^RXbB1T#ud$#hr*gnQ>?5E1fJb&kt^+cIlWT?`gw-mTODF*-3< zPIygup|9M9opyByti7WK+fKup;pva9Tr~Onpsi|bl*(-jU0(_Oeh1C|_Hp4pU zI1#BUyj+7JQPS;p+G8C;uGzs$B_e;<=o&6R$2WK~MTXv{qI{ETUY#o9Uk45~xA`4+ z=`p=0cL}y-;o`{4O*b|GU4oH!>2M8Wvz)&K71}P5C|kUX?26YW06R1zQ*R6?MP_+E zd7R80GqEptHxjs5rcRyok=o6A*L7u(e2OM}W__?{&n*nUs1!1<|iE;{6%yV&N-+ z4b&SEG_7=0C*tpPXJ^*Ll5NE97n|FCf%oM@_k7Q_)clt&i4fC@`4m&d_JRX`IQ6$I z=EVB6&vf^QG|Q6pgF$*vE%|i(KB@bZQI^tF>;^fx{O;2lUD^@}*?H;Np0#s-mwlx5 zS;Tf@c{BUq^Vu1p&JQ%Z-Y#n)2$uCtqw#k}W5%(iZ z(_!0rl<|uq|Bef{w@0|zSjpD68P%H%Hj`uS1`2xi_Mlj+)j>N3EMOr#p>(j!=LMqX zWBP6gg)oX-HPbT$xT8!a^b&m@>@d5~Yh;cG1#e!BZ=)wu*sb_Ea?oR$1ivlBWM*Ik zZ^WYNmiK`!@7-&1`xIi!xZDU&x$C?GEv_qO;|BS5`Lzf<}-B{Q;P zaMFB1Svm3N4paw|Y8kPi+~L61=7v}jb8*JNk4n56j2Nb$d>JzyqP?+brB1Za)NnmB zQvBksD{rFQU=13dk(ZO7&e6)@DcT9YezHFnzN`{`-3wJq#2Z<@W%j2#A;G#0Lm+*T z-_IT-4)lnvZNkjnI5V)chyP24!~xslG9W9&do$J^HJ~7LDy)j3Wi6r=FV=f_L6@XI z5cg&pD6AsP+0xf%O*^J1u~X|0HXzajmYbZxF(%*~Jd%$WmAzyzn6++o)f^J(-8k_M zHrdlZQvtH>l~e97Nax~l2t41(sHwcYATEnlXyDdG(8xm~E+`#XssfF`jgPkJ8^)a0 ziP4QWkCZ0qt`Op7uUR!T_IeFj+$YO~%`FfTIQoK4HsdG&?RVkN!_@(2?m&Py^U|8- z5mpf`=&ER6>l4p0M99?gEi$oq^9N+P~uo#R;g!S33B6B?I1_Zd&Tx zWE=V!k-s#gd1A_xci_!0++DhuN36TgwpgHpNp*6w}R8%)&*uew%vS4p|(92CQ})+h)m=KE@X8@MN|cbuDvT z)vtbI!CL1t!IC780GFt>ax6=NgV)*n8c?m!!3BRktiw}^=*S11q7R~)RPOSs2hHHk zdDcPHO|E`TWGnP=QT5VZrFM&>t&VipG=#f7Xye&+5A9F+%OYcMDx21agATVN*!dgn zVWio>z3ksIfb&mZ&;pZxbEJi>*D~$QGt0y2?SGcd(kM#uJ~ZQjFWlbV;(f)UZ=+>=$iM#D_$Wg>0wnMoCfZ-yRB-RV5o&BTTKj}G@lx}LdMLSx-6FX7U;hb-NJVBbKBzo7)o zXPG_CbM$wz`NvMRWZxDzBqx4DIO=%xnH<*71*z_kx%oIHNU zn&!O>90E-$6mAf?=y`oG99YNUPmf{mIT&0ZbQV;F_*#6qO`5TS>K63Rz&o+eO2*a| zCec#eDrf3SZ%IFwbh-nXcEs34n#T*(uM)a;2Uk~geEFkL{qhwhD<~aLlKWdH+%zJ& z<Hr%FZ?H@ieHcHlr86|v2};g$I}oRU9^l9((qJGGhqVG#_6`$yYsbcT;Baq8yH6WD|qirWy=DD-kQZa*>%ja)dW zF?=S9RqLMy$0NAqFp^IsMY*5OjJR4p8t($BR#p+5ytqEOhx3YUAg3KmJW84!&k zX=B_gS#h!CRR+hzjo^^OMObD}@Lg?s-_MPt9nP6eDI11K+X0T?I?fC40(gFwHJGYf zs=3upx-d8PgT?gVXIS_W4!%7*k^XeRn7gL?*HpA>EQ^2)K7#;{%x6fZuCmWy*%cxS zG-b{?Sj&ZBdAT07WpqYh>AE;&;3ecOQ;bn#C;)R{R)Nxesxa&lce6CN#7NM8S3hyN zK<MR-H- z4#z~TF!o^8D(jg%pNzQtK5o{%1>(+1s+Xdxt<{xyu`-pY+Ey3WC3tKwX8N^aU#D8% zExTzjdlk$0Wc*17s}NX+f#0<*A-?iP0Hi=M_;6J?70TRBd#J5bQ8RDimID%L?ac50H@1n^H2=Rf>Aox22st=IP*q) zR`%0O?-(8T)KeRxIL3ka0y-^-!9RANTJ@?lxgVTpOS94w(x?Y6HJM3k_0MzJ_XjK7 zlR1!_Ku=Ny*U9xk_N3u^;<|X3iT}~vpb}k;yUbJE&Ylu`5ZbzJ6urUnN@ce`Gy9>U za-!94OTF;05(&KYAW9IaM~u94VL(Upb=1*dR%c`IIe!csYCoJs20o+x7{TAlEXZp@ z1PQ!Vq}%S(r_QT#wh}h@v=XcjDELE{Z3WiVa zOEpMoO*B?>2lH7}DWcfh?q{ty^LU_&@-d{kN1Wx*n`oEBE4;NsS0sdeH?i@Qm=$6F z3V$@Qz6DSOTs6Of42K%bMZ+-&+1^J$w^BwMq>7nXH6<2rNO^hjal!uO*sr>;0MeFp zTB#>T!M;z)7R&RWt;A9h}){sh}E8mzzRkiXs2bVoK9B z@$Ao>C5?@Y*^|}c<_@o-;Wh4;8!Fe5bDCA8c*XVhg#$bwD}R)AQ@kioihv2X#tLs; zFx)|%^^#6}7f!KznDjiEfr3g%$|bH}hW$JHoRYwBc$2rpHbrQ(h;t_X_2+@?<1*(x z%=bwuRxTG#d>@uVbdqLdL0a6%y{|%Os)#Ps3OY3T76m4v`FuY$SNP~QWCov*u4%heEKarET*X!R-n5f;MwOJL z$qbRF6RK!B=%H5kyC+nEx^up-@XFgRPocAl>-drhJD$(a=SNN;#ekPKP&NPNry6Z_ zof~m#+Kh)r;$ppSL2ut$$2R2bi)W8*GR-sPshFrgtUP_HfZU2^c%vBA?hfm!-9yi% z2`sctE<&0eY-|bxk(V7m{%VVFcKgx*!p*2nC>xa*hxg3+*yxw#T-M4_LU6xgfoIK3 zjvC>*BSO}dsFy<*RhZtL%^9oCq|h+LDQ7tpm9Se2rU40jL-{VR5geQ`de6#1x0HBJ0YzNO zzks|J4j%gi>8*JLnoo-lj51YJAqEGsv2Ai-(jEp|kd5_5ovu4b^>m*TB{gW#gM@rLDn z?O7joLa2oBvFbee$m&HHWirY_VIrnIUfc_x$<^}(w?si8a}}1+88P=>8P5HxK2qT` z(%pBu7QK>az{qLE)S?p|xEz_FxNYgSL0DA?G?g;^eMJn$9#B&SedQ_Dd)gbcogpDv z`-gx_aK0>u3`jR9Uy(5Gh@2`{qF&MWIGym0Hs?-!nIe^du8x3F=d7}_B#mf^;nuYz zSKg9MR*_R{mPGSNN^QkCuL`3V)38V6(&=7NI?s9Gl1wq3$QyZnyXDg1LL6QwJAlyU zK`Ut27mIk+wM4U(_8S7=axCIx+8*>Hzv$c>?lE_hJZG{vKjx7emU`7{-g|JdPS6`$ znl_QEVM4F92d-gn;V*EJ3`!gn2|8@;(+QwDwlnIw2uoK9&lAYBB&HHTLST6B3Xt_n zW{sUSrFWs;(QzTiU?g0AEP!1Z453}>Di}L-BnCsxH_g^W`bLlFg2mi4< zpLT(Uwm-Oq*jl+RV){Meu-NX0kEc*l!qg>PZlX84vlzReH1FTO>vG&Q?rJ4=UV(bY zmk4x7E;Tl5G^`b2RYyOay(r=A z)E#ygr=`cl=IhCM^xHJD)$#d7UL1!X=Se%Co~I0P?tve03}ihf2CnOhf(ZGF`|r#1 zV^dmgs3+8NzR8wtc2B8mu(M)|))3&+=Im1b!EXO$Tt=SrTdF|pAAMKjfeD7TP}`dR zS)F-GWGT10El7vmb$yjyq!!=9`+-%a{Uan3KGIc0Tv@yiPVDS1&ufQ*k>~QmG+J+x zwe1rMO^j^&aWz*q_IeWSZZ?hh`Lj*8KDx{GBnT1JLl_+KY?MYPk10Jz!=dFg8;+sY@=pPrsRy0&h4RVJQ zo&g4d5f>%!>pjL(DI7ktDa)rHd6TBw_>w)R(sU%aty@eK9|w)@?=V#xBTv2c1d6sCU# zPU97a+~mFWd9T5bDDQ)QGWI(N+`CHQgCFlwuE@*X+ix=?Uop67mYVe40~ZGLkGj|r zHd9wFeUH*|WW`I>WL!EL3o7|5TzZW1A#IE9taYBH3UC@D-I)A!G~K}^HH}~nes5V& zzD7HQK1^C5ozins4ty&ajnw>Vhyt%SPVE?E*-^ZhBrvVls&X4#uf__~YW5e#@_F;#+Rb*8-@*8G z6l{d%nVfB;Lc5Zy4vquQtBBBIk z7I9*!=N4SLzF~f*ux%zFDk;Uw&1mQJdfK~XRZ%idnG8BwF;)OQU=q*+sE&&8$|cJ- zLz7a3`t0Jn5`o~zr5rr9G<;T-DA5UC8*W5<2Z<4|n~G^8^o+B2hu1!llYq-wZloU3 zr}LDh2*1iV@4y8gmX@Bb1@B$>Jf)3v${>j@^^%f9yy2p+G0jSbO%E)`PR$olmRXa>s@rZ^H~g zK*aia*`u*X0Zkw-)m64clFiTGl%e}x+OeI9bx94%gXsnnHoDp8ILys$fdV-tkos&{ zLuR`^TPKW^2#jD^2^@H4BnE69D3kUDsWl=|vu+lF2nf}%9X8dL7;ukzU7Eg!NWmE9 zxg&b7R7(?x>{A38L_PUC-kYXJb09qCNx{emZ!F_xs1asVJnJ&T`G~^zZ|lE9f$Z06 z-=$u^zI=oJmWzX+Qmi#E*u=u4i+Xw;&6L-M1}CD&20dt}7FJPEc@tl(Uz4lQ4BO2u zGR^D3`)&C-t`kAhE@Zox@-T3)$ph!eqHxOI^<>ltV$rw}hfT98|RHH4=LHg9r`9C^Z$?Ebf`OIdGgn90% zcw&6;50DKZab0(BiY%C@g*{=9FT(?)RV9xbpr9o_+9N$}O&BsTazfcDdbYQ%O^EP| z(%IvSHaqA7ov7gEImZk{(KPP3Ly>9!b(8v6dl!3VWx3UnW+XvM#fHJkH)Y=u6sGCJ zS%w=9VdQlNs2wz$#-ZFJFfgFBhmz^liuS(E*qoxsg0}25k+8~yv(lU(E9g?&F96+h zL@hq{T78eoZR8!Xo1CVw`=K!ow%Ud6BHjqRyPYHRMDJ)RJ>px5Bya&nJMnPTYUs=f zdGxn^dK#$B@n|QJDIy?9Lfui2PR$~n8c9U&m^u-S^&0Qm`X;#yY}V<*%gQeOAJfNd zIUx;nJ*c~jZ#H*ZfZ5N%q3s!kTfDyEveQ1Wqj33!PsC%{r%16dRpzh9Pf@Pkws8NP z;W!{Xm!jq})f$t+Z^SnHAC#R#lPJK}Wy`j0-Lh@lwr$%sZ`rnO+qP}H>bpI7(cKYm z&^^o_kdYZ@@3U4@WUni!1l^jp@WXZS*ecTt6vo2dTkewm(4F^73#3iY^%RNt3k^Mk zK9ZU`(W77HH63_3l>xH!rhC;sZaBW)(bT1?>Pl<0o&ggY69v6`9%3%v3**f73pARA z!tqN9qzWW)p*GHK$P@~kM(vlSUridVg@Vu>TBpN=g*j{EDyj4y&E1G2olQ`bzl1co z6vLSdES?ay%#~)4&n2k8YB*%!IvBX{?XoM3xeCbyCLJFhJAsSJD4^7}6e$C8?z03R zs%5;b1VMUC@MtCn?0)7cEt#4WGH*AOw6|?3xqE-Urw~lNWA9b1^8?t|pZ1R+t00S|Kd4YQn~o^b?@F>x zM;x>w^ezP8(7R;W!*3HK9z+3(FF1<1fvMIx|H?Mz2@~X?m(Ah&4jz5PK4I*Ma*LPB zFq8IwY|y_5_k*p7RPWSyK30$hbBZ@vku?1LKUrsXrBgS!1OG1GB=1k9)dn1wW*|hAJ8jrO>E?t<7r*YilRP$TN_V*_7ilqb~5k6DtQ#UMyNzV{zLZW_Gm}1$UIvR zDx`!{F-QY!aXXc_6YCdj?d=%7hb0w0ZCq><7oN`Chi~f|Awm`Jf9~dCdb0&+DQ&De zTkT1Nk?)9h0EydtoD-24Sz^vD3CpY5IJee76WwwDscuM}5i{~qKdH?3J*4o9>)Rs9 z8LA?)wF4WNp;oH$9^~lY6`K6m>3s9@k1~t^m|SBnC+yR4B3uQenOW$(-Q853k>&k5 zk(@`E0^9txyahQ~>%wg{;EditbqR{fvTGX1$Jv8rGT7L$6JAJX%g4v;G$t6;qvQol>Oqus6@u8 zX-43>P%Q6qvC{I`$*!;}1tN`f`AuBt4-2&pw&g|33kRlVlZmS|lUcp@$X7B1cMQ1T z|9qiZA@-E?;#LFd^f(>lQzl_;JJ9?YlTX87c3H0j_ax7bq-aoGqMqq^3eSw&S*YS+ zK26XCzb3GHYN4bA^LLM<aii(`^^~He+O`e+8Wqq z$VAZp4(xrbshCCGd)<(lr!+qQ(IY^!=PCxRlYb+51#Z>z@_bBw(LaL+6Xj?2llbOsN=tTd5jA zUF9S5RjBlHAj^7auKuzjLN5Of0N&XGT;j8E6z$tSc)rYX^|6d1)eo>6wrR$tS96F& z{`#*42Igpxm#lhGF7|@q?>iDXOkR{wC>R)?b;$fF@eFK^>!P*%Jm+3(>R;{J`Mfv0 z8o*u&WsO?pMbTY8$p->ZwJ@kdk6K=}EvhMdWh6K3C0=Qjf~ zeD5+)rgVPWkPAOm?UHKBoM}SWNop@R8`v#)X1nD^dPMd3s55DW9m~?W3V5Qqri{;p z9EBp?Jjl$gS!?uJ(a+6XRpM4G3y0A z;1cuwktp|{hof^$P751FPtoM0gB;pcO2)63JOh;{Tk zUkF$#8GzGW_rn0DHp@vW&Qx{R&*fyOv=pL!8NdNK43O|1hhxU*fS%5<8R{vtMWxq& zV$)m0EIqT^Vv3ve!;H!!#v`sK0u9)9F01}@tQ@NI1Q=%s zxACJ*o7%SXrxoC<;FUC#RWx?{s$RU`ycoh&mmZN)M(F}##$qC2i(v6pjqyYHh7K=L z3iyY^2CrWbGH|7cMatXAvj$%hV{8!QkZSMTu49^QFGnBnG+@YKK)Tsm0j(B7-u21e zA@nI>aS0+Z?Sh<|&!-gi&;g#YrM0}B{{>w29f84`k=iFz>xa7w3dn49i(@%y=#%=G zZi<_W#|D+A<{*}=bSffMbQKu~bIx2a!2K2Lr-eXAw9INA6&j-hHbMdi}<(hQXeFk*Q^I`(N6)uP)GSgCsec`Ot5TCJ46b0 zyXy(L+;29UdYL4vqzy*pQMW3|HIDs@?0aLwzCJ^CH=*z-^32wq(S#F$wt;H*qKh?O zJK@?FAxd*swh^;$Dm9P|?jO$W67(jp3>R1};cnsE-_-;+4ou3wSHP&k=ZZ?IOG_Tz z33n8?@R#~yBvRI%I;F7tOUY5j%p)ri?D!UA^Px2ZE;A7F)8;{e8DXDg~RYulJ_!5tpU0z*8ozIt$n(9gM1i zf3MwL^}1YuOoVKvQnU=CMM_VrK~hn&SNj|qV3(omJ0cV! zNM;_Wnna^z@txoAz$CEdIx9LeSTKW}8!y~FjSk@8xQA|m$0!E!3Uz>Z<2ObYf?x=O zHB2s3gx;6MohvoD#z=%Gf7_#7vA@QLfpCv;Ta$Kgm8_V7|6Io~Tfd?$^Ae67p(G{7MS}@N&oPak1bAC!vbZn-4Z*fMAb==y1rOtbbh2L*nQc)Y+fki3jJsby}JIA zt&J}qne~N@-zZ+;p*qZf{jNYCL7wF}@M>ED)fcC}0cc-Qt0Zv%nk0fLpfo39dK#0n z!1rJo#TiRJ%TCi%?rl-@H?0*ok-K|>F;)a1tObc@;+{=-Kvpm-`HClks}qMG#DZiL zSBH^Mq%RT}@~6M+rF;Y^zL?v(T*!X~XtDekfEEKYJ;(nBXt6RdGX3ZDfAX`~=-FBR z-(@?X%1c_WtmREW3oHaWz%bj}f3{(!0EDJsn1o7$kroK^2*lmQ!zf4t6N&N{78DB- zAMl@dUVm;seXM+TGn##!UUp`8%x;}>PVMWlGoi})5oY9NKyZjjD5;5{<(cT`6jDIK z!~KIrgoni2+NSg|=+1V1k!YbQpkRgiOn%V?VL?HS>Udq~!JwJ>`v5z7bO96)_>~n^ zl_gb$K?ul*h#uJx0un*Xg1+?;`~&Fu(E-B>B-)k`#`saDrg4L|Pj5;6S3}?lD2a(l z-?(t|4q!$4wfpS-0Wl8Yo=0xZfL?&oh_v~XIC1>T>dyQozEi#{5nz6}Fs}{*??eOl1L)hZ z`%q6nK`|^YppAg&0|Dr99-tv!1c~e3_4(+hps%7qzie?~=9C!#{p*o`SnxMML4^$G z2F%k|YcT_QC-mbqfZ-H`+`WYMF__0|f0hg=%AjAifCKz=YRGZ+;o*Na9YgvFYkEig z--rTE?9<}tl*PX3U{*vP;$~qZ0mZ|`r2>kI0p;-lnEQrt->iTe`AMGK{+DoP={YW@ z+Yf~rK%XkGIG2L|X!Vwl%8PoC0HRH8kMC|*4TgEKxyQ(s^lo+R7qX&)2ngWc?3j=N z64Ae`4FiH8L?`&CGm-)0MGc+k*Z87O2N6Iafp6O|?)*0P`=21pH&j#bmqHD7AN2h;4Gt_iB@k*0R?3V}!NCAAekd0JrWz93UohGL1O1gR z>-~`Jx0sa<1IIF&f6%v^ZjBi+;WyHN^yDDIM`%vn@CPzrUcKAEclV!gCsJjp7kl2n zlYpSNh@6ZN5};6ik00r3+lU5|zm7t+5W&39&Jx&vz#atbUn@8k2g+U~PuzFAF%1LY z?D})^bu<|WV4j}M?#^zu*VXY}B)_iu%M_v|ruTX`GE5LSkCw#g7LnF*9xrBIhy0mR z`bRKVY(R7JN-OO9QqU;~k=*Ydfk0QKHk9cEl2 zzBt?Jg2>rL7ZnDxRFQpC;PNxF`ttc{jXhuwfoQHpP8G49m5 z{8Q$z+dH$^KqVc@mXT(kt*eP89E!eO{m|B_+ALslvF(H_`;_o-mgqUfXEP$ z(*G_gpuOe@xA?-!p?Ldt-(vV;T1!%xv&gO=X;rNjlxAEmISQG-`4!-=ZhRRf%~#5> z$cRi2_f}lx_%|4JW`9;eV(XtFXQ7h#m9loUtd!axgJWqQw9^Rq6yBPEwE z8EwpzsKMgBOfE??VoEQtcx)fR? zHQM9=rshASr)HH=r~Bf+6_Y=maD&j3(pu>@tjOSR)QeX_%f0r~y1QS(3BoRQCf)z) z8I8NgJ>PG#?j{H|2VOY&ZZNwyJNkE_TZN2O-Lv*Mui|KuSBhKC@eA{5=0gi-c1)vH zP)o+j)A%a3J~I5|p_i<$N7Tf}O%=Cfn>LrHyWnx=U{zN)L7}xO(IAxm#N!}jcLaE(+we!MDn+lF zTlKah&}pDAT2u8ciV~z5#RC<5kf%x(4xtz?HHv0;q;tk6Zz@RUuuY2*SgvN zs{dJ4oJ7?n?hiqD2{MfkcpLpH0|%lz+X4UQ@&n2_sEHoW!TXh7hau78zaxb(&iae73S`TsQ$oD zbIgU$yC{P+UPOGEjXn8^S%q_$BCzaW)JfN9F=8F96o_decxPX@c6!si zo?Is2b@2>2X}Fls_to0Cl%v10qVk9)adFv%k#iftmq^T%HMuM5sZI~i zzJDd=-K~7>D-6R-TdBlk^+)TuH~i+J4Yc^BttRB=2rYTHrR;flRl$Bqt2u|$*+;Nq zcwSsgj)OTq9?Y6n26@>lCzLEVd29hzBf|}b87|}`)nVdsv9TOCqZ>8LZ2D86|3r;o z4`R5KG^SFJ+vbPC>lW*DzHmsR*UE>j;1h)?xMUMIT*8d<_6a=H$u1|NS4%5Bsnk4fCkv8b6;6{?dp&lTUTy$=!7hAEdUy z6cVd(x(Y~MGvi`&s>(}SK{kmVWbh#~#aA8ZmFOKVY*0-{gg({hXd;Yr%bJb{_Si%) zl8R-&pz|P0%K#sJ0n|UG#}fM%B6wI@rVBCH1DV4hFl_R&-ZpAkp-@0BQ< zHrb}DIZ^n2WfZ7c#_N9xXZhXtW(klJj|X_UX?%-D@16tG3kgorKMII%P$B-8)?sg)?^c z1M;%4%U1^m3g`g=V(C6mXxNCebc;I|oB;XS~jA8BuL4-B*AP8%o11}oid8S7V`y*7z*?hKAt@+jhWJy7i(HQiFAN4coADW z=on+$3%94*E+j1MUflj-CM&$=1#*LHMhMNw1X5GjhN1~4#8Rs&LZHIvBjnp1c}o^J zLL;$z7Mys7?&KvTI4a4}U^f|KnGU3{OvD`*UiS*>^p?L%3vmMXBwp>Ynea6>HSjle zj6s}xp%%3+%kNZX!jU%ZPvFWLs^cIHR8wdvit>8v@tzyZD3Iv^Gd*N*^AWk$(_Tud zgm!%tO+79pV$mtl!?7O^j#*DFupH8B2m3u>pc+A>M(gNW_A>Oxt8LV@Gy0r{3Dq|j z`~?B8W{nBh0B*g(=WIGB)5h;VYLE%YS7K^CYF*piJwd8?VZUfjH@Tu5CP(lw!g*LH zgHliXaQvO|m~cV59yDXunl;rD;itB5&h<&oMTxTl$VWpP)CWWTGt==+ziHa|ukKTh zc$ltDrInoL0&wnlv8V>fOoY@_GO zES|L;5f`PA?c12mF3rlLP;|`Xa4Up%y_QiOd#5D+9(D!Y01BjnOQAvi=-^mXtmKT) z`ca6aBke6>cbJVG8@jzkRm+~dpy|>cDtoH&*?B#wF4GQ46f6BPvHNHOMshghF}Sw6 zNk3*2UJ;Z|ioI}fuDfgSop4aowTO`;?OBU~Gn0AI+0!|e;}`17SXs2e-iSm+H<9-^ zeMryoNyFaTLY-kG;iqS#6Bb+7&APf|oW8FE?oYZBFR2r5?0%FXyDDU*8bW|fpdt=~ zXwOhqpb3ZEg!f*5E)#8`bTyf}-)0q&@^`l@g;2(>(L>GB99=VqR1We;3F|CV=B?2h zX%hBX;IeLmU>t28*Jg!YNb+S? z8_hXO4!u!+IZ&*n9>;CUZN&5AX=N8rRsRUDu`u@_n<3@FDKy&qGNb*^+S+qVWV@#qCIPhF=oL}Z zKK^(Id6o|IF&wkqCIi+U8wA2*w1)fhy z0uZ;f`z}JY7p{&@wu_%ELC+}%-KLBBvitqxZ)T(`W~r69@HNG52UK0g+%|+{DoLTFai4p$u=9<_{Tnl2;AxIa6FX9kie93!Dc6*2fDi06KF@x{sg1 zL9h7bC@r$aBlp4EAA3tW!}+G~0H1$TW>gXK(TyNNnIBlYW7r-=b0KyaKSd4dOID`j zt|o*zNSDKE;kqTdiQxj$-6WB~=qyKKeH1E;>b)s}crg*Hir`bNn0No7E%hxXIe0?Q zsWRDsFN>1MMPt z^SM1$1TdRvwo}z!%D*=s>1t~yd+|snr2@AX?m7i<4wSeV;RHU&9H_Ia0RQ+>h|OjD z3rKglw$yCGIg&fqe#@f)n=3Wih45;f3xCU%GV-zI>{vppL(Uat4mAGV$sVddyx|VW zNDF)1@l}-ckyiY+kLNz!Z2T!_GS*c501B*Zf4BVhE~N+2DBe2va%}ts?CJEs=Rbdb zTvU2)`96IRxu^|RsDg%DH3$0(GP@=~!WAVU%bV*bEusy|i@>onR8CH^29WScHh1Si zT^p@A#JKf<$##Q z_USHrWH1yG25M~-Xx+8Pcs~lLLOArHlO<|(!Lksa^5pAwp+*SnrlX7Aj{=3n8TR!Q z2#yRKoH`nnxY5yz+2tLHj6Fi@idUyoKU4c7xG4`fTAZ*^W9g?kbE$h(czpF>y$dB8_CWh-aaH5+uUaaKC>CpyAqcw&pmrmSh8SzAmQ z)8y_te%B}T*Zzt6bvq)@(DT)M-#3s5+f${V{mHOJifhn@UXkuMvqlbV2(O#Mm3|{W zndq4}aOm<#0a_}cnRau8$EVuqLsXPB@+y+Re$%K16lL1sYytbe-<^JNI;UL(zq*RE z9rz=YN!o67w}l3Dm7%eU|DN9z#|1~pjpcb4xo-5qU%lZw=12qLu=4dX6;^Bpg++yArRMC+;@;c?7yk`}7J1%sc#Gk5H}DYMj`{COO~7R7kS;w+EuT`Lh{kHjvl&1kd_W z)iKPomvSCYq%4Gl+`!n)9H;?tN%3g@Cr0KBGM#~&mA9h4`o;YobXLfPI5#t^oeaf{ z*lKivGG&<~3U0sDYF5v_)K#>$Be{h^c{97Nvthl|YV^JaF!wflbGc|+)(dePYIA~CI7{uTV>y3bR3;LKMrtK1A^LGnX$JeY2=>nF#uac7hal;%DBq9d8Cbe zLIX8J=s~=$<`G8UtO>uxdlj-5bK9w~VNgH!ZStn7! z0h=u~1#p7lxE_rK5#Loy$_thGHeV{JXBN*jyL$j($ZcMBE+8y61Im%&{_*ix*rt#!&980gu2T|Jij zfS3?pnSfwr@01h^-T=OgN#!1U%&|S^Uxvk8F#ZM1E}LcFEb-Z{)@Gyl9aI$pe&6Ba z;yt#w``P6%1gNCwg3)a4>RetT5%FV zRJmjs{28roZ>VA+7M=H0rKi@$*&1KDL$c_N_Jc9c*vXtgyUR`)rVA17C8^RKN%HRy zRIJzw(n?Q!wRIWruY?s(M#g)QR*-zx#dkcd(Q%=-nB_{sXE4>Xz3w|D3~;5?k1G(g zEthjjhhsy)^Ph^oeC(qtl1vez*$20i^tZ|BeMl2~32NO}NL z-uqs;uCuQH6=kcQ9MkWLQhLiQkP8fM^4rbtU&1O58`O=UI_v3io$}pl?(Zzl5#%X4 zebO9DvIH3lu}4PusaDO+)hc#qzSUEXPDzd$Z#lud5nsWGVF7gn0!w&}kpN*$j0 z^4^u2WizOsPh6O4{I7b+WQ>DZ#Or-Y&2j4`}^)4CT1U+)x8;D^d#%oLt+P?rS!c z{RJA_hL^rKd!Taps)OVnbb=$EhPOmAVg6QQ2xQ>6Ia?k2^TYYqV>`8`wJ<#No({#L z9qz1yQ*q?}@9M_Kq?(DS(lp=SQK_);CcUmA?j5*Zl}884W)Z4AN6wKw&npOekuM_u z^518j1A31y=;9gm-NVgFeDuE~+5AqCj2j?VkoczUF`tgGc1#*IIk|Bqjj)o;4c~Q& z+FnibtF``mT?}#*jZ620jdXWoJl5#}K&l&pi~(M!q#ANPu#w|OzeDO%e}CW>9c`Q6AngP4yZ7I;U^whBBw8FX>p2CE69 zZbTWU!)KkmdleEEUTw*`Tu#^rB;z%wDvLkNW;z)?g_e}Z#Ipn*Uh48Mq)nvw<<07xVhPyi80Ru&n3 z6V;O)4`eCk5-_L`k?{|@;4mc7tJpd4JA>fO=7)Ibx?imKl(tccYdN24CxIXC6oE!$g z*YoG>Ibo;)0?EMgEB@OpA~dFz)vlUK$EVu(F9RhNu@8VR(10NTAff{Szq+tA20;V| z$QM^EAjFFrUZ0;g3nHAjKmDCtPnzg=cH^oZ$=BAM)}o_8UfCNyFibJrV}KxxzIoju{>s;U=FbM38U~Q1 zzi_{AH$4U$!CkL)8Yyt6zAhq4XojCO0gCD2T<__dRH&ir#co6yVW0R|?J+W9Du6#X zH-8UF+PV>mgMTi)sT84n?(Pv71SCI0O1|ovYo`g{2S!; zODq`#B40n&{vWkY- z>eFmwVopwlZJ%q6?(q{|X;RO+(3x9grAbQ*e=UNDAoi*ASrorJ4n@oZ^KJW8ZPbaC z<*4mqH|sCgHIn11FEYs>W^^2>adILO=^&(?>V$=Fp>{bl=SqPGxJw>;Thc&9k4Mh> zG96LR5|7S69IV!q@y-U3+amA8y5iWHd1_m^4I2!`v9^U8F_{L%a+8pysOaNP8w4?* z^W}}+&TiMlul2nOjm)cQ6a`mSq%jTftSNxhcv!c}M@ZYb#pC&Nn&?fPZcARNIvd;b zAaO-5#|hum@IK`uEw@cFp`Hh>xLN0-IbY@MTAj!}@lm3Ew8pI$o-p4)$C+{JA+DU+ zKiTQVI2bI$a?Z?a6Si#1ur&M&zbzWmD9v@qR<>Uf+gX0DQ^$cBsd~1nyS2Nh0O$RU zY%=UeqtY=fh~AB*9FhC+@@z1JN9$8#A$DR}es^^Sc1)KoL z2anHG5;0_X(XK%WcP9_)w|&%% z4&QRo9u!Sxb;TlDhVYN@6m435qxm6AWXb&MFjMUC6-jf6FgcZ%sDJ-Jw$g1og49&_ zPxgWuGG{&w#AnQMz(1V_hOOSoEGxG}wlI4+_=ep>gF5;F)rqabC0OoWs*+Hb=aQhC zohldurR-2zzDm^^#4*~-jj}iTdoVpCJ%c*8M-gIO10m^h zVU+%X%h!@Zyg3mZcQu8b>O!T*6iTz$-HW z#s{7Z1y`MF-rHP^=tl{|OQzx_biw#!HvcsUbDMx$MkU))XJOLz=)%a+Rp^SVUhX5$ z#)Ch{PW_PBA8a|8JSw`n`nb4JF0Em~V$m1e@!6T@@)+82WU@+qE^ngN<@A7y?W}q-(i&qiQx0vPXT(Rg9Cs zQA@8h&LLrAFe?xk3;VW~J+)hAnBBPcg50DhpkdpYF)JZRI~Oe*RH3R_NhGQBP`0P}QZS)Sg3?rl z5hjhb#)|5r!Ur7pmI!tg=SCuBzULw}gLSrudddyD=Ery2G`6*t#>s&l;bMT9j4{;` z6)^j3)p12ty|_k29%JTeenh7jPv{eRHBfG3%cm?lTUX;5Pge`(q(7{?o={uO(^R2pVS%}0rFw@yPW(QyD%f$c&pD|U6(;TZK$*CC23GY&2g7myj7D8W}K z6lu}hTE_=kG}L8ZHSAuf%B{5^ho!J4(0XU5dlJ!_DeeCLjL3S_?zJpEdR>z<;NQ=w z#l<m$WcKlHnrFO#X1nGK>jZ+!b@;J)&kC2k_~?r-!qqt8ap+>DTlK~QB} zn1)ZNybdZ*XRftwZqH(tVal%koEm4o3KO9L=%hc12cS#pi_GYHK9VZK`kGz%#;tdHbR4ybmtZd9n*oSU3PVpx% z#3z(OZxo#!+*y%o>CLg=>J3T1E$?7Hr1IQ97C$5s2IA6weaBxtO+(W_avX&U_nX<(kigc@mpFdE_>6^Rhb%hAW|)%yKEHL#$LlNX;G; zPoVm6!6VPTm=YHe?Wm2GsrtC#dnrO8++CpIX6g*ESVs4rw!`5{$CD9XG_9mp*DH1< z#wcP+17vIy;TFl}tR7aemoa+3CZ9rAbl#^6g-{)+OM+VnA|&cQ0kE>d)w@hDJ!DOq z6g@akqYSq^QJU*jhtVhh=Z6`1>tbWNs@76S?*Wro+Si+>4Nk%W+o#c?S0bRZ zpOhFE+S&AOmV}8g9T7MYtq5?>@%#(Ns4o}3^;d8sfU_&YI2qj&8gVaD;@E{SOaNOE zZjEAIy)MdZ0FfkrYyi%cqO@;feJkOe}L!+PYy3!d3T8rc#9kcVJ-?v zMh;IM$yyBdb3So7<95!Fn@)e%6Y9jhyUk4M8?)2Ot~R6?s1v%UIKhgqtbEz36oqrU z(i{dv6S_oMOVi2c;f~=&PQnpnDHB#}s-@hR!|FeA1A0tOBidOvBTXh+bM3S)sagmo ze#=bRd(a3MkeO`t$N*58Uwa%Dy{Ha3@7gN;VrDBF>EF>z;R`dzA3JIw#jIaSQk4Yt zCjN@>JL!Wy1``0VwiTG+Y-; z)3P$aC$onwK=GI!hNw09r_jeiU1j8mu5EF>hV3r)2R>v&AAg!PB`4uGulQS!&R4dl7okvYhYj!KqU@|T0y_QWqkCKqmb zk~}EeBHQsUyjC%@IDJ|qo%tCBN?(QbKeAh*2tPd{THoH2`%LUN$I8}!bKBMbwSpk^ zq;e0Y)8ZGMZ||ka?@=}mr{O?bP2LFU)ZuPWxf=0(Zpmxit zsi?Gj5)+-|T8-&=EXFef5Vf-?$)AyGp~f&;%u8f|X$Q9+rIK&zdtF!k9Fsmf`O-wX zh)c#3xr}TN)ob9A^7>p5YrT8#mp_LDYiK)_Ytp(PGQKhQR`Cr375SvHNfOsE&F9wF zrheGN7C)tF-&^B}6i1Uhs{A=ux#?44@3@9TF*@PX+lSoQ;G9$m#+lkHFDgS&jX+Yn z3xG7Wk(+Y;uWwN|wIV~kDHTGothowLY&g`~S`HPIZjCM8XG55fY$v@z8YIJpHhTU| z`rj=SQz2(2AS=_k_%Kmyvh&k!V~po5oVqIbEZ~yLO$eWhP|Hfq8+_v^2L7%=@9u6; zrQ)pRJTgPsTvS*@#W_F&e!4S(?78@75niJlfrM~`(eQsL|J&8sw}Qy&MXpz9l&o!O zS84Xc17s*2gWSn}PbX#V(%8tH#r40u6yXKUk7QUF0KRCVAyQKwFYNg+a9uAnSxrE- zxO`19XeJM82ZAoJ!`JrXbkQRI6U2dp>okbj)vX3{&B%+l_PjykG_iODYCu>pRw&%t zqpui6x@@|=czJKA1){DuFtuQkib94ag*p$6d6oG{h&ih}ldmT-ER>}6{n>1H-WonQ zj=K;-O&++yyRz>aZL=N$A1MYT|ra@uBF{1ueoW9*2JFocBFOT*i1BJvW(qGv7xaW!GaLwKKvw$6AiWl`LiB2SMVEEwtVYaCE!Ox z0{E13Mq}U$t)0iUnxAWbwAq8K;o&ESz*2bC%{+sinUC0qJgV=xPIUZ-c;cF0HFyiQ zKhg0%C$ijNwKCsWtH2l0y1BX2wWi@!(o2Ny;T=+HykFGA&mwQD|9=U|RCKE-Z z|E@I82%3#}p+`iXJ1BL4l}%^K@$IZ{UkDQ1W4|fXX5Bbn(}%OMxH6eVBReJXtgN#U z7@;$+ntT;ZsMv|upBteT9JknJQ?t5~Tk9CEou{*#A9kkq=SL5*v$l#*zJwbQ3wrAo}am6Pe_4^dHdGUSp3^C1X*L^OAJxxV-b(XrXL7B(Xb{tL#n+<&PRUzBlh zt#~+He(UPiplL92c_*;H>7-pho#9rdm4}R5DMDp{OBn49Da``ng?b05bl5o`2dcj4 zkjBA!S{lle0X(vF*S$(zA)(}yq1p=5H*2LF3?Tb8EV z{bH|H=Gx?a!1|9h1GmW}NO zlFgIO`8=lDx#J$H`&P65Xur3z`Cn^bYlHS()qNJyl>W>p{@v;CZ!Beb6x(EiR z-jVDFab^Dl;PE_@H`}!~9M*3Tfla_cf6}r#H`M)*dGmzWp&DmRbw zWSB-`g>&EBBATbM%i#trt*TEJr-+33s|(g6nkRtuC@eN>D~w=D z86?Y5E@@2=iR2bWJH?fM^= zS1x%BIWg7lLrqs^J8$stJn81XTMuinBhZeB&Bnf*oO-k^)A`Wr&0ICKmpiJu)`XQ% zh@9-!Vad=Hcy_(=jwD_`4`7k~9(hh82tKYT+r(%M-}2w2o6OL|?;35kPAB@isJUWk zfmmW-T0JB(VL zgewvlD+5S3`?2MW4!_L!We@`uG(4zg)r_XLu6}F9KQ)y#D>)Nv^2K}vwuK+!BelK5 zM4~xleAYx#LJIG!wsUh)-|d?e%gbjzbDvi$UdMslXDC7G)XrMAO|FYpm2)m##nQQJ zTnIe?P?3MYuktgg2-|6Vo-y5WW*hcc|A(=AiWMbVw*PEOLDoQHm#GpVF1sZ=WU*EfbmCcY@*qRf4U5XlJ9u!tkA;lO0v&Xxh9Jtpkx z`fY}cBotV6$R>s9gLT7;8E4Bm*UhWj0fnO%Mnew;#qQ}HSlAw~{FZzXkBy47Oy4g3 z;VeZ?rhepzfo_84Dg*_pUsX`nfIvr-0 z*-IIAdsgp|+o?V{T^LH@^1Dc$f;o)>>ua-`ogs>nAzI?dp~P%dxCco8ewSCkKXbG9 zSkxF{wv7|%YHN}E1Q>+i5fps^xXI^@~#HQ3GO!~oHiGyJa4_YcK*&U|B>)~8iWF?>?{)!>vw zOox)n!GmbpCdIkV?KWY=&ju-u;L}aFW|Cd?ose@1KY#PYY7D5)z}xT!JZgWI{nd={ zzk(=|o+m}9)K%;3L})(CGRHP;*IbqQDk~bVs!=rUXckjhw*Kqb0TZ8j250;o`_C&C zQYN-6O^vPXZg&JvMkjYDX>P^@$J?tK68(WE1`~^lr+RCQL&Eg^oeUNeml{Ff^G$}r ziQdAlv`CR9IXjB#|dz7lA=GKBI-H+2@0R0Rz&|%t#yGJ%77<#L?f1w=O}X6lD>;n$NG0Zb;h*%C2Fc_kiom?)3Xsz zQRS@Y0|1U&{#nqpzm$(h6rXc%PwLnV=IuDZJGXY%M9tGUvXd^&ax2(_Z|x zlrL*+)JoAa&1MvK4Nfq%_Ax%RpQB6sl7<@+H9=Uh%*RWQYejNWXb+yYUbv{YFuYri zs~RqGF=4MK3BbWCQVJR=XH(z=ksoH+KC0$APcFp`&w3OUo7-<0N&~SXK3^hKTTI2S zL^6Bk^NwHX$A42dDBqx5nuNLgd8nLwNC*p}6tE^ySWjZUT?(Mf+1T(9e3i5%c*?QJ zHf?M&+Wd3M2L&BcjmGa?q@WZ)2EW zE6T)`_ep{_TPN)UJ551Gp+}l9SOS+5Ns}##Sz8*qj-;^ISllljM~UK06d;xJUA%B9Y*>W^hdc*A&-xQnp&K#>#eLuX{JBd-2_~+v}%4zRRA=D%-nhtS8!*Q?(fh$_l{(V@osW-y`G~c3PxgQ* znyg**pHoDBBSC2W{r&xdUn(4YV_+wcbo6zgqo^zzKUUi)QqdIv6fR_hx%I9CL$9gXbih0}GG_ z7Dg}V*K!*ozqUA}{uAr2Z;2zLJ;*v27Xzn%m9N~`Q|HtsLF9VIzsp|(u+Gj#@OdSJ zasbKb%I*MP)LXSMu{<@se12`j7+YDodW9&VeUY|k!3RgnOFHu<+>wUxwL0N90{~}Y zVnSnM12_W!=*U#3|E8_EFo6G>9DmsSTIr2V?at=uyRrt!gCB!=dkNe-Ha>y^Vdv@q z@b3D#ezOhg8vvpQO=ky=@;|}X3gTPdo#Jooz2BVX3fKbVoU$D-0;K=_`FbpREum53 z(z1-@+xOL>O)QIxh%3Y1)&u@ML_%$G1b1VoqX$M;=SbUanwWyy^YFZTzom>2&HHug z{~}YHSeb(BdvtBIEq&sH?ff}?G5={qZ}R)CA+dceQOEZ?iS2Vv=SY*;=~4g5HThAS z_|5I`ReSG+`0{-vx-qo=PE9>&{ro*-X#mvl{2Ki&QA0aryPjO{w)VUJg8^3$ zSBi_A{(X_;!0NvCi>q#b<_m>zKmu@h$L%Xv!|H)LGS{a&odUdIHumg(1#);-e*r|DgwFl@@-&vXa zbM})O04N>R;xc1P;n#Za1z_qD1JQe%mm9k80%y_0u*bTQg)}^^+u+)fSfA*7Z-@ zOVY^g^uib>k-2Ijppx2sj6B8!S$Kx;?J|@>-FWbExmA8@39$ONN-3FgwAmGspXl#& zK8v@lzNApcdZlkFY*Zg534EzA4kP5F)?Dhb3#D6U@kWY)9ZvCsyy6~i;W(e1xL^`F zekBWYhQRfovIo%YN_hsdJQ%DvHcKZjmjmYl>0!k}Jb)P)Crn7W@hM=s?o^Wd7TflB zhx6qUBd7D42Lndi=RRwZh`(1_3%NF5jvc_KMZpvsR$;Y^&X7`q)jG#w#uNZI^T#-1A56XZPmG)AVgsZ8nV6dB*%-~ zi+s#$DXFc=8PVpUGZ-Dc!mVGkE5OiHXqo+T2f~YhnA)I1Q+`m!FAnpy*vZ$bqgum^ zzym$8viCTosv4O>ws&Yid}0q>N?P+Rj;LDb%uu`CB-%R=g(MP-vR%bwQTtl+3Cg^K z#GPwzhJ;1#2%cK*KZ|n=f%84y z#;%vH;4>r^od`?fyhIkR4HM`Is3bVWm1!1nwK$*E8hb5M^;#Zi04p2%yb!uTN8^bdFnyT8~U)(u@RGQ3kA)1C$133CcJ8%&A9Mt5HgI7H7RtrPYu@McCTS5>8>|d zC4tGi;uO8vtq0K{?M7(M6#a-Sq9a~bDK@<}8mCQhwTY@jeV#9!fllCgjJY;QIsgYA znILLmy8_lY6GkW*r#pYsPbaT11luN&-;@sjeMJ5aNo8SYV;INZSg5tEY0-YObtNQM z>&c_za&VQUwk+Qio6$eqV)?6-kR~P~uF9mH$)ynHNrdw}Y8`=|QT2dPczb_j@BOa5+_Lph-EC z^^99xWv9Pz>qj8dvL^z_d!Ap@YX@(-uDS)6hQOayoY_NBjB)62&Eao}`|dGbHI#Yp z55ksBZ9BbEdDPz93nVtjQ^uuJ=&gP_s_wlFYk)~pm5kVhm|^rM*}55I$&Rts~^UA`| zOJOOQFaDHjfyc-9$QoTHQ|_`#iW2$UTzA{TQkHIL!S2S-f93Kn%<=dcCVoikNZdp& zD`QN*hy!Wi3+b{C@fJd>4^ElR;%FAnV?E^rej|TTM*sD3e)P}9>?^+f5DG>J^B*$D z&2_(XUYAIV4&7&p!d22ep(%xvj#exDrr{|}sey@KD8BGXP_LG*rS+IdhfA)KKW$>Y z7Z1X!Jse9&JuBKPd;c+=wwfzW(W+(?RDc3qKPBZMp&vTw7(@D_aD$8w6$}#ZD_mO( z;t5y{g||*Y9#+E%yC=qVu)Au7NX8|?yvph^;oV>J?G-qgF6XS1wGWB$L_q%)LFL~w zk5V|dGe85w7K8U-7Dx64#rmRC!BWf0JFcLC7o*#4a@@k6a&ZxFs1X%`*&ek;^g2nW zEU^-PDdygq7TO?p=0bjaiZQ7V8;>c2z5n-LLu`@AP|OS~y!b*zcA}NL=YU&tUZBcioc?K zwN3kZy-0v$Z)zHHMY+rqqBVJScAtRGuhXG`gUsAuW+gG|ld(CRMKI!zop^M5f@kVL^hLXPuX7W+G{lH%f0#)hFbb3ogX*63 zXJ-T@x({IuUvX_h3nhR!)-9sfI+fHV*v8kw;6Ua&63(5FESF5UI$einh)z z6ab&c38Un!x}dQ56kutZyd{A6YI;*E-7Uebs^LY#z9U2(VnY6w=8s&cxdCw(yf^T? zL^5IVf-CNKmWo8G{(EWI;k~wc0y|7%JP;`w^#nD%gF&NmTm@CTk84B=6ulvi!Hy-a zQJ}Ry$-JSxT2$lyRBB(Vda`VevO_K@N1o|-yi`h0B@aE+gGN^LW(!iOd}GzaNO-?} zi7jwrrbx-v7c?V|HUmzOLIke&a|1m(dS!vz&p-09sB?bJ)L@59pDX2tklANQ<2Yl4wZr>;XnG6C8Do~h|XW!dGsFSbSyh0 zY3S!~(lcdF+-)Ogd!NgoyFKz|;N@COQrVkhjSPj(aob$!M$xP0J8NNaAun9^+a(0! zm*V?_L{RL>xQ=FbD}THUbqBp|hH)^f;-mdU!zF@2IayCZ8*}Kbtfdw^`W2tI7LZpV z0_e;O6Y5XX_;X`0iYa;da}~B(5m!gNg)v9j6r^^S;2dJ6`am@ zN&&*8yLEP)cb8e&ws?dIKGXMxio)O63t5!!41#TsR)~+7Nc^O&m1!@>qZg@z@>CX( z#2gwD#l*4tVpVj^s(_@A;M`hZnQGWIJP^gdtvvt!W#!&^?isXLXpBl;aWYj8jL5XXDzLri6sX1Wj2slCc;g+ELRppN6L7$4 zbyrm)Se38aOOzqfYItpLmkRYAQBqHA{FeC_-;FQyawH4Dl!6K51kb5Gt9o(r>YjwM z-dQ}D1^)py&1IUYG=t867WUwAE8HQL4Wy2Kl*9NZgFYx$(v0dTspW!u&TZFm==SQ^ zW27)u7S_f=jXhtdt9!q7jCM8n@y<18F!wqdJ#)1~`GdkzXxYiklcpRR6ehQCdLqR{ zR^odq`5gKzzC^10rf0-}SxZ=JSkKMDX2F!8|3j!5>Ep3->Co6?GufH9UZ zLdwS(I3p_pA)#G^pQ6nS+5LR{;toQ1&b9mr6+#Hxa#kgeUV?9t|KSx6M{0E-*g_g7 z;Bx^2SiRo*X++zu))*a%AG zRk0Jgs2+yQ$u<&AScqf!8oT~1o>p)l9T5TKvc(!RGvY9fJ%Z?bM7oQz*e$dk%j$j@MmT7}|71<$Tuzz%QQOT_&y2IXX+eb8@15<X~TL*u1gX5>S)20>@4dAM#{5m*^p%gk^S@!nQd7P5u=Xdmy{?WTw|5EBri z&VaRVlW-L>Di7U-=V_ka*<)tAH&X%k4!e9I&O+(MWnLu?3KoE(sI+{%tI<;F``?-9 zhGt%yeK}xwZJgGG_29$<$=K^FVi6#>7riIF4=73eyqf7nNHoy=PO!F(DC}Es8H#I? zW5jAYqBjU)Oq=|2ss9@FwvUa3A*!*cwAbU%i4(IohA$G0+ll8-ZFUsZj6hQ6BqWyQ zeZ<)21ACFy1#Q2P3CukXq78oSX854$w(w!*QW6Yx$$^)-32;nXC?!$zv%?U_z}-(L z=s?-M);CxArAldl$=g3ODRIrv2KV$uue7Ulnpm-Ig8K-|ek0grjm=*_IWwlfKwdLx zVFX5^IIAk^TLys5j-;vB14yA}-xbnG`cDn*3C?VKFCgomsM%6nBtWK{~d4KO0pSjo;9i+i7#WK#2&kN&_(`}cWk_Fj+-Z)#mJ1Igh|9O!0k?irq< z0shu9NR2r=Lce?`6cXf&)G8z;mw4&Q9roFhftTf9?{Kjf{aXV(m(rlBQg=4)G7!#5 z3;M;VmkhIhTy2`uHFeWtaypjY3X5!0Rm?4;1D?rbo0mc+%i^Q=*Y-*zrpf4siZZV0 zr$=dYvV>ws!MssywIY3|QR2z4qq>2DGbDw;lFmJkE;3+8k|=+mYwbC3icz!YUbKRh zr6*xAv(YQJ5RMb8AzpHpvy|*J9XBsMa73CkLj5x&jV6(elf)b$WO%DY@sJ@RXhQ?; z4R13?m$2xD6jp&8kl3W|jQBm0#jJ_B*wXBBe+n?C7eiJu_V1x_4D`g;+K5OAJkg#Z zPBH=#f7|8KSaX4B{$9@qSOKbmlPONa%{MSZvEI)t#rM1GB?c%bUgt;lE3wm2tyXQz zRj8{v1s}gJP2-otS6Y)aLo+BVg0*B)${8G8%cgfIiT6`KTg`9eC0mldW4>bflCo0O zYwafS)C8An1VP;$D&I6%&)po1zYe#SgW$y?5CC5U7`EvV;0h3v667A5J;3 zs_j-Z1n59}ZQ~C74|^A;B~@Ln7)@C^8ka-o^Bjsc0 zb07pIB{#pg>a+V^Vk3RNNQ=p6_Df6_46r80`=K;kyW{hcOETY(S&|Ao(};%~09t#q z&HfDq&N5$uiZA&x?^l|%U|~QjHOylry7^{PDP1olu>K-skvjFxK!Vn10^4oFCnuW~ z;uWYz8Jwd473RNyQzcfzr`KVTcX`A}O}BfhVkrKBlaf_O=aRJX_-V9usq#||2-GJ| z-x_jQ*g6a>lcGK~OggQkerE3@aM#Wdr_$~=&S6wlKtT=b62_)2Q-kCnxBWRcAML0+ zuDBCyDZ8WF3y_>U8ePDg}}FcAiNAaYL%VbQ3;pl>oxAd=(Nu z^$QG17bp+huu8{hk?8VrZ~7xH043hntILnfr!F^Ok_2>zgi-=tynKR4`4$HUUtcnw z(QSvg-Q)b>-?Z=9tDpXYf{7sFAvG8$JpOUnMvY2CplR(Lx5EMlA1OitH}ZLb}GpIYSYB2?pVBU#U9;Y zkSjzRB2Dl`R7%l?Ma`i@r@V!M`PvGulAEXj%bk6mXWxvM+p-7uesrZaeK9HRXPfL!sGc zg+kD@to}hM?h|{&@RT0%AH~ zr3gP6F(kx&5LNOnK|_;ty#5_G{4QMBGhl{h#lRfe={=gk4E<32F%x_vu|pLqMV*n6 z>1Y1}K@1w1K_%In`69tRoz2Kqila9rnIzS?v?1fpp7tyc;3UuILHfRQ``GYR{XG70 zGMrjd)P)uO{`3{p`F_vEnQ#c-&FKY|RH$1xKVZ(OL=Q64=~C8FJ|YhX?=zKj-S3J0 zw>r>I{@qof2P<{Mm6K4eug(Y8^F&ONTGAL0{x=Y=Qa=`oYb$;Y`f3zgyX+9DaHTXT zt>3=lB3ABoJtooOTC_UWAhLh-umq(0va$^%)(&M_<1FzH>~-c#RF5k0Zm@jcI~brI zxo@9Qe*fXNVC?N$7$~QDBQhxY$CM(fPfBYJ%p-T%9d^iH5j0gx6udUhFtNMTpMHiH zeh2LXEsTBZT5kV~l$;7SYp7y$StxfD{D4=W$|00nAXRY!a#T|&f9wIhaMVBVmgtNf zkr_3h{_*Z6a$|{w1-@LFsjEL95ZN8(1Y7i~PeJ&YMq^I9Ng;jpbkp zVY>LFA-alcvnA-x>?(%$5}RJluqF>SR{Noo1LjWzpwAG7wl9R^an2o9_d^HKjBA>n z+iEq>TO5HmvSK@lm&k`Lt~a7IBCOg?4tb_R#sm?HQ#OW6pupBBeCMG@=0L}3g-@VOf+HobCM-Y*S$;FP(3!w z+B0P`w31*d~`$TD!iyN49_`W2KdbNjp)6}m#`f-QPbuGXaZhnZ%2 zY7#~BC1;7)v!rC`FLd8KQ{>Q$J?76yk%1*bQ|&^1OxUZ+$U3wv24gL-Z~sD;GDqUd zpU}LEzpQOocz)Mk+MJJ&B`JK!cB@aePf-??B+iy&h{sY0Jme2Z?2VD^q(j4sQ<$E# zU(>khnf{#&|HG(2NXlkfb}3ie^(=u4lQ>9q`^R^}2BdyY@WRV(J#ZgMKGM2p^{@{M z+4=27dHILdxido_i3A!7(PdY#9^*KspPqnM**Mm3XtS^QHctm$+7rH0UY!AaGE`{S zRx`54UyAlKs4{J4q8aSz?A-DK*GG7=1U&>shxU2Cq6y@1GoUsYh&$^QxA!G%-Bd?b z#>HD8NGMn*%r;IauMK#*et_BNvg7NsFGA;~(Zx_@>II3~p3K^;fU`ug;u<%JiM%Tf z?kV!zQ}t1XC5r1!)ud&4*uCAb+O&fDq7f#r8&zlaR2yA(=hlB+fGvhfu{dUX1XGU1 z0&;pVrgCHLHDEg6B0*cRO=6v~E?FBNpjZ?D+-Fzk$*JH6vbsR|(1GpTT{W^EFdNFp zU&n5gy23)z*H)8hkNm78a-_+o5BIRy2l|tTp^Q4YzJC-L>$BuSZGbpw-R{}e+o zDVR~hp<~S4A-z|@M4ZCcOT^+#EOO0{eMLgl=Hw4eN!!~(D@}&ugFRa0lLvYZ(-RAT z#x$o_{NpGbMj0~*1LX7d^9^|KZ*Y-sA(w>`=0dX)z=Bzz0CdvpU_&=tF=?hI9?V=> z=F^~4(#8?)`Z?nh&A0MIGeNwWI`0~m`0FW6-t7?m--UfP&={yMTbwLyh)$yjVt z!?&8D)@kof2O5@$_4~6z(8_m`+6MHxjb&3GE1%RrqnBhPJ;H8%DUL}7|ME4X znZZ3nZ7Pno#s4q2fjysiXy(bAaWJHO+m-G=dNMH~|HoeOnQWJj;CYewP*x!>MzQUV@Eq$wO- zZJ#pnlt2k6*i+d;(v;|qv#_#aJ>0sMBm<$h2ZnS+{V^1a7JVYKz6VQRW{Sm+;_q^+ zyY53$Do1Bi%_|SBm5~ z&Uk`c=9R<8JSh)MscFGf;SVoQ*t#VmI2cp1ntj477dliT* zqC>F9LC+}A=WhJnIP5ZbbB!notq|=rP&FDPP>f~|Bk zX6(9+`y;IkqYAJyh#u#b_SNtfbYBdkT?Z8{Q>~{XO;rwm|MO>q+xWc zpGHnVpbcl>=$J%f!=h8Pbhux#c0SC%XwWvZfk*fBY$Z}n2-)GIQd0z+B?Pg0qNy+X z+e?rV3fF6v`jqpILhE$ik6&yFsiZ}2o0a*9c9GS-V26iBy*Q;8E)>|);l=Wh>U;D6 zifBh7Ba)kv#t=T%3C7P;a9&@CilB<>7w#Ep{lSFIH7gIlP@r4RUes`BX*-~&X%jNS z`j?FtrI7D9Dz9w!c!J1YcpeZ%AND}&iA#K2&yL@I49UN2a_ z=zaz)I)7J56YDvFR1a3!k6}4B^z>oVlnR4@allWYCDWc9^ezHeh3iGk6Ahv2wtVYy ze-){#3<|L4X}k|jng?Y(*F-cT!fw#XeJ!eM&95pCy21fqTIjbo@46R2O{ZMFCI@8| z#NNJy0$?QZYZgJsuv3h9P9lAvH)Q7C#))yePt zLNIXx3X|1z&`JCRGxLk1-j0(_0HddNI<4Gsifwb!8-mBiG{o(#2oew80h!fV$lsV7 zBS#1?=CDb;6G@(NO9~`DteNz%MzK+FTl!)3JZOLUxu!gET}uU7+MC;8q0b{?bLahd$@fU+T`f;&;&(1(PAGtha(joH04)@6z$nIuOtUXJV zBO^T^7VovjdILF}n?ih71?xDbKreu++Ka7FsyoY!Vj}_?a^klS6H02tPZp52-jp0= zFj+$SZMilA@C{^Ndo)^XYFa+&hK~;x$F6K;T8DdMg{j0mX{i+jTRnZFv`E3Vrmq`d z*P#>*CVAdP2Pp-@&^F}c%QxS}j|qdJXmUR5L1%URK2QaOkHu8vE@E4jgOn z;I*%fQRbskC{w*pKC8IPeD|S=t)ai~Qb9m^*VtVJF7uc6q+kxhw{OS)5^cLvKhE5! z(A&$_ByP-2A9~mjzd4sLg>(;!rK8L7*@m0w&4p|u(HJ>rkY8>l-ffJ`HBkup8Y&BH zB7iFvP>xVtpHO&x#n=ahQ7~rXdPom8E5&Ro;Gm6%^mo~c1kBGxG49lVBVNm%o5KO5 zrXdOWMwEm3C+ZEoNoiCG)m7dv^)9KNcntvX)~*XEX;J<4X$?ypUbt@aGX<=ccIW}nKv?~7NDp_-i#8fsP#T@c3vp$ zLzWA5I<;C-52b9pHp6^vriC5h5xJ;%3xSB)^bF0p5Lc5OXCNj*!SU^&IhIuFakqQv z%4;WCBbm2NXAJEAnIBm56L0$IAC9m1vTE`@-jKZL`5gcJE06}Nwdq@L+RW_xMtUFV}0|l-6B-t^BimG4MeaRO(iPB)S9LI~Gm*=XR&5gYHaZYH` z+o8MTld!l}1}5cojGpIHk&gAwfl;Mkp1b?R3 zE5cXYkO5*VCXx(s6$jhlU7{v+U^Ns$(O?ujHwaOHDQ$hvGXnl1xwcSx)$i{oj70H5lDwvp2&K*zLjPN6a2y0 z`bQYFC)$G7s^39!K#{t08$mT8j9Jw<5Exws1}4e1;oh^8@kfCjF3vj)OY_mCDuLLM z4iV1KT0@*q79&Q}S&T1c4@4y?P5!K<@hU@zTgv4kXm9kcOtk?6&inLVzMqxZHA%9M ztWoU}W^d`F@a>wfcQk@JTc@sVAwM7ifHd&HC&o1X>{v=FI^Acd5Hu zm^;p8ghT`?67&0OPnba$Soimx-{u^<(Whn{6`eM)QnGyUSKRL3wd2p)8a9vCX{WDS zaDFmluR5mf6gtQ=<~P#-FBsYWPk#$h6H*HOis1Pq?aM7dQmIPi**#W#!BHJ4 z){BAoyIZ6c&aukGKcA&yhMuD>M}NxU=yh*0yzcAH$FyI-7}bnxS#O!?j6Fe3W|d5H zz1&?sNguLyxxx!C_aBw6x0)ewjg4anCc&PhRxPy|JE*vwJ?0*VmNlE*GxQQ*X--uU zC*M^I436GD1RWyia~4ccjy1#&mdq7cBOQ4~@pO@HJsb>GA=JV676{*7tOYh4Hs4<{ zDxCSrbB}vZ^bJaD7ef%cNr?zpnARubRBctbt*faICkuDJI4j^6G(2KND~+5Hwe>xh zg&2}^s86B}fQ~aYSHGmaQ#?8I7zkcH%-lU)X{fIF%4~Y^YP{N&)cH!kokN_v*L=KW z(R-ZfRyi5p{3{W#`rRyR%>sQj`GZ+P!>;z!>`oGg=X4z!It6TauA?g=Q6o$&N-{Bn z?hn&^!SdC5o7=&~2AT>$2E&`lc>6$K)}paQSbh6aK14HZ=Z;ylmLWV`aQUDJ`WT7z zj|f}KZd%f6yO09tzQ>7$sXXePR-!Ajmu0XxzmQ*s!^UQ3YwBugH8iHD_Q2B-Ij@vD zuYjfohWV;3+21fvnUq~+Chnw~@zDt@x6z8E7FAVoVo?@G%u-31yAG9}i|OMi^B7IU zTOt%sF+8$+OqKJ%r?J{PDRFWdK#4QguV>IMRX}&mN(Pt3btC^42Ow8Eon+|A+&J^c zRYImtR!_eWxe`V@EnDK9^~;_xFK%V3t{hVwpn=?wh}w_Ujh0ToRsS*1Bun5U>g|{A&j&uER z`*tvs;8sOMx-(e!fvSg1wpH4Nv`wp0-6M0NKQ)0$L*B`a&`wPnpxog=30GXMrzu1y zX2vI`W%Ci!5IKZ&d!#00sDq9}tF4XmJmA%C<5T0bjFGxs#N5w&wG4Y{gs5Po|9!#52ZnS9s^3hB4GM|{W{ zB*bLw$oG}!MsW1U_=pED7Scbh1TRP5Z_O-|i|Ilvu|Z>u%hfUmPNm{7on53G8o>;u z#}D)RyZ+pO1#0->izu);_FsZpd=1n}j)PddC+(k%Q!awb$y@KwKtNuWzk2pAz|v~^ z%6B$`Wu1kVrc6x3@u)5znl?~g*afTGUvc5iE`wu}0VYqVy*c+#Vn+MIPyBAabdBuX z@y*$$ znsCG&s^Vx-MB4SGOGfT46>>IAEji_y&G)q(CvN~j=*(RMMHScT#7G1$hwwCWoHu_~ zvRQ<(a!c^W2|QYlTbRldE0W;RIPe@t1tpGP{_6W09NlNFEUK34A68*t0Yw`EOHhb1 zVyH8dc+}GeO-%J5#?dZT%9&U6(lHxzSXqC+a|)QCIJ*3;fJ5m7imnD{0?fpq1{ASm zn%8O+aIHc70FlbWaIU3A?ILUV@*v3l5Rich7uqy<)U5)HG1&$DEe?|pT{<8FP{ZYv z03)3+)cDKuBlR*@a#bpz7l74ZbSV)IewO$6<%xbiuUU75eiUGn;avgTQt1{(jfcE^ zmY9s};gQp%gvweGDo6>o0UQt+)E(%6Ctl6*M*ck;85$zF7%n>%yu;1eb>aNd4nfHG z7u+O!Z_bNI=Owsuw)1i~cfFH^Hz%dsyx+9Fse}JM#XG>P&7@g@c;EWtr}^!0BV-q* zfO0|KH{g*eCVu1_a3_187X8k2*6MbluvSRYApyRVw=IvaptJIS;YDHT$C(kw;h@8w z4Wqe3X@ZSf938n|Z4|vA?mG>SA{5+you@9P*E~p?6W7&SV`caI~rXp>ysl!HC#!hJo-x zO)%fhDGY6u@;o-;ckNr=>P0^~YHUK37{evl3*pbaS~@zJu}0THFn*~qmzm%NadSI; zR6x5VruLR6rsuHdUBT;`am=wGsW2}uy9|;tm7dq-jWXZb)F`&9I1C+y8%&i$-0w!z z!>x399=1av!5Lz>xd1+Ji5#=9AVh?IfN!s+K zijjgk0$##9DJJIh_*G|{CqNHYsPO>&oX;U)0Z9NZuR>Cx_O?=KYTl-3bUYQ1|3eH2bpVJEY3=O}{UdS!7pN&Szettqnf_Z* zS$=-5{?Wydb2IPT{lhbV&OqE|VdWF!!O1xQu76CZf9Zfd`g*m1^$m>Q<=T8be^JI3 zZfwnnkdZyLz=^ovrMMjZ(u-jc@`x#BAsoQxfupXZe;Jt@>|1VQT&KVwjZ&xyGPk+V9pEp(`s|+aDk<5qfU)GB@H^ z6oQ%>KuHQ2p%4A9jd|!D*+(b(-xs!Y)|3yr=U*{PV@vbHd)x2Nt`5H)Grj&FZ{Vw+)^gN4y~_#!=4Pk* z?_EudxcN`Gu(kBfuhQ_8nS_)ZekBvBxbWd#(PKS_=w8&Rkp;Lit6Qu0)nFifeFM`U zy^hy^P|l~9IcxXy-WKJ~+x&;CI4C>3`&@5xc%mPY-ob(Kf!~eqz;y`l&d^;?NGb1g z7a2z1u&EKeyAxpN{2gHGDjVU4Q%)8RAaP8uz?Xm)AaMXs@i%xqV4Cp{z6(I&72eQ0Z;|huCvPy{8Bgv3-cyd;IbT>NMqkkvc=xH&ci_%r z`M1FB`_gZos}JU{0Qc>C)KA{4*NE>N7m*Pe5whjpCv+doli17)-g__UJ72^rkjzgY z`%Yl`+Gbbo;jj1)r!48BZ{I6OAK%MuG{BD<_e}3o4DBuS-RN<4={jEOtK<~5&M)F2 zU2}KjA|LjS%+xR7uBX90{M!!9GmXCC-(=5ni@O?|zkxM&+Q0KB?r$t! zd24^?dK2q^;f;M=TYl-DJ&)mhmu~y9cXs(*ewW=`QhcR;JFl;9|KM0@XZ<2xWgqi- z^gYZx#HJk5fjEKw6t1~Cp1x*2#}0bp{S5i`=BM$a%J%s-y?1lRWq$uVoAZt@;2zhB zXS}=Ys!hB%pKHc%B8*EV1o8~E!} z{6CD{LyRz6z@Xv&+O}=mwr$(CZQHhO+qP}n?zuC`znEkeQ@gXRq*6J0Uci7`ex%?M z4=z&Xk95;9NM_?`Uz&0i~uazHo^%Zp7N?K#AUX@ zsbM-@F`AcpgPI6R8@b&%(1%JTE*tQur1c*p5HUg*pWu67=*z*bUAoxa%zvx#H2XS@ z$Q`k?+vAfT=x???inlI4B~(QPPh6B;D%p@)BgObCluHA|4Jqa+aZ z*PCY5OxU(fXgf5cb1qU4srQnt+bs(w%_7BJV;CT08~E^Su4Px^n6M?m37b%Y-i!5% z-re4_s}RSNQzGFDi$aqevU2Xa@N&1H>G=OMdv!=2y+Sb-C=@!DFZs(fZWrM z9D^pftb$InND|?3N~&xTz|F4+*YH0QHYPB4!qpP+yF7s$#HaQEo8j*Ld9!)d!TM!geD zwwEUpH{o}o(hn_>A#eff3Qk>#DgSX&7$jM2tdvNm?hOgqxl#3wNi2okVmM&z77O2D zp5N=~r<>`VJNID6#1yQhmHsneb#(mxK6M1dNgB%VHmELlCQ)DA=Y#FYSc02Wc_-5$ z+S;0hqO@OoQsGJg=neN73?{ZFj)YngZWt?ReTJ*S#uiG=HEMDt8bS(lI@TO)oz!zh-R^P9i)*XE5VUQfl)Eady{* z*F{_&^J4mH0WM(aLF*nYL8L12NN(1!Rr9~(N+imM^T|gtLk~&y%S4y#f;yNAX_w24 zNrXb{!ZvB_az7It-_8b8_&yOClH!_*by)A$DV5@AD^%|i7s1=BC+G#P)DuWBMkGb} zIvrajYXjPS+Tm2`m6sP8CA2jq%<1*;ejx~*r9PD(zY0V1GHY8L_CbjO$ebp<9iJ2^ zqU#gp#e!*v?0ge@ixmfJ#af4<`v?Rn7W>@KLFlXb6sZhg3@vHwwND|EnQA$53~6%B zG*JmRq0?lPGT3Nr2L}N?m~If0FFnV*p(#_zi0zU1tm9nAHSA}#%2z8;XFi)gFTx615x?SY3>XvGppKwx=94$ zeV9nb-o+;r-H9UqPsem7zod$nJ-(eu*KH_~Gl_e;%EwK;+C>F82uu29U-q@9WPBVJ zDr0z*nY|$gYpfm8*do7|E|xW>#qK3e16Q;3^d=h25LI9%5`%)C&r54ka;_l;$CBsJe^CugvG(@n z@1(|Q5%fS1+gmB->B(8Ll+Vso8R8wfi9KV`K~^?c+h3;~t)^IsN>cKZy!QL{JLJ`{ zNRm`EtNo??L}%Sfq77?>vAfDU{TqyDSb>ty88=m&r`JUO;elbigV*IuY)YDd(f>eR z@n^!gNHj7#n5Dmr3=4*8ni$bJmGSCUYPB&pjJQ(|!6y+BUT=Mq+Gj?lgo7 zuQ)OBkRz#GS3yJZLq+1OsABq>5?!5XC4gB5sB2HS`LhRT{r#@_qA3XrZ#YJ8o0908 z^jkwHeUDjA4UOE=nUV<}1pHx2&jeHm^syRmBv)>>y$UD+X@H(&%96Qfdg0({yeE4Q5#1D@^@p~l=KWjn&Qb$1zE-`SoS z^=;##RL@#o*Alyz*|)Kp{ST#XUDf1}areaeHj*}}vX0`(=f6u0ayQS(%A}=;rfVo0 zbYmE}qyq|D1W2ZW8hXwTDh#iTtg4j3En@mxQaXKDt8>gB!?TD6~(48Xd-=F$6^rX zK*f>LnnMyEC3%=*YT!T;jyfocLqfr`yS^o@jeDNt?Dwmch@`WT|Ml<~-XE%2sknfw z3NV`U8|B>D9w)YsApe@?t;*wmc15yjE_R2xE*ydy6dTeRD`Y}@Ojl#^ zV!VR|X68AQHIyHC0Q(NsA%o0f3XCIXAeb9D_5=NYQG$NxNC2+}S zKKhFf_Xu(>UGNp{9Sq8RVrs0ph`g!`0(09z}(I&wKx1a(>IjO?SWUp8ky+)_o1z%tct`u37Y4&YSr zB2!O&ax1P%zyb+H5GX5ccrlPw&I|;R zUMKd&oIA9Ao_68*pH{MeKl4GklmusVr+;LS}Q_#VTv`X0rAd%)Qo`HSZyoKB_cPG`q);#q_Om3;(D!t`7^>S{tpF z`Bp=uP_g#U11R$C5tYVfZ+Q5!DP2n(y)IV^_t_^xpbv&(T)3y4=@ zL(h55ouOl@6ZhC)quUJk30l?fX$Isb{m(uIL8Hr%fgce!qW0h{ot5_`lX=8hz1E)? z==wg9a-nMKr0dox%Fc|K01AW;@M{wlxa}3i+Xw4xR9$az`SB&?bT8}15v;D?GWotyud)!ZPo8a6WG`?sxDb}1YZhs)zhFVm5gXQJ}A>$a!p8}KF`r- z6G|?{&eoVF2PX$E#_tIfp@FUdRB%IR|8V9abEy7sFjN{GM zpstDLN;Wfdj6LA`G_#mAk#nEsUZQR-z#h?hAFPW)gaUBwImWZC)BF@9r~wjgCdQZ^ zqmtH2FSt8y(t(4ot4lBKo65?m^wB)U$}bw2B9j5tci`dPIi84bq#ZTHU4=Ed`7C8C zeZ7Y-QzY!Tw5v;$+HPCN4l1Oz4n#K47Z<(2-C~S{L+v&KSuI+%-J_S&2IDZqHo7#ClX&kTV4| z;=VbKEUD?K;F%N~&PAOJ`%Fo?^aYLOpMzL%NQC3=;a7&0HOrmkS9rdLTr*y;VOZ+VsiEu_?7nt&n1* zfmeub$YqY|yYztIyb)c%$-eTwR#W9UmU@asr{ikVaRLr+RI?=3xpbAGo!?)?Oj8|?DoWlNIPrZorae5KR24ONf>U}s3>;9+YmFL1cV%MSI(~$(%-Re zD9rUtYtLCwGlX~|DTAB+EIeu~Ox_`Xgw-Bq+dI~al%rxFTctP& z<45!*0|^?wgu-g5D5>)z|9uylSBHuuHx>bMU~st}mk6wVc80t{qYm@hfrUi?-BMu~ zLzzBHo&2pcnwT(C2)H>xGjNzW4awo8K4|FvCFt!+U4~#)&}#*$#-WO-oSehx(vbHx zqpekXcwCsSyJ|wpTf%cVY;VuHo}i0ZMhBtsA*JX@6$7n`5yzi#8JH#g{e&_gUsB7r z7qm{KQEx-)A0PYy?6o9$x-YM7E`R(dKynTf#m+Thl+q~=7}feEQD2p9Nn}kFPV^0w zFap-6FY~v|BJ}x#rAEf;GKl_yQ5Vw&%Sv4`o08T<9W;85{#*30kMUr{`F_ZD?*dir z@*S?pN*H~>5B*z%BQ-kY#Ae~WdzsV5Nn4dJ1RJ(-=HmbG`JUhF38M5cot3?%S)@OdQ1>58e-oHyO+Ce_1A6xeD$L} zkWhRCVD4C`ha%Je@g0Sx*dT`r+0?~bb06~&DP?>(CEB3$t=$j@>~$MoCO-1Z*{E8* zbZ!SZFsk^ATxBC&tD^gosn*8UaKg*vrbEQ1|nVXpHZ_tVY2Y< zwzIm0FxzL=k5WQYXJ;Q@G7NA`@@?JU;;BHoffiH$V%xSz~vi{_(_q$MEYG{{F6=bwc z@wi*d40>)2Q!bu5Rx~E)IYx9+Ou-3X?spPIPP2*`DSHJWR|}yFtfs+J-DZaAAK)81 zC*?X{Nt*s!%6(MBhWMso8^9H|)FL#9y1GI8tI}fxDmwtt7|55&YUg=;E2QHv2TtKF z$d1Dae-AS54JEoO+`ClqB@Il||I{EGjd58XK)J$T&VER7;*V_y#@e&leYJ$Y2deo^ z=WZ2{>kSN|a}!}cs>1)^dYoP8WiCE3M|zF#f{}_-Bc7!FoS2SOWm%5*y}34IDYI_o(yG73{-)Ft-E+n}Fk<8N zKho}60kCvKInpWrZQZ;TO|u>mpEuIUKNi`TBU!l38qJuR;zaX&kbw+V(VD+f;~0!k z$i1B=g>jKU1eM;=enwPGh}I)j!3Di&?jxt4yaGFHhs`sRzRk|Y-j)PB@P%^1X741K z9nG|ik6;o~VF!VU9B&5|{s?DRF<=}4J>w-$>2nOOsR|OLYS2gq@*aD;jPt?8T9Dzd zax*-Kq0=*Q^>{=TLs`PBy%c_1(p1`)Om{!HIqC6=oZWzR`%Cid2&R@uz&DjU)1FH-nYSY@g?62hHD^FYf+N= zD#f{dwWAlHHh8A%?cN43U-3tDi6pPSR_{~DYV37JPM>Dy!)Q(ck7)_sqrr>Ba|858wKTpadCkwHBvcs+MqYGoTK_YTpoj*s5yC*~m1s+i-S& znX%*Cr)@$TY2dl^T#*l|-vBEMw)8g1ZZwok6e;)-%uN3?v_l{`;@tE>W_Cszm>zzu znXirqlNF^;Y&E(<#dG0`~nvxRkJ3a5*|QKx8@fx>p1 z$Y`7T4pm^2!Fy>5b-sd-Ioq)3VtC+3h&_c33uTHBt$oLnt5(Jc zHj2P#yw~?R1}_Q$uM-{a5LKtUzr%o+jaNzs#cY$Qh>Iq?*V3W`RN?s?mb?INuLpsR zcVx|e<}9K>n#$>%WY;*#JAf;@BX|uU=su!l)l1&rWD-qBy0SgO_3%s2&wT+`izyyz zXf{=tG^wT?=_4x6>>)Zw{YLC&|NdEdA7&22lb;`IFVn{-G+n9~7Iy2SAJ=Yu)Wp5v zi5J4FGRbTWP^ts8v9i@)7*8Hvx(nP;eRa@HO5!h!JcgED_nmFrRqirVVwpC_7CIi= zF6R0Mhdps)k*VKv#AM%OYUzEXkr3k*h`j6Xmc~48eEaO4`;#W3RE$dCe|+uJb~W6= zM(X+zDwk^SW8Q*0^x2!NB}+%9;~kqnr(R{yOu)lhCY@|7soC5anw=XX&P|4lNDaGY4W(ADB8L&97DpFth|3JL=gE;AT+e-0@|R z=5~8BUcDIzQ$RFVwZVc49KalM`RUSwu@Y@Jq|WKu9HwyWp{i!46qqNa5TDAr%J7~# z)Gdt{hmFN;kdVR$UuNMAh+QaJ|5;6;I?=}|R+d>yH8-vh@8RZY$l!W=&K|JjIkEpd zK$E71jnWnWN&C&V7oFC%fLe|SYbP$D>ghB)CjYRs%Vw@#7|GT{27FDju@9;y?_RPl1HH_%HWVx06N$kT}f;-=y zup|Ie`$+cVOv%=#7Dk9i8~w9dTP8}a-;tTDV05Dlk}x_K0X*8`eL#W)6wir>%v9yO znD}mqt(vt{P$R5)Ti*pun`lncZ`(?FfZv>Cnb)7=D4@0}^xd$FV|(^yFh0QwwGOc`2`%C z@5J4^ky=89TyQP?hNNik_jmheLC1Pg&*#Kidu2n`+gl}P`4pmYAMdt63YE6__8q}p z?8ki;xcf{%Gl@=PfQHgyX^g6NZUhVIa@6csyon_xMxOo)0^`|kZ;L(Ie^S&#mqfQr z6+oh)l`jwuTtzSkd38UfQ?y&}MC(bD$ZOrO62@{RFJ%z5gfBF^D-<`Cu1y4ogCe_e zma+3>%AoL;>-03qRuV;M{XP3%T$e5Du(QH2Ya$OA8M3wm+d5P0+?j*wtNQsz?i9o( zI-_N1qI-`6uZkOM`@w7yx+y{@Tx3j)Db#*$8XQxabWUOe4>fs8b_4EP!E^vrtP7LJ zanxI!x1wCsh5_BK1q#8lV6Cxf9`^YxBQZ;g3wig(yCYv6QHYErhX_VcFnj8Y95!f6 z$%5UxQcr5<{BHJgye!eR2~rF|6qUrrOXbz^XPh2F5Q0v>USi%QG9$b4BTjuPxXo|e1=n!=$=_4>GD>Q-T}z~(@Ec{SD| zju}H{*fk(~Ftj7K>d4UU_7U#Quw_;i{K+i zCBLf;S>+U@woVPw&>xJlvo&wyQ~8%wA?F6ME<{&bmD2|u_6*dS>i*OQ>x8+NI#z?Q zgb3IFsy8q+bbNky#XN5HG_`bwJ8nqUuSx;?X4i}w;%i&z+$YjnnwUa>mR{QU)U!56 z9YPrKf}yMF3QpsIR$+8TC;v1W(6GK3j@(F;GJ#*$8F00!VAY}jlARvBV~T6Nvz440 z9CF(7IdsKrc>aWg-jCO?$0p;3QkY-S&K9`Yh1m3f+^ox+aYI{jk+@A5#Sk0|=H4G1 zFT~r!e2ErMsORmJlY=NCc8Wss&@-26eK{YeOO#IhtYqj`8a46t4ahEkotU%|McC z^?G_y-#ojfVM-7ugz@c_6r=I7Jdbz#a-p?GCB3!0MqXCOYvQh*22t`-Q?gFOGT(i^ zn}?=mWI)qKyOfBISlr43xLqwX4u>2znC$iD&I+yNXnbj~(h8Iw7bH%C6AIpB4!A1>3(Gxh{PFFfPE=fjPU$P(U z4z>TB^X8E1A$U1V#-5;XLz(`cDFFBQ3gxFsUg-Jo-tByEU@jKjBzP0qe(`DM;#}bL zlav3BY7AHiO1M=N{0%)LN2DPavi!d2Y3e>C*9itMyw;&t^Yt$GBJ{K3w>fUCPLyZh z*A_ssuezWHwY#iDrrv&W9&XN3NH?iH|&jv387M8V6gR7vgoL4`D+WeHV@C!_Lp3E_hrW z?l@7J)~h)#Oz`aGWjRLMD0gM{Rqo`+37zPs*LAI`9o=|M z!(JTqh2-X)Q&t(`-Y~S2J$h<$0lhdy`lAsBo!bh~H2L(zp{VZM&IM5|D8cYK{zz3h}Ua}d*v={f6o58+>jbE9(vRR^h?KJ zBt(=;yDal+Gjo;51YI;5Ocr+#Nv#v$tJ|VRv^6AZj#9Big2}2Akvjr zzh57M^SBPHXtJeuPSYAO*C@$>%6x)1rHp^y=H6HUyTitSn?L}4b70f$eD zTH>m1Wd$?F$?**t6t~iFw3=%L{w{y9s}OCTT}zxJVIhj(eSXsrCmX+*IyByN?E!d}_A zH4#Y|hbWF=v}C_by%0+6X?N!eGqql0MBJxd16Z@()LFF&*d`H%Y~w5WfVP_VQQ(Uw zK%5lsh%Ni;o%=1WS9#NKXgT<6dmQ?**`QhOZl%`k#gO9iKguDdgnI9w2vhgVw0;Ul zq5mMOw^REPyO9PY#C~1gOn@Q=&0_$X#}C-Wh;FYE-0L>%i{g5282pl3S)W(kEsjO0 zl{Rc3w&WPf=+V8&oV0yu+_m|YvA@cX3VIRZ+NHzRs@E?tw7p@HN*wb`oHuN~vnrn) zmmEFyBTOcx0AFB7I_!K)E>fMptyOg}Ptq}3KajlRlj$X`kkT&UaIo+CwkV5dvXOGG zH>JDg^3T^w(W&!Z9I4Mpr!DAi!)Z}{zn`DA6GkSuzBSH=9Eo~s&ZHTeFALi5D#tO` z%u2Y}nTeJ@Cy)_X^w9=5RJOl{L%h%RMC z^uBbE))=Qd5V@t)HsWaSFi6Sl?TzqU2~pzH&jgSXt`zjq{VxBC*lj$UDr!NR*xAIXjj z*u8a@S<#u$CCCNc0Zi=jL1GT?eRvjk2Scm!$n7a2j->0VXe{?qsW_%@SFEduXa*e# zBm(F_!z|JF4Wz>ODs3g$#&|N(SDMkTOwtnY2^wUUo)8}VGYMVEemja&b6L$uO)W{U zuxxl804`IAauPby?VF}gx8F}`rPp5uOn-y8AKc`k^UlJ-P0(-{7*zR=*!PabqD6@+ z7z49KjmZ&Lx|7@wXi|q6S57F@GU!^n&3!MUXa!mC4avl63a!m4AiBB~%`JMQIjcf!sR zqtdSONew)({xHLfs2u2=O!l2E0qa||3h=|b(NFCBZA_WIw)wBzcv?W^0Yq`scY8wZ zSkJQ(Z|KFn?cO#%49;QCp=cXWA%U{h zH{o_iE7+_D8}^Cod)^XCOjUtyC-B_`csOO;H5i@ze5jtW zt2Su!cR><1(Va{*dH#w>&C7Di-TLD>|Duab?mzzPT~2$@=GaRh1PR@g$e`7WcMzPX!++KDr6LLmw%sVi?&L)Zbh9em`^JM~wnr zZL{oa?>$!=ORS7vNQ$dosrLWuE5)*ec54djNrM67uBt+K5~-n#3+GC`%|E>!ys;cY zcA0KKHI^-C2lPuL`UJi`AC7kS75exdO~G(TPhWMspI4z4mNhu4+1kT1=fCIZ2YoC&qc&r~RH4P17Sy*_LeD zfN$TI;(z&&#hMGPg171r@ZP;BG$hcveAA$%SY0R;C7}fAiFHA%7Q=ze9DR&{r4i5# zpwI6ib@SDdCSkY1jM+JStZZ6co85s=p6#}LVZrZTSJ8F}Cz2}pAfBVqPDd?_zX+@9H8M$X*6LQ?8 zOF8XqI(i+@Td%rLg*>L`DkiR^5NXHs4Gf^-`B``suGy6xkANQuy^q0-)o-C6Q!LyG z{n6i1O1O@z<@TNo+{@&z;KIssL=dKfl&?{|jppQI8)QcV(K&POiybiefsBe@XK9e} z5d7^AGCn>x=1L@ZXJ%eZga9Bj4e_P%tyy+fHu$_SMZ0g>WcCC8E0>rSZT>@Ypd&I9 znw)N|yq>v2z?1D|r>rskTk5%3)zFO9d;oG*%>&*Uif?ITNJ_zWZ^rV!1D$vAi0J(q z>0X&QJ;Em`X^Jy`2XqV>SEuMZVj7|g*n3fHzX}*LUJaYRcGtA9w{lG`5K;y~ac9>Kr=b0^KP58 za~pWS2+>XN?SOiXok(gT2i0qr?GacfIa6>Jmm;;hTZv;st4a!>%!93!5!<%p`o3}5 zQzUEDe@{wnws~#^en?+KLK*i?9Pdma4dF+&eI(gKNj{{jbGKJ z({KhC7Z}rRQ%yqbUruiYJo`Z?!mpOKMR&SI$veI|m+{&!MhSlzC>y z50ir^Ud6yQqA~nrdN8XR-6mbPsg}|!F+ubr(*%wMO@D0lOVioT57uco7p5YroRHzC z9cSw0V;5pqz|DgYaW5^Hw~S;5Cpp=V)=;1ocd^VJ-W*78*@&N5ucetG%m zC*0;UPdw4f{>ady3@c6KAw;%FTWTSi@pcAo*XrvZzvaZmdN#m#Iz zdeDOEdTf>OBV8Q2v==FvmF5PtzxmB@CZd~{q2gr^^7)n2dGm)lb^#bn0y>f1a?1Qq zi%{@q7Cl0b(!6KH={ztQu(?B^X@_R1oIE9@h;_DEd2s3m0qfD|azy?}3MFyxl5nza zRN?N-bb!CtS-7oPN|!s0w6+3XKPLqaBU#?z*7S!@@c?lwmwu#8{QODe69u)oo;^NEV?t4H%a* z)ARNCYHzMkVCC8IQ+6cPivQAJWn;QV40CS+lch_`0W4Q(Ymn-TsQqcH?x6l1Bhd<0 z5geP6DI^&cEXi(aJmSZ<)B0GPpP5GeOC@{wje_K42!tM_T@6P=V}?1L50EcD%NR&$ ze>Mb{9gu-IFtq*|(TgQOK^x?&mY3uY4l?dCYP%=tqVLINL9jR6vMfv)wVdE<_1iZL zMnR&FMmups(Us;wnPRE`CPOBjC1-YCT*yAUd@;*8c}jlLk#`oOv*n}oSi()Vg4Hm> zTXYfU#{;WFjs^Qx-<}j~>@qP_#CXJn2`=Du9sv%sn%%(klR0`ZQCgRbU4gRBL5z{I zN9;7oHdZZX(sr;?M+xuAbhSd5+d5&pGH`l(75(MhFQkqDJh;7t6u>~g(PbARx^qNJ zT)V6}&u(GqIv`@aR*zS{K zZJ0og`K6BcCtjD;^Dw8*(Pihirrg-G5%)9+8~2%j4U zqY$<;6F{Ke^T@;aq#57JrKmsCY5b10k%RkjPs7oreoX~TN(foXGDlpN!QDH?=PjhR zs&@7la|N(1W6OXr#iXJi&-QtsSU&r))(hH|MJEj^sdCw9%SgP8RH$=zMg1;P8{FQ= zNKKvnmfJ4OD*dq279f=bFCWUjjg5oRP{4qI+CXZ`S8Cf}`fpUO_##-M>ZaYd8*57- z(YJ7b#pHOclGsbMi7a2w!dqQKihR?@dUEFXYM*X|S9z0eL)?=%qcAgEZJX$HP&LNe z3#?Py1E6PUVPv=s47!+_iTB?O{!(_*y|1W}XT8`^pN&$kI7ZzY$&YiTTCy7WMRb&Q zxpZ>pipE5x+Ny$gDg`XxbX-ykhC9kw{_4yl?v&^`7AMCC-lWxO5(`?YjX|ApNBT2l zJWnpjD-x9wz2cjcUkih2l}^+F{Eg#I#k~OMj~>_m&789yL!f&)$M_@(eck?-@sPa| z38{Nt&fWo9eVJ| zz0esmtpXow2eL);t|uzT$?d!$)q-SrCqMCY$@CyWLrLt3unSx686ju48m9 ziu^gt7~#F$NdG=eSnP*-%M=^QG`FVTwbEI8)*Ci_5?n(|ULYIkKg)=XMbuBVU1MkIWA$OGBSkBM%#Ddew)9LlgEUvOGW)AcFD%GC;sv1cfILWDWX*O4@DvY^FR>A=u|-%4r-2 zG7!sPBe(JJWN!bV*fgNDGVIASu?8gDwX~||DYBI*!I70}IVHsAjrImsn6j&s{6Xu% zq{_|$@rk)SDS5KMw&rfjju^ zt*kvbFciG4*{OFD$KIdXj+QdZm&b{ROHB{O9z_KsWEMxdKQZ?8{{l=vv%g&#flMsC z08x1rE&vM)8xso)D-tE8nw6_9=x-?!r3T2^#md2+_g{KZXOOWgSSDud3O18>um{Mv z*#dxU03atXkc*dv1;EO}!t+0d4$iy)F=KZtGk`o3K*qryfq?*Y-M5T3XbwW zj{q7|S^$uThl}AacYv@R$l1!&*d8En>}mS62*0)Pd!R;D0(7qEkyy&1?E0FDh%m6ii2I)d!~HkSL_fC2EI)&PJ^z<=oeki$^bC7H~Vd9Z0q6x_BVDnwz4%g0UP|4 zxG_LNSQ%gpuJ1q9xtKazIl8(qxmel$u8{dR4Y4{s$qghe_8$wd2<04l`M2V~ z5fTsxFtajs1(<*=tn88gu!F@Q^S?28^3GPC09_XF;sF6HzyJPu(g*LBnS;Hp*B|r0 zhRduXrXs5>NB>vB|ENSn96SL&jI3M$Mph0M01(K^3g7}i`29DFlCjl)vS9h+D{XJ? z0O0vMS#X#BCt>&hOrPdI2ZI*y-&_g~;Ee?VX#Om?9t#JHDfkEY|GegZx%~fa_ivW} z%Yy&!d?eg#ZU55J{8s;ew8nN;wqF0ygZI_V6}PL>R|T!bg^=90*sxVjlGb-BL*W5fDaIS49!5Ee{C>; znaSS473=~4m*)pCcW_4fJx@*!0JHFK(cg#@z%23yaRHb`{~&Gvv)CWR17H^a2XV0g zm?i!oAb?r&4`Kx{OZ`D?0A}ew2pnDZ4+6)N|AWBs6#gJ^JjH(yH<(l94`K%}tNlS> zPW3+sT#?2f1dgEj58?qM<9`qvIG(YcBY3fY-%S713FbC-{o?{QGWmnRNtynG*ukdY z+s^I}_*nd*0atJS2Z9aE z{{??5t^NdI`wiXy74^5?!Oi(!bYK&Ue?f2#f5NkayJ_j=XbHam|5$)!R{w(FI;{T% z!Ckfa7X)|g-?@WZX7{h$!43Ks^Y2<5{=^2`f?t{cQiF4M{G$f@I)dL@_O>ANKRsjz z{zvNkU#(>aCkdXdmBYWr0e)#SJN+3ZnB2+D!4+g?V*6i=Z0vs&|4qun`5(=H+w=TK z`rpPtAeiT0Z3lw8=<;VQU?&%lot3GBt;3&&aDZK0z%PM6PT+`tD8ZKkv#W>0ztrH~ zyZsA-d++`)2#(?LuSEfS|BIRx+&Hg4{Q|psgPi~7{;wOy)Xf>(UDvx=cfo3KxqtA+Sm)lP?_%zxNxxrh`cfx5S z{TSYP!>A5aib{}V?TI&k@RdDtX>-rUp!Dg{J<%T{9HZD7^fbq7gRA%S!9y8 zfKLYJ%1DAhhjrzNK7V^RhgC53N-C2?kK}h2$5!T}v&|a+xZu4}tH$cmOF%)OgHHl| zi#0w&uoa3!yLRzqpIY#ph*}#Qjll82a6z#m@a%4|4mM zJ%eOq{c3vY;R{1eK)oXr$KkhUmfM2i0E`QtMUrZ))<&|P=Ta`whvuv|yPQ#hGUV?F z`T1|DQ%SF!V^-Zs1y)HVe-NbCzYAwZB~?b1K$CCwA2esSdrL%DWEDe`Pxj8Ls;>Y^ zHjo2b0A;Y`8PP0-LB^n_C5(swhT&>TKiHrc$@?1~9^ot<5#n_VeWZ8KaXNKvsRPVE5>&BJk<;lW1k+mJ0!)43_frov2Q3`BlP;2876?b{8%_GGxGh00 z58VyQ=vF^NM?SIBN)#nMV!OAG-em_Wp=ewjRN^it_BvYGB()n^UoKqj8};V2^oiG~ z(>fqroU~|OAzOPW-WW)iL6bMQ=P^Yi>#F1F5=45ww_W!>&7 zzoqbM!`9?D94|%>d7^{KqWh;!92QWw-V5mu^rCaf{-Qw=mXwhr*jrPj4HNq?o^#mUDNSSiPc7Vx{;9(^TR*|7i*hr9ovEGpj~# zJ05L&H(}n%?BLKo&DPbq-Q_0&^G^iuuvo+@@vJQPMw?M>YI1fzm?7`>m9gXHl1GVy zQN3lC3FM_QUaM7|7Z}lTLbTBzWD|my(H>aidFOJQN)c z?tf|f(k&8c-G%n;bM$~}rct7v0XpGp_7i=Xem;fqpcb`~sCDY9B)l+)9*IYrg23dd zx^-!CIxX`O4ZUFLlvwJ}V#)j&eSn_78q@3YHOTc~Y&=&#h3)tka+bQ^w8K-8P%Pq& zE}G19cXibYuuu8IT-dh;uU+HRJEgZ_E zJx%dxarwZ1WTzJ#6r9%MhG}acX{j(wx(p}ubh=GLoRR2)>Iu{Nlk-i=3h_r6lb`Yt zLDX1uCkU<7(ADLGoCkvY2dDNu!i60^x%mxQqzs)|z(}7Q@w><~rbQJ`I|X)vPc~bJ zG&m3**f|}xY%KDR7}d}{1#5>pdg2h#1WnFJuSZbLTL@XVjxXmEuIFAGh=f}X=jZ~D zNRU1izl;qtKD4Rc_4ZXG>5665Fr{C(&PZcs;)~C9T|kZ@N9hN}nGgQ_rg2igkW#a0 z&81;%Xgtz;b4$kPLw-JYj(1o=#2EDR4bmO&H)0dTj5Xcww3ruCb)Vtqg|(no#ZNm^ zzr0r5t6LQC*|a!SK*$jcG>Oz4E{@V!*Uo*yv_xB!j-^JSfbAAq<+WpC3TJl8psaSZ z1&9PP6QSyvA0N2Mn7+;ELX#~xxXQLnjdSXh%<-Bf|y8a;nQwZ<20DLBnS zrRi<9Yu_iRLPxtS7P8K=Zgn%RZ>>w+1jD)-TKSi0Oy#a!A0$S*{hSwCy*jl03rm{u z%~xBxrWYvR42L{;lir3&%5N+C&-2GCja`aO*+T69ki%4S9Mb;kD6@BmLJ(`UAyn^s8S}O)94{7`?xd2iJIBl83ikyA z6GgTFed^tH@d6r4{n07g1GJMnOa_xgy&;K~aC(u1-(3ucrihmT6oy}{roj9htG8mB z(;-YnMSxR7NJ%UaSw0}_m$USU|HwKiMTLONA^hg~Z3!GKOM|vh<>RN}N{*jZM;L8B z(p~Y(Py*QFUa;SS8y%)an>WrvNQGJXdqo}vFG@c5k*P#tHX!v`7>+Rbw?5rFF^T&E z>>b9ZGSoQVTM24Kn~bxEZ2a(Zy$9v@{({DbnqPfwlbZtipHijBndwaU{a_8(yvf02 zI%Thj4`I6KG@zWIE1M>1!W|P^@x9a$Y&s9+3XRtUUP0EO(4mU)DeVErto0wGwvoMM zy0IV93OC?Rk_AY<@6iwX7MyDmpMN^wrN8h%QK-_L3t`l!X6vo)$ zO#X zy8LHiZ3wnUGA0WM|6?{)k>%QV6B*YNE}Pt+5$PxQHo{TU)2uSvSB}NFI!18Co;x4w zZ^#cm+^+RHh(F0IvCOeJR@qmN$B63%eOal0qF*NAN*^^u?o_@<@D5S=5`{X2Zzbj+ zlAO!$TUcmM0nKXiMq?nSTa)z1WebkVmD^Re!C8lXGZ!m)cwJA#RV|Vy7tTSOsyJ>Z zM?*=PV*c{LhiNn4^8Z- zFt~rxR{IcP(uEu(^3^nMY!oqfc48JTnK{V zf}kxrnbRf>`i$6#VtB-@o6RjWyP+TH+E6}u6$(U|kwQ=8PZot5_+X4qL(zlU6%oE& z{u+x@Sw%D;^H1ZhcjxaS=2K{lWX9^22zZzxhEz(%D!qX4*6`)uZS6DUn(mE$nm~te8fbFKy+YEo%=Xww9dSDk2H>5EGRNW$!5Jci z)f~_4y~9T73JnKZ3|JTe+Gb6@!?wDmBep*6YM42wbr{x&Q-oK917@(~bVN^sOis|Y zF(wld@o6i_-F|^ejyAU8kLdV{G3?+5{fOXR-}*(x@CE2Jw*k>=e>|k=bG2sd*&l_y zq#gF4@ndjC-JP2Hza=-SgK>~IYM0*LPnHyoCNLe`mX1^Dr!mKbY(@d13+|>J3(&)B z%fb_h>fnS?R;Rk)&^pde-EVqc-MvaF;)$s&S%%6zK}E$ztYPj}RS6VQJ5adWn4JHfpjoKF#IdZgn!rJVJ058z0x!;H_G@I z(xJ1Gwo_{x33k6Z(VK#0Hg!;WzA~qEGQ1ncMbx_%)TDCPfCFtg26FL}U+y7ei!bfm zf`RBl(|pI6uXch}mjj{MyZ!Aib3NJ@8F;;13kK>e5kueQjk;H~7*N7`9wYr;>n8o7A8$jKY zDZXP*es5)-LXUUn7#;HPbG#KNwbjx^^$)G)hnRnUJ$VAi5*W0UM<~M?4~xFFD)Nbi zdk?u&T7?B4YE%(%{vJuFNmF!V?A|7dRayqXwI@;>-rlt-oN}8J~u`)*S(}GGoPI=-twNhYyODSMO;L`ahQ7XbcsenE!v`WnJb!YrDp#N| zaZC@Kb!_8PH@RgYA4#f`k~qD3Y@!}oht$SP_%J-pP%&0i@&$J^xL>WDn!9tvF|E`c z;F4Cs3=zchg&$7%1%?M^TT1wjC++fEOh=qn z{r=gOecx-0`^WfY;KtIjnT5ZSD00jCT{lhNx;RfWSm{;o?mqv ztsrf)Ex7kS#J&&lNk1dP_b1CbwVJ-d--TKL`ZWOKi$s&rb?~ROdPl&jBR1OGIG#3F2IDHzwF)oz<>d5* z+TvAfk3FR4w@jE%D-#@t$m6a%#dZ^`XSQSC+|(;gU2&oZ7?}shL^xcKiP;#^CqGJ> zE+5VlIeZ>)#U%)T;SipIAWrbcr*EL&F&2M=GMoY&hTgur6ciP{GHH2(=&3~w1dVg< zmIco7D9e2-g0(ePk}wjB*N=qv%YU=0bDz{mTbsb`7+kI!f#z}CK0!xQL)NKFRpVC7 zJ3Lgp+gV(((HKy(*+l{;ZE_b_GOSXC|Vy~=0OI9X$ieBF+1OvCOgLhrZG$(`4!ygY<1=!U{8@hXo?nvh!-0-Mr~1%+{OLRLEmY;%E_Bg`^nB?a zqz?Z>2cmmqfNwrb^e%-g5Zivp*OMprQ{?#qPw5W)wU4n_AmS{bU1OTgX%V#deU@JSowpH|8TIzF`r9TPO!< ztw`D=%5XxxAyE1`x6K4ftd?cWOPZ&_v|8WY*LqU4kw%`OuUF`MQ{LOl=5Fz{%LVme z$JW!~)EIqYj02(s(tm{RyUxhD#ILs=oE~43y1vnL)r-Bq_&R+p*((!bZcA`>(0wYL zb#4B`T)>z^OcaBninC+a)*`X{C9Rc?{gSze4m*>0k3xQ%sHXgv-L4r0d{as#1r|#z z4Crvtmdn_9{kc98m4@iTgDq0;I7?3}e@}S0CntbC$7o#t!+E-IihKB8$SNzahc*E@ z|0S%ztcw$diA&;>jp!lsHUw~4hQlo95FeB)Iq)&+Ct-+FaD945An6W-d$1bOR_|86 z!qC)_uaI6BCG=PLaFD3snZN)xh1M;%smOIZwYd*US%H0l^4mrog|E(tDoqLY1?7G! zU5UU=coA>Z!{aPG!|B}ErR;D0-x$&75X4JvZLANcPS@@1ZOD>|mN+V`@0eL*{cHD3 zViIn}>%(|%BFXzC((Sa@s=oRADu_AOWvCIWaq3Whf0~v;G{txxbhWO&_GT-{UDbO7 zpi9MQVrKb7T*jk9qMP%zm~CKzdE4}uePyxwJPAT}^ZA28QvmV~o5>}m2%!)~wY*vD z83i}ZsY^Cd|Y-d**E-MG;b^hPHcC|5vG2xDGs3Krn%% zGcvtkLQNIt$iBd?i_aBRTYZ%fs+Kn<%KlR$`MxKXloY)fWvsi7zoufGpauflARDv- zvP9TiP%h6jBzz%~E*T10XN$94EhslK<1};3XL%Q$^YuX|!|fmLXsZuN=`1doeC{LD?wihiRcxRo0gKB%)-f8!V*> zBZBos*~0t~V06_@>`#PQ8GokhIlcy+zzhTB<+z8Gm)nvZ?Y1cL$Aj?S;zv93Q%A<3uH{70d9V5E?_LgBUrS`ib8kr~-wO9&Qz zWvw&v?g8d9p^Nh;b`FAARmK5zoDmE>L(goe?N_65339ZpgPug6Nr(hK_03B4G8a$) z9qF{gN7;dywQ@!?q39yb2f7hi9c(375gidnf@Y0Q(D#7FJ8Fd$Hq7cJo0FclpBJCU zia~=(ql9I&+j&%Up}8f;M5F%vJd(Mk?lAgMqqT0R<_zgk9K!S$WHaSF83eybDNW0z zq59vD_e+^bcyIv442yYXc#h*D`zZEdjDp*th9%=}$?^-{1rGAz}$57$DL%@gUWHoV%kr zU2Qyz@{?wtO(TC#70&0CT5#Ij-Yr?dZ=S&~H%e#K1e#0I48jbU6bwh;1f0bv%Q!Rm znjPw_R`J5Uzi%Kh#J8cvb5N0Qt=baF=90U9Q#_1*?8iVysG66j(3?;FY^522K_K*Et$fJAquMGj7rf-|rUG$NUtE(blyfJCEYt);$P1J1OC$?qQ>ud?< z=dJFK5rwg(*)~Go!dcfC4YJ$Ae69UJ^xb(t?Pp$JmYM1pYuS=J66T|kjC<>k0|JtM z=Fluo{@(Ynx;nU6EDZ<@=_-CZPiGQ-2pR9Kmrr@t?G)uo)XzSOwOAf-o_Q4diW&Gs z3cE*FzTvS2vQtKEAAqzIjrg9fdN)}Nyk`g!q?ah0(!MCFKjG~Pwc{Tx!T$R41D?_( zJi4>iUVEwwvM@e_TBm$*0R)H%u_erSG<7Svl?)^@Go_~KQ^v=n`(O*GH(o(dRtjv| zifYs5UFA!;sI%TSa)2F>VVQrUlEN$ z2L~t5LYn7jSRUq1-sKziMn|Kj>^NVmEPKV~~xaH2nYzAm?m zwb_K1jRO}(rN~biXiJJmogUzKYp;xlBVyt**^<~^WsWJ;*22G=;LYjr2VWVfsP$J z;Y|uN!CtZd<@8Fytasidcl8_>S3qF7qf`$WJdLMKZ9Dl=kbr@9%uo2F=8OYDhsMeMYb z&lB_v%z&s5<v@ z!0$tbTicIoOB=f@q|?X%Av z8A(?V08YnhH5zZaxL+l`ewJc5c-}a3TP@#+4|u2QuIEwZf)1Y6pTa+gGt0e6VosgD z-z|!NMMy_{R2b~=iy7b;z-a9DmFPQHZMSUehCOnXvuS?1QS|9tM6qBz5&rd^TesVs zu1&wn_M&>W6t{`kC_^-*%#Y9=O_>cq)NKmIv0Ov48ID-9zp>7zNwL6;6fWZ z0ei|$$iVh^h*bqgD^<9iACt1)>|kw8dD8QIP843&k~-Sz#op4%xlE)-D6al7$FAXd zC>mQ<(Djjw9Qy+wO5$zOSL5y|?4`C%jZXSOve2TrLK31687dE*(*wBTNwT+AC#1QR zYwLy>RA$FC==>ipN11PUclZJhZ2FN%Sw;@lbMQV0EeNlFG$p{lR}uMC!UqOguhWA=r*n(&^L~XPg2M}f)EgX==hv;!Q_hw=Q;MFE0=RetKT3Q; zLF>uw>*;(KVq50?yuFXZF+56TZ#I&ZBx@flDSDfjcmQEmSW|@iB<*od>^HA`aHj7x6J%*kuo#G-E4u4SX`sX9 zSDjehBHZX;Z&%CPCp#`VDz|(a8J6gU_;le>^Vf8GnT%8z(<^;1T+)m_h0Ix=K##j& z;lDhM?7e)sf1kS*F*s1caI@v+Xdc6;5g-*d>y3TNjFy>WHaW0fuS5C9Q~%P_!=mUa zl2{}_>^2h7!gL6IAOey#m?Z$cbdl!6H#r4_mhqxOD~pZ{3;1?q8dMQ3Q2#6ME(8lM zuI97>5@2TQvM~AH8U#n}qQfhB(W3b&@I9dh=(RjBropaH-U|ZByD8&&R{f*AxZ~SU*D5=DtmYb4f_~zeFv9eHTDpumap;fG zC|XX)A@uWQ_8ba31PD`4$7*P{0yC75Mx?J!kWzCqTLwaba8G@34Q`vTGu6}Y@#!~e z-yV&61P`H-rnFFkbe5C3q_wbMiBe6E?Fcp`hchecEke)kgEdvg=3DZTLJb z#U-m?g1pHv@1@aDT&k`7GlR*-2hp%}OY6uV;6|zBqNi-Z+ddKV&Es9+YSVjq)Z#U- zC14o}t-cFXPC)+W*XWjzft_#{lUW(Rg&8|)3Pn-zAxd}4$hkBZC&hq{ewr2Wb5=v* zBhq}>U)8W>r}DaN34Usux-V;urSs=OSoM)N2!y*XI*q!Iy4s2g#q%xxGrY29c3JRQ zUGGIi(H*jusIqQiF3vmd?vhl2(|a#w2@Ah&V8rD&Jja>M)5mtO6h8{U#F@S05&4ph zwei^iHwoFWa({7r;L_(6RHe==moSS2RcYyo!6)XbLz;|7M}_Konz+jW|J|^HW?qyq9vSKSOL{N8h;|$+ABEJgHnL@~WodO$_ls&sv?Qgm8n9WbE zyeJZx{i%Lj0ysZu{SeZ=wrl-Sf==b!i&0|`w_=7@bn z7*^wj>kwWmbJmz3c=c=n$WN-8O_J<$5)M=|`zL8ZWU%WU9ki$Le#>x-#FupJ=c9Ao z@pgB)7J*2tRvuqhUt)f^N}%unyhHsZ|q#Di&`oI8UPEK?z0ZTl8$FN+N3h4aem zumRL?LLmcz5tppc9OI|_Gykkd=sux9M|}enxPEFpUyFNm)sQk+C{HRCQpz<9}RB^JyaFmlmpjQ>Q$Y4a@(tz0)~HhFH2P>AH~0!c%N;1 zXCN}0hSe$^ea#ueq3LVh#e6}cO{~YetEq_R5&p5K1jeM{IVI2cMuNdOq~i$E5;7j9 zvhgISJ{!KOc8MG<*wM&-<6|k3nU%b0e7*emuPF^i$|&tdwnS@FYhdX3vpip4!9tab zOQ5)3>W+ma$5L0bxSGfT&o_?c)%c55?Wk`CYFTNgImR};ga)T>NU`;Av0h-O+1fhS zj%+6!ul$Pw##m<>t7&O3V*|n`PwLQ73{S&(#Rpk5wFSFzV(j@LI!V7ezsa(jd?ED4 zjLN1TJou{f*;Z}WMrI{`|1*qJ#&X*{uhkFe4Af-Ef^!P7dbNeGuQX|r$_rnKRkSx- zN)ETuDqhog^D9M?;5Md_cIy^?*sxQmzag|-PvsLutNFea6cQpgMpFAp0rKavFYtsg zd-7vZTpgl!RY$oIBIg#ZwMh_5S6n0Rda32|{(!HlYlN1c@e{?lsJr3*Ds+#Z z#KaCji2Cgg1&!9ClogP(ULBjvog6LECs&|CkOfXO*snmp@Fnw7$l|M$P`fR*J=LI9 zi>d>5OJ!dEo7x{3ATmcRgN9w6pMp@r)l0KB@d_YQv~A9ya*BRqg=7NO<&O(Z4l|7O zImtp5|C>jTpZ@g$R_Qu+tNblV3$g_-dy zf8dRoEg*o~crV8;RK4r_%gsSp5{Ib1Zag+;gy?0yW5l7MX~^2pZkT2SYIw4^r3t6y zI)HQrfoT}iamT6`A%h~Fq$SI^ValP@0L1%wuMVLa1CQoYN<>K8-n2H=7b9fB{D+&D z5PJ%1B~jXURS?C~_^z!bA~+Kga-}`0j-n(Hb>bWFPrD**wj6xleOR7uUnU`VTT0cu z2q^+3k&3M5H2e1|xE-IbTcf!}*CRSF<*GC9c7gBXjB`Ramhrp-wJin@agsX9uazxvuDKm%57kYCDbUQc+`Mncjt7TA&?1wwqw>&A7q#!Rxe9A?_x z0sJ*5$EOn8KVsi~?V1h{R1im-w0C$q1O+s8E$~FP0cR(Zwvk z&z2;fznfpCkj7t;5SD<{<_^5rAvzDuAv1SrQ_nJ^p4Fi!NJ`zmd;A0eQ-!5cCL3g_ zKhS8MU7_>$R}+_^m?@xZxKXV7Aq#bT;TGc`z0cT3 z*bOs{Ll!yv>g>wQC{R14<0D96wCJxzVL$p|Q=iDzOotti8;qD?M>Kz5wK}0@>RRL= zkh2ks_NoX4eBL=(-b)eGCe;h1nOW{iDytzlZdlJ z6H^qv7S`N};u+otgr!QJnM`~|$juq<@ZHP}+S`#GUbH$Y(~MxS_tRn|;K|gu4_!s% z8WIZm9MZBPXF&Z6S6syOKL0Na?$8v$09x4a%k|X`O_mlSQ9W zVlZUB@5mr};n^cl;bETr)JIP!Ke(DjrPn+}dQ<%opWM^8-)MtDiDDn#rM`L%PI->? z*t`(h)s+2IT{I#&`K*drckcA3{820SWh*|-JvpTPFYj9rC1kiA&;>JNMv8V?IYs3x zo3J|p+9bxQwS~+w7WyfFk?s~lK2F6%XOfN}#|Hcjb*=i-^cNYHjGaQ>)yGryw?MlyZ1C zZ^9B44dd8bg{(tWk7NqDDvy{Pc=E@G#e9C2)7U7`lR_Icv{KI;F2nbFg)LR7ALD!E zv%usovJW(xm%gFwr z=nYZy9R(zev+^P(RK$$6$_#`K*lg?rWTZ=PaXCA7wpiTHF$TQ1ZN52bR5f>qk-p5o ze7BjWpUy5bU)8lm$#`{7LAj##5j)#UMklM-fVbmJ!@F9NA3Z6sD1{@H--95ZN^tgj zdS5bRRT`&t3!=E)W>?!#(Mr1_aNdFH!RQ*dIf;a2i9>DBSNc$ne0B%Iap*pxtP=it z1|jId1A9|Bu^cbv)`Ag^kP0*IPEH@>m#OW>QABQ`98$yQ+UdDIi|$7*_VnvxUp|HI zMpXXH2NtPdf=iN8D~Sz<=OdN|+N$kQHstAd;iy*G-0=`={2B_-d3+J@kH~E9)Ste< z=wxY6)g<_j)YACV-_Tza_4lXnJ)z!uAaNv%as?4E@eRL?hT|;M&~;QI`s#OeFt8`u zGwdalvhBPi{`54FAOnA1R!+N+e0G25581DWxWzJueJwng7;pQ;9H$;hArD>3}3Ak+Fd${9b~`T?$1=IH%>T$ zkTqvZRy zK6RGi(>qmqyyM$QLm93Es614(GV=~twhB*v)-avXVpGSLLeJ-qVQq0}w%9-zt=Myw z!zN#>5_!n?KU~T^U=|#1@VF%MR3cQKSXwL-!56LGDv4Fxgidd@Og=HH?$J39UN@u& z*^zR~@CT-oMz*V%DM;&b$qwQx`1_U*jnlgBhO|d|ZMOEqdp4miCQ&8Zx4K|H74d!Xk3h#&M%&LwIp4r}jBSk%*W8N>1AUW1aklMvZlD^f%2 zsL#ThEdnS}LFJrOjbk+WVSuHE^!e0NyLaD5CEw&-KWha|_twIxj?YF}r)ojk7hQ){ zw$^6CE4$GWx{elH;fiUbG3GZI(n7=qt9W(PR0gAO{L*enW9!#Vhc|AgKEx%~44!@iL( z`zG|Axztd^una4nJtZkKfC6+f$o=k4-;o1sH~fNEZ#YS4r4r4Yt{LHQ5-&OPZT-J{ zQ_3rX>gdG8K1>w(JofX{=Z+*cB61u~>txk2AEuJzA4k^()+XgpOskE?U^qN*i$zO3dfj)jb7jA@#D(Dx`A56E5^*TqSRG}q^Y*8R94?w{eK zdzo`U&x_&2Lqf|DS0iJNk^|tR8~+};+Bvp}lk5%&RQbVaK1p1d^1_KvghoKqpSZXv z|4Z-VqviMtGgsPMKRp+WMKj-E=x!~xTsTRu4dq5hAF<)i%TM!muxLy}0EAPv-Pg_x zH!8dro@7EmV}>Ho^fZXiO@bK?Q|>;XOQ=dzz}T!}rZQm@L&|DU?OnE!_1g1(i}-9z z8K{gf@YC+F?kUh24V?+-{g$NkSE)(MW*{tbWii~W)I@w~uK^#xEr!dShWph!WGOQLNVc5qzD z5mhCIK?}9mZr%Rub>>)2!xb1ItxJ%nH;nPtLaT92Kf?HqIVPHDNkWOW*$*soeK-&4z7RG zLm$^eypK#5<(v^JT?d2fPR;=NzAeSa*~&fEMi#O_5^l*s!55UDx-Ny2j@wB@Xx&4@ zS@$%kUfib*v#`J$$U*GB)Q!nCc8{}0lcQ}^|0yxZXP7)(Attg{G8%C``V7C zrBKY7)JkBN9O^~8w0asW;-^?#N9XuBEooo{$-K&E=6Vij=(h^#ig099%|5v;&2`Dz zyFQK;JQY^+fg+(D4cApeXlD1wX~K_?%X!gf`ml1w?{?3TIz_Zit2;lepp8|;3zk*| z!+)Fb%%P^)%wY@v%A$l2nKGGfh}lA)LQpC`?%^7yej~Tz)_qW1o&W3UQ2oSr=z0Ct ze`AqiVb5Jz@r(TXI9z1Ev_WUdwVqx^yqN91S8wB!E7uP*x=LB^(f~nKZ4LzS0W5~$ zR@2et>Ch}%S~A{-eL=l`DGZ$;p|}f_B%WR8a#WiZ(q4mp*?5Ry?UPD`ZV8g?ej?VN zZpj~V4QNI7!up^p&+WfU1v|j4=j^%_k6GfvV3t8rt`Z%z24Am?fC)i5=1o_H%IjA#L7CM86ryuKI9-#SNl`Flg}JN3F&0tOhiQfz^`=z;V|kYa|0vq z!4H!B{y}!r*zzD^2a`N{&s(722Z1e`CR#s*Cavg`*(F=!WcA=IdMhVAkJ?EGW~|5M z?9jSQ$hCA)4mUY+*#H3wJlTS+H-5XZK{1`U-&dNKd&OWglQckvGk)Wj{G_yo93cX} zqV_{{*(G!O=ovhJrfSO3ozzhEGM)7{F_Rg1l3;`hZv{_@Z$jJ?g?6o8j$e?s!o$@& zWOPF_PT$6fH|83xf0e5$9v`P0wfC7l2|nCwm^acE-mnlGg06%8d{RB?4OfZbTs{&J zpYyKz1vAs3U%|Av5k7+zbjq(_w^Iv4T-20GHk7)vvdRrxK55NK>q;RNP!obgwrB=DQ$u^&(ho$4gfbr>Kn=NpsFxHKezYzt~B8C8*jd zGAv@Z!jU~0WsinG+(L3!%NtnH#LPWJh$i+uE2*Mlr&;e{t(m5WEhkg7iRGL>ToB8I zNKg<$Se%VbGAud;ox{Rsr<{D&SzSYIN ztTaX4`pZwgT>Dk|+l8HIECNOMbEMR3Ricuhs*eGrhxOtj@vLGMlBn zYy1l#Op(c4iYd)+#!BIbX0R>dD_1`_pZ7n()AM7H zRn;5g5-F#?_~Hd%be-P!2V`TZMy7gk>(Wpj!%&| z`b8f*UhM#}(Y2&%SHJlr;_akq-DT{DhhLHa{Uc^ls`SO&s-RMql$Jc-m#@|*TL?og z!aU?i0n%>wXj&kc$*RRwP3WGyCXE_1%H{otx@$2J$U@@jQoZI}#|mw`qece-xe@Xj zY%1x;ii}eOj<(3kuj?*j2t(f$<8omNcE1c%j*MR2X0)pPl-JnBSn4^SE~K8M%Poma z@9|^k+BOyZ@Q54~sYhy`voJCue*XA0iD3VXZ$-_f&nW7PycPYPCx0l?;Nq@5azq}tVX;U3%FZ&5QyTwi6N9slKC}Mk+U3%<$Ox26cG2Vi&f;Z(aK2c-GFJ z?d6Ff%L+Rer|wO{6{p-3Xxf3w0vBYi;~L~UuX@E1UjBJ?y|Xx0_xEdb2N4P}_+eAy zCM(|edOLo&w3cGcFrXv4z)|!LGt_rDKH1&acJzZTOI4IiDxBhMVH^`47-Tbt@?FbQ z-l)+cKD+w#^h0m_&qw?bZq?Z~mJZ^hJr6zwh~Mhnvlzt3m|~h_FUZGIYtE%qDrP9Uc#u(~SXj0v$i#))|KE8b+vVM2>_NE}#efWje}+zwYq!n1{0d041bFnHp8`5$s7q{(X#{^I2Mv1$Mz>sRS~$sYwDD4o|8t}11D z42Vj%AdXV59du3F`NZ|O?5<<}(H$R}Q_g($pM>HL48)bX@65?uVsRQF6;W?v(NuR0 zB5^^gpN0K6OW-UdP4G5S^0LAeLv4i&oGwqwyD4TLrIz;T7Cb8x zp*jk+FQi}0mH>KludO@4?E{UtRzb~MR5wdqW6#0KC*;n~yLY`>i|qFc_SLR6_qBB= zVNJ z#FEHhY5Dt0 zYQ#Y}v%Qk{!KQ1W+C@>#I*$2Jx!FzH%eT`4K0RgJ{k=fS7%|3U)SWN8CE;}1OQquE zCcommA=S4ir1Wn0YeVObGi%TDM62jtae1mZF%*3>ISd>ig{3st8<70o`Ow~Zm=N55 z|Mk#KV;GkCRldbdoTU3y2hujg`XtVilFjHn6Q|AiskcEvZe;q?tM6Dn{x*q(x#5B7 zrCPeDLl3Wv$=58Y;sXkO6aM{wP_MZU;REHmpsasNuOgZD%;|Xc+=Kxt$0-3q1kr-J z+r6d*rS?P-zoNzCEbn@^?Ce?n39FwvoKof;= znLO7rrI#t{5{v4N#u`!~28szU(tOw&H^y)`V2LR{shYmLvtwFX7=x)V_EGFtRoaFc z_Uz+Wrc!_1!DXjpKj(Jh(f@m#c3JmY+ppxx2`cin$Trb84uwtP^@orcF+B5vU&?@I z10nrGtn+~~7&TooJ&6!h+c$!jyi!$*mQ)c~Q?{UAM#ux`k6-F;cpH(kKD5Z>J6L%n zo!#~@ip3zid%Y@{-W^u4Dx^vxOg0vY!`eA`@e@&KIfWbM z>{lo{IFy!#gS6raF_7={4_fdZaJnxbpi!ZEM7I)kZZqD zl|w*mI|pVwPsTd^sF@e&hJXPD1JUUz2e3j7=BC~N=Lq8k_Kf=~ZU`QA=V{?@MOJ4K zWfU{I=>XD%^>zNOU&H#dr+7q0(nNeUsKZ^-w>wLfDO#p0|ZB)INJJV(SJ`bV7# zi4W!Ovn2z#hEAaG3cgeEvwZUM*=$zPMe@wE!wThCV+YYww>k-npBSiv9VcDoT=FV) zb&Ny12+Di;LG<>SHDE4vC(X+qPd^&DRf6~RYFe3cB9&Nop15wlOUXf!{$nD`6week z=(z6g)WSiDXgsJ9Bkd#xg8ig`9*4CEmup5?DJ7{q%Z0F)bAIPuthya(#ie?{liGpt ztodd&lP*N_k1Mj9{knDb;vZnR;clmh<%9aDRoF~VvQVpz}CDa4A#T;~tha3N2o$#UXl=41o8D61jHb7ssB*458JX=CH!NYT{U1@*ar<)^3tWMr6uN z{!D;bFuZ`hs)PHYM!uOzduRKse0-eTq8!4v;dy@dpf3e-p`I{tV3}9fMjM;~!tDL3 z|C@0^ZS;WWR4rl}18^)5;0`M@_?9+5!T;>OYO9-|($G21h6&AtTkm4-n=RNh)$xh&LO5 zCk!4K!Lf6L8RY)>z5W*QI0H4)6Dyebla4A7t{%pHAOqb~H%7uSJiK$sndkeSltk4e zqgUcgZxb8Am{h}oR5}cV@o{W`5uvLdDDTDC{NBp*lh*4gaZYY)dH$y9eqtcKvk

    v;l;?x^nVjxOl%y?|33+@nEwbboXJ&|$S$jUf`Of#9o)dLefsfz zB#42Xz%DMpKv3A*+ku?@+wW|rTeru(yPnE7%gS`!Ezg_V7O#9_H3c&i7Vr$95`H*+ zQB_hjUjOz&EO`HrkerB+5ZH)B#UU(f@b9rm;R;Y^*9I_-`yV}D2eW+0_Zd0!WpbD&nB&AuCRQ$uih@C*&$f!sfpK+%3E z7}sMXQ&%@PGsXrt10W79s0BuV?V15q0G52{`3+cexc4d@|HKHM`@7Nfcyd52)m7TR z^c4X#eK%yYfBQ4~W;S5X_8wC9F7)7>z`L(ttCf0R$I)!ru-tB^iC!y%uSb>4115#Jv#QiG!G6K;4_S>@DT3-Rq8@eImQ2QU(&h}CUvRbDF z;9PV42LF1sO(`rSL^w=7`>=o4NJzmR0o<7yod7X5*fjvEskf;CZreic{L~Z}8h+uS zQ~5d?;n4m8-0>Oj$zJ$Dbp4#YTKqC$H2eS6mVkIFQ6um_iS2((l9PEBLshA;F#IKlPJA$0kGXAKus)M!vX-+(RJi&w8x{hh4P!nMjzojkBM5u ze;yV2&>Mal{cn`r^QiC>yvIS|D`>a9{O`YF=HLH{Gyhjy^I!4Q*#Azv{_n(@-tgC` z$eZ5qLu*&WR90)Xj`bf)?+(@zU*_l9Bbq6oqswp7o9fd|*^yj7wo+PK*@52oD$)8R z=DVLr_YJfw_)o?C=mPZlcichWv(f40_4ljiFVCLc;V1t0n-VODC%{ZR+8Mv;x1P0S zU-RxtI8q1GZ8W5;(yh02fyuM3v#pa4e~?^Z&Fp*ksW(w3^E>j`LReFO>cLn zp6~IgAS?KBymF!rmPuTE@o1#?pQF&eQL8WiW3DX2uRpoDKFmSa1=)mL#}!W5J09~Z zjt%xY-o(9@Us7q}K;~}BZ&jTpi1<=u7(^{ZFTqjf=N5h3?}rF~?d9A8STQcl$7SaN~%bZqRkG zz;8g`nku1#ow#4AnQ+}|G8g4aO-*zrv!c`f?iA-yPW)y}yvU^V>Ql#ghRSNNb=be+ z;f7Zi6*vO7Ll=t;=#BZBz#3Pydu1?Y&ANUwhIIM%)6v zyx_)crkWuMl|j?=OlyMtrSc5Rae5!{5M)HRz7Y^5ODgcadz8!2r6Cj_)E7B-C2=B4 zf6c5Zz}Cc(Q)bO-)*9A8%Fz3>MbL7@@Kj+3C^ox#_ZHW!TyJfPJJgpGN7}m0lO!)n zn%zA0yu&Do*i8G5A{(^bEyd-Z=rb6mY^-~v8rB>DBt(NXF6Pa&Zc(?lnSDoz(ypJ1 zK^~<(`mg|)(|P%nm+TOxg)8H=vlF{pxu|oiitE{<_t3~(azw15e1Dn!_lwX6Ny(~1 z+0D?{t+4jxa*jIsA!W(Feesuyc<8u>dxD-n<51?v@YsANuFw2e>~rvNFAv?o&5!58 zv|Ha%L6&YtdK?B&V`yR~Z+xE$0F?ZLC9MqkH@>^Ze(3%zsb}J(3astd=?$USacK_9>fgnFzA|-J&CUOoMohg8% zlk_?$e{J+4R-#vq7<&sTxb>99CRN`;KYFo(7QrjQ$7SjvxsN;*-R0rV^=Xtru|IIU z)7aT|`)93}F-Ukl04rpj$SJSfSga5Rvj-9kF*iSm(*p6-7D;XxcZ?rJQKKT>W~DbK zu3m&6C|`gpFRxOGwxZ=%X+xi#IF&AT{RH6Wju#F%3)J|yl=7@O47!D)~T&uZ6o^h6r&2_l~vc)#E zN>C`KAV{P(^veq*Q)oEnDsQ(Y&;8`imP}k4tYlt)55T7i{$rOwJXQ!o>Jz+0PwTJ% z!cfD~cUvQ48nI4!%28a;BB=eFZQYdX%epT(nNL&!i)Z#M6hW^n1eTfYE9;>X*GXw4 zkGglN2KJcF4gp&@kLF~bL-m;J8&c}zyaW~ByR_%#9;0J4BO^?n**`51i5+)uZ~iDt zD!VVdlk>%58N88`VT>mc#GFr%FOD`gQ;QoOD?j`plc=b%eK(DlZ{zgm+-NT9nzgsk zG1hIaYs^F;TTT0l3TAo_tWdH?wrG#m!GyD*GK-}LY3%RQ-R36jSO`PacZg>k)GvnG z%DZBrivY4HX)V#7$9(Y*Uuio7x0V}3e6jehsT~!Xc8UJVSrTFA)99~!ag;;Q zeRVw}26qveS^O1QSR^`4++UGUpY@P&(R;|&x{>jdlqHqI!TSJBcPrS34Y2cIw>J2_ z7keF;D8(hopqRLMSH7J3a>@%!fr|&HywP7CAmU;S#+Ztxq*&wts^S6l4wwj&KSTK8 zE+Dbn?BH(6UOUOC%EI>3_?oeSrY25_Gr+RSR%YIIWWE?%zKSy@c$mG%bYk-zczMO3 z)a_lXMv){n9Mr8ub%#o*G40dTh1*av4aJEQ#q4<0BmK`g7^dnsx~+2TeMQ&?JP8h& z=y_P2MH+a^vIUVb^|Xx;?Q$)05<@aCt_vh0RVAUQ=en$+ZI1N>W)Hr;w7Z1%$sq5W z|G2gz06MGl;ryeg(jLn%M|D6Ih3n4fb`c~7mk1Uw$*l}%kr~Z%(s}|(k*;SB@%NO{ zo~wg#cHKCqJbm^$s#Y%4$}Tj}i5B*Z_$?-%9D)-zJc)a#9A3MsGQlNaf{&*b z_`s5XG2Xz*Ef{+_2=8=;++`9YkhylEN%u<^rhnm|jhiXRu>`P@AiIPTqH|L8;fgqb zqjXB9xA1Wbd$pxqY5K@NW^P!T{{pM|?&x?Mvn?wg>O}=jC5^zmx*s{Os)?d?US4F- zRl|)%2)d>gQg+tA!FOghthw8Xi0ZXXIck;sEYZ8SRa9*YYp(p$&2GRy8#5JEGl)Qw z_DY4I7W{{E>X)0J`mb_$kK;;>S-_er71Ezr(ctbGhGJC#F}U_8m46w2*7XwDxV^(* zb_-fs0_Wx(&l3ZzJ@KoEHM>bXJN$nB9o%#h6sA7u&2;9hdwlnMvdmg0O|xC_`@vG> zjM49L&Bh0J1^rCSo`m$coHQk0SA|Y{M#DJ7J8%!nWNL|eE#58S3QSs%Ch5qDf9$8% zOUj8fc!58%x~OT%wY_EUrIK{VpGNv2DmWp)?bgN!cq_aJlw?v_V4i2&S}S;&joM1F z>~xZ+B?S!{@P&F-w9Qwf(d(ZunerzF%yjgy1`boL(Ic!#bK3K8vBeB4MzD6J*myL^ z%$o!YU*Fa*9Qe#vQf@+A0qAINQrl$wqk3Xl1kgo#=>@xCgnO<~qk3v_80$+3iX#Ov zQ1_E6;{Wd|MDmMh%PfAZ+7z4aITH&DXf9Eh_D<$g3mwXGXGDznKAYAy^)yurj$uw#N% zx*DvFp{J;QH_}>LYKafJ-zugImzldoOF1>#e;ht%nQux zxdP$6SlD5U@Y+is$*kqb0N{}+8UHTJgPF*%{fnxi)1>V#6m!bYr znfXJOh?%HGiFCgyyY9WE^)mIqxvz0pT>%rMtYu8)qCd&>YG7( zq(tkFgp9m~H~8X4w)rj{XV4^c9nMxF?&hB+#%6FrNxZk(^&XNK!xS2+jYQ({tTsxz z17gE4a^T4&zI~gydpmc!aKIg$2vNo~Qsy0ugvXsm`KR4S!b2*XfK zd)~x^k?MRGFAB!zR-bto%S&)GcjXVkhQ^r2Y9CZzdv_gx=FJ6`< zTv{OH&0@+e{XJV3()E+*YTSPUJjgiJ&7B51WjfU6I)?+6l2QducfvEfm!`FNJJgmm zk8H3+)!nI-gHc2;P~8Ort1IGk*NqmR7P0YuzR0KL4eqS4BP&a6>jdgaT!3Jl9TZmH zq1n!(@K0T41)jXENR=B{52@~ez$(3jAPrrI#mR$#h*qeFEvLHL>WjN5tJv%~|7 z8Z`m&ug8CU`1D3oiR`$|ScF7*K{u#_LCk^=QI(beSE^kx7K+lvYwRW8i>migpap!O zQB7AE&X3r7@Zgz^%~o^n26qy&?C(-UGqu^0(B$pJS!8Pw4MC;;X|=-uYF1Ftfugk7 zCzyE-KcF>i8I3uK>ER1MYoA&Z@a{OSPyVnY8`LVQ(PF#JCoK8d@$t7i9iGf&YJp3k zq`d!tvKocKVX-RTO8go#?1G1u^2`aatDAzZ>Y$*GbhJJHNGL?tH|SuCy1HT7=o9m$#A($NZg!!) zcg@~X|71}!ySRW%cr$~}XWZ~EIhoHDE21f&q=YjNk0yI+65p}V`@MJmUU|se_aD21 z=sF4|YKVT8phkEF} z?G71nOsGNiN8FiAN`)?fdo)9CsU~GG;%E6+px6?ToHV_i9WtMi(;ICqyG@;ct?7nk z!)Q1f)*@6r=I@8zV?YG1LX_NGYO>hIV@Q(!a=(~$OUc?5fTO!%AO8f9(pR2jRby8w z=E_dXxRTp2Cv^PZ)82!8)I_o_2)2*~hCwlcUDSKw*$T?1_vN+>|H9)rD8cPS3huua z{Z+NBeiMTC5L%YsLPKa1wB2JW9H*0PjtUt>xtH%6+X~Kd z5O1TZ#of}4^1)-It@2z(;s*43TdcYjm43%#`D4UN`vpPzFFk8LPDeSXur`e~h1ZXntL(ZLsD2z5YV}{~8r)&rb4m$fZgs8%{@2q}cmGlI#^M=NIKAv5v zZMcH5;5=5pss6yVoATv~O6v`@Bb3b*JgP4=o~(){@_QPW<8CD8kbVrRP-{PU6h2-u-E*-OR5lKWL~a~7t|bD50)Al<-HJ|TVbD3* zex3Cs`PL^G>nYyZTUSnwYvYL}BQU3-72jIE8>n>=><-d(|K21Hi5e)zU*M4Pn?z?R z>j25wYFEZm$)g#PQ_>mi@%<}yO=+t1aNAZdg{D>q`jN;%<2UAQeyr??7dK%^{OrZ_ zWmQk!hfunoc4?nyjIcNJL_>5mi-JLXK7uoAsHQo zB7<-Q{F+w&r!SbV*UMwNqSRp{bM=3m9SJU*yJg$PQ#yBY9%$YAXnI9*HN!>xX>Qx= z+G!F8p@#z@w4d~}nkmnCZn#tdyllSAlX;M|Nr5c80G;UODWEX)<1kZ*zOF*8!k_cf5nwztkI$rV-cP&-q!_|mGfeguoZ4a zb8bt#!?qtcl(Vk@G+HS^t{`V=J|gCr=~#D!?r*uH4q`1W@1$ovnU-e)4V}nUV(a3F zL%V=gBl_jJ&u6Z{@RW@U#M5%E8x%CziE<>%q;oqzKFi|J4g3ThpY_=zBDdj*$t-#+RV_dsQcdMc<;8@2 z*%q;O;pQT`EiN2G+rTO2Y6Bw{LYpQOusxCpz%rPvB9$Y3s2lCNXna-UZf(>AnBZyS=r~g7yXWnI7SE4dA~F_|2tG!C}b}mu4U$4Wr6>$Y%hP8nDlx&&(E`k2e zzZfN!CM3Si z^K)2lXN;3QxpBSm1PvXQ3z6GqWuVB!)n73h-wzgK2Xjno~K17DoR+-(@?Q0LNdr2@06+Z-t&ieYg41c z<9S6P0wY*(sx0dOS`!%Vzid+|V z(n^|KX767^6$pKg*dT4=+{``4WHL@&D0;2`^6j!p^|qR`+8W{$0a$Q@H9W}2r|VB|L}@=VS*Eq(yJdnSWCC|n(tNGW!RAE1G*UL z8M}zj^QX)7$Ae^vwG9jIgYP>&k&KY%(1lOn=4y=7pk(cWwp+p4s_1 zr~no$LpL-W6aO*_B!~uM+f=ti5!sY^qYf`14ei6y0oRP(co3R%oL&29qMv*Yf~%YE z3f3bx0$FceTz^VVLMdx-E==A0Kq8zvHW`uC0NNtVaeq3mS=18*aL>6lA4+!^&KrkZR__4qGXFL{h3^kN+ioJ!5lnia!8I= zEJN7hn7n`M^LZ{V{`Xzdc{1^oc9i}i4t^NbZx2ptjdgBNp$?w#FZddHNkx>cwSmIZ z&2?=2pa(=N^|uSrmO$94*!jJpee|t5o)%4kq zf;5^~B?!y@6HZb%GZC(_ti8K|KNmYEzHLAI93IdXJF;YxnO+asD;fIMcam$LnAy)$ zk-Q>@&B5K)tR6iHJHWHrH)n`Vw@F-LueZnvwuI3X2{mzikQt4-p?-e=UKmzJYQjTb z?>cs$Gahq#KQ-%U_25>BYbmNcE>z9Yp|_J#b?NKX(Y2s0xWzY}F&#^KpMc?-;(Tox zr)ji7A4shuHDr2QWZ$w>nJ?8G5-`GY^QEqQq@o8P`hE6eVQ-lM;D8Xi5b|QkPFF z6=Iv?idH|XwMVn4O_g{ERUI1Dj|49D+D(!N?m7*_FMPm518ZXpecG`9Bm{m*JpOW)~x*u>J2d)VO^R<$0cSN zU^far6fO;B5&yC8>K#HvvlKum#!bl@!I)RYGzh|H5_&ILeY=wK4tPB_@kYWZL z6p?jNweI>n1xJPWgER}ftF*0l+RZe{eGx&0#{$DhjNfVdO9~;SyrdDXPTRikz1+5? zXY+lqN17y?JiG5(>dO~6XcGD@Dp ztM^eP5f*J)d%^iNA_W0A$n0Ohnd4lcn=Guy| z!VvEjy}2Y|RqdD~*h!^T2^HFrCJLa%zaRVUaW^mGSA+ZYQC*mhx-y8zMuoB#yxwlH zQtu9$oQdW89VfYtR#V_`hiBr!sb%(~ad}hb!|;h>UyePtPze{!UI@=fv&NV6)3tFw zD!s3tYC9)(47J_O$RwHhlrcvF&>iDlp*5K@ob9hd&x%gBb95!#zG&OLB(v@675Mu2 zQPK&kR7&}KNAETJjE8NI(J#x%+tg^bprahDS?)&hXJ_+pazYoSq_pxPZ$~8dNG6=t zW9ou*6N~7}X`KQvnFpDN45tdQN6ws@v#lJmrm=YMMgg7v?jem}*3z0Xdt8d?`aTZK zEdF{;!8MKLi#frl^~ljQR$k()dG@tcA>&zR!8BMYOD7z-580(3P~^3hZT>Wbt+{zt zXFO9(4Koy&kxkR775Z{S&$vKuV`{enQ+U@W2SsD zFPb`~DLWO#1*-xYhQda`-#Y{DhWCvQeA{Zm8O$RsjC^tMXFXHLrxO(7D!eC_4v;T{HHd*@KhB({f@)eo!NWaE7w6j9oOY@TD6u#ZaH?z+u!fi zJ8sCE+OjbVe^U|-pij&qV-S<~>BkbYxk2|f_ft@Va*V(i-0A5rll8@vR0sH4Ebj7&6PSB={4g4G5GJ(wd zBJa}cbOp`DRo22YP&7aW_tQQCr?m5U8_>#9Qf&27tW2i}9j-&)F>QGwvgV-WX-uqg z1_xgmK?|N=>QX)1W%fW zBg>v2OCO{?3c8@-e0^xTMM|%F@Scxb9q3aL2)6`*W5Gy&K4BfQcL2{@HEsJc!`a_c8@X6PW%DDacU#w zP}dhS0UW_sC;$pdEIt0Srr$<&2}xnzSHV~Jw0K><`S&J|MJSf^-R_GDih)hUkd+CC zz4mE2rt_lrG3z7~kVPKSSzNP4L~KjcuBAC*Op8^DRmS{hbKEzBxVt(WrrVV4^ks|- zB@GAya-Cnuse30fPtL@YWQ%}u8z)3Cm39l6u=arngaG~9mYNvB>kH8Gyq*b8w?$y= z)=XhRg`o~Foe-M*M8*Ua97gDHw~RRZ!XCAGjp+OoUZZi2^dNS5dJkTVyAF?>e@ zpUYH2t)r=IC0@G|SWBsJqg+cSRSTgatq|W_*Sx^mdN#{*fsK5Hjcb@*Q6<)o7D%sJ z>b*V+D6V70D#nip?K3ajq`>=Ke`3SC&`vUSGvW!DYDT5WEO1J*v1ea2{`D#U~9C_EWeO-rdDQAH`0iaYw0?X z-)jpJb!P^r~?QVv3|vjva$vh6STfJd7OcO7d;!rRoOv<1(x@$+dIQ>^t{T(+ia)BxlK3 zN6~fT{%b6t(pk8S#LtK2VG%Z+y|}!l_93#%fFtWh;!TF0^aBZNjMF={4MKbp)C8nK z+3bSTpSw!xB)xI7L~3MLW>5}+1L#twprgW_@fUfi$iaMn-;rzM0kN{)rCK7u@AD4; zv%)F;Kf|f+5*kH|%*TCL_Er3;*UY4a8sa3)0QGHw?GQm%%|r6p*t!oR`jpR8CS`;DXdNbIl$V@@ z_zF(3QF`T)L(%P=&o+XwJay|~MxF}Nu6YO=$1!G9UhzR4p$mQONk_wwoJ!;K0roC_8Tn!bH%(y+Rj<_%_8?_;~ zB##ab5p`=9PEawQyBznY_%?>;Z4i0N!?8J}m2nB%@Nl6W4{)!z7L9Af!VhRF4s>%< zsvEE;Z45`p%r_iqKo%mCiX#jp8=a>Jlu;Zp$gyI@M%!NIt@Bl1l%=B+3!-B=oHyW* zNZkkSkJ>!WL-rIiLUHHlnZY(!AhZ3voUQ9RJLaVO^|qdf;D_?yLtmQjVzg%&ht*T9 zuEj`wcpqXme~-kK^IE~LZsc9*yc)~Y8!CrFLctO(svX0r9NnpdAFGcXvU&DhvTA0f zE}BfP;8Mjxd_i$71$4C!a~YMUAXYtrXui#!Y=*?`+$i*2ivSZXmnae-^_eW)={lhdGWu+zHN4$2 zt@8bw>~>K{>+er*FcsQLQ=y{Y+?Qn>uV9UV5dpu z_hh1EG^IiPeVxl|!T~g6lA2=bw30=rbB4=0ecgQ*Z^^o&Ur5qF2RLu41W zq?wGbq#44GKnU7LKKd6eBEtxgkc$fjd8u^rPbmg_uG0}Jbnhp;FJqfHlGMxo$&p+E zvb=B8kKcOWyfOW&q$&%tS;R#Gh@QM27dh6Xo;v46!=^H{sA0rh71hcOS8T+3f^%QJ z3nKSS1a^@TqX^S5dfQ(JaZ{+afe*Jl!zJTLo8dVc`>nxKyG>xICC_Gbw?Te z<~T@hRqLCsb|$ zHjqtO%@M<%M9oc~7P2avni88vgf4dut^C_?w825~VH(gHs-;ONhxQhnDBPrNqcNZp zVcWe|E5&S42&4`Z#Z++t8{a?)02lY!Kt`ijw&pfo?olU~{p+YO47-WEj*5?~IwjzN z{}^yE6g>_F!H)1&b}e|uL*BLgajv}iM1oui%&hQSIF-ldY*cmP}yZJ;b2!#~qsQ+w23*Rjc)!Bg#g(=oA{8n1DVSg3lFLp^6 zqi65erR^By&68OIN>xxuap>@b#f1+4K_l4;0`GT{dur}xL~1Tulk2&!IJDBEg& z1F9acDEtipGVK_+k~9Zw0jBTGlOy-X=XHi!~!xSzT_Yr^UWxszuHTeBJZ~rURlM zLT@GNO#Oqeu{_w6MM!r*K+J|%Ne7O5jiO)ML@zrjal&0#fWNnpsBV{_OfokW!hoi7 zG_EF-x9T;L?`}lZ@urY=P>D(E-$j&HcO%A+Hkv(K+qG5SL)G`k6x_Y;2UxqL(0a9i{Erk@6$G}!Yjh+ z?e6shbqAnJd+Cb%hTZhO$A<)PBkb4c#CUeyx-izpu?6Vpt=eEFL$#_*Bl702EEF&Wuyp%%OEM(IiiNYn==I}`-08%o`j@>2 zuubF|ip35Ak`$DDDA;_w$*oS0b| z+^#q(V7N6OX0e;51!9HPB)WW7vWA;D9RtSgCyfQm$zb6@FsuBUX44A+Yp(G0<-=U3hVmxRd^UT-F%(%lHNR?CGIviumY*YH4nZ5j|M2PXhv|lj1ztq!SJ%%MCr$#S{8yGm+4lAZ83p<&ulBami zAFe%dU@o5F8NPvH+*By8!CQ*tD`_7UM!@e!s0Myk`U2v+AIAM;9hYQ~P2 z{yvw1BJ3j4NWA+L!{n?TX!Nv})pF=mLX`***D1 z;I?dl@@!l++Eo(EiH}l96ug`-z^ib{N-Fe228Z0sSxCVqx6HGK80L=LeURH6KKz#` z!qS~)5N^XZezNBb>^_4`D%OVtQ+hoZ7vgTqF`5LXhDMv>-N~p`+LUHc7;{h3fNs!uJ(XTeuW+u^{%--s6NT8 znXNqa>c8{GFh)Y)gzKKP?PC@|j*Xd&7QFW3L=_D^`$BMEo5PCRtMO|wGLvN4neX^~ zYfBWYASQItE+MCw%x5*kc&;Wx83@g;89lG{zLS(cT%Y-Y-xsbnm-9PB9>}i(;&cBl z!*q+QRB1A^yM5acRL28|P;;K>H#}CzHta1F8fKe#njY&Z4172AIv+?uq*-FEhQSB9 z6O>Z>-W+?qcOGwB7Ta1gFTOT+ML0e-@V(wv6M)*Mb~PR~U-nkZX-9yJmW6fE_iY>W zx3lZruwqf(J|MSFk>K$sZBNtn4?@&UU(U!J`}PkZ!}LDn3>IHK-DKp~f$aas*f|7= z0wi0sZQFcp+qP}ner?;fZQHhO+qUOzCjMp?e^C)to2saYT;0rjF5*5$HKI&5?LZKt z`}P{&$)I}HDmV-rN6p0F>y{yvlW60svr@^m1tU`#-n1+s8TvZ%91LmfvaUK{BrEa; zSB?Nj=ruPL3?)Sk{`Y|9ZxwISicw{8uFlh6fTxPL>Hq01WBVW8GDZ#-w*T{%F*4IL zv;X(VL_q)FEde77D?97|(_0qR0;-&BHODGl+Vs~(u>-rPvlE-Ou3W}7@-M^!!8Q>t z5rNLaHpw;t&9luc$L;*%&#&fgt2Xp23)3sh>J-l-H#}@`1z2Mm$r=thtjk{`Q!@i( z0CDp2N8q(Jc8z~a-rSs7!1krDx0;-JgCAWDVNGEVzBdSZZVJ{gk=ZFQh{7Ki@ZshK zz(p2-D;9vO762RDFEBd#*B7Xt76?Fs2|kX5KOB?*-UXziU{2gGyGw_Eh1E8W`u7o; z-%J2r|Mc|K@s--@_rbl9SC#h4T%eQ@x+!c3|OI`0Gm^gPg_%bhA; zoyu(DwZ-|@+g()xF{w&D67>$QdP|OgtZjeCgkNEPY4Tp16@E4VHf(HcIzDiKGZ+95 zjkUTTqSYrCpr2#oUz3ot*H>pCF2E`R5`b?3RsJzw@}3$~Jbu5-NUpivSGiGNL?|w< zJ|yFPFnVy!KpX|1MxiPG%3g+}6CHkC0ASX!y?Wp^pYPAtR7B$z>i(FQo!-IU4sBHq zP+SsBnUP+of8H`$xEG)|MyChhG>*1)fGg`PZUEge_}|}#vJC$ph5nb%s;oj(jK1Gi zb@9|6vAR*dR=L+%!#Uue$zqrg>3`O;SI<7!^|p0t0^haY+|jRE;$Ppz@5tj{#=T#y z*rv|zZ#~@(y_?_I)hR&Z+wWL>#@ZX(xOFukA=bWo-_Q$yUtKklJd&~PeP7SxttkR7 zf)jI_Upr)hngs&7ykg3+>4B45h4;;xXRH1zff#<3I;yi(V9>s)nUR-Xuej=lxl|jNg(Z$0h)+pAA|#TRgw?$jEdysG|tNFzmfaI1M4Gyj4A97=055kWPUZ z0D|Lp;Ho}a^4^=oQ0zX+m&qr#1Hih7U(qfA)$o6zC4H3dbcUe-dEJ@oc5HlpDi?Y~ zlVJMEKhXs9jK4%-QX^CS`>zVRZ~&E8c0-Vuhr40WeU!i00!x%%q6p0qzeHmUB23^; zlYDN3AIUz%VLr#Z5JYOnt}F;LlyLl)yJqhMXv@10K-T=ff?-h0|6U~0`(_I`n|q5U zcwqSziQ|{S-ouwU45YXCUI77=jRVIqM*D&FODg-u79jfj??%dPU&KH0H~1L@$LHUX zZ-m2VzoG~!yGUz<@up~T;lJDB5Vh%n$i{=dJO#hUpK*96q4hNm1X2G5B>d`Kb`TgD8rd8NJ9`rY8F~@(VHH1b@#P=G z-TVe5tp09f7T?A7ks}d~3QP~4#E&-nZAR!NWDA-`d|>|=gtq|ymwpU^|HfwvQM_o! z7BmI<;J^QtTfS%bJNmJkz88Q3l+J_j7CRsKG%~)k{S5CDHvImIA<)3l8My72a`N&k z(LesYdEZMKdx}5nd-(oa|HGE{y=wF8pmr6v@{2YI%W(wt7vS6VZ@cd>0MAbwgDpfj z)lu+|ol0Cu$Hp&5P*xnL_I7rbwhzypuUVk@cQxq4kFj&31K`iRb&MV$f#)RO3&4Us zo7^2fPMr45zpt^oeE|}py8ZNnb6h`z2N^&801FC#e9;0890C7*=UVpFl}5Xvjq7y& zyc`5KAF{Qv_2>h?n;hi=q|?w8-(m|NMjWH6LFxt?EDV&3Gmc$(^grnR}@n@3DM zuWS%p(XJUz0PmzvWh*|b5k?=!_lD2BL>%nxQnPA*^`w`O&t0<>NXH+&#HQj#sk|f+ zAvIV**}nJu`?3hv5@-`*n_4>V>~bokHa*(@d=-CRaY>_x1(&(4x>UNX+~OE1J9zBeKrG34ic63pQ3%oCi=^de20+ZT4=i!!NkRM|U&=*o83sF**# zzabzlQzpj`o5FdDA`su=5HeNl6d zq5C$`lbi_y;VrTi+W6d4QgvP&4qXgos}d=}9HRwWiW~R$wleum^0L{bG}(r7oaonh zn@K+;^}rie)1~NiETV>g6ndsBOVE9GF@E4Mh?xVFdo$XTN-!JzON^s{7>x@)Jl_B} z5%nfx4e62u_q$R#+bTKK&x9BXRI=9p=I4D368)9<{k#AJ@jPB6XOQb1{%s~+exNS+ z^k4)OS@o0wZ&-V#rv-Ef=qJrv1V_`1gO>77x+qq za!VPwG&{%!83tK-= zubbV*W4--?uWIP2laCy&KZarzB?D>fgO4<+2}-Sn)a8TcE2c>jP&Bg6JU&cbIbI1F zU3)P#7^><-65J9g3Y&|75^ z7Eu?)a(>9)M*H*1Z%g5hf3Q?b$cx(f^0`c|2|*z>T~+Gl(3IK8MVYbqIid&`gX1gf z80+{?F-E&0$TwThNC5?37lgK8=y0#+>0Y-AkkOU3yS?_)$h(ruLt1*1z7E$x@SFgP zc7tG+@$aheAk2*3`E9;>h_pF^Q&_$e=H)X<87#AQDNg#*su51!VLd|Ogg{;kkBx9s zL#&J&g0`{apP8uufSJjEu^FFG2?cM^;V~<&H%Vvv>L5@F;0_gOdr9G{kzDwMTr!_8 z>WBkXu*4Cc$xrPh`z0sK)1^KQYwsiSmvcn{<*hBX!4hj$K#4~St)o50OuPS>7vYsL}5fUzv;L_lKHr(B?Z-X@bh+=VDxFIv^YHx;qRwQ^9P zr2D36lVNHl-eY6#^hmr2eHwH|ixoDimy?*x5a)j~BbXIkPXmGNamZVgJ@dujV@dRS z+cBa=C1asS0-7RYZdNufi>W|c>uPnJFe;$j zVXS~3;q!KtO%e&T)wgSlOPfwyIALlIE3rK$JPBgUxpdTW?G{0UvVpEZHKOyaRsj7?co4CxrJE^Y7n`e;8zQKsR_< zSAL5oGacvi8v+M{EbE6Ry&guwwbu8-1-3U?Si(Q#`?8+fWKr@`Xa zU8bJ+rgvuFcX~B+?fuwKef*ltpmSTVvZD#DtZ@>u-(~-VF{a2>m2kmu(wz_+^g zScd-9Kwo3qLZZD-XC9nP+SrJ3mk_s7eL^{tZ)xz1^U9O)u8pRyr^c$H?`OgLvrq%g?8AYJ5i7Pr?7TsUlfD$T2cVcqgn=}p>P0&}@yC;0G#sak zJovG2GgRgnL6@vVKMWR*)JFtGq!B&26z2;F-#aB0#FTSa0t5OwGzMChi_3760Hva# z_8%8j zgW=u+OxGM&@yMF)6;@aUQwyg5#upwln!u zGCk;cU-SHwKlR2GLw4LD)=Pe$ZC`K>sJ_W|Bfbwudzd$eG6tDW`)01qWm)5Cpy;Yv z!}X6V7^d|X%W^~o`GuG>g=)*K8#dj4KTXx-mGR%ZR-40v+KkVe#XFCENFP`>mf?qA zqsn&m-XV2kJ_zV1OyR)MFcGkgfyw#Va1I8$eA=b!NY5>XIGX#ztzD6)s3jR;%*w$OM?zSVzNYndruI;&b}5qeWMDH@nzm;tu6#!QAbSF}sCwj)xBYCq(Ao!I zjhWAzUpZL&7-88D^|=j zbG^L;UX7ieVD3_A%3S6eJ9@P^RF8c#khQ`B5=&8Ma) zcNj*pG=exL2uJkGOJt)y8Cj$cMd)^@X5v^8iDTsJ?^mP&g&*yLXOaV;*JED{_&PRu zKE|7g2MSvb@Gqs<=InQGW3n7KyRtF@CW}`FwYj-h)ZtUo1Kok`m)qb85{4)$jJ<_O zcAIbtmoAfs*Q7cH6m82fhZ0itAM@#EYUV=Eh9k`6n2cyA%o(9L`3lGoT|1N}T@88> zOrlLSuNzLq@=X~b&xlhF7Q7mw0wY$U_WBA%uirkC4mOh75GZ%{&5jln7V!yE=mt=vZE9=v(6H z1Uhr0BY4lZDpg$EGn*a}D32Om)58uXJ~BK&Zw*I0b(9O!)K@jJUnW@EMRMZIR)$2x z?75!ijsPTVzt&>7#P`&JIamaEbHwcJT4MIIzk7>ODD*qXe(UR26)(x^|l7w@6(47~Y% ze4H1Lz;l)lq$9rjIgIoFb$)Es9VDYC{Rf zvV$v$6w6(a?xzz*c)z72ma_J8EjGG-8?Ki}S*Nmt<8u!@UxF}3DqCMTt%zplQ^4(` zFCRmHd;t>b!NsVt6VUnVI>xb8w)*QF8t-Vk;-LsPTdt5SkDynW|O2Rc# zHjhgFIL%oK@L3EZXN&gqg5|>`J){dgbAVaNpPdvNyfRvVx3HHFN z)QuJw!F>!}`lkFyy>+`q{W-GT>_~fuTB@)1d*2x}lyCivYr@7k>N-G zuFvhuFpMS@4QAw?4xb~LuOn+}TroF3TJ6`Jfwvoxx^1Qo;)kGY`JHfFv$*6(dqw~ynlq!`?vWBp+2PjHJy;#J~J z`Q*q?v#`8X2s#|iZdlOS9ICnYdGt*9=-Rto1~u;TV4`s!E2kGSo)Mz1(b=NfBD7ac zhGTlWC(P_|SA44+#!&o^eq8FI7TdIPP|&o4uTE2SG}|nhZxrRptm*|9z{0N4yQ_oY6iA2Gv{}acya5Fe#GdtcbOnA&n^1ZJ5JVV_|zQ(eqNyU1_koVr;E&5v?QL7x*geh*({$&&?>_$%&M-0TR#{%W$T>WOOEAj-)JqV z&T@7_d0n;qj@qe-wx}#(1RzYJ=j04M5V!|7Q;z6Mcdb_v1;=i$#F!EDB3E)@kuYl* z_2S3HILRUldX6AlM}52wo1TdMFsKnl(IOalg)3tS{GkuP2K#QI=ROmgXHOYMjV5a+ zcPEOdy#|cu2!$Rs3ESjXKZ5^{;x|d*u`YO`nWOEm>orp7*2kOQ3UqyVsl~^k7GFEf zZB;>E35=nFSJId3tRZtfrgcmUf6<+2KD(@hA#s%B--EN&A}F)P^{sUIdsJcs7A3XN zgO~$b@lJ{>_bmO$aM|^w~ z!%2Z?-4RE2c*cX}A@A-e6_NOw6WLNSXSFI8 z4DlEfXC>RIPQNAv6LotLbk+}2%Hqx74NK*9@P_~%)S%?v zkR*DkU`wA8o-3m=pB9|k`t|-Kcw!6aaB#mChPz{MG?C}NhoSxAGJt_=(4Z{H%9~*} z!yTiW4T6gLNN=PbGujPG34c;4RLwIu3qlqb9&fLY} zO1jjV*wU8}SE}t?W5}NQgc>|PT`TfTyZw6m%lytW45G_2A$g~@*HYIy0o(ra-O=|2 zFiT@s4LyGs=^(<=S;a|S*r=h5TD#ja>~D{=@r)zSIY))GyE@%KY{F3r_7POGZin*; zWu~4+T#37Urf#S6HO1-YVcAL@kn?#hWY`h5o%y-&_ZTdCS6$ms6$ejf>zd zaK26;BK6y#I(OYHPWEuZxvjJ2C1E3b>a~2Hk_6{8^OHj}eUKIoB2RMFDG|d;NmU7$ zi~4!!DkqUgC8=jxh7*78x;kvqruICxS*L}{j}FmNZJPd&%GnjY@j~~L(1!@jFcedY z4Y;XA3)aAPg5b-^a4}SVQ1e)FiT1t#ZW2WpIht19?RrkeNKdc zqgl?*xcpJ@g*lFvPz@pVAgFX+7dJlt19Pl5J?;A zpfH-R#>cM*8A97;mCbC3!0RHpw0yz|ofp*i@aPFhgAlb;>gD~%Qh%^F%&pREKFws^ zKzp@_(L2tp4BmjeTG;_J9hu+6ti~ppVX!D^g~d+fNc>VI-V_DMI-z2OtNUuTXf?2a z33}c~m7g$>vch6sE^7=srW-vvO#Qur=q}%7vUr5uR*b(qZMXSrcyTie(rjKHYvq`~iLuobMHE$p*RMihYPNxYa^p z2V=G73bEo-x~pX%VoNT+x48vX%l&tPYD-&tS+UHramAeJIgs#dqC3q6Cf2S2P4J4*B}3avY_?aD@h%#@nG=v1guHcmy<#>k~s3y$IDgI~pO9AB=S2!&?HI)j39JB!l z?oMu%EzG1(yZP(9F6si_B0ej0Y1ap}F&Br%KkdDfwIHE_8Cn)k)8+3e<+9=jaNvm0u`@H@2?1>NtB2rU><9z@ zzRkwAY`IgxWE(oA@rZVIQ5-_t^uGxJSbpCx37OQdq&Z!GHl6I*ZLLsF>RBV85uZ~m zCSf!NrcjO#txz0h690sJv=QPm#V3UB_oT-3Gysthvzr)anCw2N-@oqE_7gH?ktUAQB$9tk(nry@9Tgku`NA#dM+=W&g98Oe(MeIDC2tIaqPd+wWekeUUh zqITcNNk?r}W#qAAh%b_uzt6s|$HsB@eAnmbJ7kjN7h!he@Hm|2i?QOC-RO0fXDOtx zQG!`g$kc@jiQvoIcDOXmzQ%11oC(MBj{WYkscc3J#iA;b^{Nu%dTtWWtX-R)_Fx;@ z=rB|2rj1BpUtmg+fH>yd`9j>}Z5N`P2j`R0XKmF_?AAv$Bmo^Ye^WjOc6)WT?lVS$Vr#l ziPrB6>AzMCOAAzy6iHKt6Pm+g2G+s0FjD-Z0>8TG0I8%5vIw8qaMRH-JGo$H1LV=+ zxVDh++(1|LL1|&0kajungkH>xMtvx+qgIng)2CfwmVpyEhrjk08f1V96ZcO}!G=ZJ z4oq&ONT=-dAIz*|4`0!=0Awzc;*Xo(jP!vi1=@Jqs!cn?RJ^ZJT&J^@bOxDU(UHzHioP`7k8}WN*WlX{xZsjS7 zwWj1xEi$ho8=D7m!GxSN?cC`I{cESU@Fc|qvi*e8&+mq#d1uz)ihCQ`(*mYQrj`}5 z>?Mm0CN&bZ>!s3c&2e0?h6fXx6c$rSo>~@-aA!%4rpUL{Ixu4wRHtQu0UDYISL*88 zLNRaZ_9s-0Y!_4^Fle0p_k=u5reO7d(-aT2IC4(B(5icgU5W)mCFnN5ARiEG{{Wq% zjY}Pngb7y<@h&ee#4HWBY+w;)fF%Ky$k{yRveBUOlOZ1?sqZshl*|56 z28cNwqkBsL!O=hukPL`Yzpk2iY+U*;U^DbI&m$+DO?{`tG8*8vpiP&H@aF%RJV76&pTCoGOViW)^q2CcVAhD6!$DQK37K2N-<+ zQ1k$=%(KX|TI6x6$|{sZBchnyx)ryguWl=Q>_X(ga1?kKNs$z%WTnzHAkv`zJw#i z9PpaoR5TG!HE+INr`zd@!TwrZsJ+(jF0{IjE+Vda&Fm*3XANTM<7~vM1O{|ofydA1 z$6#Eg@xjH)zjp#E@(*;h`%f5z1z8$)6UyB$?_#Zd@y$G3A?C^XSWZ!LL=z}1kjc31bF3D(9?)k zs)b+fmpPvC(=2g1R#p(yxA%<&ZO#it*Yc=emT%6fq0aln(YJePlyh|MxS3Zj7Ii@) zENsdjxwskPA$!C@lBs$gcMJIIlkq&NPGc|?hhTZ96TEsZw|tu{W7@ES_5b~j{X^c2 zOd2dyVZ^Z`%HPrzY$6nrLVAc8|OUJ|q;~ zh<4AE>?z-1G)AKQiV=Jp)P{A=tvi&2|MM->2Y+~N>qT4=WVoLI?$facd}3AB3KkT} z*W`Qh22=iis2ytHBSn2!E55C{^tp2%=4L^&-7U&ONLA4m-XcfH_)>TeE|cU8?5JPk z)j(($qgAZbY9B=E!jk*uZZHt{r#ggsS^5QgMSu)uwuiKuyk?J~bWr+up6RCcc=*w_ zV~|f8qA(&#Q>EahJTHb_zj}N&B57^RjH4|gc~bUcQlo9*?@ptJzMZ;9q})nkZ?J;H zfD~{HN`K|F{_xM|lAWqD0sd4*A_P6vgRiw%H5~^Oa$84BvAr zG~JsdyXmECWM|m2R-viBp+wL>30$k2MFEH-F*o&;4IpdDEm%BJgTJFY!G-7!}HsLqF&c9Vn_KL z^0{~nxe_-^EH#@<(+K)kXlPfzElvqXiSyVf?=fc=CM2bxlIE>2vqKAU$26A^qF?CsonFPfeR{(k5y^yu*l+px-d zC@tMsx}0L!@)ssk70;7b04H>&kQ&v3!1?|TWzpqL;l3_Iz!kE1^-JDG2P4!`-$TeU z5H^=i^>@2tx~hJd*V9fdmw5qcf}#_I@1jbmC--~!W7U^9`!QGttU1*7x8_pp$a$hU zR<>Y6L>zWGp1G7GB$KEFV};g0avuD0G?c3QawC9cyQ^(m2)JhAWp-&kI9an+e6mbB zF4yxY#v&;&^o&7_G+uU#atTNtLq(!bz>B`a zk1UgwE8*Tkio^jXLkLR>>7GC zvsK7OO=7805_uKKWmuN1nI2UMgil7x`d2gQX=_Lmz>pc$)ftW$@hzD3%6?cmeiRWm zsq$~N9|23$<&!~|bu%*n(5>em?Rmvw)UY{z+!5y95tp5@P-z1Phkm!Za;ft?Eeks& zzxyA+XOq)G>08g0O|{#)Auf(!oa_>3^lCc6=9*307=83_+14DUtiKb3ZyU{{Oj2J| z1r1?b6filF+Oi1ws9nJTf~Oig$R0J$>XOJIcv1r0Jzat@v^!?E9()P)S~RtYgVT*I zh<67X*Z#I+t`+c4;_l*(?9W1YM5(DFS+FZsPzS46zoVtVQnRpjdasi z6g(p0POZTsvB4xH+I-&%wVC`3?rDz&sEF7zbP_WTI~Tc}*0Z<{>(S4;TGDDQ(= zb^!w1ZAQd99Z4N>>oY_9Sm$Fm7mDG+=u7*K-^3`|)yx-U znw(#tml~qou9_v-lf;!}JK_?Rr|b?yNVQdav+!@YJw>)I6s^o%u0I)t(!dIO2(n6VG5Nr|wKU8B6 zGpG4J&`!>T8cc5&PT=V#_nXg%&DH+a2UXV@cRl$X^ar;O)QRE&i(sPZsQiK)DbKDd zRm6}r_~^4PRD8sa40CG9Y1Ig<-6-PZ*%67I3k)Mn>gYux?J#@$h8`{rvG{?W=Z@IU z?VcWsBN{wospm2%*O_ZA=ZaS&1ZUK)EmJS*V$~z(Wu1oe@MG%U4<6gNK0IEx7$lR* z=S4|k?IG!@LLPazWu-w};Q>+<3DIU<#u?wCh1GPaWX5I@?WEfX7ESam!b3Ej@!jLmrANWoL}djpeoL}XJ%s(;L@|P6(M)WSp`tkEXwh0bn>fI z+IzDBTdFskd?9uWM1}WsJ*YMD9ye5RomzH0NwaO*OZJ?{6XUcmMggUjx!znW9U&Yy29Z+A)eVMRFT*VZx;XSX%mU>wE>RtE9s}xaM0( znl84XQ<_O!=E%ZZR)p(mSNH*B$h_qodHtgivdc$AOk?}$^qd|MGN9pi##kL@wq~%C zgT=Kx5S7HfWtso^i|5_El(QM=%o3+`a1(|zJn9ZqLLcoX7;eylF-biWm;Gjo7 z%dsGA0knvlAeoZC8)LXU4)W|G{eg4T76M<_Rci6|OjI9e9_Bzf`+KIq=Ae$ZQ;I$Am1|tQ zggCKVih=Z6XP-EO6Zsb{8`2j$sh&k2yUeI+DsSCsl`eSEA)$J0lr!*OID!ywlxUdgOHCA(lhkHZq};#=oGh>2^T}GPm|9>&-m= z?4}bud9gQA?~_>U8p~j*6K&-Pj1?bc)ar0%{qnDOc;vt8m0mCP4*`7@{N#n)c}Jzl z+Q}#&)~1)io?bFmZYT)H!!dyyw+)D2N(C!~-I+B1qSgWoicJa)fxDOqdRy%8IXOiVdith%4+~<}pP=D@hez2e75*&J z?l3!bE5Wz;fj)j^;>;?~Vv-_GflE3x;jsmug^p!f07hoNNAK1U~zEdY`Rmibq+z$bAlvG3 zwt>xBras=5pa@*hls}TC!am4msX_LDB?MM47c%-7MTYgeI)Ze63h-+u%m1D<=j>$pzCRwpi%UPRmL?7aj#~)G<>152T zRvJWPBw3X7Fz;A)!&pN~BJlh#FtPb?%C=C12Rt63Pod+tgz>zOXmKj0Vxij9xRnXh zcCX>6xe_1Tlmsb1@D400$rkn>LiYu}LDUU}g%%m~C1El-$>y~AFq2UkFdxXXf{0Dh zl&HeHUx!Yzv?~!Szi5*_`tO$F*$J=XE4J3hNP84(m=Blw$jQbgkT~++{U}lb# zeKo&;lgHGI$A#{bZBq`#h04b|()~C^wp;n_$GQGm;yq!qLd`nGYGR@3n_|pOKXFlW zTEFpl9b1*O^WA8ac%q`ud4@_FKxTVM17Ma=X&mQeNOce ztXX|vpO8+N&y|P_+E=i^edKl9VQoT9?FLZw^+4QAw>f$M+0xs1>Z49xBsIKor3pp0 zz_s;$0yLr^ojNbM`EV6CH9TY85+%i=HfTlWDW}~Rjsj#p(4$z~`Qb_O(YfWs+_Zu8 zWM}nl?L-E-kXdgQ!m2Z!x1kES54vYt~lHGlh$UkM%?#c)=UkYVm^tgChH} zP{q!4dPE#?>V!%_GW=?3U}JPNLLN@IFs^krqJ4?CWR`N2F1xR|3~~(r)l>5HA_*ZE z3LNWwfyN2>wmto$7lkDxH5+}ukarcS$YlKUBV6gk`52=<)B6Le4y>~qIBN=jxn8;n zD}v<9V$6NRCt|n^I4tsCGP5x;@@goH&KrdoE(ZPQ!Aq9#8s4jU9yQ?P@{;kyEdJ_S z#U08^=l5ZVcaO(fa*oCNWJ$`d5XZI^sTebq==R(BfjsWGJ6(`RMyfTh4))%zT%qzE zWBo+^Y$5r>gLd5V@0UE6FTeEhF;~h~)WME4A;=IfOv)};;7ibqD)Bwy%X|oA@hp#Qn<3e}=8;!gSsrbYIo*D&j*7 zgmzDJgNgrI%Q(S;_xS^^DKJi@uQ{qXQ?1N{T|lTP#DK7QWaX|3gq-O3L{bpmk~}J{ zW2V{tso*rbk!N<40{Fn{wuFrsb++v8G@0mjYP0(&TjX5OEw5qscdrll5(bT8!y_}5 zB{8+74`4`uld5SE&I=-r9(c-P<+wse_4E^|}16!;PMtTxsPTWWXefcerunprx+e z;8b(_f$1>b=)W*@AydJ>3og|kQUWG+nCJB=(2;zRm8k}~iv`&J>m1t#k4?x?S)TzOF~ zEFqa0e4WTiUKu}b7pU$9%XvXhdq6!k`~X$%I3?5Ab1zZ^lLR=GC?*f+6#d$q4hPZt zv0c65ZQF`X7TekC(9&Cww-B67BF#Io4{8Qnx)xWc+!h0>71Mk@8IPYSGW;cCt0R`* zeiXL1SHs-CDMc5IO;tk|W)Ir)nW|yz5Yk$$C5P9PX_kTsjkOqxlhHJOFChyB!okss zY+K@DvoNl{7lXE^K>pXcTz?F?hQzx_k5Z7lXC})(e@*^{(v_S0fZP`*9m%@KZ9Z)X zyE>r^Sqcth&pl_w^N$A(MUkSp>9Az}AZyVlQI4 z8?X0}Egq5UlF)gT2lHYbK&j zuEbA9K4w2uYTrZ1y2?9%uE*nS0I1Q&gd`LNEOiOuC)?AmuO&FSwrSY#GM`pNeseUU z7K5@XD^aiGnr8Xbu zoVuG3K${P3g3b-7#}0nPxe1%5C$#V~Yo+e^r(!NkqJZclnhZigXIg86U-2>kHwtvumx(;M3r^!AlMS@pjy)Tt zLgQy#j_7}5`ce;JZsSA8X!7JpZay<%%QnRugG$G8FBxXHm9%A4jxG{i)j08rZITC) zjub}>4zT+3MQ;Dp2T&GonQE1gN62N5^nXh}Yas{yebujl)>XHKx6hVDTsck-Op_Oh zuUa!Gi;_-mRtfW>m7>ofXJDje?*@QoB@XVE{yq}ED2aT@$iSKaQfdm&<0)oV1LGWj})Jpq&_3`3=_mi}hc$%F2VrF>f879M%|k0H67{HD_DPy;``3jTsip$wf*(bOLqMDJeP%=@HY(vv3c zF@uG2G!F-i$EJXyP3?{K4&`5HgQnmQl^?|;I>3$KmuwJlEleGWe|rWAPs%Tse=ei7 zEH8Q*-82&of*7OT7jNaM#sJikBn6qRr^9(rvp`|x44_dEP!t(GFQKe+q}0*1F%hP* z>|6w0x|~3}A{s$n+@<*xoGRCp$a-;EhqT)%WJro!S#9+2rn)9x5U(%=v$%1Xc5oio zcHBJTKI%yYNy+W*^v#)!_;thcgC0>ZJ$ANSRo(LGiB2;rH4VP20N_564Q|x z;6>JtpQ7F$o{olet(D4NAYqIetf7s0XX{~WrL-?Hi=EmDv<%&iTM&7xKUc2to>y>H z{mc(p%i1ELPm|W{WGzF-hY79r!d&Z}Uy+XgQ}cwE^fj?Lj>CP@Cs~Gq3fnAta}k!@ z^Rt09PwfNO6c+?Y=KBRVagCD4wzr1jmuqyx=;AF4K&q=x#57Eia@-(+YaP%)w1n*2 zGAkLXSP%;u@@HC?AsDaBYfYjkG7Nh0%{Fg4*7CI}ac}EG-ShM^u~C@ca=oXL8dWAW z`8+!Vi#6UA?rvZk4NjBoIJMGa>yl;~yvy>}<|+^03H@cX2iQmaLUZhEh^ zr!&PGR>;!yXkN|k?=>?*9~d9^sJ69Ew#Ri+j&Rv-EkG^e+iBvQ#i(|FYN=oK74SVg zY4DH86R}*Hfn9vzCzKIR5R&g4Jlpb7OcY{zNqXLs!#KyMM9?eMVfr_J?7y6qG7s_b zHiNk_Rsh0+ip`5!I`Es&ZlTf*@|-VGA+jSNtAczukv7?LpD4&s+{bm&xO@PYG9~!G(Nr~V_}r@s$R2L5jk~gP zAw>xpvg1P6s<3$)L-x6G_t!DxDsRHpZDtbjBJSb5*av#qFp8-VDDGKqLh|th*4H=FO%N|eA?IZ7H>7SnqDXGY)w3M# z-*lw-u4Az{JWa`rEi4Eh2ObF>BRmUZu!LX;)7? z?Qu!Poud#XpBgPInK{x+Brn~kJXlTIP7PmXxzd808t=tKB-3TT@WH#L^pZ+1hY+wd zEk&SrCYjbe5>Yc=pw1!SPqIFw1UTJ_ZFS(L@OdlqZodw1$6mzx#g3Fm^l8V^Td(x< zH?`-s5xK8vpi<}9)?-s&pr{eTT_-HckwS(lN>s|F^9c1s`LJK#Yj|kY3kKTARlV8x z^cKbyFpV{F13SOZ)3*hBF*wt;PY|^f_2@Ww6LC#g&Ipp>Xx7ux{LHn55Y0>pyE)jG z&>^zS*b|YUFe&xJ`4FCSL9pk4Go|lKt%N}Mx7dQjdzbI-OlH4mJ_)O3(O z%USxbfZha<4#DfYjs_~53Ht4BDb{k>rKrol=c2-SmRXqJRL} z5U;&EuzF$i^)@&aaQM)*UDX&-_gcGQ4Q04F%*YW#dPr5(?dmKv22RvRmz;GM%JAEa)JfU}M7MBDzJ*NJA56gV}*aPL7Av!^8T;h6c_)HK8Yhr(KMP z!v9B}bGw3>@qq&B&*<}IKiQcHYH?vss9!p9U!vN<#ZD+QgU?TT3d!%7yuK|R0RzAO0Tbv;;TypXG zrC53VACuxR-!kE%0@p7*PA6I%hpSSvaVq*JE%OOns~D*`yc}OmH?N+bO0=kM2^b)= z<6-X^^<_=1U|iRaWKCS~vnDiSNrs@ooxJ&?SZJLd-et+Wo5_15kWUc~gbURA#Uaon zv4}$qs(%@B6MnP)C3QiOg^lb=j6zof3MWPvFD7#06$e;?qjD3oe^YPPw(IaYDurk4 z7pH1s=Y4J}M2k_FiC7jg%${aDFP7eOntb;VmZliZ+;#3;C|b`ylLEqrk)n(v%!cAR zeUpOxVJicgpXFBPAB+~E8(7w3i|Km24`xNE2RT#qMeQiLeIozE);TQ+0xemzY}>YN z+qP|^%kHvm+qP}nw(Y9hF%dH{5BDd|iOk%4Ey=Fjt+bL~t;66nURmFuK;pyhiZGEo zR~5ixLGYwUr6NydmP8XA7iKg91hE=dO{%jcJkchi9UV=L{C`POT4%DMLNYH^sqU4= zCHjQS#zi6^2m1gEKMbhq9wa@I)xiESuF1d`<0rt3o;KfnDW8)H^njada>}~F#O)ePS=ym5#R;U zyMiq{jt?Cz+|{_v^4j@xm?Ww0#=r^vNnyWepLXL@Y=Yy3UoAh|!lM@hNeJKJh>Q3M z(VbP=z9CcD`on69wHpeMjK_D^bU(USxzbO+i1 zBFoc$`=MUD-nXOXbGj+4^bT>Conte@e{yLZE$?W-nW7dr)sy_BukI#Rv{3doWh3eh zIf7Th3I2!;#yX~_p;h;{nij=@r5IzaJ_pS#6AwFUerK276W`$u8om(n^PN1I zZ=9WrYd@TA&YocNGk5JwwGHs$X4UD6iub^7U(6P??OzPo>uq0B!s^wZ%h+Un1kdQt z0{w{EfmzItqwib*S)zt*5Sd%$AZwa){v(azMd}dIcs#eNeX@FgEo4|ZsN+maI32V{ z&nm`_$lTUz9mwllKK4yhGXOuigBNYGL)||BLaGmdgL%=4+A5!lkXmg~+N5i5IoA}X z{EMd3chJ;sU|7O6p~7sawleCHtS^E?4 zpu(fyYjma0Vh+Dbl3t85G6ufWA`%nfGWe5IRdacOpKuJr zYgjTHIF#2LqZRBEQ*ZBAnaGf@jEM3XwuUprIngJ=TkoiWE)B$Vw|QQ`A34t|tUrd` zjFmZ}NNP6r=I{%sMPYKPLIQ}vOC?+P1D7x%xEknL_tRgOiaaLjyzKC6|8ffxEu5}8 z1KI#^G*h_1>3D0%C93s(>D(|Rd^LV2fd`qwhKcWSE43X9Khe=QJ;C^(9OQV- z%b5jZ*|a7t7A@;dSQry8QS{ITr6+M&I$3B-q9z~JB^fs1aI!zKH*y(dvRFRYT-`sc z1g6pVEbE~>AeT$3uBUZA!{dgtB%CcCy@HgM`@IaTY!8tHxgpuBRnYchw#VjB8Oi2M1j@`+QiU5KjnhrkPe4 z8sZ%$fdOL*L_le%$_-=^IZ?g8!JU4D#(?jb>ga3;F!Yl0_I6tNHD{_kMemadbx0Sy ze25e2+a_a5#!~6Sr}m+xHa5^tSM@6Bwh=OSnv!Uxf`_jDB1+ecrZ8pY70y&y4zubb z-W+WN1-HV_>-SZwe&z9lt2p6GJDG+Owlv5Jk06;|P-%YL9ucx?KDnaxRGb20{`p&D zY`HlY+0r<7C3be8K_e!Sl+RCY4D)AM1`l)d{M4)+MuIzUO&xTo1#w zn8B3%AL5-L)j4}a>u`s?@JxyIZQ^#Xq7vny9c%_Y{{+A%tZWjE*WRBVrz|tOglr4C zjLE|TRHibSLA%wqkDe8P{_G{7gj7>TyX^15gF3LT>lSt0JS4c?iQe_i77sG@8{APK z-!D$t(2Rc@8(Vvqb#POk8Ziw1)*bSL7!SfjjayYCBcdE}gq;Uhx zY?TL=#P;=B6Di*YB3;yY`t`d`p+VhXvxh~zv`Q1qk>-Ptx&m?&?FH(Mj5~0>#i-8Z zkS>~MO{8B+bLwoPf;VN?!n7_cE`e3+w}M>RMkaWj_g8)uyjoH?DtuM}0y?Vfje#B1 zK>|;yUC$O|PlS9brun;GDT3EcL;guAn|>~j%64`n594MyLJnwPW|21|H3{5LYCr8e zp)onol<=K59_CxT#gt0^_I0gXlVq`G#CzJf_WXBcK#Vvt4iq)$rrNVbG8(|rzUx;( zMevqBhaGBU?_}A5$+AP%4*UgN$fD-vljXxiJO|}nYyumf1vhbu((3OjqWQk@!S2NGZx5qnXz9(yMsGZqvuSRF$!Qy(V|AIa=J2_*IQ&fltsfL#P=*w z2L&Txi1uyc>WUffDvT9~&XwvRtJjIpD4)9t8G97unTTJ%ic*;db~3-|UGPUx&Od?Q zT`g2-+|fkfg&~qr8CZ-u;O4m>k?X?yN6d>oWQqBG+(yY;uHFI&)+%VP6hB3X_=O#X z$G!QE*h^yFpN=61-jX+UBaoDvai9BtcOUGXV+rYCD$M-&m(p$4Z-;2{q15PO#v z)dO)CX$X#CY{-Dg)2HpVQ)up;Q8ioZws7G_O>Gky1j!d)r&qKv%2GBdjeWlI{2|*G zZx}|1_t8>MMST2~+f+5F3`15vuxd+9oK@@wz(KCL_?=a8M^Ya2Lv&r#F_)`lZLn2S zj4PvDHfl=pgA^`0JLb=4M69$bx!x%N@=|Id_Ddhyp&(GpCvc4?i?IKCI`UB-Wua{< zB(oS?y@pQcy{l~?6p0n3U}JG_ta9n4TB&P#WvHMRt-ORf;nMT?OthC>@Tl(g6S;K& zjg{1wn8Q=Y=_g9OiG{`v$&mJf35|XnSk@vNCVLS3hHk5uNDsEW?|oZSP}H~}Mu%!m z7}ZPx7;rduKCIpo3IU4e6$=gdaTHfKZGj#QxeNmMh5-!h2 zj<3rCi@ts^vU_;tw35f96iS45VUtM@V{o-6B!735fM)0;4bFsFJjL8me zzikTkw!}=S%E$jf1nHH3%u&}MX|ZI4IzBkba9!iU{J0s&;ekuTR58Cux%XaX71nOmhRN^;kXDwd%efr8iRkjQ9JQv11iR< z*;kBlJ6<6=dviF(H63t!N>*3!>K(!_W}5PBpT$Ux(Q#p9!{7XlpDgE8eaL5@l)b2H z9o<=Lqk^{PpKGpLK=}DG1<|Uxg1)vcThM@t9_R@YJAIr;e>mO0!9JAMhtG{`fdQN^ zOw=_(BkHf*G==tq@*(?FKI`TXVHhl55MphRlDn|jyw;&0QUwCyT1Y(t%)stB+K1t{ z%Kz4I5~><)$^S;BhgSBvxh6_ld>-r90b3k*MVgiqtjjZrxLvP?{PBI>E9 zA-Pn?8@=Voe5r7@r}i_n+`;<}AZXg8YQ#-*pp^ptgf7eYFY{KYkTuXMju^N1aVQbv zi@;a?@I{yu)!y)m;xARr0lS44YNzNN&-|VAxsri0TvrFQS(#jsW5=XEqTcHT#kQnF z?pNt%b)$PfX&ff1UyPsjK%Pk~M|OtsF1Zj1o4t;2Gku(7KQQ-Wt)l32Wz9z&Jp-23 zI`tPrl%nyUz1^J)!fMzUT=P;-8m;cI0k+puiJIBzw5-;1D?Nk>T+dd1&zS`Q!b58B zCjC>^K(Upcck!yR)c`|7gTcNzNE=3NgXCeFqZy*}N|Vcm@-b8Lz|uhoOZ0O9;l+fn zZ+D{F1H(p{N$^Jl=xW2^KWk`LwK&vsj$WiKP>$2s6+cHAJU^+xiE-fznE`A8rg1I+ z3`n`I-ROyoax46|T;&LNg=Th4gn8_f!k-`?oJ^K>;%QQ4G!W4A-2o<{M+v}83fR*^ zz?=0Xunx+sNSte}Tcc;51j!?Hdo-;R(=k(e$|%CE!0XM4o>4l>8C}lKF5@Mc=fR`ElhV0(YS!DD3Fw_8sn)D3~|QKXfvGQa}6Q${1Ilxty0;W^xFgh zwdn624&qmt;-B>CsDQ^VK(lzq&SW<-xRNCtP#xCQ7%lF8Azc31*bP*v#uM(g1%Bn8 z;6@71UaDWtA|H}_z71CB*Kq;KaW)SmycVC(hXaIrV$rag65yi3g9uO6F-qyn*$B}x zpAGv)C~}+K_jWkbo31DLa<=Q;UxZ@O!hB|3Sd;?8z|JFg2SKiLQu{M$mJ$}=$DLWr z4rxh?G9npE=nfdkM>rf9$4< zfDQH_@{^`748^_Rv0*@~$CTqs`vf-C5=9bIUyrS0lW8@0`|7QVX%!o|cgmyPy3)PA z&T>d$&yHrnJ6}vHK>v6gq=FtBmdp-l8L(eH=1^hr^dRAcX_C$J)l7FVc4YiK`{>+P zcvDm_N`frMEP_MjVgET$$`yL*`Nv)?#OqUDS;ryVHD(YU1R7G<=L+LfdL=xO=YMFe zv~ulB{Jzp2Zr5#E(FsuinZa4_=Y1Uvi0)ZZvXFk6%S{jAOF4dsY z;K$anvF73Qou8}_zbx!6#%#*iLlj#BpEq`ziwKF&u+(Y_Yf8%E5N)lv#!^Ncj7HG& zAIj4jpRX{cs8mtNW^|*sfa~194jqf5E|BOLh9T9rUPzTI#1_Q_G54iMfWm=zL@_Qv zR=D7x$axMTs*2Addr>t*U;2>JD^BRmdsBvDI8Ms}ev{c~Ys_zntPTyA7ahB$K`NKS z@iXlHQ+{R0>tVV%SYwWSln>I$wI#%H-MyUG;LMEY_y9v841O%3o`VIPCJI=eQC_bH zlke(LuE`>qPal8IpI)yrS0{*fcMR`pC@+WSt+wPim;$R;&+MlF+w+tR!2dv+0~WfI z=*5ap{HdZ1S?*_POi&KM{j^u}WOa!QI1hQFxkq?~YCsgInU9f-o`7PnHFfEq1oTU1 zj9JB1AEV_M=QTPe!!A!TP0}$m31Xfh%>nH#SXt6eBXXsrq6}LYE-ygVt1?s7_sE@8qyiajEb=n7i+- zZ4vzA*9SbTvl)`2EWHb@UkMm!LY5Q6obt9)nP4oREEnbR_>JFFcYm-Q_cisLvn(A? z_otilp0V?p-INy0A`-dEg4mYWA5MmkyJbUkk7Bqx?N5rxsyf3pk&@nV)KZ?Sge&_9 zj_YCL+;PiYxM!pY5>onJWnXj#of)~Cn>vi3MjjJvIujh=b z@wuTa$?jgSP0!eAggWq6awj^DmaQ8XZ3C1aR-W202x8$%z9%q=f5p&+r%wn68kymgxe=;T1nPe>E-Outa zedwh(dl4M`x#W2uK7R!m=OwwKU_o;*Ou*Xaj_wOUY-t3T+t(siGma?s^}J0z zMsTI!?+F50TesyIcORYXcoJoaC8~VhpSF6IbN zD)b8Lj}4dwG&*D+c`7q4uE8)`kpMkSN~lpTfpUd!HPbK@5P^%y@0C^37%=1>b|kx8 zD0`)fyJ3+!-=KpK5>NFphI?km5RFm%JD^{2g&HqmnD;CBF1W4&n0Ao*Dq@~zRG>!b z2K0dVfstEO@)u04y!qT-pNLCQre^Z2t~$()*6#c{zG|l2ar!~f*aC+_K(GXhCKE!s zS6ylG=sNc>eUE91GC6b- zq(E7sAxn75RNrQqN@BC5tj~62yNIosi6wOtCrw=RuO>d0Jc2GtDtwvkLDNN`gu7SA zjeI{JcR0q8p<;AC;Ko8A|H08>Ww*W1`6%*?Ky6&g|9R7(*;!i3zw#jvEYpW6X4iw3 z1%3HWP|6C+hD84nMEc@gF6IvQwX=swB#Oayt7$r;QLa)NgTT7@v|st3cKZ9 z92Fdm%+4ZrorwxaRJbf<kTi(l z#XC&}(x*8uU&a@+Z6Q@Oi4;J7WPYfdfU{+w^c`|swU1rPpHX%ONQ8Q){YBD9Xo8~z z6({%2JDk1+?>I)fKHfGSfY$9`)5q?ugK_X}xkk1ZFuUPT7C(K_kWz+k>4Zg){!z4!}JtpCIJp@^qY%vt>`3+6a}27 z5$G2OUaNhQ!9yer4!WSs585Eu){e}A^6Vyj9kRnUVk({_ZK2zHB~Dh2(9wt(`q~^n zJUxlG-i~N#F$G^?KyE(E(oS%yW&LdOKgaSTybo_XCl(kqt(KB z6P@OHp%J6iPDKwq1;T36Y{R0WN{W?IL?5VY%j+DrJCm={-i1XftE}<7ISgxgmnP$* z@#M|U8>3mj)0_~uD34H~y`jhRP6Ys2XxJ*x=aJ2_C*(8lZhCqnZ*WSc$n>O`Z{Dg? zC5=QNUU$r9Mxiin`{RDyUz64%iWth|+USY*Z#kl$cAgm}eUOFrg~&n?Z2AfEV2l}Q z2@*mLDm~aU^#-U#L{dV|1h-I{gEpqi@AV-MJZfSelRRSR3Y%nmONTB2Od5Tg>roxU zrL_M2$hCBX4{8S=i%>eimNXvF16Nr=8w#}3u4Qv!`{y81;QPVlNJUyD9TO&Ep65&? zJ4aU&LSmBXI=sDyLeBAMO8#ND%55Uuv^hbr;8RRD7{pySj(s`oSD!le?3vkd?lk%5Pcc=9g}mx`7v--&w;n};6qPrA70 z7QZDqQ+WG?Jzj1CprrYb$83k}ntg>}d>NpLkLU^!;Em?r{5^pq z$p>ckye8Vh7GXYw>@FS?YV6Y;++r{c8BLdJGiI}GgO&baa|tW59WmY4dJl1Ae`5xo z0&=th=iI-*+Hg*k&~zYZ%hZGgAThIw{mLCeI5l|f`P{(lJach+jSvc0e_|z#G`&;H zhhV7_VmyNRAOW8BAVQgd+1hHYe|8=_+eQ9J z0ButKy(gm3ksC~5?^(YDU{mq-y zA}NE0)k6#ksIW#kk<#S6@9%L z%1`YhQE1TDZ}X)G;(mYfbpSy1ytblpbeCmj%m!FKtxW*%vI^I72yyO5zH~kH$@ZR2buKPdRvfy~*iFpfPIOKizVdOtqLFaa-ewOh&v7qu7m{t7SpL ztHl#B70Iv`b^SO+kuxNLe{#o3`Ci^QhWEGuZd4p{Ib^oc5lbqF|BQJ)Z_&GFM8q?p z487Bv`uurw%Qbc(zkjR|N&L%QMX>qyouGh<-N!#^ielk)qLc-$YL3wh9mlJgVyp0Y zNcm`EnijQ*%7-3ZYw?@+dTH#9DFk*Uhg+6m7|s!S2FSB~Z|O+T>dcE*b}*Wut2ffZ z+jrsw2*aN%`g;Fs3Y?552LFJ(Lc|y^PbC0tt??JpTzw*n1I9Z}vqzWwen=(TBz3Fk z4wr;(qYsmjBm0nCSE&+F?4q=23!=$TI&YkZUNLu$s8nN7d>JLF7B=M1hc_S=JGOh? zNs?BbKy6*3qsSjT-(r>1pG>vgf6EAwY*G+loSrRWj{>1;8)nd|2N18cspF8RTSj!T z6hCmQ?hbO#s>y)r`wEgGPy%L4B^WY>Xb_R`60tCYP3#wqH!e0Ov5aLv8jkXQHF1Mi zljn=G6E%^)_>7Am2m#AR4cS@%=tp z1RepXs%cotQ08#!KMO0zje+U}jlbM1$l}qDn|n#xag@NS8yH>T<ch{ZNaM4BxL~!Y}Q@+kB{=N`V7J8lz z!Hw<2KU|EY(gY4iA*YTl*BLa+$76-ff>yEWIWo~>gI?*XIV7oiYHjK zG3N>*D0-7%O~nr%A>2=gZ*R7f0;b>6;90kl(M8P_==H24)xUdui<6JAS9O0q2&*11 zo`F-P(;7wOo|fI-=kV?ES}kx{kdvg`uvuJWYU4iG#0?`Zg^{m~AoVSDRDVg=Zem_t z6}igc5^+Y79=Z0Fgu^yB8BVKe-O9G&7VQ_H1brLjyZ5}kr*$7 zTWqKo9$!+O$0E!~f`#O!0z?w${>x1jSZ0ey4@TYl^1u_jP-B1w&&LF!za!q3LvVII zA&D$*lVIazhwFt7SsB>C4bY;;t-*D3_G0fw{Rw(z3^IB)Yrj0%`UH-Xb}J(xJ;XsC zZ0!_^mTRoo=(Y&Ugif_f1X9~6vD@Dh7uIjl8~9OhPl=TI&@7envl{FXCt|6jPP06g z{xig{Icy@gUhZ`NMu$2tA}%4muOX?JB5ZVGA)yZ6ytF9#d}o@tY={hMZnK29LctaC zV$V8UpY!|^fWzvq9gghvmL%U@!F?XnuP%+!HfZ=F(9Pd=#RoHk ztqk)@7TRNrVqlESdWFKi?#2VX0FMx`OSSPKT%W!;`q0LL`sA|$xZT|00&a!W6Px-( zDQpZJRrR-T(89#74Wp}tJ@RtFSc0aC-CN|bny@zsw>P1SfmMtkw({x{_-Y^hP7_qI zug8(8YtSJynhgS&OplPnKBS=;}R}sr96hj(ig|i?#cCv= z{c*83wmcKmyXL)1!6Xj65X@D$tgTRnv1Y?ZVa~yn>*94%1IUiQB6%1QoDXxK{E=t^a!=XTl~-iWAx=niq(f(<04AH^WX0V zxT+(Xjhb+jO89^m)4JnXDS`hn z4MNU|Q^9O}>LwKJyM`}t)p}yvD?PjXFs`aRGCDn(g~)=0wB`_~!WFWkN0Kow5vqWCP+t+ve-ny{ z(U;>Yv(AkLr`8fds3!_s!Z?`4K?}4x1KMqm^Rf~%nTDG_0HZ!(FcQ_Jkr9u$@g`$% z9&9Mm3Y!uS?_D`$92IG`VJ6QE{bH4MF!CjyO$8QfR3-uU`|KqAylbfN_6BHxOe|7c zN2(S7`=JC%f?~&EJ5)}dh+Vv)2(Wo$ROuyHXjoxU3aF?B#PZjT)PdP5nWX}Q$V)y# z24Z*_YF3PbAWtn6Gc_D-Em^>4L1c2hb8XGdli;Ao-hVONbz|`FUXhWe)F(0(GMpb2 zV|zTweqFARIxOWFNVLAh%Kbd3OL;MbZf65H^nE_Co|Q1^1Ruu1uakHi<&nrJsoz~( z&o&BD)5xGUlxBbTL8w4K=!k-#&qk#MtOsZr&qt14uiB6vaBK1?xbPPsCA2CglvZY} z&OLSOO5J!fn;ot*6wM4Dqi`+>`i%Q~4ir_0y_oFL9BfAf{7kkpg|YQpWn?EW*=97A za}I0@I*Uf~wBW&tsa2wl^__;^TvIc5yN_w1slth;{>K+4R}$EqJL?6$LGB z8QQ6M+3^YiDThg*V3ewSv9fKBs92$BmMYg=qKQb!Xf|K2c`v#C=6QAI|NZ5>^>UJX z`1Gyu(apW|^4&jXVnbF8&eO@upde8LA%RK)FT+e*mjLz`fK((<$O=qd#R&-({tcvb zr_Hy3feB9fg$HG2L5UhRzA&KCn*|64Is51XB!C2v(841jh6e!}3J_@bqb!(v0C2t2 z#Q-rNfSMB}%*TMzV@*PbgLQuGI~e@BMC`kz0st5vABXs511}@Wvq+=HfMftL=FNlf z7Ex!wF$i%A7OZdcYui(Q>NDy-8XofY@e%EZh@ybHuAw1-xeGSr1t?K~LGeL{0{o)F zFn|yf_*Eg3>W5}{^*8+4GoxUyqQ`&*-2>#9LX8;OqxFtMpuqBnhhtcr2gmRbjQ2}= z{-uBb{<(k!Ac6X5?d+}c;|wJ9!w%BbRfM2tKmr%;0Nyfipy-oO)Xf7+%rJ$`uBeH1IVf(17PUy=^q>F%rnr_h@k)n{Zc7jrDA)hvc@5>q5uJk z8Zn~uJ}8Ig=hwWo91i`+tRRO!h=P5&Is_3C+Vw{GzqyBN5*Y6ADd0Z$s@x$A@1}91 zK*s@1NJ>jj0Oaiel;u{2uF=1qaL}LG6P}?*)e=zjK_7!U459P_-04yP zM7{)ofqs?l<&r}oKmY`^8v)WOxM3t5*x$NiT)dn{;qzggfY$*Zw1Wcy`1$;NANiM} zg9QIQ{89Vm)n~MJwx*Vr&F4q`)&BFzHUW=7Km>^ppO`efsHy`;Kuiq_@llFy%y3mp zhE7AOUeWj?@9FQ*-R5>UrMufVT)$uHac zFXC5f>TmSnZ+2V>JkF2y)UWo>Z&*JB2F`0LP);MC2G1|7!W*r?PiqD0)9ehE03ieZ zke{?`oxvAg8PWE=4jQ0j1Q6-(9zzt_6g(7Th@md;55oz(-M#hV9s|h|MsUD)ht{2% zz@Fdu-R1E`crPD=yVehy;Qi*~Y#Ww@I?B;%M!2*jaGwPWhB)9*qoj@$6av7&EiuT& zYvvdLqaq1ZBs<`qH4IQ&{v1m02o)d#u<;%1AVba@rTZ7s&xoJ^rhghV2CQSiFZjRa z#higU1$|0YDBn49wc+jNOk6`{x8;bw zUI=_NXal4jF6`TStJ!w0-15vYl7-9E?he}cTMIsuj{O@-?BzScr zZvFN&NoD=wzcOz4vAXo^Oa{Ybi_;|l$lg03t~wPqn;dJYWj4b|$mIx5%jifB-4E0T z-S()?=)obTAq>sW-5+C`OZlxXU2n13rKQlSnHZMvZ13(Dr}G8}Ff}nh-I}bOAv(2^ zQOyo}1`zMoVz?!}5}pGyT9LnxvdDx~;sRG!><7DzK#2ZCFWlV~bz{=u7T2XxtL!&j zN>(b~TcH?U^{2TF9b9R!xrR|zxnmHGuDsMwunq^m|q$s;(>Q|X1*qf-U zy<_5i85@mg<*_;6Zh}?T7Jaihhc}yH=`7jHS<{H4GImSYS)rWRA}Vbu;;PH;zzQ;j z9akgSm|Z|Pdk}*{rVb7#lz6x;nCg=uFB#4FR6gm0A&wuwD9x3NToK@}EFMI7Bt`Hw z;z#C4ugBoMFKPY8wImyphmTvt9Y{@uXZC<28OVSd+?v}#Z2EnTwKC=XjAzPCW$vv^ z*fqXLih=|KOqC7v)!hH8>s>snj)t@hJ>1h{u4{M?m{~C;|qoxEZX3GMvN;h+SWj42E zH=g)^rbln(db1^T-^@d9^?C#c3b}$!{1jSm3LGkl{RIIgjK3@l7x%+#@cPblo-*9{<}^~9hRSCRp#Xz#veY1X35)6ian=LUK{RLptW_kn-PI& zSoB?Os>HHg$Ptwmp*9;_(MM0VoPbfSP7lde(q|{9VlV*056v%=`s|Z%UbuMZuy`e{ zQ!YWC3NfvnG(BOVeR(qIZ&fY~UWWt+pdPAGTBt^knBu%{ZOD2MT@;~>MPv<_crM!< zi07wQ_nnnV)4@jS3wU}GL&qh@B{FrD@ddkawD=zQ7AQuHjBSC2`i1H0YEJap4)Tnt zaeFj=cX>9#eA@#1A=etVE?knQ_(Y}i{G@mT-Cb?!y85f0te7-*l6~F7`LU*f$RP#j zfj*XWtTjnoREftaxr=mu-cZ%XZNvaP7elUK_m53(aSZ+r_$AeX0+-)BV>P?Vt?Hp(qosfsXh3b`)M> zZcJ!LB)=nv+SL~>tbI#!UIXz{V@Kxc{z8*Hc%xl0NRxq-`}HpR-WC~}1a8nR-lEZJ zi&6)>3r?u!_vrYdS3Ypuq&eo0A6dUgJvtogSjCYjzMh%`La_GiYb}$OyJKYN{5U2F z^sU^#CI=$FdZr;a#tFXlK&A&-wW6*1Q+?uz9yYi1Te0}*=KixfGLOSEJ(RL5PEes;-^(w4SZks*mFTv$mODtEPS0< zrO@ebwVq%D@2(q0m85P2J*K2KKa1bQEa8gaxVUOiHLkN?*NXXvT?Y)AE*V7(a$H9X zoTnFP17fb5-x{M{XtL4!K+hGOAm^C_0eOim729$AQE4%Wg7QUL+HO}oCCTho9&>ir z4GikSQ$rD3Rh*q-Otr`<*yobcB>N)UI#wFyme#TANj=RoC_&IDS$fkw9w9AmM+{ZbT)z6>ojw%=I>gbz{o?w~)qo|$~0 zZ(LpGSxINr;9%>LeX96!MH2S1y+}%t)SkUi+Zmh)k;r7MQBHy8O;p=yr@QyWCq zLvAG}&XG*?!3wDyX}S#@5;k}Nn%BXiDEnIb_Qu3sX&PenvZ8B4KL=@9NQb%z`v$u9 zS%>(d0^)N539b9ujbr=WteRlv3l5&=_uQbl-C0C&>(D%lm7DY{>RSzt8)FQQxHvIq zA98bP+ZQ&Sn)Qed)msOYFkTYcpuv(x72T zQW62uFP|-5_s<({LAg5Jd%@X#t~Bc^1P6H)SGbL9a}kG*a?7?i%8vVe*zrm$V+?JN zgL+=~2@>87VOQ1BFR&zP`d*u!sZvC25w+`4H`~aje*bSKH z32NpXXS0O!Pb&N?>KW2Q;lDm+ZWHcn(VOp0Ys^(6x>Sf-9LjE4xsrM#6)auvRJEF6 z5Bsknb|po-U*kKor4u}kP~O64(1Elf%Vb0chk7=GReFk)BInKZSZvp#cqTD??c1X9 zZTV%XY?^ODNog`<>C*|>MVt;9!fQlpmoZ=w2)GjN%=TFB0U<&TEjT*w_0xP2JI^)+ zu~zcK?U+`;Hc3~{Up#Pz&Xu=s&4juYGZss1R zDZTwuf5nW2&T%l}r;Jmokng}Ud`n>#vL$rrK-f9E!-70_L7|QesiJp03&>I|y5@+@ zE1tPZWLkKtRnG(UrPubE+C3O@j{7}^COkkF0g2tzB^Mn-WtrRrWhUw-H77bLL`sgk zc@nkM-FZ2v;T1u&TirrqAKchQ5?btOq0)S#nYq_zMgCpf6klMcHS@DBD>2(nX{eyU zt!p0g&Bo;^Y-pIU&1bM?(%5Up8z%B-Ds35lFseuJ_PUAL939mpfD#$N^_(uDUs`RH zMe{ZFyGXu<*lfsE6}%E`e>gK7NBfXXidQ6+8Ubkaec#lPaJ@!>vAi|4SBPO9X+w#W zlAhV0zQ0b$#lr{;6n||fygon@0^`z|u=!U{x?oE9+UN0K^Hv1v=BSVxmok(;;@{GL zY*8`@egwjk_Nq5?d><0mExgF%Q@Bkd8>e-FzvQpEa8T@8f|c|nQFVRp_fPGfr9N%8 zf^#5xFO@|wTJG9cG$J3P7FKjg)xQ&4Kk$he@tK)I$Pv}?S&e)b!ZO$>L3G0Lq)m-7 zYz<6p)tfMiJjpK@0axkTb_v#dtm-%F-w) zJ83nxYGApLe=W&TMOD%-D!|o2W>up#f=pp0^zHgLW)%m`> zs7y);I4I7t$Fr@JU=Nm`29$oCD~}*HbYRXUs2rZsHtFmBC6Xgp|6wYz%*HkFG~!alY*5ERbSsl$@=i7A>KJFlcq}dGCpl6dv@7U;r7n*RybAK z;g#Ef9!fJ;3_&_)Nl`zh%3q3Pm%jCPUD*HS3sbmuV4^(U-oCHWh+^{PT8cz8@?73Ra|eqyB-5Q z@1v52Kk={7n(VL8#>*8dUB~0M(4J>UfbEY_bF{Vga7zBt>9&#-Xv>|_%g)NN@?$$B zPNaSmRVzd^etn07VqaxvE?)&|t5#+y6Xd%a{rykY8>5O^+hq7 zjvjIzjf;x*@ia_Dl1xt%tAngxJ~R0rwJt62*b=D2wK-w78C_w-U#?3Cpt z)_3IFq&$-EMywvQmU@iwHDkq>>JgY}C+BG%ir>y#Pd+qb#pkJ36Ud?$zlpKnnu*$B z8tN2Gt)i5}KzuASGWuA}Jv-$mhHSk1s`$xbPTyc>J@We+JA;@#Ec&=hQShh9u1l?O zw*`-fJ)D2i*EjMak&vs%bpv~ChOq`9lZi+SLK!4LcK2T5#}jx)X}{;RxIu9jzJxfw z{x7MKZ>ic-P;7Jvvr6ECp&6chHDFNWrJ&YW+C(8-HJ_5VstnZLsUGxtUU?TRSnPA{ z5U@TlQgc`SX$ZaFCq8M_gVYp@dcCz{Nlo)NE_@Qe+y#;U}R5etjiYRMBF`^-)I2tEegGb3F3xN9HDVElwTUA0@9XA zh0ed0019rWdp;VQR=UI7NykFtPr6&)n7_WdiLwcN|0{D_iqa?E#TtB(q{ zRFR%SB8+tiE1?u{ zx@flo5spoZLEvE=rHLRlA<3DFnuJlrfdG$()K&TZUK{~=LGaOermQnfv#>nnl@FUy z?8CP!B9V0_9r51e<=&cC$K?rMKl1>KYv><2qrY_0T0mmq9ik%0t?0o0F{wcm&SrmQE zbXg12of`V{ZYq+rKMq4dfL%BTBDV;WQKOL_-qewxIJbEylVteiDZIkkm(Nb)0%(>w zmq)fHP8EvtXvN@VrFBoJE`|!O;PNDl;n$%gWqxK`Pd?dA{d?Nnuyh+_SGIi=odQ6k zo+$67+-l>-I|*!fYltoNv@?q$*Tc)gfO|+C?a^&9yI*)TYy!E|6&r>Sg)dgk^ixrM z5OoA2sq~Fu1y>AQi7RfXPe*btQ0s~-Npa-jy(y!VKH|6;LXIDN*6~w_9T)FRN*8=c zk*TI?bIy}noo$*_{lAUaO=#w%7dKaY+^hENMSmMS6VJ;&_RxxY#d~ToiNd^vjLCP@N1OSqa0f1Ob>A#} z%fP$s*eZWjFtE|5zFd7rOOrlq5>XHxefPvAA$zkfsQyIf8Kuqm!ZzsKHH+Sdlxtju zfO<^tb=ps+Qzy;*U_Vmr@X^xq@sYz<7+q&qJW!e1uUws%dk>U5X^FF*PG?Z&p-l6T z@}IMqpFp!5)FMG!Kd{+NGU4*x@=RKBMNQYlU%6`p(}qEFg)w@an65PZNF=&;wt2n^ zFA^yq&Z*3|h#sE=%UBks{G$MptTv_T>KOl_TwUr~saYnBBM@~6GhAUj*Xspf9^4wk z2EV@t+o63AxPa(vEW62tqy$Vge=6=?U^BwLx|!}cimZG;f-${6>hMgW&mx82iN!hb z?5Rd3I@a1g$u%kHr$xAVu@I%s0TNmOa}$rztnct`%Fy!Wh@|azTy#aM#=!V{L0jxg zPO;@{>2*l1&2APVmJ_W!V2GNEia|y;#@pz}8*#x%x5d8~Uk=ROLhn_k*?Ck)R+MOe z3I2O?Q;KqL!&$#Y!sS(a2g*2b-+r|@t08}5^AX<=+U|Qk4HUwZ+)B=Z^q0E#it=)& zhh$OH&L`3#(V)Afu5=_ox!U(PDAG9H*m4KYj7WZD6hi?Y_`Y>9?VAw!G*!Wv*P0&M z!GKJt0hMF%lxafBhn9MweGu@(p$+%CLUKfXQ-$WaMqhmRr+w*JFPWis-tw4D0NuLU zJHtaP=J#VLlt6sv!^Kxu#eEA|#f&7xJLO)2Vo2{~d34ge;=o^fqT-C|-j}(x@yj8V z>)+rDv*?ZnT3k}PWbAJLAX^{WMqu=7nqK}%ED47ooNj`GT4>&K-+g>lLsSwAHdota zH;YDRE~E@`r43C)8*?)8?Rux5@N(;rX%*nRYFoq;zK)-VlJ_J(ykt*ZE0d_4FL z642DMa*YNP69i?B&TN~nR&28bpM#e6xCYz|B~w_={y8F+W>Y$J{ow6zL=M?T0BA20 zETvsV_wN3lDU`{WHHpq@J_J;;^zKxyzX9i-M1`>zUh+ZwClup1Fd zkSQWNyF@mw3Jg^^23`nm+qDv>DQZB;q2@E`%C)k*8az!7rSF21@MmD?fX63&T=<7x zb=odhnU<`%gR>}G+RNfciT&NCo$4Lnrum5_u{tf1#+&$`P%0#FVyASfxWnf^VVi_4 z7->Rs*Ey!fD?GVktxnoCqKtGDq1@!ksSQQWhwq&QJ8uur8|T=wky<2po_>MP%I-q! zf2J5?TN?*Y9m4D6^VSetw=Z<)lV@3HRmaNmU6sTK|Mp%lZ5)IhJHjFl%MU0AN_RKVpK+-rCk5o6zJ4(g z(Z9#ntwyzFyyQykv7ApA>QfvPO!KLBqqt5KpPT#c&nEOFl;=FIl18J_kZw-#Z&$ixfGP7bEa`oJJe0oinA*oGag$jK z-D053lq^J~CWzml32STDU96E8rc0leS9mAc;}SEk6skM(sy>$XkyZ7W{>G7*l~!iQ zWa=SbQx(YXcVY&1$=4xoKkrb#+C9{2p9TNpn)tq2*Rbe7zP16fcjFcyk(K~On9r}~ zUM%aFhZF9+8>EDTjj@1qBqY(Yjf?BXD4P^Pf|0Ux7>+n+daqi}H((Q8R4rBm1q%Fcp6h!tWzkxR6( z7GELXXVvPl-2heFxb=^ncl#$USv1mAukpP|X~!Ah$gl;(iAl~rll$fvlP*$ky$oqt zqMG}jT<+pBp$u0<9lo73rTLYE#WW_379tPL#b@t=PUAlH7$twVBiYm+pS)^sW zU5D=pf|WeGzb(%wIvBr2mfn~@7AnaKo1pQ5;TIJn1+%O)`b># znCiGUvD3>kTEDNiKF)b}n2vB%V@h@)eofl`KDRZVuKz7rHy^XIrU5; zLcJk-^2JUpu|UDbDMxdoQJ1_xok7Vl9-L(GYjW1m;gG``IVfl=mZU&PlSgNn7yQq? zgls*3?4%dZW@b9#e%7c)S}vGzV!NQ-UY^7`DX}~4>%f7q9}?Iql7QEpq&u~|$CQ6T z|IF0stq%3V9<7zl$6T=}^sBCJ;vY2{SN7}+yfwk)jSl}rx_#m-H zJ`Sc;AViSFj63^^PmR(%qGeFVQ6g}jf7No|YLC%<4*{vRYp&n^dT1y6Q+i!Y!NK_7I1Wxm&i{}bOaz=v zjI95e{x`?L$iTwP_J2W+{|Ao44O9iiW~tRh(w!a%X;C)`YLPankp`NErmLQ2hd@e_ zeQ}307fET6ifEC5mN0kk^08aK``3T=6?ZnUr!KSOHq*N{Gc;FJJYRhP%MMg6Y$%~S z$OlLXfK=AkSTZ0WfFVC10D+IY3lIbn^cV7|i64|$hrl6YnI9(w!GHiMloyCd(J#vZ zLtq9K3IPQSB1#f6N*WRZAOr-22D^Y0 z2>_%3fC3COq^p2X&tSy>6wrm6S6>0J;0`qO=dk`d=m&m#v;_$A3G!d~#{7}&S*i}UOHAFC1ufHtj*Hu9H*~_5CfJ8t|KtV=E1qjFmG=NXQ{iXK; zmM8yfU%XF`p&D4%hP(}F5KIMh4c!1({Il=f1+dc(Kr)DWef2Fr)F=NI6a-)m0RdSL zv?XNl=HFCoP(OojuJVY803T2ZAmtqd5U9`Z@5}V>vxfy2?Dcc=)7AGixBQ%cPQmw9 zeAs6b73BaQz+RU?5}>Z60z^PTK?H_?jt>6zlPv}g@y-kz*k`P2$mS4mjK5KocfpU@ z^-T#d%O4&L{nwt3mP4w=0N`woh#eUL6`;@$@+ZIahx_=q{I5REZ}#{vH=(II#Zz16 zW83#HBQP$Z!W=)YLXoRz5tsmS92W4pe-~EZFNT(EJ?rqweczud2?8qw6oXa@#z&~A zzmO4Mfx=+ECJ7XVyZfQozpBmBZ@Xbb)ZLKZTBAb^Ag*(Ur3g#L#7o`34M zQ$UHa0)EM>0|M|vzzC*VeCp!_`D6af5CskrLLi`AgSfiBL!$!z)fQHWM*Bh!@*?+B z(d%;?+N-I+>YuGeU?)I<0sbC(MZX1f6fDXi?C*n45z#dR4jn@Los?C2kbl~Xge+ug z{cd?4fLO-;H9!>ZK|+c6Vuh1fZhf1=PbENES@7qUE}{w?wDp%AsDph+r};pK`R$^l z027C}#-9u5oLE4O3gIXexmS0j5W`r1d0k6`MmaZneRT$S%T?eF(k@V*IAKU#;@!|0Gn`hIQHFCbmR~0{+!eY;-FK$% z-d>X}VF!!@7)nk;Bl$GG29=4sb&fbnVpK6}g^^Fc-G>d9+?iPHRRuR(O2{%v zTjGw;wD`a+hRJ^AreN_fK{Ej5Fv^2!|dRREIY4d$axJdho&WSFe&hCidVED|80KQ8ET8_C-I+@2CCv zrtl3-su-u`Px~gulxKaa(Af#CWu``z2ly{uD;k=83jv|(Q%1+Z;QYBt@L38drIxCQ zJ3i&fpiJ@TdR4dK#a~HV>ZTWP(4--JqQN-INIv*et!3HxJek8jUzlQ8!3$N@ z@KdU2QW71vk%Fp!5$6k>%n=YR;7sr%eqG+S(YK9cUzMYZ{Lp0nst4&L|Hi>NgPq=5p1NHcIEc`Av^H)ExNNaepzL z1LpYEXojXuyp2)Sg+b`zKe|-Hx~@VikWN|!3^byA+W!fTJmmcADUtK4 zJ7S)nAKekfF)}7=v%Qen&w1T|LCd1w$qyTIs6C}9ySEyrW(77oA5noie6@Vcq@B`s zEx0o}%$LSGUa1I5jl%ewLLX_d+-J6mq9a2O_)b|9cvwE`(&SVFxN>ck_&H&6Ty)=} zdh%IWhF`1(vV8nQV20QK!E z71zN^EBouQmIO8{X-tX^AZREm-3tC-a1N)tH&E^;yte z&od5kE88njvq`}s`VM-PP+4j(`P1)67QIQAq_1fKbX;oOFUX&eQSU^|)!mrEu!13< z2G=RgN~Mqv@Le_QyE0*z8ptISjRpHo^pg&BwH;67{yl(d8XK>R(j0z^dbs1#=yl$n zvG9~(b8oAX`l=vhweMe7hE3T}Mac?8O(}1kc}A$pS2AUoPYa( zJhlv-(LBR=KRg{G@Gb|QFyDcUOy1^o5^%w;hs@;sXmP9P4>F#|yF%^Rz5R#BioZG)m;dQ5eTMSjA za(t)gdst>5;+V5P;3&Iurbydg&?QxiTJc^u*bT-{_~fo?RpW^GD^hfw)ZjEW)wcg5 z#`38U=Ler869h5o?6PsF$XpB63fdK3u>*qa(bZiOBA`;H7fv3S9+p z!sx!D6~Mfz)SF8mAkT@tSeG`*lpzq$M=^4<^y?hF|z}r}NrA_%~`9_^%E?!|B@hfOxpfft(MKc@O@4Q`B7?KeLNZ`Ko2| zi_3|*cmcma<<+ekBp#Y;SMs{!IXQ6Y&0<1V_+@W<;n1T$>}4s|)pP^`3rZ zpU#FsD`8=YIWqsNS?dHvv!9dwPi9X|orTx3%d`^&|D=Y4iNx?Z|${x2%OD<%P0at3KaEQDQ4bkvM=KV6xRXLF4~cuTQO zolA>0(Gpz@i*a(igAr<;m@F8rhnVaPPeGeFbTQs>BA=@XNR0>dozn@5kLP;+Ebe>* z>CVJz#V_IaRYNYoH;&KCa?u-dN6K!YnGNy&D5}2XV`Dwk;sF4C+0J6{7neZ`uT*V|6$rFr zA)8r?AxWesmOZWbt@mcQobNQw1MjNdq=llOj#15K(80RLyvfF>dv|#51TUQnjj7rJuT886!6SUOhq>7PBo8+_QBJp>uCT0qTm?^Hr2^%EO ztzN$`c_#&>7nLpNr%M{=(KI0j()QY}1b$WUvzq9nTvo?k>(mC1< zqo!#p3npob!(vv9#=1d9JvTv5kTWTbP&2=b{=$Kt;KIvR<%EHAS^K8k@8LphDN zGm{w0uhGR3-}_sAVC0`KH5&{b-YGG3_wx4zY0{%kwL`W5+}50n)9~p`KBTQ9DpGxI z>;7t#4DKeJX58>;T-cggxzA9^8cqJzg=>r=6fFT!Q~MGdc`lt#Ij!SgkqZ@)sQ<5fYkC-^U>N(e*Bx58y-b+Nw1jGH59Wl0%trm5Gb!!(cy zBMwHrOW@I$qngN8Z<>`2;_T&}E07I?pVqugn9Cjo30E+0`RGp-V8r;yxjOJ^z2(TL z)+XfvlnK|VBZDg1wkR3uJ1*7W+(&}^Y*?jqGU<#?)^Hx~LD#XG$!X!iPr|{rOnf}_ z<5sg39rR;_j+k`!!vr~Ts*x^X?;~neQHwKKdRo>l2VKX7t*<114`DM)!tV^_*~1RF z9AiftJ9kFXT$Ntj0>d56uI~j>ZxX#BOC1?=APvvYk1uKv;fw_e17fZk6>skumN9gW z5AG{Z_+7N{GQ~fb!!Jn4o*;{%<7?ykYNtf=>Z1DW0uGv5IO;is(QxW*tV!eS0mcoZ zu=8UP-Xs%@L&AY-FCN0cx-;rs-kTYq{GI_5?EV2-XF|Mg;Wi!jPQycb2~T_o0E#b)X6&97#^i8BbKb5`I%oATDYT0{>>>&pKfQIfLD8z*EMneZzQV zE5&Q~)$Cxp#lMvwNWgMgJ`|Pp>b&tEUdhfXPY03HXv{^jaJnBgI#%tlS<825R^1?u zt7!Dtls1X-QslU(PSu8yq>I{XL{KoF@{6#+WG_b5(|mh~57i=y^5#3w=q&FEU98hl z4b5G>Bi@6ruVWgk2%=@zsaGlzUM}iFk**JM5ts{ZO4NfDaIYo^QDR^gXZ7&vNCxae zUMDJTHeVro<*vGt{4Ct=&X8ad`bUC9{l_Uf6M2+FcaY^5#Jypp_?n&_?Uh|hKaX7c zExd830;6S#?M4FCkDV2hw$m25GZ*_E>l<%iH7^(Y?EdFGZUzp(s+?=#SI2+FG~?&EY_L~-g{9A z-Oe8by}(&qM!^i>=Biy1;G7PII;?HH$HiYcRXUWP+I>i!)mHFXvz!i!Iw=x?5<_V9kods%c)YnPI=P^9Jq_2Oe>U{Aqh+3yMpAw>Bd|ftkk2fvUf&9 zyS{N!6Y92(m7w+PygT^hzeDl8`3vi`bUK}Es}o+Xyu*{jO)rcl9$4h zUg6qyDCE9rVytx8hs3;N-GLz8hzMiu&W}i7f``Y)GRN9Fch5vlR1NbX8>!c3J$twh zrRU2$MLYzh7rOcHUmPu8zZec`f%*hj#7eqQE8uoAaTH-v)4C5e#o0k}(Uim`P5!C5 z-nMl5=w=dLoTBK8P2~wSEm=p1O)LT&{B(X4G|hK#rp5N&e*OT@dbyJ9HuxJxJVy_o zk>_ANEf;9k%(c-=?Xb~ZF2?SI&bU`F-u%rN3}C^+n9K2!HRsPo#=FQ{O)4+KFE_t> zPgyzrfc>U1;S8p7yGT0{uAn4Eb5o}0x8%{Xh_VHQ2AajYrZjbxc{|5J;%<0_JYPtG zVbci*Www?zh1>)b7~^lpKoZ%cv$Pz`K~=JLxD`h*Ij>>1YMx@n$ziP83wGGf((*%r z*?^RVgl}bt-Lmg~&l14xqA-SD`t#4U#m6j)kapwrMe~T`avz5qEq_&^TDGhoene<7 z#Cz5kc!K}Q6jB+hgYJ_TYx$>fu(zNCTDCOyxM`yWs`~XV|V;*p#c$k0LOB~gJ>4scfMwq`55f%7&!r|z-&GvosQ`4;LAIuhChSh5W_1c{nDbz+{~P7hAPIaE$I3Val{ zbyIDp{;)NfZmWiAk8b^|4A*sFkfY(b3wUi8qmv1Iry)?H05kHy>IuCU#cIdp-)Fyt z33aEM zbQ4ir22pv_ZNh6YQT>h%BI44+485B#>}gNR5tF!g242gS-^2N%YeW5??|>9-alWtz z!^&ABM<+pB8w_934$z%*4Zu@F$TE4b{V__vT{|&v7(s0PsAG2*h#VKkD=WemU{qef z6zX0$&*~w}okqSULm6t0=x91niun0*Z4v{GnY~}J7c2s-St&T(ul~rcR+;t%)yzxj z-0fA?1$+F|h}0^zxGnuRW>L9rFSdeMI*uj29k01^YG8;JG`2FcH$P+rZdLgdhDc#D zQ!D{?Afk$87eJmvFoHi*vtI79#I`0>qh#eZeN9lveQrv_$elgg(sYShw9Q%+_Z3*j zuFKZG9KOARnacOTE;NMOXK5Y|&S4V>Hp?64=<-9sg(d+%I*6FkF0DNa2NZ8%enFJEAIFDD17E;U;+AEarQ#Nk$$7by$|f;c?9i_g(?=^r# z>6LJ1Qf{>t+po*tLfih6 zey3y;kDCvt!*pX!%5k>A^9FFqbKQ=bq}`ErTQwpV>5n$EZpkEOG@`x%c0;tD(kZ!|a+(=baylUDSKs_z5N zQ%25;?UjH|bxkImx0?w?lfP{sF;_>ngwS6aD?-1vtnt`-YCtoLGb7NZ?rA$iqMdi9 zw?nlYVM@PKfpV;}$r2HHVAp?dHxhy=i3pU4!@j2iEK&n(q52wO zm;STEQ}x-5-*=6W|Q3 zS+#saP5@KE-qkfh@Rj;;iB1@)?XB@_6Ha3xmLNFRSE^<^IjxP4hoNT-2jp+rspbaw z`$0*-3Ip5-x^Bz~NfJg~sd9x+y3`%gddl26f*LzFO0T_r&sdex0XF&-*O;5Xc zalEDmdX*y!)}LZ$T%3liJqvG1!2O?!6`=qhM#-hqZSroFx{=xULzlPt4k2nLd;OG- zlz3(|@wmQA2%iyq=b8C!e?yITRX&1CFF~(g?}w9?2B$lP>;VvloJ490+jgM={%4ib zalE;Vl7kDC_vTnDte>>PdMB^zbP&!j(H(^!`&cm8z&HV2*CdiCw^GG8=mYc3fo>e&j6}c77sbUX9!j5Ow@%N1xxJ_JwqXfu3;E?F zS6pPYrv(s%eanTE!jH9>tQFbV*T^ERQmf;bON9Cl#q)h3YKV%B(wMNoglOA*ga*Om{Oq*iZ47{dF~qAf+EUZ)D&GB_dB7 zT6>RKxyroJ>pvv9KK;CB0E+|;= zwkbpQ3fHk~mJQ9|pqi2C0dJD;#JhUmcVemwk&>>wpB66~PCUIs5mUftnIU8TDnw=X zIX{O}xB|}E6n8o!ETW9&A`H^QzpF%!nj(Ol@#Q9o3{Uw3HwV4+ z4ozdPrn#v9hrc54Ny;~sy5B;i*P~xFQ1g_yRLY6JFn$S6eR`6Z->5v|4z7{)XzR~I z&YFj;On6;QgI&*pIi9=RZHXCMml`x;eeWHa(c{!3;ab;vr9P2^mU<38!L}o zTNlfE!^hK()B2u|Dy)$bk#ISeH#uq(d|Y)#5g1fz>HG9ag6_cp{DcH2^<@5N`lzwu zazcfA@3D_Pw%wrW3C3g@WeQ)$8f+d3&e;6eVBVC7t=LC5nmHN=UM-$({iu0D+O-vv^enFc<^K6>gsRdm^N6z^i=pYS!sCAP<#x^EJXOD0pY&DK zku^%i{>eQ>io=-ui;wo%1&8^bd0$h1G@h1-z%4t0yY<&HLvm|OiIPPhSLAlJSW{^^ zQqVzF1}2$rLuv0uQLl=CfHC?TTS>+n8*_)f=DP*8t2eVDe&4j-$y6i0cwXrd;+RDI z#pXN(y~3i!did6pZ3f&iVitt1fF1k+vg}y0DMj4Rk_)#6O$SzV>>lK-y5sjyuU)+I z0IGF?yU(wJw}*lYpm?e)$+|BYS1}7+YXkemj_Jr%6V| zQv2S*>n?UsbAZ6!8`+%Hw<6;%2^Of=@?*Fu}RGhg;IeBD`Z@gHucxriv~3oAOQ%@w}bH5bwW%#BZ`NaeUfZgInT9lNW`t zj@J@^WT$*N-%7+__h#u-2hUjkVLWMOxq*gf%S3v$rk+rR;)m=rd~-|HB1!81gPg%r z)EY9n`S2^--PPChK_v#Db@sdtufRpR0W=-C;-8Sz&KmjNZaz+re zbKoLecyiXjlm`fP0sl$Qkd(je+s!rvykW@b*eKw&QDR;A6e#|P^-l^G*ENdVXqsgo z)qF0?@2F7U6)bbjRlND<`oqe@B~z9jHK*Nd4%^o=eOqD*oQXTak5vh>1@J`NxwEpe zg+1rs6Krx_6T#WtVloUQr3Myz-NOmt1k%bEFs{%51x2z4M@7>^AqjWVJ=9W=2Ev5%pW&RnfDM z_y_mZy+n>Q@#f5JiK)8BHaM-TWM*OUV^w+Xnt(y=&C!-x%i?5~@&9dX#-6}0_RsMo z&b!fl48Ez4`g%vQqRakeNx+byOnJ@byQbHY+)jf9=BOmT2Mnb$(X_TV2wbPx*rAl z;jSS0%-!}l!g{I=V?~MitcNl}8fC7P z>Y*U3%*7EdCT78IeKC9Uac$6lyni^^aesb96DAqvkg+81)2JSnK+nk%4@;b?e{YW( z14~=`q+f5)vyzjXb=t?jM)~gwoa|r-Tjxy|SDDc|lTjQO8sqY~M-JcOUzG;k2;<*0 z|C+j<*Mh7ovLFv*b%&W_TFb^TRdreC>i89(N%br1yQO;>Gwzoz>yz9V>x`=Emh~Dj z9==Wy4GbCAe9mBe1TsUbJCw>ZFk+SvwlaU6cgHi1^J(;Uvr?SBp6u82Gu40L@qINZ ze7GnzXLNXEfbZ+XqZ)dFXWwjBJp86}=waJ=#KyEdh{p0-meUE6dHOncQDsOd_|8Dg zH-0)Nd@(4A-}IzU+kJgt_W>r(!*{2>J7NjXUbn9 zrc4?pYm#cbkaCS~!EY){b8#O*iEn3RXM{YZqcU*A(Xe5j4=Vl@ zvR`l%0u#Ld3QzvSAqnh_te|*!{sTxd5-_qbvixUaB4A@>VgAqbzu`%CR)+r%2^OeI zitZZQB8-v}(x8GAoUnVki?k#RLw`RAjIg^zaDYU51QHP`DG_W?2m!%PkQ8w&!CuAO zC*R%U&#%^A+ilA!pZA^hUDGS)nrj`ajt$r-kW?IncLf(zBq9P(U}+##Cs`Jf0D}ey z2pBYQd%KJQ2FDXUd%zVQ$_=D2Vd*b$K~R_wgGN3TNbtx-QGx(1J%@q>2n7ipEeRnk z7;xx-L8U*SqJ?Dv)iCxc#4;#gi-JT2d4M$N$!&NTXO}_!)|WNpvD-c%l%%BO-(NX! zD#CvrEMO4G3?Jz=Ll_Z-EFUNAv_Bw~>RV!rg=n9K(3fZ#$eI6}2W1AqL=I);#jyEYrA0kPjgP z{;?Eq)i5t9D+zH_6d*uR!yZ6>&*f0U!npNgx8!eUW;+QK_$K}OVaPBS=TFuU;`Hu< z$|Tc6&{dTm=pa`>UpLNSMgc|!3>r!rFc8lGLcX{r>)G zK7ncmG_N56`}%Wz>Z=-FoJ9!^eSHUgck1&(bIS^2L3eY*zj2h*#Xf<6K!ZpEfQF0= z3KAMRNECs(Am2?ffFLjG*!z9Xtch|I1k%slTzuzdH$?=r}*z)8E`bzafMW7~6OB0BOy77&QPc ziW-;%zt~n_-^5zF6~xof_j`)6Fd)<*q$SL0(?CK+1oh|m{L{*~r_in}0fspLg4@&h zy{Gi$|1n_!oIrj)+YXoo4*a4HT}}=O zu3N+nt6gx_J`{N`!cIymT6-kct2*hcU8z&d!nRvAaq+I}=<&Hg`)qHn$qPJaMBT%D z^0j6#r744rZF0LA-hus)sn0!v*>WQmV62nRy<+zxaSF$86A5$F`ijGnwzPgqs_8j^{?AKe=?JNX2*X1Vkm+1^Qfj;+xp^3#q>4|I zJj)+0xMQ<3-wI+m?c%m-|ITuYNn(UAs-#YP!rbj`Hax<}^bXkvMyYmMVG3t6V zt=OyCCd(a$N|gDkOS7zZYQP=E#8GCQ?D{L<@ccm`+r0LzB1DUHDcE(jyz4Ah+Xa#( z)p2RJRCgy@Yds?o`a{m;yvW{l5}xOFe8d~_RfCNt*2MH0X*dG>PumR%3xYzEvC-FbArddli7>jqID!Q+*!ZG%mjN<#YDA^t_q0ox2tON42WL31{iqUg^)3ZZ0K6p`oi*Yft$!YIdbh#|?Q9ixi|rpWpH$W#Ek;UxFFh00xn~={ zdH}fLiKd;;_Y{i)?bGZ4aFXx($kVT#4)fUX%eS5>o=5Mr8T`~!L9uJ>_DEAQFc?=< zW`($dE5v7T!lR?8A&>6Z{fn83y6;#W`|t$(uki8?clnCHRQpkXx+fw-FfZ7;|7}S> zLq>Ke8ol#1?__!@v{dU|J-6xv1U?2LcYCBp3u=DvaG3X%|p)t0|nMYE|5KmvSOWvzGXL1Kj9Od6|RjEuW7jE>S3F>%2a5F2Q`} zNLeWj_h7Pn*H;#OarsYHWy~8Yhv)~@-_i0g_gsIKYDR0E@*7sOBuc|^uEsZtfU2VPfAadTc9m(*k-oOAh5f86d0lP7uFP&K$JQAm}P(vpNO<|VzcIJJ94xRjpoZ&8@1FL*V;hQ)wu7+ z9aoON(^e`(U{)xD`!>|7u#Qdmy3z<(NhaZSKI;v)6$Q0>91`L`NJ197=g=jEHE&>R z8R`Ey0AOJtAw4lU{&202;g}Fzj>+&H_VKQbn(GKx@Ya~yRWtu|N%%Vrd^y= zt0wFTT_h zMP#gvoOS!w1+|kfPMI3r>y>S=R<591OQ6`05;oL<8#qqX+cftb5V5hj%MNZEE6kK; zOt;B`8ds^llU#9}L}WGZ731)TQSAwB`L$xP3Ajp-m70!KexoFMXP)(w853Gc;~$UW zcmUG4dFOZ=IjbwQgT@&sO7x88DblVhx}Au+>-xyQD+vXDt97TYF7a_ukv38uhI$hF+81>) zaqyxTY)Q7uG*q7(2vF|V9xgq$n)Ywe9GWQ?k@=JCI!uYnh2SeS3lWcl3_hPYXp{#Z zr4gBLOaY5#0nc2$1^gH#->b+a1dozi0;1@WtTE727O2vPk` zjN}`2-WHC(`aV;TX2p#y6QfmY!7%B};k!#oLSiH3-}{e0R@O$7=sL~c>tnU`xIg8+ zYZr&m&x^g~Qu6DcxE@y(?zQ12CT~tm#@kPq4LC!PH~Xqbh969%1-@nJG!3rM9%O=? z&t1Nu=xrskzAd?D$EXkQ3P;~&9vNZ@L+e~I*lr;f&y*u|(NDQeh6wAi0tY+?p&!tf>zBU>yW*3x^K&yLKfa9({Q}Znz{tWqu~75(6YyWALF@ zB3bBO(4fN{FOsOoY!vJiQMR42a;0XXt?9-6*uit{VAusSVt6N-Mw88xD3=7dN8&&# z%#CGUar1)j#+xvYPP8hyC=RZmz_mr3W=03P)9_s>aIFa4QZ~bPq_u}CAxewC=wBaC z>@2?3zMf7A#jBgRe|!a$cIEh2JTm~c5eZy1FU>&Ezf12&3FWGi`b{O+bnOqdcFL0e zYQMcR+N7y3NdKYMiwJYk#DmWnA-m+8eHaVu(IJGgM5|-MmSnq8smk@?sPqg5kQ>3{ z=YHoKCG&uF;plH^LBU)Ow}~%j|LWk=3}atb@1AzyhS<@C<;6O2%v&lL_4f|h#=bdC zzO|8X$DdxsDN27lS&rC3>uwdW9V*aldG0)emW_(K2S53EsDJ#jEeH+F%oraU&mKrG-Pc${thq1^dG-71KR^#TP*4jNr=FK`BJ+S$`e52NK?X)a!;Q zWe-u2IySy)H@tW0#=0~!(>?&Y;@p0$`H~LR-6dyG`c7vTN=nl$10WRuN$1tUhI7?$ zg1U~@T;SDL`Z3h-)OdZ?HD<&S0wCM~H*E70e_|0vQc86|4M7meJK-5#e(m|aHI$)^ z(>nFRj>CLNjxo?O8Q*>q; zUBh+-WR^}%-X58!>gS6p2Q?zU?778@@m29Br7qio#E39{gHMC>yB788b5b2}JgZ|d z!&e8C?%kla{vs-T2eD)W;YKCB!fiyv3LF%A&0Bq$4uvD@ZvYya>0JSasIKe7b9OO* zW(88Mb=w3O!eTQ|`0I2h5`4IOd|Y?YiiP%UBu?YuaAvi*bRmfxj^qg6^>O?n0v#F3 zPJ(|w$K6;OV%`u(aUxcu)~u zaFrhG-cFKhx~GB(=eU&7Pe!}x&4!1DS19|sG(tw6_r^eJtt6h9LFuv(&-*0l(Oac1 zuozV}JKRWfN?kiw7rhG4719V&7v>X(I|Xyp>W~p^z8;B=ldYSZxr_T)c#o;C{D3VD zXL;jEVL{1$!8gTh4O}lt$026NwS(YHGOJFvd(n`i=*t0n^SYK_TvdviPZ3j3a<>cG zPopcmqg9x=d)DsRej~fUK<9dILMZ$z+vAmd7k(|gdFWk&fB=(yj&S-@?w+oBw{3Mf zLaD*kW}(v-7s*X@>-a1uX6`ejCmh29562GUcWQ#v*qJ;L9{kv~8C2NVL+Tia?rxG2 z-zNeR)=){m!|Y|NsZd&AvK>3|Sf2t7&+2Oa%H7YS&7Ng|5@*~NV^K3T6QgWodVO}) zsw?I57xmWpOJOrl1@yP5Elt5wClG7le&@QwZ2Xvm52yC>pq;#enJb$l!eckJxoZ&T z_p8Vp7~E5gcc0C~zUKI*O8U#mkmkF4WwN>-A>h!4xY z%e4LdHtlGZz|2xllAX?P34^rn+ue!lZ zBEtNMk(+4<_P>7a4{g3=(ph-xZkTB_j+^O3_B3-wC1d&o-5Yh@NH-y5CN4TS6}fSm zii-`o?LB!Aky#Tx?;bIHaDr;)ZNQCM^Zbi48h>6W8^TnEd#^hado`@H^Lj0(6=XE^ zMqcbTQL}jvDQ|v1CDyt^rFB_w|12`Yw=8_P)gE+Tzz9|hgTnvA*f|6X!!uF(+O}=m zw)I}ywr$(CZQHhO+s1senBBjaRjQIoD!Zh+PoJl(@Hn@+ZX5FW`W7`(*;ZV~Cg8R-JR8p^!)kL~dXxzby0c35u|buWE1G9n+!Q0-PpRh#fTIfc&Um7>MY zqi>AMYHAq+4=&X&>11f*6^gJeqEu%N3F|)t-gop+TV?p#Fo_G}XT54_QdAZyI2go(?mGKY1)M(I0j(WP*8t(}dY=8lMXIzR)3$s%h@uNk7Q9dfE` zpT`2xsxr_=j|=v6)v)L|_{ovmVQWM&MFcs#RNqN}U>jHk%7?(`f;SdlyIk_$(k6DZw-_f=&1=&p*sHr!w3 zj_Rqz22RSY(;b5@)QTOVXi*Qc6O5KFDn#@F!$GCZtj_oNr6Tzo&pYu!{O=E*SEl#| zZgCiPWJ^-51mJM@%=c5V-QOy^Dr_8pVIbhCg=}f4fFDuStgHtzinFFZve}e;?N4lM zh|Ru&^;n*q6Q%C^5O=624keQ|uZEo2R_2##K7JX{fNd_0u>5dq|g7v zR!oL8qt*u=km8xy+9J*GU0TJKec&hPsS6M{cqjpQXDkVUf1? zFvgO5K2$gP>38y_aPLGu@|AM&{-%Flf*)1zQO`AeYd&gze-?)=nDS-jLDfR%!l89f zyl!E_h0d5tvQzK4?)`a2?@*q~7G6f^@R+&A;7fEWCO&DfL9j1%AC;Rc9vGh-DV=3~ zD)f0aT-0a#t5V9{LFg=tlx;=RgQji`b4@?ZD;HEUdI%xzx42#c2UuEaQOS4#zEgf| zq3IhQ8~#?*NStWcrHTJoWp3Nh>iRdWrUm&nC6Fww33KlMQ`BpCue}WQ4CAGeZ@28t zMeScMRD0*VZ5Pvrf{-+3EpkDb&^+!QKvCguO)QTdv*d0Prb_pmq!Zj~^LvR3ezAld@NO6-tT(Xl2mOVkXh2WqRayXuE9G)hhKv==~ zz1GTTE$PXLN%xV@$BX2yRd^QH{3q@@=PRMZXWw3IEW??tZDyRntm@l6xqS8k>C_+a zP=0)kosWeBpT{aIX9UkJRo11p=RxC6&U<_KNz*#$mG_&Xs_gIDy4B&BGBWeuKu==X(Nf^ckE(1yNW3hhNauKi zD}aCz=~gf2<^J10bT4mL@TGBaw1$MiCudbG=*0b(u1J=HphAS2(YS#S--1=QEMy+d z;MJ0gXh}PY=NF;+l&c$cz;R}p>#*UMxMi~l$6m0^WM`f_>FFg+&Bk%0t;}hHmZ*^tFQEq((1a?7% z|1UBsWebP=XbL*dJusQ2Tb1&{OkkeTxmSMR;y1&8xuj$5>Vh~HcfH}FUBuN=1d&wR z&6{x3^V62;%*wqk%<{z&%fhY~3K5pYtV48L%=_G;@N$M(WmU}W#_%&*O4r;v$AWpX z9!sq!*<2yd+{;vquKaEjW5b=k->a`>5tJ9(y10;&dgm6Dp@znUb$2 z-#vT2A{F^)9F_W2i)}ful*=UhKr}B3&%^`UdL57@yBo+f)CWiAG6jS@f@%^?1e!DTL0+bO|0M=)87xeR{x}6nNH#@uXD!Gvax{|Gx^M=}ee>~laX0yXt zTrIJLasJi?GEVJFw%N7WPC{uA(#mws2nw&>LUxa;e{EX3G`k1~vKvZFrmnMyh`PlA zIFlWW`$JAJiPzW8SM4F?=1EdtfJ*@GWiK&S`EL%gpB1Be8_X`D*_~&fGn|tHy1s4ox=fs0opD zl1RDR6j|2=T`7zum9hN57`=xMdNhx9V5f0w5{k~mu95gN<)UhBGEBHu!wIlik3cJT zB4W0olTkgE(n!tz{-B=@)Y5qO$3N|NE;l^hB%VLZbF{{9&pU5hpqnR0Uk2tzk01-T zBu0nuvf@5Zj%=)8M8bF~2A49x%jV(?VrKJ<3P(ntE$b0h&4!^cF?4$BErjh%)$4+*jbvn3dHs< zh6T1*AP01eTs(pbiP}m$rCVDJsG0PL)V4}r4%OofDLe@;sO>wtd34&uv|UTUF8$5E zHba*%nNO94v6|Ycl2AK7?;*X!WP8pQHCPnyI8NnGrzTAmn5A%+O9xUX=F`s&EGqC> zIN~fjooH2e?aDwrPegZdBu~$FezzxneCU*p>yJd0(!lWkP_xjM-DWB6G6aPx>)mbo zvIV_pvMkR72u%8@#jQTobJmT;PrMD1UZj)zw5lanu4qQ0?$cypN*Ze-B0Kn=i^Q*X z_UWlo1v-lC144!N9 zz;rCVg?~>YG8H#2Wma8x+*gZEZO)f+GAnQ_9W#8$5h+dG!`3vU|3O`~u?K%50(qEn zFD^4(#2$1M7VDt3Oy+npb;mvjZ3XiS(QG}KJ~_zt+LNR5hP#N6H<36DdDUz`+LvU% zxw}v+Z{+co?Tgj*;%GEaKp-xOE5#hb%7BqUjG!}a`nh<54$S8=pV70(RL&p$ghxP) zxJS_bw$IP)4f!2`BJpzcF5qr{{i7^l2Ct`iYy?f|shW=N(8MJFY_JQ6cAxN=vIPSR zzbnlYAM&6UQ{5}&mnI>ino~iPP$qr<&xv^lL)jm{xudolf1Q7&^?Dw?Oi!AxZGdwS zVbQaByOWt6H^kQJPv$8+k-xnjJB`DF)a7H|<3f(clgergN8TweJG@Jj5)nz~X?nqU zPFgO4vO-#iIvO~Q26STCc_NqN%pt9^FqvkuL~P2_iwO<3D`I*gBjn8_B{q2RDeTAf93*TorMgVKR%7`qGQ~Ax>VCj*$f8z5$!XTxZ3mMan?G zAjfYyuBY@M^`F_Gv;TQ!8iu)>It$nOr%^Sf*_u;8BvvaJ(xL%?!Ko_Ci9Fgjxlsp4 zDw$zoZdxg}8kRHAlD-Oos|la)%+Y#0S2u_EB&?^x;#fmuW9q*c+s&P?=YltLEL zj~7EjVo?5PNWB}x2b$cQX)CTK+u4?fGpGRgVdZo0RK~*?DULZa>{Akl?`|yRe??SU-Ohvaq9S>NDU`eqW0vL8?4nEJ$w9G5-O;$e}1}(CemS%WY zISZms{)Q-5p8r|PW&IzuTqY()rvF#HWg=i?XXE^zL?cE{21eHZPbZw{R!{})tya2d zaJRM5ot?n0F5&q9#vRu7E^ZJvH&_H5paI-K{@0DO+-s-5zRRA=%G(#%zfl~cS~7A~ zf0Q&j+FaCl~Ncw}V%kcfycKbRXF4}ikZS~M~MPB8!G z9NKxvRPEu}-JylS>Fp2VnLi$&^5_b{>Fw=o=RZeqhz$T-+GtoCK*!M8Q-Q3w=+V$s z090-x==`QJzmWVxW;fT?GXrC1CnqC@W(UK1CzdZ6S#bL%dp2+i;2i(hS^?yKy|`mqx_nsu&}5a$a%#31e|;#QfP&G@XcQv zny)rM-2J^CKn7-pKl1IqoRe2_ocxrz0K!QG9Bfr-IS`p9U%kdO1m z^qPq9oEX^o)eXqkx=#^WoPbe$n>YRMFXI~Pn{Df!UsxGhYgw5;B7;N2xpGshgMFZ6 zq@T8lFo@TP1e<6r6Tf&Q_n-B~>SPeGt_ zBLk@K_kb5iCTCEfY+N0GKHWd%Z}vbFQ?PV(3~u0Pe^a#9dcQ)y@PJakqqrfrW_$2+ z2A^p>X8()2IltUzzR{`S+11UXxR1WsG{t|~g1Xx2uXdw<3y{!T9l+h^8XJJmG}kf! zrlxFk0B2)CbADlpEY0t3m@Xmo6UTGS`j?+p+_t)}=xGIP_T{ll+q+k=wZgSh5} z<_Ff+zi;E;v}#{gE7i2t0go$uGB-E|e_X0? zt^h^zdWC(6;Qos5@P{A_k>7&a0AdUL;n@8YulU0gAo?hOLFs_eNPY;={)&(AhM){m zKZ4c(Vi)}9#ChBJ&k6Fs@So#l_xQsvi2pv|Kf@~?!F`66e}echD*nJ7{EQjCgZP** zegyF`qyK__xuC_8{QBYL`u+OjfMovqXoUg*z1$8vt?dvc?{L0JCajlVdEo#4Hm;j^F=nd?)`N!yP)ezJ>S}FXOLta&7tw8v@r#`|t8% z9lyZ7_AXyzjK1!F#F$g!?s5Ok^11&Oydq8@pTE0R{%I;2p^wFhar|A8{jBf(4g7i1 z0|nd)7_G0Ea2xIFPlfK!?zsrL+dlJ`X{;lJ))Ctku)dDiYs04iiN536sY4g32798z z7vi-k%BxTAYSpkXW>i17buSgUGpJ>85z5BAo_Cume&oqz8|$dU8GCv*_tkG^rW@#b z|HE_XLe_~PY84!P{IW5@yK14Q|q6Fqyca~Wux2B_0b+6y2E2yr;I`AwA z8L_2gDzh56Xd(f6C>nb%fJA%UIcS06Qi#fN?mjXC@ygh$KAN-W`{cAY>752b8-M#6 zsn0vA0J7r_0xplvCQ|{C@MtP|HLD}7dowCdmfaT*B4(hd+uG&;q#x(bx$y`Ma|g&f zj=~^%mJ_0xntG00|2lvT=J*9tVGTxQxtq_r;e&av3_&^sCU*XIlKDxhA>OMaT2uh) z2DA*;G9lM=CU%Na(Xbt;&as~3J}9Kg!Zpq`+v>M9;-Yj$Bonr-M+pZFW4H7S|NZjk zwI9)B6?XAT0iJ@wIz|I*B^F(1V!dcWSMIm}iTJL4&KZ=YDxtZGpcQPc$Mi^u82mLI zvxl3tV$8l*Vu5FO<>%|9PF|b!-ciIIp2u>%A`gE`VsLC_^{!y4c!S{iT%N3r_28kO zag2U|?f^XJ&KwnJeIdWO*d!tWJ+WrBc<-!G1Kr#ssoN^Bc!K=!sf8K~RIeTbISV3N zWM$=_ZQRkT7R;DJXAXZB_qN1~+w6^ljF}{;k*L1Bn4Mjt0kLgo?8b#y?2)XgF?N!r zE4lKjORen>l{U1p6CM`Qp5~sJnyYV@8KO^7u3aQOFfXQC)~3ZD2~1%VV}S%6Y;M?X zn3Z|k;BJE72g-Z7I`hIm);z_ko{z$-E%Yb!foHiQb8;|VuC zJf?7o;Xl6cmG6XNAg4zA7jW@ylRfI{F^98L8t0Fgi%^dC$>;2$^oyh;3J?p#ez?`y zY4q-L^;lkrBvFjj!U|X`TeEXUFkcuOV zFQzWTl}SREjt3Y7FM4Fcg110Ay_sXZv zYtjK@fin2Bqk^T)T`;;_DtE37zhx`%bw4|$ur@t^1|rJrldEwwsg6>JZ% z&FC$UyJP7#E|ga=F0SOc7lrSd9%7Mz`FNh4+Eb><=o2-bHD5&s#3wO*9lDjmFhMP zxm~4QD2N~KE16doZv<+D7JyCtXw1L!uyHX>ERI~s{tQ45TCI`pIiYQ4kiENXi z?SD;qR6mWlQ#IC`Ng0J38@ZOb%T%Z($QLQSO>Rw`f0;}Il>ek#DJ3)fcyK#M?`UVk z5YqTu0YwXibAu3J4B+)Pl%#nQoGmOvUa5haOyK-DG?$F(>b6#662G*|ku^FqY13x921~-Xo%Q`g$t!9op1v~~f?%sIco!kx zbLE5FpycYkD>tx?R>#EiMrgjQ%#Os_-bmVWyWTZ7EB6B&ThQ!Nwqh{o`0N((*q9=D zMx_hdT7!CvqannTf)civhU{h-_b5S$d&7@R#1<&oqT(_cE?*baFB%O9!#jLxUwyDr z3KKanNZ@UpzO>UlOyo#ZJXoeUIf%&OLkssM3(PNpnROeMsovg8Rv&M$<3@)p?A8fU zrdszHuyqnWP7^(``zAnnV!n%{3ArIN7S&97q7lkdw;kXhMwY5_Jv}@<5hLeJyc{zz z?88EmM6P6+qZ5%xlbd-oMWJ=bHGWG!G#zPr?|yN)m~)YjrM%kit*)^9wr2SWb>iax zQ$eVxT)9t1-5^uLO(Tt39=c@58Yl-dNy7wy)eiO~c|=~D__w^MmHM@!K8@x;?)KOh zKfA5b@ht@;kKAdt6TKXob0ZCZ+?MSHdhhhx-~M!RT0*pZRswr&8H3d9=oG9&`59}R z9?O~qTC|uPA9-oBW88zjw8o=f)`dT73xAb&|L1_BG!&F84o$d76g~(W7JASU3UZHeTF<3U;I`)?2*n>-0V6>SwI&p3z8$5F705zP&eu8a&vt&MHz;I&iZ+@ zz2k#3Mb=yKJ)>~1H0f*Uc&jrQ|Mm4B;x{BNPOi3$TLksCq&;jn0rGjx)(ia>i?!kU z@S$&|KCfNyD^5SggR&!sH>|`plzTk-`gC34A3@ zE<`RYymsv-eC9djT68HRjt+fX6vYqWO2P81N02py83YjT7IrO7jCzCC2Ej45$#-gE zxlGs1fF3_*AKLFM0|t`ABwX|V63Ynj`XI#s4IwNQh?S{eAB3GAzwl%xUw!55Q~@|t z;Xqe3_izH*{H(GqaMWL`ZXgF^boy0oyvZ~+seIZIPDo>Uqm+wKBPnoMDOoYGu=`MG zmz-`t8gQLJ3#Qoo)E}-mR3-&azFg*By-jWz#Q&`VXFk0+*W%#no?O`I4rM5#(}iI* zw^snfI@wVJkGnLyZWm`ks!rryUgtNk)tyaaY732Zg5_Yh@Hn`TG|-)Yn2}k_5k`ia zgX#7CXIgU6tp&Yk@4zWLw+t?}Cu)z3%-#mUDn%vaHVi*&Mr%H{&005Z zgiq%1r9q($aVLW-!fCB@eEvG;&~n=)+no)3pfO0_U!&D{N|2=K=EB+CCQXpzZ$HG$ z>_+}20j&#QVc=vn>N#ZT<-pF@guEjnZW3##^C|#Cq(KvNLnlUmo&f_fvwc>HIWCaq z^@J9z99Om~nU=b46>xHxMz^_b=Aj+B4XB;>>F}Q`qxmFW)Fc>NY}fX}iPL+CBFsD~ zOpHQa-MuLpSf{qd#o`N4LLS7E=pGE528+m?4h{T?O^L65U6aU%xo_2124VrR#NI2! zgZf4i7I@`QnZl{5Mkx|zi^S~$VKaTY3n#PQPPaxz7?~*(IMeZMr-M|lD0LW#w`-1> zg6&1YpXd{UgZDf%6}0MDsSWn!_f+;ax_?=3Li6#Z?x>4GGy0?C=6k`7&5dSmWNJ?; zb4pvQ2!;G<+|!xlVhC*V!v51kP!(6GEQ!~O?UTUQ9+avT*+iU!sWJrJh7O+XHz^ktHiC?qb8nDBB6=VA$WwM*kP*Bok#3dvq!_IYUA zRk#=(N{}c?f*Gay6`7J+*M#(R)mYSb1qI>703rp+P;!3Mnvj?F(BuX)n zd%uiWW>YBz%l*QqXjCYyIy~g?27F8V_*EPe^#hG0AsfEbVayYnbJGQBB z2r0H+!n;OBVc+Okf8a_)>L91G1Af%7*dB+nDvgQW^1sw)(ZQmb+p*3Uo8)vweRoK$ zsOJ9S*b#24T=ja^m31>=`=Id|w=RK}+a>T=YA|;0s~aebFpc*fWGr4nu`G?Ah_D+s zzLh4sB--s_fJlOIhUejOEr(3)+wgNtH>g`54Ia=r&0G@D9O^wPaVWz)a0A5FOhloW z1v1YPZ=ckOQ9$R&x(Hg@CUW+=rwiyI_8*+dz&e+xXz0(K{PK;wcXDr3V4y~@;%OuR@I^Jc1nVNz7nM^UeQ-EnWTvxpwmw!q7YcF6 zFOa09>vHM4sbr@NSBt^y0T|Zj;IhUKF1&)@~o$(&8$Sp=eeU4 z&FxI+LMA>1q*?)aka0a#rlvq4&pLD~4uc!o0vYdLX`CXrc;1Y%fW#ePDG)}v3!~#* zpiqV4g@sFR^!Z_;FAq#(4P@OA($dOg8fFVlvbQTady5U)p}>O23_2fs3(G;T${=i@ z$g+E$tpU9~`~5)>yyHfn=r6*b=X?cBgP)+WtwK;C97`0dv9emgL4gm4ZPT zmo=HL?@BI$>T(AZw#X6;wRNnedm)9817EAJE3l&0E=11;g|cvN6H=HKGe*V3-|(w* zTs>cH?}8p_L3b*L=rnmlVFmTJ`{r5s2e&;(g%u<~2fT$#x-} z{r|wKLeVhDjoE7k4;A*_csd-UyTL6cE8ug0t$>feA^ALvk8*kf3&r$tVh6 zDajFk6`VOuGzkiT%wwU_BW%a)@%9Rzz54%58eTKiccU0h4FkE1K%Ow=i9NB5NW}<3 zU92v}O!)n7fq-xYv7Jdp0CzA(B}3j8Kmi}ixlPu$)S0O0>vr++FVQu@ww?!HY?WMK zLA|d5N33pB?1zYp7%MB^{rRdfL!Q{(ppCi8dtRI*vLO793|B@@_ zS8SN2R1lDYgQ)xzLf|n5=>MD)Qyl2mF0?>exQGx$81&%Fa@PhJ6{C(}Yt9*WK^I0I zl={&aWWdiV%uUq67rdu&_g@pl{+iJ3zo-To_30l`CMBdk8N&1Y)izVaLXIlWR1F(a zxeYrpo6k{3I?@D+^NakY`53rkVFFYa;+`TI#9C+q9Y-~nZ#)7Il<_V#4x{0Vi7fXf zc&MjT+7~wnJUMj==r}YY44B7;pPrmB*{maBv(2 zN&S83*u0#k@gzCT3YbLp>)v;PdCC*Hh+mruMu0=Q+e+ounsU8sx?B<&n8xe)>&*A&vDjGz(M zp_IE2{SeHxqx(BV-yfDH<4Og7!5=(_I2hD1XA%WM@tTK;gsU|A2obR*1`4Y$pBLTh zv}}<>E^i)6V2>Nx7>W4mPNHd*u^Eq2%v;yldN-91)Ta2AUwcaweN5zA127QMK)Je}?lVQFMP?^$e0VR?|2KIf4OQ4;-~zkD!njWy7O zppz5u^>~IOmLf~$7>2bltI>@YEOxzK^w%-GHx978)%t@^6&aIexN*EeMX-&FASq{e9MgiIdVn+baLNtfw2S1TDESBT~^_rx_7*_n7%qrzWs2AywanTK67bXmf zz2K1aqc=$>kjy9;4?1T@B3>}O1@3w+FsG=nMdsP6j_K;c?$>mh*1F^q^*&!VAtl@5 z2uTS&Fsrp7?#FuEkC@UhxKJJ~Ep9T{vYgW_;-d=7!fjj4sTRLGD{8BNPh-}TBnp7R zYm#jE-YyKSQFmTkYxWUb>yzF=%OJ=qy|so|-4l8%;hzto&-M05vz+S91~sto>a$D! zP@=Kj%r}Psq)_bLD@`DZ7E=<0ywnqG9F?a?rRTjmkE8rC$&L6K4l;caYiV*ZHl$+b z&BS(TF-pl2HB9K)7(=bSq~wEADVEgs9IbpAHdS{Nh9)MVrvs2a5Nm6Y6u+ovfi3;c zC8V6ZUkzZ>kYS*#U^2T0vX4{w_`2K}{24J+aHDH#Cr|i0UAazIH?%a8quFYtxVWnxB;TZAJC+Y21YTjSvuIh(fhLORG)X?l3%LA1eA~m9 z?6t@s>!CXcmLh4DC<_M&A=o!-{VI{`merD#?N|_d%Jc(y{0)wiVUP%*Bz6d96lUe> z=^4aye1D__61LISB7Zc4%E;8BA0{o5?f||9-C>6Is+m5QCB$PY?cP12wPq) zJfzp`M`+xyv&u@8-LI+pl9XK&MflrtBXu-F4Tat|{ObN!#N_Wtw@qO+r?c#O532f>PPoCE|^EsP-Ev!0mXaMHz?J6Mt{>3|07IH2MJK8WR+AMMX!G6XzVcuSsr z-Jyg`cx(l~oXy&c(=*4IAs#>C{lF&?1MU*0!(|In`xa!4WK~Fd2Vfw1TR~7h?w*Gi z5a{BSfBH@9>vN>C|377ly-}hp_ScH)^+XZ(ye)GmxPJ5pWy|iLMhr5SfLA_skl|q3 zs)hvbSodI;*6)-Pe?yDEK?Z*^I6GE7VGZypfJM>(R_NX-o#kd>BJS+`>tfpf;=_a9 z$e83_`*(x?o;}=S#8qFWUDjoEp^-UlCImUW=7URp7dHFouYk0rcOb(T8 z{h!}c%AsTbBm{J*NXh25oeBEyCG0h!B1V8;%P>T4vA~)_R@iiaJa(LoTjd7Xi9A-^ zo4Kxlam!(t)NXP-<$k-V8rI3IG(DVr6a@V@<9(<0j}X({W{v?@_Fio$=;ui>O1mD! z#uX2F-foA|IFQQaP}JLH?U#GEgJ8889=GL;Ax~>;6TnRwvS5^EpzVFjEMWV|lQkra zk>e*Cc<#CL5lH%|_=aVu5Qf0d@N#)r^>Ca^JBGnJ=51NpkopXkyd(|Jk1XU(c+&W* zEQCUyy1)`a#%y{f_h>I>t3)0dZU{W&Z0BP_&%-h|1|@UO10jE6xa@1^D* zLI&mtp@5B$xzqQv`|#D@cJ`)RXo>#F3}nf-)ft2-+=FwyP9@ZT8Z9X!HXcCv zZT>GJ?`%15@<_|SNv-jY8I@Hokv>qZBlKN{iFPAc@ViAV6Zp ztr*UmTpX_(-rVoU9Pu7g9dl@-Kz-WU$n9eJG7_7>9VVdLLZ%12ILFu9Sw!wzE^aaR zRn4YI;-smtw>zq_rGvH1iEPehGu7$Frs$xK?$bJyXUA<-81IzS)xI(0tUd% z)&G_IuJ=`)2FySRh}=eNz7&b zO8Fpo@r|yqoQ5{kdwdl;#EAo0LT^4(0V*@4y9jv#2+;9rkbjKXRz6r|P>HafSrC{* z)pYUGENvGEN;+Q*sj7Xv~Qpf_Ms9H@{Ei zsPjI@Ol3rxC{w^TO)q?)649HWb;~tJ4WaisAdm=kxDHe*>8GqjZLKuJw~?q*6*38hgu>!_xq`D` zKzR8xcv-pB{I;+%rv7Xp5{k#C=v;Od&5BOOUwxI4t*yb)x7|*4P0LX&>jeR8!kTsT z-=4o#WEVuP)2b}sk^N$t0V=NPXJG{IZZ5y|VE#*$xkNcz$CDV)gEJ{;9jdw}!6O1~ zv(a4?GWRXKqZBdy8iH7?L`Zbo0SjhZHK-iCjDZcxlFTlHAp3+y?6ux}kBq z3Q@!NXDe7J{>iy6`#U~6>9LARL@%D$q=Fd62Oz5j+ESpZGi)Xbh$m{CFcIPiF63Eb zikwUJ6^r7BuKr@;f9TR?X(p@OA!T37-hd-Yq?cnc`Xzz2Z(I_2mH4Z_AO8uOp^ce(|<6BWaac8AZ@IOQCO>Sy2 zEPXk?E4x20Y%=Q-?yilG;a!2QJP<`wB^lOpw{k*{5jD)(d+K+_>DD}{gntS~Kc%Kq z??%1qd<&Qy+IVa#iO-O=+wQ&GOZ{%k^%d}yMZ;1oL8DvMxq(^b4bk*-bAbl_RLb_oC#?co_z!o;C5Lb0&fZbr{045sU@?AS z57YTUha%GPWwTMUM#P5JVTYh8+R=@05!OfvniejGnP)eph-mr&_->#rF;_OAiS226 zE}f9@-+zj8Z$ekQk73CPu+mQzgS zZHN^XdZQ}|C5F7pDALI4J=jjc1HYF#sCt6ii0~Kzm8t9E_ESzy2w`$q(XBIF>MvQW z1YDvBqJ6MMZA1ru+jZ!P1G1&!DAaLDU;6sRU$#?#%P z$lvN)w4fu(jsG}vIRT&h_!^&euRZA$#T<*o5jel3{E2F<)@?(t)%1>b#QtIEeW#=E zy{W9lue(uWNV8hVa(K^#bscQ1WP}n{ah>r!??0n6YEwuaVPX2hlvTkQB0FALSDoUy?{LuBoMkIB}^TZW7dB zxV2*j;U=ungg-udaz?8mMg>u`%vm(<&soqA6GDS*-FkcP$N5j`1E9cQ-9gBJGwO={ z2{WOKz9P0_wwlijHe+$d)INAnTlkoG)o$(WEc(oQac{gflbKXF*$0VgAu)C+t^SPx zFXtHJ2C_6tD8IN`m1TJ1Umrx!aHsH3K)7r=2$Guo7ZY|r;|fN1Y~&yVve$Rv9}p5$ zMX=-H2;(FnlM8vWu`&a$-78Sq187Rz!I-HT0p>yATY1t;r*--c2r9Xo^cB3;$xiC(5km>qf23bKQHo$y`%NX8 zWc^QPh06T>hN}MWfJZlBO|8a6sc%lz5W+#*)7DULx~~G-k&p+a#Y=*MuS6s{9a6Wz zVJO@3MH2Et03mq=t*l_FS^ZaUG7kp3TOW2!S;I|esg2hPLKhbH_4#?#7vU7Ace|c` zz)#eshu_NBUvyUi!OF59{*&0=FF@4iTQjw8UqY(VV(_P|BC%xqb3|6wV)UIN|MkI) zOwTlrSW(4Kycp`6jTGv@o5c(y@!gz)ajtnesIWm0`{%O=L=x-o-7Jq?ZM(>auL7nq z#J!E~1C+fIjY6WW4BF3ypP`hr&@=A>Fz-=55*Ty6Y+Q9&=|{RM*F%|MEvujP z+KZ<0JV1hKIa<|+VqumFtGz$YCu2E23TikbzA^V4FnP^Oc(SG*1eV%PtmTByIJd%| z<E@`%L38$tyQd7WMzUrW}o5+|91HkiQoBc#S?HUMBKg9Z4rAo2VXnrvb^&fU+G{||zP6;<|J?2%lb?84QqH-(yn!&df>Ig!7S~i5t zn!GF<%M}gBtXaU*v)4y!D@{vaUYQsqPuKccyv%6~;8~P0l2nKCB46spl9&-PUSzC&wu5;JH;RQAtm{D;CW0m7!j~$>yC)(5NiNs4@<@acRqn{Q4~Y z2R$!wsVoRZZ1jLr;Y2)JA6prq$6jLb4peg;bEzchW#Q^ERDIY=#=4xLrGShAQC3WT zzfOrxyq{!}gTISFG9#AacWiKBPK%2u*bq{p;$AmmV?goe2$~w@d03R9Bce0ZDzxwZ zWE8|T>w9}|s&RW&`FAw9K^E{AY0;_Z%zs4KpJ$3az9+QYR2ueV;4A+GHLFh4u~J%^ z$~pa!`=SHmD0a;J^_HB-qbS(*XI4F_V!5TxK8RD(xPMXCS zqxLye(TdJUH6V?X)}@WhY6+7cG4wLJk2leB!uN2;na&!{pJh9&+r9<>h_xE@F>xP& ze!XNf#gKw`rWSa@7hP4)f;tCo+{b-e1r{cubfV58m~i5y(T67=tpa_yPq<;WSn0PSPEu z^D^zZ$hT9hNos2><9v3_^{H0~QKd`HrJ&=yVAMxAPnS9;L>|_Tg5L*W>bufmdefI$ z9x%vwc*R+fOMN|S4ADQOEsKe7P8iR1BN?eLZHO7Uu^(KzY?OYc@nk3VYK*vzhq}F%QuC>uk)+J^ie{S@ zg&!yY3-SJ$`Fy>8eMfK?pq(O`Rtp46b7kiqg3qDzlA(SV{UE84pjKt*ho zy-Bt-(KF^~9Bz{%D%R#=qBKP$jthEz)6xf@<_-6t(s*#Ld&$&IPH8>9>*|OP_e|C_;v=8I!qU&@O!O^P=mn_w6^mObE{xtGwG4N!&f`gEFkS6=~M3utqx4DN1yOVE^wQq#4S?1=J^m4ze+5^?8#2O^r` z1T*g&G7<2KZsMZ>;H2FtsP21ZL-4paAx=l7)uZ7Eo}cgqfZk=bA>OT|OT%x{Ce*^3 zOj9_!yT%r)a}{`|u2-gIhD#lDB{$}T;>p+#;zaDD?uK>$)VS;FzLaOL@3+hKSu@^Q zXY>!Wpwptr3h|>c=)B>!-bF5dh3+%$%lxO!N77q`w!{EBShiM} zc<1r8*1P~qe%!YFk@+tr&0a?d;x%t^M(b+*d&S959H?7mFFMn(=-( zPe5X`96zYT?Yz)|twG{ALHukRws14qy1I%~sW(&$YFSxmN+(IHdUuI#8wVo+IeF1A z;uCbPI(Y%8AG4Itj)a%kH{n$Uf<`CGf?tmhNg)k_tQT^@6`?Caw|mAo7?nk-ZIES` zBOO|0#td->N$rU;>H`$aEUcFRKS=i`=-$0+ktKT1AU`Q=MvJ@}11d_lp$F+bX(Q&c zsL-guurytdIUiATmEitz@40n_br}qIkR-VD=BSMrF@_TkJyP6vh$ZE->NIR27Psmu z$B6?)_YRwP;c2p}@&e(D2u}-Y70{A(ng%wTmzgdCe;@n8v)Tps95MsR;m9UdsQPTQ zJz2OAhXCh7lkkjO@ZYC+4IWl^Ui;-;v*nXkQSplo1Z#coq3T^QrC<_5Iw}sdmx%Dg z2}Wa410>n|nmuQ!*wXp7358Lk`wfQ^-#}=$_8A&e;OpLfw90%)va}$aoG__7NPz~< zBT3aV5!6X7rw%Tq0a*!A3eY4~I7?x9?xP=2*Lt%fat&3)@BQxZ>hM74I$7rcWg+$V z=u-f=$A!y|tckBdWWMoiI6*9=EIp4}*Id^A+A8DT1tWz)%MIrT1Fv#1VRPu885<{) zwDy!KI}8U?syLhdAWwnt?oA&aKX~|AJTFX0rmAcsvv2HY$m3}?SXO2qZ%uUkk*Rk9 zD~9Cguv=MmKxRoGK>K(JS71etHV=Cg=bDH*pxavgZySYElK z5t_~Q{(?qZ?ZfwABjA7b^|7;feNO$RLh;n(&(Pe9`TeQmX3Pm-U@=lir|4hJ$i|@} zXkmwDS-hl0u>WFh7v~*mXT8LHL)F|;f}|{gR?NPcF2{zGE6nN3pSYa7Tf}G3-Fq?i zhqQvP=4lIgQ=O9e+O0p^&o(|~EsHuZ2Hjjc379JT5X`h>EnpZ+G(<8%fMg=Nm^Um4 zJe*W7*GAhW_vKd-2KtJJZJ9~^x})Qn*EF`Jq>Rcs^oV(DDTHv4acuhmXlfr`F*|5nYR1LBK z+jOma0NID>lLaL2>w?5?upK?Hz9gZ~bOk~3^P7*T+0k5T+P_|bExnJ5AHCeCYsDQq zfTRYbW&D)?I);5+-$RS(o6HL^zy0CP+YM4d_gKZKoAa3;~auVZs!+fF97C$_DLZQHgn zv2AB!b7I>zzVBr3s&n?f_*b32>VEH5ch%~8*Lv3PLH8~Tk55r`qirH{Tj7Q;(DuQ; zZg=PPJLmLdvl2v`7&mm}hc!$hv*`RGG%nIwPNWR3AFi2wqT(lkp0e$er$eUaEFNNt9hWO4Z52J65 z=_ZNZ%z?t(hfU^}@Sz!f#<4+4<7%`#hyq&dqF&}ZP1W1i9wuo%dF1GreDZz8A*%< zsw}Y-iDP@9N0((|u%})N?}g#8ZdI0%u$IoL_45Q2PZI4VN!~230ZBuhu0}j`C15X} zc{ptGuU)xO2KANWG&(z*=3Fk%MJK~C8WuMS_VmP*NoLx?IlJ6}(sqq%fxX;OJ%Sax z=PO5N9pZ?8kjvG$Nm}$ECDNKklE_jOJ*M69uyCCt?g3SiT7 zYI0RKFvhkU{RGfn(%R~6xne5!9e3+RsP%To)yo83tDZh z6GjkjkLHaIBO5wdO*sImGY}$ohQ!Z1!}?N0hww0dbI?Y~*gHFxAsc#jteQ>|{`&2j zfMA3-SdHOcQ+>P@zJZ z!sO9=nW4mlLL9EH*mMA>Q++H_d3m^U-AY&;u2oPzWu>TMc}_aSp?&_X%NuFpO zWH>yI%{{zkf*73)JW5rC+5WchdvvjJxIOns^Mb9*z0j3o%+^|Zg9sS=E0tfZR z85|uH)Ka_`8KK2)H#2;mm9=_EIYgfKft-<}=goB5iwu1TV#FDJ0<; z!lYln&iU_jU<5tu=k=eB#gi0%ZI#qSaGF{<8-;C+j|idkWOwKlHI!~H6RV!`o7r~Z zehL~@!1DeAUQ>5vLe8A>Lu}N(T=&>Xt{ z_5xE2r2bJ4QztClwA^W5cxSEB!eNx?Ibn-Lc+&H?_Wh_6S&rV$0+ou1W`_5}{nHvt z-?=q!|CE%68#h?tBMdQbLl;lh7U730!O1MwsNo|6guDn1)m`c2|417CkHPJ9|$HcR>arG zjKTCPvH|m#+GIA4hBFG`eEPqfV6BvBtb305D91~GDDGj3*srMWEz)t0r7Xxs&VyoU znzUajRNGW-!&I0(;7C>cFtMDb>w(NO=u*-0ixvU<;0>rXmU+CK0_oAjG0_|Hi z*hjski#J+N*Y0~il^@jw0UyjegVe1aUXty&gJ6M9AiIOc{R$~+a3nRQ@#+uipMaVC z5l(bGXHR0;xSyv!32xd|c;2yZWNzNqP->?jE|{A<^+IpmXD%{yN#Ji)*$4f5xS`#L z?mbV9WT>}yPNQij^ zMv}YSwM3a5Q2qNpv*4zSWAJCr#Ks7IdxC$Svlp|X?1~-n>&M=gZ?h5SPe^yg*Se$Y z_K=Jw5qY7t;(0-*CA|6a3wC~EQQXJ8C%7uO$@Z6kp2~$6A}5W%oFdzyxS@F@>MAvZ zwKV^#tuHVRwa8O_@E?<%Z@)O|)F`x)m~GVx5!8by9d&B5kByR~mS;`2+GsSYYcr9l zvl%u6DH2E}A^IvGE<%3Dd!~u$_Ywva+>+2;?|+Qmh`p^R5$G&tf>5T6k>H`jYI0;` zguZg14<6<^OBZmk7xz<@K(XG07)_7$A2{m77RBBOYOVFxM`K=MG5(oh?Jo8v;@czs zB8C5%Qcnw4W<5F$1J}B2N_dt&x5!vcG|?G(N9noD2Irv5CvBIY)~3u^q1=cRhI zIeh5a?t5*V78cPh{MNSXu5v+_stE2*sFygj($pn})irQ2bh}WyD=(De2{GVMe+0XL zAz@5VTS{Y2Ke`&BVXlWUg(5*#YAxan(gU7|w>)VB5i3$;X0nQ zW3P3nMv6OZSFQh0SNTEz&9mR}kR8;t(A#Cs6((jqG7i2V`C9j73Lk^ZT0Q5fww@}G zHm%sa>l(^K|NJ)D#=Z?BdCUcs-4A||H7_1iH}g~c`n0|olQCHC2|k2FP3_JA^%C^s zZ4+Ss>l$hvDyV>m)3l~bf?`(@QZtIHeY&hFf(>oxu?Hfj_A-A^+SH$t3-il&yt4gH zzq}MQCS+st5ueJ{v2?_5m%)%hCM&WKkoLC{X*XmLgHqy39sjAb%IF;YrmBIrfmm-5dI6in5eUB@Ff7Sx7A}&tAfHc;#25I7hsW za?t^D{;Q0GST`t=-0{%hMeDwH?YlMa=lk9EaHT5)MAc7j# z_LbEJ#*04n(9A!&EZMq;mN19~xs~c!oT*%$!IF=zU}CKqnyun;)tvXr*CsYu{ElE4 zZqXNm9MRj^Lf^M*bdqK}%o5F_5PrGGbtAp;V&cffBAv`?rl=PB`PZ3vm5%R^Bx5L+ zl%{Jc$DojLR!G?}Hk^YJc7u6OC8k6iPANUT zkaWscV(uFYS;o4mJlPrpI)Z`qA&2abAesyfnS;Fv%e})9EklczO-c;{(eGpg{gzQQ z6fL8K{Pa3(DJWZ~eAnR-tN9*I9gidlE3AX_#_DThO#iSJWK^W;J=uS+%_riU<~02* zy{OE~vUj4J3QL3FD*4dr11fG z?mTjM?ZA-s>k128UcVK~m+OWwdDr$p>hTwa{QYEXCLx5G_++Y9aDSR;-@uJhiahR& zlp1#Wf>wnOdf29{=^JK>#qhx~Gm?W55(||%za5VCdANR~(bF0St$!H0M7sM5D=%Y1 zB?Z1ttrNdqoSBKwYNl}^_)W%LtFg;Kuwopbpp(UaUNfWRT@apmxLP-Pm0I-MQH3!1 znF1^{n?J6+sSN6xZuGHY^_DLq95qch*C*xSFu@Q{SJ|G3Y9tt2^8&4lO!al%IqVHV zOppIjC-)(Ff*=+@?J$UTc6`WjDJ1!IQ#~_+#401018v0ecxlx0DW*DL+>xMZD#Fnv z;1UlOayc1q;`_=O$zIlav&?S_sk>80aOnIwbPQLY^#!_kxJ{Y8iCi`LS2VrN3hz4* zyOB&~IKpg$Lu^ZiWJV4)f1==`>?`4>0FLK{{1;ZhlE7SpDDkTMc05T(*W_KDNPj08 z87mS5rO`6DOkk^HAOY40gN&MBllSVY(0R`vfe_s=qA!Amw{8KdS>#YwLMrl06@nzP zPOV_FFa+b%oYvxq9&U^(F|0@SWiO60koDZoqxTWQ?>T4Y;+p&uBd7r+qKRJWq4=Q9 zu&b9c?vQ;63o$KMN~$UMfg{H|t6W^{>1UT-zn&G+^1}_JNy=0~ND+@Eg8B(RxollzNkSDd7wXoNz#~DnkK{VYY>w3)k9NYdhw37$?_sE^ z8`U`XHIvd?ao+|0RVkWSU!82Bp7_vYVojBzZ7B7l*?W+Z_!`j9?~1f&4}KM{3~p=v z>s)5R@7+k1!K#=^(`0}v4rC^*fXPyRPF1E-28HkA{n5&Ak74a{7*|5FQl4r2XL(Uf zxL^vqs6^rEkFE+`K@yqv)9ATP>>zKY^3l+*!lrl|QWAco%^du@V6O(>TWmx&-_LvW zIKeU-V?i}7`MY!N3n{w7*{h>n491q&=ob zE5Z{^!Kc^~hQFZwbCg&8!F-y0?wJP_6rIH8OW0oBW<66S7`)o_+RtyE6K8^lCoY!6 zi|OS|>{RumC<{1#mf8<6lXsu91t)4^Q%pU=wNn0SE?ByM_*Y)wgHT!G$vTBxWtT>| zcb045d7&F3=IhDjUTTdZy|*YT$`qPChu+%*bNiKUCHR}7imc^zTl6&Mqvxapfaq*> zLN?^k_IQA1>GB)f!;{euRa%ye)Pv7VhSSm6{X*0m>FX8~iBzE!RYpm{X^e$sV}Cmb zCL+UcppSAsYCM&3oS*lM4$5toDS0AXl*#_w_MLVxWV*s|o+dRo=Hno5HcQDI@pPX( z1V-wotDFnhM64IH!f~#4gD1e8Wq(ggojaBfsFHXv>)M&*A}@wuk~MgB;{}xwMx(s#7CdS42T@Lg}0r) zQw=x-wW>UNnPATmsZ{qMH~NuYS$x>$Z~-6OoFwRO2;nj9%))@dtt74@C4ai;9?9Zn7x5oj1MFLZ0>HWZktpJn{bjfpF3xK9&D?%%f5rt)>7k)TWfn*)rJ z4>9j`^zEx-HRzJzFFttpAd({=fTYma1&wnX(F%UzSAvQyjQ@;Dm(r%BzcV+>p^_6| z!6)GJY5$g_K%!Tj&Y$Np zoqaM@M|#iYKnw->`Ps=&v^~YQiW)RP4YS2Hfe2hZuD(!tXW=6y-rk3ZYHInGiD~Wn zi?NYw(kCzLLJ_l?aDq2=H@21>08nz3)(Q`x=Bxxzm} z3eE(GarZ?A7vXze1|mtQB(VI%MUkZCvyc7WEhCPaLPaE8Zz#`tE?b>dt>{bk=1!loDsK z74Z8v?!N2vLM)?08UiQ?dV3ishI%C`s>Kqa&WL^71rK2pZ}O-Q%>`hnfmXC6J9WR= zaOs7M2Qa+H8!L(^_l5EsROu{xW@Kn(b#Yz$^XzF!)%8aA@l$*FLY3yH`hM64#MY{{ zJ4x^Ez+qd(q17~i$J6pLU^^hxO5RDejW|p#DDhM7i-b|nz$wpWvB@*iV1S}@n0n^d##iW?ToS|G|cP{vbA-P;) z8P@>gR}5Yd|17Q2hp*?$9v^NJrW92ug{IDi=4r_ty8n6FMh^BebfNU+CFPZ;MZ`ykItsIL6piR` zTH0s?4ew*}yozGRY^C8SJViu02=m6b@1z!_Q`RhL46KOVv*epo*t zB&4-^X3GJK>$CE@_LU%DsKi2|C7vMEd0FR9Vn<6cEM(J#wnpz8UTclm@EZ z6JYfni}nBFtp2x*h>M;3=YPjn5yLS_SlYOlIT15S*ciE(iJ6($o0`E12*5eJIGGvQ z!g;L6wtUNot}r=d$+rFwBY=S^gM%qA&}RYAdO8S z-um^c=r;B}4{P=f*wSl1tv$=P5@$Wy^YT^SWN~pfu|8niFYSOGr4fKkjg+u5w}J%; z68Q2KAS5i}=H?3n2M3Up9kYXxASQ9hcr}2!hhc^ZO`{1=wBSYLLbx46ghOdZMnOTv z@*qZn0D}k=Y5-#YMcoI1OyC_tDj0zFfCvvv47t2_z+!?J8bA$2ddSxRDPzDA5|X_H zowaulsAj_kZGapA!6i;1Tg4%m$Ao}99k3-aOj+?)a**aJRAk)${3IkK^dUAUC&J$& z9v%k24Jg0|?KC9E-a~2y|D?q(fOUcbR>Z_75ER_N2m=x?2CkF{i6O89Foj534Y7Y* z?LjqxlYyM>g7B-k2Bg7bKaXmD#e*X6=5K>Qyg~pT6311V#pqmDByykMl6p&YegZzR2EaNL?0NW1| zxhEl+GoZK!77Dv-q5h^qc6WmsRQ&bV;EhHI#Zbp(qvsWvQ;mjj4f+6pUKKTTd+v*> zcXr<63=r1c>aTp$_05Ucj1HdogNakow@&LJ$r^XqcGWECL3o4dB4( zprjBV=x?FNOIVPAK0jcuR>9~b5>l|2UN%s`z)uc?z>FR8S`Y(Rm7E;x4c6@$3fdj? z0txz8IZ*(pPJ$0`lq{?cm~7f^@<-XTr`Lf48&M8 zN(3R9u#r(f8;BR`RexR|6?XqDba2reBZ!M@FNil+(CtcK6b$&QnSUgp02;*a&6*r; zSEF6R7{qVbe;%ATz~BrQ7UVUxF7f;J2zLwmwo0GOg|Ee$9Bfwuh!t7L-BO2|CH{i@ zN9(aR5hcI?Xh0q|gX?U+4^Nuu*idD!Mt~e>VRk zypNct`M>~05BZQOLVoy+DIyN(3%*e2)CUoAE>iczm1r8m*}3(tMH|V#B)XUObq^>) z@)Po1<~|*Fi!$Asz4H&_X-N=JtpJ3_WXJ%80NPWJNjp-^fDQPg0A5H$c&twvUC6nx zmS9e*h;P@wVxG`$WlORN2=F4d-HYg36g#AN9%yaYl60cimPd4@WFD`p*ZB6mlR1`x|i8W9M)>A-_T$n~I6!#QKpFzh?)&LAda z@_hU93BF^YSzB>EITSi5GW^vJOl9F+8b8mI@oD6F)xL9#?VE-U*u>s$ec&suDcdWT zH*KtZiGH65b?H=X95_<5O^A;kboR04wf>>^Y zi$ty9PJETGgo-q{zk2J4{rMIghT>?pC_?oX%c=V^5_@WjPv zWv^9hK3BBC{X!LE6Khp*fsnCEEU}NqnRf0-$PN5jx&z38R;HnuG)1NpuK~@g2<@ZG zNgsl`jcT`~4sM^NqIr??STAqJoMP{rZbRb)Zw(K4S5+?sVr9OY#=Sfo1{hxK;n^mbVW0{~LVPL&40~Tjh z%ArKoXjJ+1VydyGc(z zGK{x>y;S5bFBzJUM07~M7T4iKH`IY+1GyIb(5iC;W*>d3N`2!zdy3(OP1t~%GY5wU|8XNon7 zWU+P19$Odk%tCTk%Vg&~4sEMM2Gw{WsEH$_enqvKYG+U2=3P~QMSbAqL>5JlLC?14 zRk&N?u}RZY^w#u`@fI461uWSHrl5AHC8zPN>cqd<{o5ZhJEfz9Sl(w|0g>AwIumfr zB~bgGjnwGN;URD@&92(|aL+uZVg$P#)^Gm#6f6u!e5+He2ZeI;RHBC%=Mrg@^<^7Q zgR}j9YOK$+%R7%WGew^GcE?~6Z6k^&JRL8KV|A66-|PG?$M(BN{MGqq$d=Ozcmf+M z6o-t()X(>tSgof4BM>J&iI=mM|CIdpFcOyB#f#<;zm$FBGeu;1&BlbP5m-76)X+}? zF*Y(ELW+)#@3%Mke=M%jJr!r{5x(6tVb}^V6(WNap-vhf6>|2vT_+;qPo~oP$}Ilk z$=a*6%9F8U1F)LkTbU`F|M_u_ax0Y2(5s5$pME-6-M*u+3=!G$`cLbw0_yOvZBjmS z(VZVUI+qZ4;gMTCj}bi&{QkZ%WOQbafgXF5D}5Gj7AEY(y?ja(W2@%p+FNy1wz$2S zZS6ERCa+g8+)leRwZ@!Bm3-{e``96m1`KLi+!a9 zZ%R)4GqMhau6O^WCbyA2;OE4E%LW+ldg%14En*j4s54KD)RUAi6(Mo5g=zADm- zb$Fu~@7PS_wY&;5-X%60q${#mbsSN`XT1~)mB5l^U-66jxI5I#dOf2Hs~Z(HokXZA zRUA0MgTKs$iRZ4WuSV5c|E&BQiLF^a*4T!pc}=r^@yhAD{*LambNSnTf;A%)v&(+MmC=;;X%5AUWI>43eoSGSs+J^6eVf$Ffi<@XSBJZZ9 z%vU7vc2ylhQ$u(@ zZP_mej_dr?Cw|i6I5NYBMIm8g(k=a3@*G;V7hjN)yG_+wOWSTIL1uBK=?(`^1@bx; z?hU)gXfn0EtUL>qlv+Ar{ff|PNTxxl54Yj#n1Ly{hF}|2Cf{tIAa=LE=Ldp$3JA%zEI+ZvwJk zMr@l5CZa@kcUxCgV)IIbl1R2!48+}JlHR7g-YY-=-u)LQGL$LG6jWc`sSeu!z;vM1 z6<=D&naMx|Z&1y8r^-By7bN`>dsIYB={7e1Sg9w@A#Z(B7oUCeXXs6p3suLgXo}T_ z0jm#<(0(s1b&Df=;-8#aqb;onY56Z0$LYTa2z}i^q)@iAzV#0K{t{b`{7QhzZ$$R$ zG0S_U(-P^Cm9TEqZ@D&P*rP7zdB@X}=pT2Ucyf^9L1)%CcbvscTvn-2k1~;}5G(7k zV(hgv2b9=rLA@d}PmBuJp8DG^#?aR2C-zsK^?*W7{eU+vGID=x_gC)-2+jr*zx7h? z2y3ZvFI%}5uBNtkP2_g1-whrLdf+Dd3q9WKt{XmbFP67jw#oL>gguWY)oxa%nSBo& z`Y<;hjdGXgK29X7q7v_+ZP_e_A`~a;QTa^SsD^q)- zvFXTK;&EG`L$~O@nUL#my9@U3LG(`VD$z_?POKXYCcA&( zEg3E{rML`X;Z%Qi{MRq$#g=kKM&A|jWHhBo(rM^}d}G}y#2<6*#bY)-hQ`n383CvBF&Y4j}THGHZ<{H+$*IrDiH)^fI_;)E-J)J&#D<);i>$W-f=?!0vut zae-k-wL()M`Y?vVtyYzV1i zbm1E4Xh4GLaPUw`Hqgxqx=m!I7hV<{>Av|C(2qFoewhR1@wDLk8RmbFk8s`Tz~9zU&o>WXNdrDNJhe27pmjxcH!MJg8= zXpdFxgc8)7wzmAM`0*<9S!-ei~#A!Q?h(YXNH)Eev>X`UB7o*c0>YD0uzS4DC{R zM-@!A(P8sH+a=1KlKkTsv@=C?Poj|qk~B!@H+K@fuMxm)PDS#zn%!2)Y95&j5hsJ_ zn+%FrY{9nLbSfLk8pd*=8n9(*_<;Uo8#UIi75z6(c~>K7#G{Wo{@8SfC!Xqf%tD(c zPR*3m9|*)A<}2gAt3zLKB`VS?w)gB;gz5T;DJ;DmwTo+W)BXGPqKoLE=1fME4Cv+> z_g+->*guesd0KipzFce4EJW=M`^@Tzn`I2*C2h=r4vcR_)Mym3o5p5xm&&RTseNmq zt;x~mHsa(A9b+?1glMD~)uwtcDqB}k@O(J?3n}Xk>qpupwT@&?n4|Ha46x(qFrd%E!EP-$H+Px56I1;B_U)}a; zQ6{TZrNBQJ&}YLH>cVX*R^3o(H;PR=+fw5YB4z{mpFKS`WvauV1+Oi`|K3!serIOTV4)WNZ^)w)mZaoA(LpZ(-=C zOW-JBTVHiIj=cbaDaq!#mCV@_U7UaUiKKJ+v|oyAc{yZ|<+N6VEnHa`mhG)&KtJ{qezaWTi4 zhE+Q=HJt2AFk*E@9xj{x8}2czJ=jV0BBd>J*IdR3Dyu`vB;8 zn)D+q3}&-cj(2u3Gm4$&O#~aP7Gs6_PO-dVq(pfSEV(v6%1)975QBm@!Y@Z1lXYbC zicLtA`K#qxyR5bwKu3Xd=C5yu)5$}yNp^5dkv-*@rvjJa{^l4z~TKjhdUk?qLP{W?vrTMCDlcr?Lp5?^|CQ~E9FXu0{kiNkSACU}) z13TXrOF>0$d(!3@Pniq`R7&qPs-?i-4)cknzy19Sh`xaOujxP!wQI%rj%etbTJ_nL znT8dEUK6wV)IQUjrUzx>m&Hihp0(!hSx!4xs=WF%8!}G7OW2iXL7>B;8JDtrVSe9g zAYgzK$M|WE)eOaT5OFYwL~icYObaBiuQA*eD1j;tG=w)r z^jiAqLS)-+mxjQGYBL7pOISG|OiP=bt%p!xX5%7fz=$3Nxm*mpqvkuwc7`_dZ7uHc}=e^jH<6^to7 zaKzdCBwo>xJ$VJ~nf^u8j(ZweIOHZKCkqRfXkhVR?kNrN$Fu74?h2&ytZd-<32ka! z>T+!RrIt%zugp5@7(eKdN4qn3c=;8eHk!Z4=ZMP^;?^C{cxnfM#5xqsfJ1tAbeC0P zHePhXFRjJW$;-ZaUjM#g@pq#P_Z?9(J6~ywksQaShB^8vI{pv7G0*xo(&Oth;LHIO zN^PQyo3&&S>j6;NMTg;qI1_na1#kdE-d{YndL77}6K6EEFO7t6z8(>~%2WulpdF z4NdKK*kr_mCuQf*5yyKbTiLa-mfWtnkgkF|t{FE5R?qd(nC*PKI-J3THJ4M zm`lYT3k}LJC1LLJ&4yA-vTp^2mz7V-U{xeCDda183(B+E5G{uZ4V~GoC6RdK47csv zieVto#FNq=tgEDv17B=?A8=4C@^BiBJG;?F%D+F~X^byK3f5d6_yV#QhcOCV-Zixr z0Aj=hp*IjFC@nsWoJ`t=T|%ht)Buq_2hrFi@>BIwcgqgs=ncX6?u($L`0ktXu{*ne zlA@~nI-6CHdF;8|gJ=KO;|IQO4%hZ1pApCKYHU zOH|KG9msb+M$T3Pk|d}ge8`2hDi1VvMlG7?ucd!*n{I^7?SY1J56zk1I=sn{TjJs( zGy1OAC#3@Prr6QNBawH;=OKrzQps`ah7qsYrw)YsCOxBAkn92nadWwHS^7}yjS^ND zN^@g{#I7Th^6L_rc}>c8Hf$vbenJg;;zO#5#-7buK1B`)W{p}&{_J^5126llUajTb z)QS&%1%ZfqafTvQSZ8Ne&l;lPr!hH-(JRuD7%mTr9!ei$h4MPUMuk+Y?wjXT6?o~R zkAb?H*8)%&bnl1zt?jRkg*DJa4WSl}VQd0o-E`=jrgs;@zJd;-DqG=fI_3 z2yrnpT|6gaixS*l8e78y#ToXv*xa2nBHYE}-1$0~9xHEi@6_0F?;v%o6q+Y(}^uhF-MBc=*qgBQ~mkZTOJ?M z271U43bmD;dY@B~e_S{kO&C0$d1-w7Q>UzBhgq?$D9)P0|4apZ00vFAJ-(Gz@S%L6LD z0f?r=1bga}^WH7OE>5ma#kJ9Y1D{`uYLgS_rd6{CO>m0ESyLdD0m*HDecJnpVD!I*E76aRS}MI zSE=5x2{2GWM@%vLsSDy)H^2YIcM^O$%-rE|hHqaWw>mmn%;gqMY-F5_75$78+DYc~ zhw#usMZw^o`u>UgA}l8Oxr|PGQ8Bh>APOOnIx>G0MVJIB+J~XC$@k|a8ti|`%tfAXSU@jw6|^&qI-i0%EZS^ z+*@(g#p1N_m}Jrc9dRvMQA3V>QP%JPTNvko7P{c5xr(2SGGUvwdx|*nNeAXB8cezt z<`jgA6-Dnuvq6E;1|tzyIb+YgiAz4Zp{)~TQEM#7{CxC>oSEXRFNIEn<}akoq?MnEJhRK zYS}c-Ywlv2Y7do=SUF@BGwn28j>TRqK6L=I;+uRhbs~lIj9Ii5$9nFRc-8>A4JzfS`QDS8d*Xb)HEBP!h@*9XGx>+WtjZOWU&ZD~ zmAI>crrtVqG1+JqnuclCjNrNkbCW+AZ)6R~q4I_C__`~W5bSd@G9d%1rK9_Oq9L~6 zBGfhd6=D6zFB`Y3b)`8}R}g;i{ba;#-RDs&KI)~o5jeU4A6!`v(3!}&k%vxr z^+9&E)heX$_pR$1)RJvsGeB|Uv)8aUwm~HHsDDDnSxduvySkePmLZ#hr#zu^Xm4vi zeYMZ0$hEL3KZPjBB*#N=HUF9)5~M(Rbs*uvL!qw98ywCn=}0X}X|taeApg zi)Sl=s-|h#7Qwd(>a}E%=e)MXr`BaZ(HkbF=w=RoEhmD;E9uUhHM|ya{8(K6;NDDE zK%`#}f6Vw)n2B5{r}Y$^hzgfVdtemoxlGlWtaC%a%FxTTug<^Uhh3ZCZAE&6@ujg` zG5~<*12cb@qTU@)<`^#QyTr&x^@N1k+sX)sP`(xr3-*o;@`jsC)gG*Bx49M%{^n3Y zr}id|!x1PkatGAc!3^>n1-zMS%_)G|L0G*lNhIeci5p7a-K8w(8cvVJ56kWJWpyQZ zXG@p%f&V0T`)+DSc(fbTLn%$jm6BK2MNZc?#@4GphWWMB)Cf@~xXM*!P1OqwgHaFYxmZ~9bVIffMFndY0 zK;$9oTX&9$&M3F^h)cEbJcFijd+AjQEo>agbXlk_?SvbmsT)xJrusJjB6B0f)s5CN3{b`zUfJJT4+-5o3viIt6IgL+r z9QyQ$xHS6i5Ji=Cf&mc;gid$9CjXBp2={+NL4I5wvmXhtiTP8!0R3E8y)Ug*}ye3Gd%&L zbK8+v#8!vDE#VSOAbxFZfaao7i(eA(<;IG1F#%V``Vvx|^{%0U!zeBMT4~CkXcrEo_iH zphDxIw91VjkkAENf+LMU>^X42A|41l*`)vA*XT!`P@0=RFJ5NG>IM(?ny2=9CioP+ zZ2$+Q~a0|a4{;ZcC2ZF2uXs>4GsmJ)!kO+A@%pA`bP_6 zyn6Aj@`6kWiG%nuOa~MYLD-v2 z+uyqo%=L{8pj@k3pgDY-AUi+;vH7ukLGlcshxA(J8n_2w56)@Sz=s0h)jiO@_uFI!Arh@= z9C<(%kl5-fc#F@YOJNzq7k@eS0AO`B{@l{Szh|ITiEfOLHLx&m}T3eJ5%e?QB^_!Cf5 zK?g{kGJPw{(E730h z;y|fh)eb`woSTkb%!h*;h$VVucH+(m@1A6=UpAqN@Up$XO zrmSAZ!-KDQ@|2s24B1U`g7gpp2qWp$#S^T>=0QPDhN1S=oM;wv*uaCG~ zYZ(|+fD4>PS_0V+On_9q&L6`k*5IA%{nY4(nlL@Fvi@A*Hv=$16?mtQ1CS*ZWk38q z8|nkBTwc*2(Eov+LU>hvo#FAG?6Asw2=*L9w17VDIsm*Qfgxb72L?UHpr}rO!51b7 zmk$klE}`R@f(t;Or%(s*1){z_Kp98^)+v>#OP><}zNN7Oqg#FVbH}epuxx3S ze6;3+N9q(Ffr!=?rsq3hhv3KQkM1H!j&3%sii>|I>B5EgpGH`J*YRgo){>n69HSb0 zkV2^qkmYkq5m1wBQ#jC zbOs*Dq=b%iOnMwLGa?K*G-GoTmdhZ=M`OP=^+|nOk5GJ=jMt=lTHLh`^wWA;tyQ&h zKkjI5TkaxAh?q-{E4o7!7K$A;dgvyM-5}H-GAywNmM@{A>_X(8h%%+eHF3z*&pxjw zVonCyvq0}>RXGN3N)2aFka4_Ip7CutZSJq?7M&HNVk!AFtR88!Phy3qR_7Y!eB(!B z(Olp}z)L>~qB@S_(#?fU(>gsdc?l_e{<`$_TDU3N9xc9ZaGDttcP~HVN^Ri=rKiE_ zvB?`Fg{M%EWW+#zn}VD>4VDB9yWeiE`c<+mUx20 zM~Yv%ygs9gqZC^)3>Z_=7&o`{ArMob{2;2QGL*xy?p%t(^8B4o#3?OkdP?A!Oj1_$ z%8FBx?w-1ag2R5nPBFQE&T$ywv1Wu)LHl9>h;x&t07e_XL>g?}dAh ziPGr7^|=I=3>Bs|1*}EvwidP{w5h?@aAv`$VV&0r z8Wu$C4#AbHSANw)WTlDi?>@?i9CMSDH4eueX}j z3_4c`I?%J^$!6ui(W1X6_PNVuqiPrlHh!L6U|N=6%&xHb6J=z=7T;mU%j4W;<{NY# z?~D>Ro|pv}AQ5@^6zyJ(D!Imw80B)bvpfpkmG}cKqa-&y&!qaF8?p{_N02eRn86-p z_neikk*RP~5~@?&(FJu6&UKVGYmU;g!96*Kl5zOMWmLomN0?K@5|8vz>hR@ywwAhp}^J6NU>GDwc2N8QC9gc9B+9EhZ)q zVaF&96tNwZ+&cAOP=(N^TOf1SKAzLryIGlxmy@o(^TAuWc-1mKyUO4QIEA z=PAN2M&Ai1r>0#dp9+4q)YQ2_fil>lVEVZInP!a)9b~=?Z^(+`E_5p_7EE=G@pdN# zcUoI?y4?Dkc$kGGs36L&6j>+ zqAdBQy*ygDM*U+C;5i%K_;FTKP3T{N$f5huZflQ&{#2FN7uj>EZD74e0G}p0!gMcO zAl$G_SPd2IJB(C?g(vP279Px!CuC`@GqLqtm5Ksa_7un~(LOAsJ8%ED&B&xgO34RO zffrM+vTpiYdo+Lp-Z_CXZ%-bTztyG@fmg2uLuSH6SN`7rAEYiw0dL2DA62*qI22N~ zZ&-BR(n(v;Bx!=U*9C?rSnsSeL+yyuBIM2ajw4uhc2@D`?vwBU7TtwLajY5%ECEpi zm?k0wcnr_Jth6Jey@5?N$<~yajUgVlumpvYZoM9ZUKVvzvkOUm>c$(ujnx|(RNxQT z;ZY&?`Y&OL?il>ORj-d_%awaondZi;-RAA z_ya4uqS={Tap)fA=_Jl;Cb%)n!7yyhn>+_2?dwKI8u8p=4N1{wvZawr$nX*j*i_|D zkeHmp&V5l{mMTE-I}cvzR>A82h^NE{E5TkTiAdYvea;BOu7|!U3oV_94y${YZ>pYB z0q>D(h;K{0)!A%uy9Cc^jA}U}1$o1Ab3u$H$yoZfn25?$;8|U>w=U+&Lb0G&7qZXO z9m&`pK5jJ~A>u{UyXp#s#Ce0~Rr8=B>zNuEmIMO>)cCGzegLn2Oqjn%PQPdojlEhC z8NyS(=ObPlPOV<*v%yGvMBGUQ9PGyQ0nKC%M%5^SIhG1{Cg2Ph_Px_H2m14vHv_I9 zh>Kz0xZnv9IlCR#e-G{OZ+!&=k!Rrq=-!Ig8lw}5nsF>iI95vIoJNp&{L152>7Tbc z+uNq^k8A&K(I673=(!92TO8%iXFWB6jUy;1UGA57VTu{v71SD8vI1++M`yblESH26 z?w=_w>ua<@p>?J$?5cjmCdjToFL(qlShTj%q+ktJBUzM!s$dZw2eEUFcP_wFIf99&5O4 z0Xi_h@)&XMSLRb_N(^cAojj@+|5o)`{%j!ihi1==I0n;Lm|X@JUo*5Z5}t9&2uezd zooxXLghS7fP{jwC_wY8)Yo_(v-5}YM0#RsqYuBcqML=A0=&gk1Q~+6`F%l>;#OQz3 zep`4J;rax+$eA{}&k_#SdW4~q171fb_&qom2w;DQ-e_OZ6h(echkUO`TBpbb!sHvp z_NK^@LB5Qn?4*Bn(RGuBAiN^N%CItZ@LL2&7l5$tY^CL7Jb+sY^8dAO3d8z#WXBdQ z@7mPidvmdPhRFR|v5;u`kcgo7N&VprGjQH_`UWHAaY%fqr7sK5)(m1eD0)vew}E)I z(L*f=Xf7ac)tI?KRTexlv{Mni>g9`-TRiwaHcYOEEt=-~{8{!DT4AizoNqX%<`KGQXbL5bf~_GGN#+2)D^N-Ma&Yit zzlrqEq8&UP@eA`IJ3cZ@JaTF(UHhp%)RaO@PIt910yo}znA2SG!h4}^O5=E&-NXVi zC6JK~4fkiZf^oOOQX^07yLr6$4&D$ls4rjSG0yhox&DisKVIZelC>nZ-W6GU`5B%n zSOZ|2afQ}gq+}w}fI>*<-*N~dPB~2kzdU0lIf>B#uqUg=9 zholqE-vVM{Fu$5QDml?Lq1MtrFSRu^!xf{uN2-Y$LLp!M&_5_q3neBM+cv-UaV4l0 zk&m-DN*8hb)RIE6g-o;M?PfvU=fA-e_-zh%P){PJH6vXSSWGPvBarxM2rp29gZMQS z$qGQEPozjg)7XPSHDt*lpW@9%ucot*h6V_*aJin(`MV?JjP%aT(kd!hn+YV zSAkEZW~81$ z3?E45qtmK;h|MlAG341*Rz&0g1CxRNqd&G%ob3Uir8-nvU^m2--l$QLnH)k-a(_E< zdgakYbw{Ibw1}m}H^(p$cObZb(2UI4eG>{GOJCP?KP|#7xm+%*Xxq<%f!6y3KzT=G z^wazU82v&dem{n8gH9XbsI4#aGStTL4rx6USQIrWKeMb^wV$qcNRJ9*PQgwop^QD@ z#_E(KUvk*dkGWwj&wdHBbkWRNOIdC~p#v3xO_r};1BB^&e)g!*03dQ7^_jPZlCiCY z@4Op$c(_X##*y;ljgQnDp&b(@l6m8s4J`zQ|AZ^FKu1yJyrgx zHaHhO`3d)9Cl8u47mf%f8C{9u5Hw9sRQK41*`Cd&Tj-j-8R+y3zPG&Xx1(9KRpdiv zZOqfU*HTMaHQI9g8e<9MjLUjij-xFqR?gIPgVt%$Ze9s?n_k16U{*3zqb2mY^*$9n zrp6xfJn!W9+Y*1cFG1*kQv12YQNNjmGpjF{7UZt2V zbT#f1h%H-Lo#Ozuasi=fDw?nJ0t%|wCIE zFR1{zkO|lJ#o{fC`)AeazwSv~hn4uA?Wmq$f>fy3kFyr4KBV2tVWQJ zWhFKysScFDdULabL(^4IYf1YEVtppAXWuLHdnqUoWs#qm=dg2!K>?ym*1M8?;3-pS zJ`Aj?4s;w$xx)xMFQW;d@ltCb|fLAvtO4_wAOY#W3OB6DDK~O0m>mkQJ-QK$o zn9DHJE^Gn%Fg5{xaruY1*dE%N(ofp`9d0e}FGgga`y>wI?qOq}f&*^e7bHt?^{Y5x zui0?iOdLCsgJevZ9JoE<(317)z`cMs2?Xg!fcTFb%gl3UlCyVxs?Y_4jEEZL7Qz4{JnZbaIFabAK|4>ww4`M#%jA6e7-AKIH?V^Qb$p zl0vT@gOy?e`#n8rr3~d)ZjfjRtd3L8vJ7t}2zquBHYX@uxBQyf6$d(pb${dF?W5K4 zYvaDf1ZmC&&kY-3Ry0xI}6+8qpM*JZ-fV@QwHoo^B3r^x}v7=zUKFuZN3!b;yZ^x2S&0)i+ZGZghE)$Sr6 z#{u)}1L)H~2n}W5@hI(U#dPc%9wkDNLRkYI`FPmWg(}p^fqK!INOJ2xMLOV9sAAr@ zN`CvB4pgvG%;B(ncdujoGFy4=d*AuqrfZW7@VdqcfoEY{%au0;&lxJ~_?#H}i=x52 zq-LqYjliJ1nsj%Jr-pxrFb6h7Z(qBG#!@_PlQX~mRG2a=>b(UbB}VhL9D4<9KdL7d zs_F(;t;scKfPb@KBGTsV0l4OSjiGgEh$RFXK@0XBRUjQVQBpPJcIy>~l-8j_0(o9N z*`4HH?aualr1wiWE3FwDsq#3mHW%=`Gok`u`DH%J-o13Pl z)A8cEu3-udQdmmUs}J`IaO*i+r>mEV=po&Oy#t=+@fTAOT1H<+92}LFyy@Yv z`#p1Ig?G8JdB-D;8?^0BOTu-6wp=?sVFp zvfihU-mGH%)Ajvo7Em;Tn=H-?v_xWsBV!y2hy{rbp$;t>>WQ{fj{-;9A@$#)2gn4i zgtZp7yh~j|C#(#l7WgVUqD$PJG*!`UVpwb9>!3Bv=Df8UaHp9ivV3X6x*`_w@)Ftj zTu6$7v$w4)3Y_h_7pU~hB|M+}pfUFC+%7MjMI`UkSSS%EH+(0pOBv#5;8;9Fa#bNo z+!ANz6>rdPBgJ%5O>&4Uh$7j-=2sm<6mifyhgtu z?L=`>YhhJeW~KaWZEzj6Y>Vx5&Rk6<-z+-B-5Ybpgz0B9TV|5D_|Hu+b2hIUatms} zuc4`stD8oFcVY!D|ISp`0VBuU>48no7#n*@uezl5&@(r z;$xc@mv31H)kbJtc!Ey=E&_f%P9e8KA!9&FxJae=I1>{tot=!$?=l!m7xc8|FEmeHY z;m*1WVv#9f|09%wD}UWppAem@pwW1M!sJXWCeK5RcM@zhTAj)>aZgK6Gm zo{`=ehggUgyU}vf`J7|b@+2Qe3gy&-Bf!pY4}!Tb!lW};!a0Pkv}%x8bGW$*W=tuU zJ-=pJUHjv~I9Cad2xKjlH9_rMb9D(}O}K98RlfAX;WYP9ydm4Z^qcp1xxjdevp$x4 z%~2pd6er9*vDzdSsuyE1Txt>B`U0cpuK26A$o5paso69=nYDQZhUHwVHSA4=wmxfc z5FzX}&Dm$}jnC;hF~q6OwWzAlq3}*vf)7+t6`dA)L=_7#S+?hS=QxC%k|#GH?YbJC z_aWX;Vk-Lz0U0tAhdz2Em-q5e=zL7nLY59k-?u@ZU|w?>|tk2STeXV=7x+N%Q`)sB-X=`1R}IO$r_svLpg+_R3G=vm;ejq^aZ zBuwDv^s|>Jd|6R4;^hs1iGK#9d+yX;K~@!LiV!NXw4aFgmDUDAqE$_eKu*?!rUL>t zSEECg2|mF!cji&cfp&X^OzmuUC9U*ld!|F$D4w~xz21f6X_?${F=cB?1|>uaDdoBw zYW~~njSNWGq*d<9egiE-<&zv*=(}HD+4;P2b0YV-?cV5+<8ZFHwgY0D$Q6IkYO%?q zgMFpPz4QWogLDwX$XgkD;PR(KDCzb*$CUG7jIgS1zsK-ZxS?Ps_h`Q77>h(A7Ky$0q zNbF+HI5AazoMCh-;s5q0Ov8~*}+;tWj z_)|@z7E*Q5;d-%7Zkv>Cnc&sv>i_{&n*EwZaALpHVuTQ#Ox8v-(SGHYO&L9`PO6B) zUmMmrEADleiX5CX?Au9U5VwY6xP{iL2i2wq7`K1OT)-l^ihsykSpuP%HnwqNKS;7O zDqZMUPdO0eg;7AmCos=o<@Ts>EQi;x_-)P?57^@&dc~~{BwluC_oWIvwvgDTupUP4 zWgqQ!?-lhhaWrN0`4dX-Cx7xHRv9`?V2`m%zXzMctc*E#gxI#xZ#TNdwuy_^hGvI? zR){SJXOh?!O9X;B4Q_gBG*E6y^}uL(>QOjrJ3vRQs&i`R%dAxtdg9KR?_l7*!N<*| zmAE^cs-7rHAvq1j_H5~JO`i8YiUFQI2hZh)lUwqGY=}+3`gyTi0qG{Q`g}sg^1Do| zi-O*4%u(Abd(&MUA9tAnKH8tER0wEj8M)ihbr z55`1N2HB~M)fjEgx)BM*c_9>_ zAXNIQRXu`Acmw6Lxe;w=r^pgnGP`YPa1aKs-hoBb7T0HDYtrtLAFL6k{7@qLu`grH zPOxCmk>Gf(?OikiovU0K>ysy+*ylsS&m&)jz65wS{719D_%Jn0)W-EnC96l&IO}ZZ zw77y{R#Z^bdnh=E@@Ihly=oQ;qD@j(<3w_vIfUKc)SQUy*;Ow;SM_R6?BCu6xNOG5Wi7&083Z63<%qBHhEqi=Xyt-Ti|H?F0v-YnC#1(ZE7VhlLYAL*+buH@L#6iJjkjrwk@_H z1Z%vl$)}RlTS36fTvaGG$DD-6eQS;py#XXm=qG1>SHaW_qVNn!j-B6_R@>I8GL(p6 zp!>En(o{1y`!sjw8ouHK6hs5~L8bUsXJ{xZLFkIxVhD@6e`;&UhN(0>w+Q1m{8UVT zP$v|L_sclYELG}hJD-s`=kFVOx8h4@rVU4kv>w^&T(7m&iz0X=*{vAqG$*^ z$c=$Z7hKb&e77h3Z&BQ|5CtaSOBlMH5Vf5_r`Sxo&30_lFNr0`5JLMOAY-;xjK=+$ zw{LjA@E@9DpSI9z2UeCSsoXpMfj}z+=~;~|tgDogX|+W$kM(E6F)AgR5`=1$Y<@ws zed4z?a+`j&nS9TU8DuJ0u0s--{X{-haYH2lOkCkRS3&rW?FS9HWGG7{At@_dp$QUY zq1VnZ+Dj4nEohznM6q73&xyAs>9>tGk=+v1JCq|B(Rg0yowK+T>zyeHff+4}pkXjP zx9bpvs%S=z(?i2hk)<+d9Yuvz-Dx(gkAW&@U7ESF>tfo>nNKaq)4E@E`y2LW!>D8O zvx|R{kurm%?|Qc)T1glfquP59uE!+Yy#rk3jc>n|wlFLpZWS3bt5>VR+idL%?!(Lx zg|I@YKGg%=6OST2o|fK^%sTEmL{{R8?GpC{eORkw7RlXPyU442PUuy zV%->`rh7u+0Wmxdi9Cl3pHG|cf1mRc8VK$pgK?v1J^vB<^$&`dKGaX1MCc%wl2mQmK7dH;vt zKE7gI81?sM6)+N@MYRvnmGvhP7#34XroJCK}(5mxeR zsM6`^dkW_o0HJ!vN30<6nOnkA?+e!VZgA6X{1Q59)gC<&g=b9ZhLF{O;7bXmkYJGuIZX$o zPZ-`e35y&t+JpfXl8^QH%vmq;zYBO%KH1s2R|s4#EdBVn!ydaWt4E?(uqIQFgr_y` zDd&|O5)$IxDGYswL+f@e2>zNb8U3YB10(1=>wWW^Lhl3I-{z-?WEhvt#!>TWJN{3$ z5W{;y;dO%c2JH?F+@9)e#yimh5*Vxk;NIqobe>LuyEY;GqwBCLye0c&+=a1%Q6k{A z0x-wlgT^S()%zk-Bde9O|1Q#AB*gTp_&RB?7YR~5W06OmoCzLj?yuqBvu;}^mqTG5 z(qWNEr~tqN)!mai#fK2M;?GAKKf7uPP?tB7t4>1F6(-Q4C7{bbsz+lX5$~&cxCu~n zDtKLFK~%;@wz$Fcc0JziBX(x@R5cT9JW&|H`3bhZKBCCvVlOe-5y&kyD@1XaE!H7!jvodgu)g>&Fyo6j+C@7 zaAPOmQe2IWf*`pSwP9H5123DuF|YT_Efv2vnNN}*`re9T=@)5UTuyh7p!(R;zyBV1 z8!B?2>xlTgZ)YR+pp;!l;j25#FeE*TnT1xIRId?noW-Yx7@*85lL2N>zLG&ddN-Tw zo!m{`8B*4B`QACV2R-FIrKg0eSBXH9v3^_cItIL{A5;Jm4wa8w2f7(-*b7{4x;gH@ zdiANxO2~vq99W7aM z0}TAH-8n+{qdw|k#LX@~Ec%7zf*gC?!WtcQS?2$Ycy@lFae-;^T@I6^-U8U?@M&|= z9%9~gHa4gpgO^+6x#bTORARIO$~g4qray$9phtZr&ss3 zIv8|?7_#gw7;OI8qKz4ZaOdtz%RQCRf^csVWlaq?B`j@5v2yTCBK`H`^^kw1IGPsC zzBG~+H3|Zri}w0K1=LGU^tXsyd%xrs`pHcE9$R2tAJGs{#!g_)z|TXmY9Cc2*krd>O%G)v99RUMWwkrI7Uhdyb(we zD6CSqmylgL7Nk^#xu>RlC>LrY#WB+biH@(-PonZZ@`JVgZvH+|1nNtJ$KLw5`*6ln zrY;(ii1org6|B4XqyqzW{I2S=|Gpkaj?TU7|GKOyPlb$EKWP~DUpC42t|ByuwckvN zSyN-K&oo#`5rts^--R^4P-5@Jy!4GIc|(XuFN`{$_jQTTRSOhMY5% zoV9GP9V)q7SyBYM!!FYbHIo2=FNA*%)w5*2)}Bsr{jBDaDdUbC$%FxCMbv=$Q7ZZ5 zeZkuzxX7sDdth&wI74x}Qm~OVQ^?t!J;&z@+ z4ml-kyYNu*;dH_JddfB_ilx{NA00X+(=jF4frvx#>8s&&37yY%0`#R~r4GMl8%{%P zyJ%bu%i-nb$j;Mhwqh@emf``n5uG(Ga;zG|ih*Fxs;}3Roypfd2oo8_A?;ue!P(n| zFi14W^-NC9a!J!xO!8vtFn#u#zw($*#cP=!P!w}MRVnI1AmWDQJ)0Pt=Zt*iWQeS3%j9c_Tz zxf*zGrw7PYSuF-V+D=o!8z^??zGyX*Ed)Z7uMB(8*LQ`Qq+=p!d^Oa=zyz^ir>RPh8-uHQdZjWMsVQm?fMtmo@v04MPtnlg3f zT@Fz>)tt}|i+{PIqzQLsTVK6-C(2CNBjyeqE%sXB+KhGkvi_>Smr3xE6MpPXspYx^MCf|4BP$klK{eJUE}lwN${s?3%;i>N3ZE!y}dp>2z3 zJADsBA0rV4j||QII2M)SakFZzeHJu(pWU;}s~(PoX`1Ye~_w76J|Xi%Aqw7Mpg(7|C*NVqS`ehXJriyN%^30QNye@~}4Q zAF_iDZ2;4v@gqZTiCzl4P(aWx)AXpPyVIP##Ykb|{7xDXxWA%=8<+w>f-Xti1TAK^ zJ*$cOzpWL!%+?Od=chA~%Ni0BfPD7i;9#CN!OY`L?}0*P(&7wDFLA3`nKIXMf;Y7< z7DAR3ut@t2X~N}5Y$2-&&suAxR&Hs+v29u=ay0r~y8+o-d&xAhl@K`!SK&$KxxI}A zWmU)?H4&(Xr?2c}UNa&fd`m|=Q;nW<-_--xcx8MYb8W@cM!Uf)ots9W=fE4ul>r4$ zJy*dJlP$>=NRvpDpVUT7PX8Vtl;!;k5}c}O6Gm(DlAhUVH>U0ts-KTl*5!&_uX+d4 zox-jRIIpXv>mt7FgwF1h`?=H9wBQMNWrsjO z8D7zAx4pgwikTO=l4WNIu#T7r=(afWqqk1_vpHu*&Ry^=oki@FX$L z)8I~SRT;Dy{o}Ko4Et@TSOxS}_YfTSjDFj*p|UBl>S(#{K4dzR$ZpsjqjYT8P9_9x zq{ot4c=H4HCZZWL(9E!%^1js~UV|e{P#XUE*ozzf<8Cn^MmYwWh>z5&Pv;!ZBG2R> zT3>G3TF$zduzE01KrSeRmO|d%-(bkEVT_SS4~kX{qXojiclUP}5zU)1#nA7TeP-%2 zs-&LUC9P&DEfD>%ZuOfqs93^f#o@{|m=|Y=bDZQo0&An+`5dmRDGNTkj(|Y=&K(2S zMf;y`)e=-J$(FX4Z_n}YQNSx31OXFPbw}()HLo@YJ?P${Cdd2WwkB?HdW@@WdQG$pg7BX8e3dcy=p&vBGDftiE(S;AWm1U3DULjm2|F8*_2BC=N0>@i) zbLm&Ro%lI^O&67FwB*oh@B7F7tJRKvs10!ml=YcbE#a-nv^;Y8=*Ra!$`Z z5ydsR%)z8sE`(8DD0P(>mDs99iJUe$u=p$S%<1~q^H-VmCQ;(m+VxPrd@1t6LNv6u0d-3ur zr%wKYFVqp>LaX91c}s~Az+eKKrtHt{yn$*fnr+E>d@;PId2%gR=0F`uFD)@D9ri+_ zmi$*oG6wg_oSJAI5!ao%iB~6lp_USrDNDj7Z-}kK){g42uyy^O?;skWJrE@jsQkxN z>@W`z(&~AJ1;kO2k)E^O4MV$*i>-!_hhh*(`X|Nr>D@vqAo0=fc>T6i-nF&oI1Msz=84A=7S_6tIb9J$hNvh7#1cz5l7OJvYY z)TQ@Hu0@66i^qp}wz4(SWbEkjG zv0CqTC`wmVmGSX_*Qf28)b67y?J$4*ZcPNNHYcAdi$uZfp^_?s!!e@Yleb_xpDIX7 zL!%ifyxuUM8?!XJwOoR59a7o+2i@f4OyGJDoz+V>BBQEvKA4&CZ%9H;lt|Edd^q;@ z#IysIJ5veey<|{Ss5!BE9q5(md&-34CLK-x44zrD;pjwD>AUtHlML@Q@yNBj;7>>lo6@w4UZwN5Y9zZ zrlXi;6|^UU0IHS!I<(%^DERK|;DL(4ibU9;;qEh8Y3_HvQ{kdsD)W`0@0C(%HAk-L zL7qxC3UH2|=FMm+VL31v{CS=Fq90dGc7HrhaWE8m(NY&@sj}>@T9;8teN6K(iaPrb zttCm-Q@jAyB+-&p>cS30k3D2`$5DS>koC%^PA${hQ?C~#OYaoWhho6t5-_Lb!z2#H zC=j8L+1$@&V^DcJ*Pm-M^c#<*nozjYW~-4|x?o#tQP}AbbZtZ{kk%@IKSwt8GVah8PM3_qnyfubIu*SwFYo0=41uoS`oyPK`_$aKY zF$ov1FU3ahH6S~{k|B6$BEzS_L~M7E|HQBI>_$>;+vdksUGsbYs*ut`&)l3~o|FAs z={WVltTZoK@hg(F&E5D?@1ftPev&;_rnzVnuFH|=`P_pN^8+|b(^oN+tI6jW*iLb@ z)v13>qI5FnPaQfW(^e{YSo2z~jk`86ZkWvJgbOKOQ@?rYx1OmEvcwC`dGqq2E03K^ zvg&qF(qHu1ybzi)f3(!0Z^#dek7P5Gb;z^A*)*coFx1?n4UiTw#M0b|Q}8LO-}v z2}L1m%eA>+*1tylv;apou{TS6T)s%8iy^J&i35imPm|FcjZ|5q5NkzYlIU2pn9v~` z*FTf>bn~Z)goq3-83)B(I-V=lh6L%rEzzXV3NOMJ5!rMCak0>3n;}+I6nwdfoDpYs zS3LRQc<+m7&gmG`H77>&@e47XJVBX@5|q^r_<%seCzUok8bU&9?1L?(_PyzDbHHYa z9mQX>H>lx+agH70*Z_u?>_X1mnRZqEaZP8lvP9-+W=xWxJ<#HU?X{eGbsPu7-lpA_qR_ZuMxyWRSBV5(WZd4_5rs1`UJli9T7%4|DJQV44tzO>7 zVLh5*e^_Z)O+3CW&i3ns0iE}eL%wvjYzPN?&Q8qO^F-JJ#=Yb@$NQn$7@U@=2C{;P zdQEkn9>T3NVS8gWwcr8chvurnAdY4Z+Z{=dLlEb*fo93z)GLo4y9e)Z-_)8}#C_Vx zI{`5N&AM=H?t2N4-~hLW?Cng&W~nO!p%m~Mn>&AtSxS-gP}AwP1J0~Br&g)6agWw7 z=wCuMSEJ=kkn>;Zg2kYQ0#HbT z%{@L4nalawS+Q@> zD!EqiDThVEJ@;+fJ)OHSuLx{`foI~SlEv)QeFmO^ij>`iw?=Mh02A;2j;kGPm+{c3 zZ?x94*}skSO00k$Ux-r}@VTO@_`SMZ=*0%a+5{OcIWQfIOj5$CvOVBQ6WWSSNb(Io z5GIYV5eiPoF2{wdK9J4qS`jIA}Up+^GWFY7Zx(m zKYwVUY7RJjYAV9`f&G)Odbx&pF-)Bo@-C3LT!J!f0Gk9!*;Ai(u@KAD4q8>#s?%-5 z$D0(Zedx8d(;raoTL{pW4yk#oT9pjVe5y>yG2yA+5uqle@SSRyhDzm{X`97%Htm}_EQk1qCwJYA z%@0dLn_t5-p&P+#uo9Snlc^pSnVs_~h7zm&S^;Je!N)a`v8=UM2jja@yhBTrHpu;W zA8iX0nGcWFyQ{kxl6;eMmrI>VI2H&l@Vl{Vnn!Z9tZJmxils^IpS%73g6uIs9|Ul% zTpcLBdT-PM?XWV@g#O2JY6V!C&a#~;uNP=4za~P|hXV8gJ5Ejqdtv@60_;5`tR>U2 z`i1;R0!Gj-{LwPL5M|rv1V$H=hSKtVp8FFTh~}5T&vcBRhek`pHPHFBLZN%*T( z#B&!?ENEB%9tWlBZP6q!Q4n_X+gB#%yVRenRS~70>eOilW@%l;NPZh({;Z0Nn6C-D z9ih77?&Rj2BndBk5`yYd_Go&ywdvi79%AG0|6r+i^;czCZ;9a{e+;N z5$XeXFaxiB-#ria*+a+NZmUFlw$o%KCu` zWpkJ;k&hL9hi6$5Hu^Bie?*_`En>U5ycj?7!@LG#=rQL$Z2#;qH<}K;ys}$=HYzdd zZYguQo~tIx>6hg|-x7bA*CsWZN@&I_Jk$7?DA2<=qW%nXAbDsJlo}ex!attKEK{Z!xW6%^7KaSsQuy4@OIA4+YjVrfJCp zk~F5tT2>u|ZW0!v>*uRJo*qs>(Jdd>G}<`0OfNCtx}xk7U#d+7^wP;_mWg;U?I8vu z6k;?7>*Y+ok)eUIC{SOfa-G%1qd5W1W;3(XTt&65_{cKb&_Ak_L6)NlWFx1q!^VAW zZ8H@;#iZ85$pe5xP~Rov%|;ao&7Oo*%Sg^SG7%hHd~}K_306<|OYXhQASmaco1AW) zuYQ@401oTA1R}#L50}aBx7kzBma7uAXxj8)t1mF{MLR<+ALP(0jO(X7gWOQL?<^rNG#lBRX!r?!yANnd(&FTd0a_G@Q%i#}D1A zSBdEbKE2>ScR%p+TCZctjX*L);&Qucp!h?<5V5+vuW{SnK zCduFMUofbpw^Nc|?wRMIx~@-q(`wJz@ zl9FlhTc~qj6)6E__$IB{b|6Ezr+KGV0WNp1ZwMh`VKpI0wv%$OX*z_vKf1~xY`}F3 zqY}%{R@GsvP?w?CSq3!t)stt*#(Ebpal|#I)j&Q5Y(k8e)*ONZB$~usbqBkjeW<0L zsfk$+8)aHsUih|1Fb1wm!+3NwVoRK(2al+)bBZwlYj0D#Si$VwGC-17YOOUYxApgZ zn;+n4#zeP``Mf%v3qZ2!(P;N58S<*4`zAE^;{S@`6*HtP^V{#QA$ z{PBrMZ1Jf9h<3xdv@!NA@#zg$6`wR(o%&q(TF75dD#UPnrv|lO>Q9nV9H_pJTg29$ zFr|GHDQ%v!R2NqoqtIe(k0o4CF6y2)-%7wjXpOfM%6cxm7I&SMtP(bsEoVJd_HAys zUCJf;{7@b*;}*&stQnQ*=cdF!-uDj#50>S4R;CsY>9xk+ZH_Gp3zVEYFxGlQ`B; z!*+AJg>2y100sZnFDqG?L2zj?<0kX~(q-D;^JzTM{9^*k>bY#Wx0lt%`_a7)lZURX zL$o-MN!r}`o2UP?3P~ma=(t;V zft84)PleI_fSa;k(wE~5Yz#M>g_^a%dKYQ*9EuyMfObbhoNhcCg0LpU>!2>6PaN!t zzn#(hGZt34#~`Kiqz}SA*FF6JiYUsyEk3LEjN?mM0NdnRGATi`pytcEDyM|v zvtxsTPF?PbN*h+2qGcqZ?Oqee3XB>m0l8^?U8}Z9Lct&s#r%4WgqURlJ;m;0@ET3W zanClSGlACtd;Q5d0gO)~FH1D3!O-=0vCh3?xWYiM%Q7;0R7Z1s)m8Ku@`-+ElQCoc z3gIHe{_uk=Ur;%!XPGk{rB>Hje&P9al=kmGrH>$Ub8LxwI*lIS9hmsn3`wE`r$43)ptx*F4YdgetQ!n!c^7@-@iOYZ-sNa0}kUlb_}jLh`^ z$BDv-&%ng+e_#KvA%&6t|G$=#q6DQb?SbVcVcCjEsQ5iZoN0PGEiSp>j3;qHsCeN# zn{h$!GX>yvx8 zamL|v+I{!swfFbc+qaizae-$}#XmtlokUEo6+Ytvj60Cq3y)^s;m!JEM4utRPBOsz zi7~yBt{spRe1r#Y>j+(Hp2sD)6ZLn4OnLdT_O^VDy z<5+B2Yinw(RLb>Y?QUmYsNq9pX7GOGbZ$_g09QDD66z7rQxm3id~!@RXfQwt1Qe(# z27WGL_CN$kP7#UxbnN-EApQf$eX^l&gZoH>e^AlZ(EQftN*xK-HU!z|lA#E}$&>nm zF-V5^gCywpPuc^e%E(atz?C3_h#(SYLk#q^0Y&Eh@>lft$kl-KJO|_6kixN3eJ)Ot3;gXaORE*iSgwCkrC+GDa11%pw)h4^wCyhBIjt&Y!=v(-&C*7 zEx&XDd2c5b$>O1ht3&>O5krdFg}4IbBIsonLUM^YB&X2;AKyjK}` z9_9P6`RevleyMCkYwzXfgZRajsVH)H2>(r;)MpAb$!NLa!xpxL8B+RJoVRjV2Ns_r z<0~mX@C#33Xg1z__!BL6qWkeK;f+F2iqm{G1KJ=7u|9XnBvFj1=;Q1!0tT29zx~%m z_G1XCqN)INXzd>9Pc<`x!>8RT`4J@los$=)NLymWMI`QtiF=*T8K6fArN3oP7*C|Z za(q2i+{-xCTW+tjTE8AX%X)Oj!JB>I0;iFUnl&q4ja z^>|36N!91m$U5$Av(l~vw{05=*6Y?Q^{ptyQ4Xu8$EmZ_<$XAXiw9$@-NWByPwmq8ptZ{|6!Qj@Bv2K0} z77IWdZHJMgG(WGkyli9tJ`x>09hIum&3u-0o?L94_Sl<@=O~j4Yg^7X4O7FA>F|Bs zJi~j7Yhy<`O|<($L!O;&n?f7omm`nRGc!#JB9|SCcEwklG+{ILmfA*3PR@<$z``?b ziIw-TTU-AfY9b#Fm+%M|)~h(%#e-TPX3Ng-}K7IQ?ter!bVBwZ+!?tbP zwr$&HhHcxntqj|?ZQG7`*{M6KaU0cm&GQSsHTF7d&Y4YJs;-?MmENvMa9!=^p)aX} z80HJeY5J2LsI#es?g}hj&Lq^k*{kPOzA5T+U)DAc+52LW0@b1uK|7rW)tL21$mww^l&)s@58fJVFACF--e9uXY z8vBNCdgDykDc>9y`V*C2cjC)J$-u^Mi>q;D+rV)m$M}kY1FiL9%6DuL(6gh}FUtbv zne5v0ybf3t)T{2BSKZhLN9x`&(K{V`$C>WeVxC{w`gMWJu8tRs>IeNxE0xl)d7P|s zZRQ2q4XJ_X*~F$OFV}4*vniO>f`{j;*x2jNS6SbcJ_B*9h~#LDwd;gY(-@8smd(uEgrAWpKZidY4-EZNtCp)~_$J9pOVn>E~>AhOdd9VNfp3 zz(s#eo@Z`UU1G#qvEf7;QKKnQ?X_{y$?&D`ny#*H*L59&z`xvR+kCnx8PC;tD^6ok zKN{p@m9tlU<|}Ayu0ST$^)W*>$kpOjaOM=YJ3f0;L33&tC^4&k8Z%t{9(#&MoCqtx zW`I?I5EQw4q#mN+=Z7X+%wEuRH3nqbev6|qLw~Rs_!kT&Weztw=`;dzT`aXztd?B2 ztKkNjdJ@#Z64~1?ms1TU1I3?B7ehYNZ2uBpby>qm%axB1EX!V1@Y}7Y<(TBMIgS&h zyltZ7X;E1x9)zWB&*O3-a@GOgzOCQ3eMzvGBPWdtR*qosdbS@bnw8J@E}nR2@SIpB zr1{#?G_mj!5zjU{y2jq|kDLRGueQpMgW(P6e4mo$TA<^7a5UCEysgIGhd##m8f7=! z-Q1#XSNX8eC2DZ*&wWQ$!@MRk-|QT=Ot`wCvp3F`lukcX?sXAoIq%@x>;%!feq1c0 z_g+7&IZGcb>Xlu7icaV)UT@b9{MkhN41$j(Q6K)qZTn_G)w1@Os}Ie%yUU1jn{Y~E z+4f)H3$S)f8R#aQVBR`ZI&6B|cnAl)U$jaM(tZXt=W*sb)@sbBR-S^7lI>P5r7;IF z$PB?mWd!!L<-cdf-1H;sn$Dcc>7#l?Pm4L=v0bZ6#e~soGdOT`27UidxfD%RCQWk( zTExno&i)ou#3_9qp5Q#3G?|Pg#e1WF!GrJkuQBCc@F1`^vV!8_`JZ6INWjR%{J%+V z|6gJXqzdvW+Dah=qSbb*mS3`jh7eP~Kgd!eG8<|j(E$?)Fs7`T5mSIcG>;&q65BjD zQCkpExN3r^qN1XLU>_)oh6mSO&oZ z9!HqAaYg`5fbd~Mrg8B4bc83&aB0pyxo8PRzGy)CbOa(JrY!gP`@;2{<*LV@uP7}0Zc3Qig{%%dg!($Uib6jBfY z>_o!Fgy8_?tpHsHj7&VWoFP!|LMm)mul+&c3L23B3xq=N5M;#6N9h0wKo1UkgUlm5b|l)m5W_6v40&-;qzq`GM*Rd3sDuU?O<|k`1XBRfkV^s@ zB!lDL93Wz%4g`>M&Tzoyou~k0;5eA_BWZ<5LS}Trq8Esm7feSNISc{7bZEpFgv2!| zxqmQmWD-FWI!WFG)-L#=+7$pN$OQlrkf|K?Qdj;s;aiB3XBH4(5jRpQt z_c1DBAP@+mgrdtS1psW|e}OWr%kaGi{t!lG4)qet>t6oezq)A8{7H~NF10-PMGhS< zr?3GbKqp+N1JnT`Yi}A19RFqx(=DIER3!*JrszixBuFGRS-Y)53xybtKW>9j)rS`d zOP{JUD#m)tVh|w%zDk&*GSRrs4F^bx>gB>GEV)x1J?hK!#q{NIW2a|d+~2H<;578s z$zMT^vV}CLK!GcYS4l#{rXW;u2ND5909|Jt#2JKS0+l!lh634Fip;d6hVI*|)J^Wi zYsV2|3`8e;Zv=FK$HM*?B+E!HgsKN)kaQ6sNqjG>YxZLf?&hrpkm3S4qiI3)CwL(; zXhu-_MjcO+E-4OXH6n4lUtifm2T>&Omh!=!X9OwF}j_UhWXF1V-j!D&m7xZ+smNh@*pQXeZu#N3HnU}{G*^%V&& zhgSECiv(Niv(4TPCPn)upS2{b)Qf3n&Q|TNl^=%jNujpV@u|mnSy$8L+H-VwN=}A~ zxos*^SBD@S3-Q_5*Uee)A~_A8eP==bx%cDxN}q0K?c(O_DenhTY)zn5^5m!u)X`|U z({^}3w@IdG{tnZk#cmTeBAKt2x_A9ZkiE>`x7wZ!LlM|mqVHLU|Z4(EA$fbK%m)!Ht8_v;@l0ERd%xF#}SNu^r3qkG_v$(Y6TEU zicPH$xpYEjd+5dCby_tyxxnp^tphzv%OrJzT1DRj*l66tYcJ0C+uHHSCtz+`?hg+~ zNB`2GMUi;;gWyc?jk}sxz@R;41$^j*jRH2h^f5>p^Lt(;-_?@rt8302&7P)+2q*l- z0_)1oycV4$Sg=m}I%DRan7kHC^9SeK6SI)w%Nwd(U z;dE4PTSv4E?`mnpVNy3Iq1H9kA+Gw=!N?7hAdnlMd1{$E4c1um`z6G;Z4M(ksbIJ^wgQCSA1oY zCzY*q;w1g1XSvg(yr!CU<;ME19uBpq2X~O)7t!th;urN~WTs-$$;o2iS`iRr5XJvs;r78Lulne>OwN;BW}^X^fiBC8ai z6}R-xQ@y$w2rh@zHPT&0+USma-p_INICJm1J(6@+jCWz%8$6-16?9Q=o6TD;SX_Z! zzgE|Eg9(-&nG)1t`|F}dQ%32*Y-)Sdj+|4p-f=cxZ6CWs&;Esg;H((*TeZ2a%vgs~ zHcdT@2}VkaNosEtWJP`TNz>&&9)z)A+rw&&j-HUD$LuNx$lOU#yMx^KnLQX6k3cE6 zxVS{$2~|m(QDFx(pU)$KL5iFxrP7Q!tT%naIUYH!N@w8qWG$VowhMd;o7$J;bV@YK zD;=zc$F7Q*tBc;3m|^@#=y<ybhH_JwFhy!fM6Y#F8uYKJ*!)X;3&` z79OMwrzYs#ru$oKlBI_)@;_$|-&>;dg;le_zu!Hu%{z7#Rn?vv+b)I8F{r4YD^`)+ zu(vva!K2~lDE#NUJ|0Pv&g_Hgm*B$M+O49wt`dJe&z=kne+}13af@`Co>wC8riz}X zT~O3^l+p16{utm>7qNiT1q8)`E`@fCR_jWcR`jT+k<9ayn4i zPz7|{Pvt@*SN}%OwWsj=uQ7%7zr_@0&i~kknF!c8|GRsbos)_4|Lh)i231kner4Mx zBqU^&kYIKWr`To;mWcT09v*_3f`J8+aw8_xU08sHqS)SEKw6NP20)qU@Sli=eR(8^2#--8le2XH2kfEWNZ zf_&3u5fg++N!6GXQQ`2$K!;LqKMX9XBQc&n3bn2G?hXXoZ$8_6Xw zi3s!=RsDk=0DkA@1OVg>^b7Uc`g$v%u!e759|F47j|k%wHc$5h1r)jwG<^%d^YPcG&6S~zdg?JR1r^22^0^a6+Fab%2V-d*vykYQ z{S=Pqjol1Z5KzQl2ngu_2p}98;K0mq@Yf5N*G+s3{}BJJ7R+8=yp6c;q828ceF^H% zE8(3;pe_Lb$^hoU^?P3EuO1=<1OQC|8ihaS5Ec~io7)pNhSBrt$ITa_0=qxsot!Ta zz~1etzF(;uR8#Qa)%LIKuhY;M*hJ$-<)1CTv@iOiYML$BJxaJeRJ87-s`z*SfjzlZ zfZJcVBG}NMoDsja%D(D7fQH`2ZtF#U%+4=bz}Vi?AmqE<29|xdfe-+WpBg9Re2BS& z8`8Vqniqb$->fk|@pr$AFF&*5GaLKg(V2Vn{olqQ-29gtKSq@7Yr^nfNe2Hf);cT% z>GGz*-@ldleQv}Az)dZ`>Yw=%qUG2_O4yN&_3zT8ehyA2_6W9iz;s{@SNQ#00z0bGY;DP?c z1adQO-0MNN9ggB3#^{J(cbmfTW53H3Aba9F1#aqn{9`#R0ADlpor}#Zt-nD(>Mdw9 z5JTHj--tuHl)u%#FdQHUU=0N68Nu2-FRe9C_I!2m1y0Ah_})w-Ep~UYNvlp^^9SCN zfmwZ;xi4mrj$}!5kMBEQl|ZBCO`4_HvpJzwTlpg#3X3VL&6?3OW1h(UPYlax1zWfo zm2_a%Y0 zx)4A1$$UW%Z8T4A$t~~>^4&4-+Q#6wBu3?DN5+^#?J`u1+aSB#h=U(^Vp2hg>B)G| zq@F+$uK!m56=Q)(FFX1szRGRXj;LHx&JFQ+)Gyt>NNAZBVa5mKWFDt0(Y8C;!B#3G%tx+kKAI!SCC>8iME#z;M8wn+hFRoJsxNg4m z0*nlkf7fL=T)`Hf?8x^+oRPp)97IRGG5@9Bp~rh`bF$?#KL40@gXrh|d|RveX;xdl zZC*)&(pTj&bKvL~M)F^1J{EWlZo2?8=xZjK*9*DKVbA_1nPmAh32$VPRsIq&g15+C z&cyNQwU7p1sHBIi!vtDDvH4n%Q%(Mj>z^N0ZEPw->umkKs9e#FKKKjZdvG~%r%w+9 zin=hY#(2XR$CB^NW!M!$vgLT2?$HQYd;7;TJjkl^VsqI!GOrH(wHEZ_dZka|fy7r9 zmba*mwq*+rhXUb<5&P%r)LE1xbd!gQUi7(FGQa&f(#5vp5?*qCnf13WG4AEUZFJ)| zWi7!dpIqb^*E>?g7ZCbIP0%luXknYMkfj0l7i$Nho#9cl7wyYK$D|=V{u8P%@@B1s z=rpkw{-H(0VZ7#PYLVlB@`3EuNFdlu`CZJb`S|vDt`Ulv1>;D@{qRr}uw1%xiLNkEWwnP8J67x7XGdGXnbeIMN14hIrp}ea z=RMUMalYA1^0;z4QKI(3BhZF-#Gp4Tysa=~GnrT5-P~wSzWV+;kBr9&Gqb%__}V{W zi8uC{W9@`b^pI4l(f#sy_8hm}kiOskhgEqpVxw?OU6aNm8lL2l=7(iBV1w93_4AG^ zfvKtG6DWc6t^srB#J&Mf2Dl$Jsy06L3+yYcXMv1=bl&iC&$05L9~+Bd3>OU&*aJsjg17Airoba_LT=3TEb)N}`%H?nz& znJn0QKBf8z@M6qTFHa1OJXm0?`O|CaXoP`X-W;FbJCJ2EYJ#`yVC;TMNRm)WSV>Ya z9)?NfW;z8{gujTpAld}arxZ;@yYe=N1duXCf^;643g1z-=SE!&AvJlEhX$6KeaOfD@!x7G|Na;={Qyh2h9pPIFdH(=5*hBxF-fUsN)Rc7sM2%fP_8ehGp4u|rvFfT&;% zrX`j2e=w)od^jSOjKb<`oE=Xo9u*LA}B2r+$HnIiNsnX_q3UKP?@@n)co_sI&rOkYz<_# zjJJLAgttk%f;s0=_oSVeK`!9dMdRi91Gy~Ng-6vAmowU2#yL=*EN!=ub z2gM(SSH+!zh!-}6Ee`W$iRI7UswX>rT*);DiNsbh;X85OP{@|$`dLSEO$3sXrPVYGEL%D z$5woND!yZrhGM~XZKboUuGTY7g6M#4Te*u$+|Q(bw7Qv1Jj>ej7)4jqaUNa5ma4IQ z)*bsyzugz*GAd6f@y|E+kNd85Z^RPCJWMB9?m6IU416*8Ud0C(CtCY__Jkjp8r6v_ zc{Q$hOKJM6R3uus0~dl^D{#7i=uh@dttje9!p?p|uwahRmQrF4`k6+YqA3d7=o0X- z+tb1^(FZ=2GBB#@SoQYwcjz4VIZ(1lRjPj>{aH>GTpXRT%|E>x6jt=*nI!!)dCGVT zo`BITnx4K&1E`nbX5S*DBFIt3t}OA7?7G|qM)n;5?ubQuGK1A1^&($u&XOyp3}m1@ z+VRF)?e_53D{q#ch7Yn+{)Mkav^Q(`&(zVmc1w|3eSd~?FjSUmr~uPbUj9g+>b?}EwcgMat*jj!JX z<;4nLia0d2%@%#rPZPmjN-{p#`;q`UN%B2dULBx#%A96?I(A)mk>bYHo7~^u5FI?z znorw{bDpR>rk}&htjf0JgDD6OJpdYspsxUc+zoDrDmrDjRiBV8t$RWnldvsSGyu_W z!z6IOS26|nUtmqM_Q26qUC*a1-co?I05#~Ik|%f;CkIbu^cnu(ocDZ)#bc~^)6_4R z7mm<2Y3-5BMfnhK$dsm7pPo*AI@6>Zvw&EVC|S#r1`yTNMK^&H+cu3UO(sFvc)pRdDIJFU6L z-Q@t-0Lpf>UttiU=dWw^)~>$`#l@_o@xkTj9NK!;M7y_j zDElRws1<_R4{~}Rba=QjR8+}{+KTYfEc@!vh;M250{-(9Q_mDQADc=h3Zrz%GBV9z zbhCUh*MBw}`#zu@^l$I?bzchte`E?=vmiT)f9zIx<)~d5gb_y?2I5-gpjHCx;@?<= zrl*UG$=$AF-aam#=9rjL%nN_dC(i??Sl#v&%AeVYt0gV4kvD;lBvU_M!hSmzV!Rxx z*nW<2R8sL6NM?g5uNwG4smRcC9$-)}r(Qw?TdMc#a6YncMoImeWo%Ze#9hh@RT$p4 zQ8{h#yw*>CbGpRS)e?wt$VR)?7K_YE++X;S$Y~TAut^?gl1Tf{VC@Nu}x&J^Bhw1;(!y~;$sJu&cRW}K;Gp$4v0pNO+JyC-jtUK(Xq zAfs2ks(wzbfMp51(7E$GXMJ;WEfPDiFnNKkGy>{MsqH(p2dRDyVnKnCd(E##E|4@9 z;XL=O2OWpnIY|xV^W-nCsyw=RW99YOR!C7Wn?hsJj9w;s^B(Y>U*khOpk~Es$8L0F zw!Svie+*R~%u{d_`dn85?cR-c*OVOt|G2R`C->7xq@vxaBs~WlUxeZhIyP!) zd$^&X)AUJj^l)RJC`n}c?Ek0Jb7F5)Hm9q6ufvJ&BOzg|c+1U(&}=VkCNYdV9F?oo zmrvP6L$4Iivx9;xqf@oS?T)w3n-w!uoD743RpHAlepyu1S}z}oB%Sq%i}?{*h+N-B zfS_d^i9hcvz2z@w#I15&5UndGT9OU$2tO$MqxW6T2>x=K<>~j%vj1B;W}ZV#*QIL0 zETPS%sia67hbU7hbt|TU7HyWs(tVyH6W~-=*BiFMUgp5zZq?g0dn>zhK_Hrw_@(fM zWeG?;>51Vd@l|UfnD*A!Ez)y!fm&gC3G>f;&q_;lKPeu z5tdcFCPrnMMI^lIeCy+4coxKPkbX2?t&5;aYnW9({Hx_q&n>#hCjZdvA#dt=(`obG zNVSx1D}6+OOzfR?oAA;3^#cV@{|0<@Yo3OLjVrEsBK zmZM+@+HJ}OjLgRIZrS;Io ze`?K3eaH^muBJdsjAhB|1l6Z1mCdV6alh3jA1&`J$yU*)P)$Nw-d{h{;d`uLB=)ww zmz2@?vuek;QLxm(^-XgdZqwy;tSB_^+tSCOFxivErpyOS?>J%~k%$sukF)$qQBdEap3p_IxqZp<@{X{5Q zj9lA*nQmJsu~$s?`0cfrQGE?!Mo{Wb;wIu8!!M98GL;~Epw(dLpWR3wp){ST{V?&SUFk*gBkT&lj`?>-~OH16od*7;Tx zQW?kWk9B!uBZm5B*#I1j2k#$Wz2)!zrA_$T_eiEPLB~sXwywCAp|2}0Vm&ak1OB{? zJ4`wFE_RpaCss*Eny7O&y89pGBkc;MqXZmJLb)BLe|@o19n??c`auU&d*0I>xonK{ z*G3k>^SK0lQq)r{OTV-Xr>o}b*IG>Db-i@Yh&CESJdfVjaZfc^| z#$Pgz6`^2TarkE~auA8##4eR*Z=JX;%Q5F#E8YmK&bYt& zy0?VeMQ$Wc$4yR$_Hq+nHkQI|GsHM}^tuRv?33aR&?6x^lt_Ai;hvIE)SdbJ!+7y9 z2IAJHE(P%Apf%hRj+gn&)I_ZByjMEErb$9Idzg;J|FAcH$HfIqYp*X%$+yq=fSRhX zYP7zb3SB2%t)1;PmisbxgfV1Jh=PVO{yx~?upQnAcjh}kCPcu!YF}>(GOXSy(MxaN_3tOsH z`oWMHB354$Yo{0*VMFUR>A!z*{K z#m`^=i&5i}g@*l7V~8Cl>)GcKhWkwGK0PARPio@WrJ#^H%lK?CmqS3)C768X`#meuvdZgCOCpoouunt4nWR}h`^7M+dptvvTv0!_- zutYvpfcb8F{z`{q3A0)j>*jcs4Z112poT?5=k>U;{yspMcn zCT{@7t~d8Q=@&s?zorRem(QSVz|G$nir9?4&Z#M(F-Nv*FY5M^tIH8y=*uu<^fUZq zCAWq;*&sa|a;Q>SC@xJI1fgRQ!x4k&9cuSiw!S}rFb>AWDsk-0;l;CLlJ=1Kx(+2B z2S9Pi(w!?Ak&et=%FVBrqr}NX=3c#M9<^W=uy;Id`_LpKkB?Y%d5W@P8}Aug8}CTy zizb$Z_aw1mTzL z<5OKETPDn$%}|E^t#GAC@&vSX7*c5F6JpODSO@K6YpAo7o?NZZGE5C}h6ldEY(ybv z$LzZLy_W9LQ6wNr2>nwUUOLFy>yt&p%1bhM`LRL9uHJIk-fDUHr4P=(1)5Nce%elDbRS&)EhyRd zs2FhGVR}7>6c2ZZD_?I9&!^iV5W#G~LJo%YphO1-GA5hFMq*qrT7w`YJCUX!5NiW87STl%5J|6z=F8ab*bA_Bqht`dLvZNP`{)88`gBf4P+@ ztqd$hHrmjV<$1%5`Uw5V*+AvSRsoBbQzqU`Y2O%+VbD4(`-cX9Hk2LV`#%_@l zA!5E#f##H=XTw*to9PS%?k`BBG&o2&3XAS|Dkf8nv1u<pDi?soGeJu$87Rt*KSA#F` zno`TKoD@OmDqPRPV>*F$(R`Bu5`2-nind*+mnH6WRBd<3C_g^qEaqzZq&}D6KbGUK zpgivWp!(HTF8TH`U>I~tp~gR9dHW1$3_TO660ttTkt@zniPKZilNRhFe&W4H(;!^l z+?SGb_NPkQ#?V0W1fjTirX*3x$q(C|mr|0g3Jx&W>uC?R(UK9A%Z!iW1#n&BZFX(5 zBC95F5`NN|Mbmn#Fw#_!4m$=BpF3VU68+i6lt;Jc+Ez-EefrI>jh>B`I)%v%_$U%T zCB`z>hBWt8wsq|x1LONuwrzU{eX6@=EBjOfM#H?7tvDVbkNt|b2^05^`)ZNRP~SC? zkPQJI+K@<-0A>}7Kb+In-SEF2WVyb9NQTq`IpB;aBPk=VzfPy=N$IgCZJ4q}7erxy z{KhQBl6^+>eMV2Q@y(agtf)YWAwftnqvAcy3tbShxl|#I?GVY`J7!x?Kh=|=`krBo;Q(Jo!9{Y`VOt7ehZjwlcFeP9qi)e! zUM^{z`5KLF53v?6orU@-zLHTr3c^poSz-y zrT}@^tlCm}YhKiP8bwNGjag(&45wg6G}i9=CbcaPbN2e-+;se*QmhKh7q&$u8LRA9 z(u!{iLV>MNrw=$!T0h`3X{^r5RI7SM_4Dvtsr}(K`l0>SM7)lz!$t=*lS z7bN)Vc0s(yso5k%wv`(;2B$AZb{t)Yla;rag-Mfjk=#`kT~v`R4R!k7KM>B=6kbPK zt1W_Uz|gTANr_!^vb5}3HRnCsN9|sv69#V4Hqd?U65MaH(J;$xQGbNzA8ZTdndK-- z#MR*g34Gq5>|pS+ufJlGQ1p6&=M2IWVB!b|zx0rc!g0wB31@l3kKFKFBPHiLk zZ0gn_k3@3X`$S;H$Eg~zI&Rwv8QH`xlRRp?q>@}m+A&4xOi4J1Kpu;1!s}dVqnR*j z$i36sc}r4P64->M?amd(M{TYH%V4y}L#AB&kUY>(0=et!T)Z6S&CMtz#Jjv4q1i_V zPCmXjMd7v0OGvF!!aVzl-s~+d$D#!3z?zizlQOqOhsQ4niWna{q0#6?e*hlOEm z^!KC=L$@W-rP~YZx%wwvl5+^xYkK6{CraTdoZrGiLHqZ&rdQe%nTaGSjVMfrN{!YD)d?kIJ!lCO z+CN1f%XPo6x~s3cPP(@|ubi)(vz({xac$ulB{)#h4q(p^?v*$=P|Bb(G|e)53;ViILpXiqcfDgSR~30AYB)|7#k)CvZia!b4#>DfbiLOFCcpo0JX(X{FP8a zfDjlm$M{46)lg^oJ`NgvAW+!^dxB79ZEOJ&#D_ZD<&}N6!~_uuKzmeF;--GVz!dcH z(S!N-{*aj$|8`n-L;1Xb(m-I~N|t^l@hWabN)eS04?R6S3V+c-r3gClk`h6^9aY%- zfQtQ1@DZSGnqjgxFU_glb(?um*VT5@zz?*%@B04nnuQ!K|( zLFeDE(GqPW2^kC(`OI<1|78xkD{^MZ4`TwKi-z-i7VnRD6rlo@>i4jFrsz!xWi->} zQOnvp20f@inW_13b}&I0Oy`#USv~aJgY0?p_lt*yi*s4G0=|?@ZXGz3*vT)Lp@$nB zdLKQ3QUVmkK&mZ_1`t33_%Pf$YNg{4B@X1zzN2L>3d;u|3V>*1*Z>G}pd&bpWA+bx z0R*I4$A*D=Ydy3df(!%JzzK!o2&(1aInBF*VLp36X5Pt*egwWUfO+o+TwA$)9nURb zpaHy<{1pDZA9^sCyV%gmjelQ$urEtR>xYMkS5^TzLP3DZAwrG!hdM-fa>HY0xlzac zjbt6_MDQ=-pER91&r9_2wG?<*4U_=%JLQrzpg;#9`GxqVkwFYK^xpfmZ~ujO-&N^J zIsQfY@KY~7y*_^*q<>GkRy?)-+6Q;^+0H)}w zI=#K$r|{(9N3aepGTQQ;I10lxDgV9I(B%pB-_}A7E=2MtOPXhq!w`ms7zqOH!~6^e z{q`M0hz~n}R1t#^cq#=0qyu3(T}hbooaF2z5i0LJ_kr1I}Nw=aePKAQd^02TOI z!XGl&_z{zm5WssPQnEw|-D{2ZQ;ohSOTvtL6-J46{psg#!2$UefHBu+2P{H6{~>66 z&_=xQuiJ8`7793hKTW5{SuyVT^dXxbY+hDJOVDiSF5jq)SW6)cfDiA?I>uuQWPlIr z?_1JP?eAHbxTc#aY7Dpr!m7fj7}*JjEXvGemXqLFQN3FvjuP9Y&&*NsGL?irv|lKD zUXJ4_^rLnD9HP6wBTmjLVdYEp$!lav%pz@sO3@Qtr4n;-RmF}}A;VqD(v$Rg zfhyp5__FPxVYcIV?wf*vpFflSm};4K<_RGWk+*`t6HesfB|-6A-(3%GBR_ua+S%6G z@Kg)nuG8N=uauV;8l$rnB3UXD$JV>a&UB@pzP>3z>XvN*TyHjK!l{_k5QS?pD$nh( zV+QdkoaHrZ`#xq*3sO&1J)u9Bg?&=i0qYGD)JSpoQ5?xb+1+-rF+Z+;WjKSTEfHO% zS38DP?>h7PV3KUp5UP7ubtO@~cnG$v@89eHrRvi;J9%lK2p0F1RZYnT8!hE$nQ6YqZN&z2i@UZF2?=v zCh*eJaQv%74Zz=YQ3a*jq}XX@xH+NPinbBJ-*f#9@OTXr|nBA zj}%YBE);8&vblWw0t|1L>=7nS$p4U8(o|W)$99O!I_2}Qw0+JgEi>wmEI(%sZP{(% zB>daCGz=`Ko>jX$D)VPj9971~7a1TN&872VmbIdnk6oKr%Q>@*KUbBHTg*@YEAfMS zGb4v*O(f_@^kXboL9`jvAAwsmt*z~|9E&A_^&x0DYO7-3OOGKnaNkUSBP+p`OZ|HP zavp37x-O2;xi!kSd2RUl$Mrc7;S@Tp1=mc{oIx=HA=-Jo|7-$O-;7kdqbNhiL4J=$ zR;|jekJ$1m0XIr?rj{BCue+AvdBk>6wVVM<9G$jQhA^CC<_2m-GOhz6Pt@{iw}(09 zHAyx1HRV-^T>0YW0chey3^A=by$8=VFQ8lhzE2tVmm^2(@3#OyvBtP)$|FvB448YY)| zEjivwiZ<6d1nf;|)N;n-Vp$}JyQla<9+#?J<*Y`0+W>!%4551QYxurX>TNMIeJ}TJ ztfcfVwmq^k$1~aWy2Y-hj==TA8^UL}D{0``eA2={RMv`8b`fG|Kg=@+02}dyRsjera8Vx7NMujqd>k zE~}DLdXNpin_xT3tr^|>%bJKr|DNRh%^&Hf$=40rlLoQz>j>H`NSXLY!S2{0ak8>k zSYw5HbaUYaMs#uz>0WU99hTSEM0oGW{mq`q{idl8|2GNaOR%Q*ljVrCcSJPW!lWH_ zx$XM>EY?Ibv69uxMv+#PKb|&Z-aRLs9aYx)i&yX1^2w$MUNFj~*O$rBP_8zO)&m|z zjR)E3BF6g}6A;fy5T(;D*!CHR!mQ(5UNX3JZq`FS9)VWMG&T*4`0Lww>3Pa+yfe^r z&g`}ulA^AlN$lOZovRS~tTz(t$1M`$&(a@!N}MKi34aQDuy7_lx)&#gqrB2w6dT2a zDmBj-!~cPA<^Spn22HzeA0|x0;VToGe;&pM9iRgID(RSw1?s=QUV(l#(Y6In80@*(|?=UD7DopkHzZtH;{k z{RtvtR~i!pOH6nyF?yFP22RWo+A-(VtOEZBT6GfRT0z_HbatPU_fobd^bXrpcXRk- z4g%->)@Nc!h3lk!mVGjOrN_-31-8U7@KQgEOI)a?m#k_stz)S^NLIl1h4H<7sR@a= z+;MBM5EFEFL|Q_4EK_2CfG0TJ>N%ydKCKb1<$S(mE`GwL;XNCNGkN6RpoUH|X_qcE zN|)DoOX-8>lwE4>jlez8xT_$$WF5+1W8mA`owe5G0ezxmn%L8|D|Z9FNX8n(=&No| zx037RTSuvI54nEJ%$Q6UWtsI!kxyYVn%a+gN|&yVj^Ci)8g+t&Kwru|{LA?1Z=K;P z%bXYdk4wWY?%~Q=NuLXlMB5U3jLT7FqbPscee@YiJ;6y}EW>)2`=)Zzhs<475tTH# zW{zl@;!%uhmX*wwOZ;s{f4P?i?)12GXP90bxk;p&KrP8#aJXxy=`Ef?5GYMeUoCbc zIMTj+N;~>m_tX)eZA}&?OBS15G;p3q#VzkQjg(f&=MC$(e`QDJ2-+NtlQni1D3D+) zb1~>U&HF;uN@_0v(xYcJ*fRV_Fjnz(>s5i^fg|;37X3{OEX7-)W{RSt0x!{_u>ClC z=+F9F)(2bAX&#cwUkjNO*a&hul6lb*#d*yiFB#?|P>aI;wS1%v)SQ1?O`f$CF0%Hv_hzwMTA-ITucyPEizYm1^l<3uNBd0YSjqFel`@C9Zt5$L zMHxgWt*V@COw?D#`YDxvwfvXQr6_%JUN2Bgef$>5S2~4bJl=?Gg$E!a8!+Nvcjbn9 zD4GTaHNlNDRgo`+_KO_08;Dl>kR11e1ykNIvcp4$`>7(LO5rw3h+=z|q-@XM`a+3v zge^q=zOxz4^XyN&7gddOw8AO7T~~OUp1CfH?{tmbi6FiBs~bOKNK4fEDUMznCoJJ| zLW~U-0+_~(bxW!9xRPI2uTuwUD}uYQ5cN!q>9p*yt<5+wRbPNfhw1g~>Rh6Pt>KMs zE)OFr%@?vUsp<$~@P?4Nzhuowgk%vPKY?jijjmrItvH3qkrEz%vl(-43_RLH;>ps) z?Vv|;p&UaM0OcWFD5ljZv!g$CPG}_#DK^^#>Z6j+xT)ei@c4F$0t%6Y-JvOLgB0DLgFQZsXKM(Tza&+65_y54hp4a+4;s_kJZW{ z>FXHLK3Hg!d?+TxLJ>CDJ!Xk!pIm!lpWMQtELti2eusP(xW9>;uUkq4O>XXC)@bWq zcSrMT4xWD|nv-lTjclW*`|3PJn=3-p%={NNeDd!$Uo$#jHgRRVp6Nk&k2@bdXM6;C z3`>pxot8f8>t$tw2vuCE4iy*=7WVrRXae@VaKluqp_8K8*sz(|!59_oUgut%V6&?m z7ci$q;etEFxwoL+zi;5i_$4+|!~KUKQh4FsBlNad`$i_`|sieO?Fy%l(1O;%0VG@>-S1iYXl ztWUrE(_HQx0t>97kKIZ=z|W|dlU{HBYpc%)U}6GCwRgRb~*gVMhTG?KOd%Q)=}k&J7bC13gAarf$P zJAFIid$n7pkV|gaRS#6sfifFcTTmBD+!oY&>8-rtTc&|CFB46{5pY-clg?8t6%p5M%Ba`!cn?dwq*EfTd=T(E$8Rp@n{_cY%9%Ly`KlkBxob8KI0Ib;%UQ$q#& zP`3)>16Bzw@Y!a@9>TPUtNc-#JMWDeD~~-i!M+Z9$g%UNUZzwx2n{5NSQcClYtf(W zwAOu(u;A7=-*Vk$-Yc)Fth;5wr+){0HlHg*?ejq&zJN>Rn1v*5J7PcRHDy>Ig>>0* zws9V0)hT&t@iz+HY*d~rm-M7;q(vK7g%WjVoXNU36G&jZs_mlGVyi;gVUtj12@VgH zCFI{aZ@q0$w_U9*_(7V>?!IUyMsM%JCF;@bdk6dg%t()4|JyN%h3$VGlTU~fSaZO7vo7sSziAw$`O;6)LE(dKz(i$ZB{9WKDvlk(nxdjrt!BCDL4 z7m&9_=c6jfr@sQ-MD+0_CxE|Dp6z(PmZA1a`{fF-Xs>7WWz@0%++lSB`2HP`Wt|7(z za}DGrvJEV<0l<;7f$<^y_rh5tk%3?#U=g1Ddo37*2>aeb?;Hy(8VAISpd3U91kL=3 zg@S<%Q4p~z*rXua8ZdZPFhTGn z7bL@g_x^AZu=Aruh{K&W+3;(|q@ELH(SvvRAGqkP$f?T3+T@<@tz zHl0cy%mcR1B%ZsG*a+M_3IbqE-6PT0B~5*za}tmr1$vXF9YyLS-5w>7i1bS2F02Og zOs`5mJQ&|6PL0vzkea~#(jS;IWs%5dSkgXURvn@4jQ`{&`6V8I?TQr*qO1hq2=;Yi zeZ6dkA$0t|(!K(!j%G_24Z$I}pWtpexI=*8?(XjH?(Po3HCV6&_u#=HxJz(%9-KS> z~ln>bq#fQ{3*=+HjNBjo8c=SnfeUDhJa(y0K7C&y>lR2kzWe-Tc z@lNUNBJtg$4*2m0H!6VifX_gVu91R#hZPtFqa7zvLi@}BwS?X;GPSMHstGp6ftO8Q zNpT-p+{k@#t0=n-PoJBM9JGUee~+$;6M2W!{I`)VuW)jhQ`DF>JpM= zQS4kU&i%Z~)nUWWu+#0$vipnh?ZY*G*D5L|8rV zo5C-q-5aKiFjM@6e?a*&Vah3`*z$1uZlTBCxx>82@Zc4YASKIEKtzmFOfHsC(Xrmg z;Mt5hham!)ElV_0`}zRONydjgjjuT06(X8RS|vj4A>Wl*XNJ&lKtuTrcBbW|n;ZGcV82R*PoB^Muob3l-kGFG*Ja4pD$OBSDk&Y0w_*;sA?xI0awss( z`ANIs%3Qm$!B3$L6MPPidr6sB*1;;XA?hjHf$%|c*%_a8@9?z*r^|-2ug(={rp)

    _enTIw~|)^XPzW4r=eiRo{W;!lL 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 From 087fa6f61bc1a11769d0590080ba46bb74c46ae0 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Thu, 11 Jan 2018 10:33:18 +1100 Subject: [PATCH 129/132] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b3a30c8e..0922e490 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,12 @@ The Yellow Paper is a formal definition of the Ethereum protocol, originally by It is free culture work, licensed under the Creative Commons Attribution Share-Alike (CC-BY-SA) version 4.0. ## Releases -This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR to the [`byzantium` branch](https://github.com/ethereum/yellowpaper/tree/byzantium)! For further information on previous and planned releases, see [here](https://github.com/ethereum/wiki/wiki/Releases). +This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR to the [`byzantium` branch](https://github.com/ethereum/yellowpaper/tree/byzantium)! For further information on past hard forks, see [here](https://github.com/ethereum/EIPs/#past-hard-forks) as well as [here](https://github.com/ethereum/wiki/wiki/Releases) for previous and planned releases. ## The paper -[Here](https://github.com/ethereum/yellowpaper/blob/master/Paper.pdf) is the latest version of the PDF (which is the same as the Paper.pdf file above). This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( -https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. To get this link you just right click on a link that directs to the target that you want in the PDF (in a browser or program) and copy the link. +The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper. This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( +https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. To get this link you just right click on a link that directs to the target that you want in the PDF (in a browser or program) and copy the link. (To create a link, you first create a hypertarget with `\hypertarget{foo}{}` (it's best to put it in the line before what you want a link to direct to, where the first braces is the target name, and the second braces is the text to be displayed, which I have not been able to get to display no matter what I put in). Then you create a link with `\hyperlink{foo}{foo}`, where again the first set of braces is the target name, and the second set of braces is the text that is displayed. Then you get the link by right clicking on the link in the generated PDF and copying the link! The paper also comes as a single ``latex`` file ``Paper.tex``, which is built as a PDF as follows. From 4eb53929160e87c4bf56700be3c170726404dc99 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Thu, 11 Jan 2018 10:33:55 +1100 Subject: [PATCH 130/132] Fix a typo: buidling --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0922e490..d9f8d636 100644 --- a/README.md +++ b/README.md @@ -24,4 +24,4 @@ git clone https://github.com/ethereum/yellowpaper.git cd yellowpaper ./build.sh ``` -This will create a PDF version of the Yellow Paper. Following buidling, you can also use standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. +This will create a PDF version of the Yellow Paper. Following building, you can also use standard `pdflatex` tools like http://latex.informatik.uni-halle.de/latex-online/latex.php for compiling/preview. From 129ae5749bf68e3b3e9e40e40cf3eb9dbbd788a6 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Thu, 11 Jan 2018 10:34:55 +1100 Subject: [PATCH 131/132] Remove repetition --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index d9f8d636..14fb4131 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,7 @@ It is free culture work, licensed under the Creative Commons Attribution Share-A This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR to the [`byzantium` branch](https://github.com/ethereum/yellowpaper/tree/byzantium)! For further information on past hard forks, see [here](https://github.com/ethereum/EIPs/#past-hard-forks) as well as [here](https://github.com/ethereum/wiki/wiki/Releases) for previous and planned releases. ## The paper - -The paper comes as a single ``latex`` file ``Paper.tex``. The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper. This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( +The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper. This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. To get this link you just right click on a link that directs to the target that you want in the PDF (in a browser or program) and copy the link. (To create a link, you first create a hypertarget with `\hypertarget{foo}{}` (it's best to put it in the line before what you want a link to direct to, where the first braces is the target name, and the second braces is the text to be displayed, which I have not been able to get to display no matter what I put in). Then you create a link with `\hyperlink{foo}{foo}`, where again the first set of braces is the target name, and the second set of braces is the text that is displayed. Then you get the link by right clicking on the link in the generated PDF and copying the link! The paper also comes as a single ``latex`` file ``Paper.tex``, which is built as a PDF as follows. From f46720d4314642d6ea2143da5df1d086874b69f1 Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Sat, 20 Jan 2018 18:31:54 +1100 Subject: [PATCH 132/132] Remove release info and tips on using links --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 14fb4131..d270285c 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,9 @@ The Yellow Paper is a formal definition of the Ethereum protocol, originally by It is free culture work, licensed under the Creative Commons Attribution Share-Alike (CC-BY-SA) version 4.0. -## Releases -This paper currently does not include changes to Ethereum after Byzantium, however if you like, feel free to make a PR to the [`byzantium` branch](https://github.com/ethereum/yellowpaper/tree/byzantium)! For further information on past hard forks, see [here](https://github.com/ethereum/EIPs/#past-hard-forks) as well as [here](https://github.com/ethereum/wiki/wiki/Releases) for previous and planned releases. - ## The paper The latest version is generally available as a PDF at https://ethereum.github.io/yellowpaper/paper. This version of the yellow paper can be used to get links that direct to specific info in the yellow paper, which is useful e.g. for pedagogical and academic purposes. [Here]( -https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. To get this link you just right click on a link that directs to the target that you want in the PDF (in a browser or program) and copy the link. (To create a link, you first create a hypertarget with `\hypertarget{foo}{}` (it's best to put it in the line before what you want a link to direct to, where the first braces is the target name, and the second braces is the text to be displayed, which I have not been able to get to display no matter what I put in). Then you create a link with `\hyperlink{foo}{foo}`, where again the first set of braces is the target name, and the second set of braces is the text that is displayed. Then you get the link by right clicking on the link in the generated PDF and copying the link! +https://github.com/ethereum/yellowpaper/files/1596574/Paper.pdf#blockhash) is an example of such a use. The paper also comes as a single ``latex`` file ``Paper.tex``, which is built as a PDF as follows.

      +
    • Addition of ‘REVERT’ opcode, which permits error handling without consuming all gas (EIP 140)
    • +
    • Transaction receipts now include a status field to indicate success or failure EIP 658)
    • +
    • Elliptic curve addition and scalar multiplication on alt_bn128 (EIP 196) and pairing checks (EIP 197), permitting ZK-Snarks and other cryptographic mathemagic™
    • +
    • Support for big integer modular exponentiation (EIP 198), enabling RSA signature verification and other cryptographic applications
    • +
    • Support for variable length return values (EIP 211)
    • +
    • Addition of the ‘STATICCALL’ opcode, permitting non-state-changing calls to other contracts (EIP 214)
    • +
    • Changes to the difficulty adjustment formula to take uncles into account (EIP 100)
    • +
    • Delay of the ice age / difficulty bomb by 1 year, and reduction of block reward from 5 to 3 ether (EIP 649)
    • +