diff --git a/contracts/core/proofAPI/CrossL2Prover.sol b/contracts/core/proofAPI/CrossL2Prover.sol index e2f21619..09e05119 100644 --- a/contracts/core/proofAPI/CrossL2Prover.sol +++ b/contracts/core/proofAPI/CrossL2Prover.sol @@ -15,7 +15,7 @@ * limitations under the License. */ -pragma solidity ^0.8.0; +pragma solidity 0.8.15; import {RLPReader} from "optimism/libraries/rlp/RLPReader.sol"; import {MerkleTrie} from "optimism/libraries/trie/MerkleTrie.sol"; @@ -60,7 +60,9 @@ contract CrossL2Prover is AppStateVerifier, ICrossL2Prover { // VerifyMembership verifies the receipt root through an ics23 proof of peptide state that attests that the // given eventHeight has the receipt root at the peptide height this.verifyMembership( - bytes32(_getPeptideAppHash(peptideAppProof.height)), + bytes32(_getPeptideAppHash(peptideAppProof.height - 1)), // a proof generated at height H can only be + // verified against state root (app hash) from block H - 1. this means the relayer must have updated the + // contract with the app hash from the previous block and that is why we use proof.height - 1 here. Ibc.receiptRootKey(peptideClientId, eventHeight), abi.encodePacked(receiptRoot), peptideAppProof diff --git a/package.json b/package.json index 56765960..d4d0c057 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@open-ibc/vibc-core-smart-contracts", - "version": "4.0.13", + "version": "4.0.14", "main": "dist/index.js", "bin": { "verify-vibc-core-smart-contracts": "./dist/scripts/verify-contract-script.js", diff --git a/src/evm/contracts/factories/CrossL2Prover__factory.ts b/src/evm/contracts/factories/CrossL2Prover__factory.ts index 3c3406b5..955cd223 100644 --- a/src/evm/contracts/factories/CrossL2Prover__factory.ts +++ b/src/evm/contracts/factories/CrossL2Prover__factory.ts @@ -402,7 +402,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620034733803806200347383398101604081905262000034916200006e565b6001600160a01b03821660805260006200004f8282620001fd565b505050620002c9565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200008257600080fd5b82516001600160a01b03811681146200009a57600080fd5b602084810151919350906001600160401b0380821115620000ba57600080fd5b818601915086601f830112620000cf57600080fd5b815181811115620000e457620000e462000058565b604051601f8201601f19908116603f011681019083821181831017156200010f576200010f62000058565b8160405282815289868487010111156200012857600080fd5b600093505b828410156200014c57848401860151818501870152928501926200012d565b828411156200015e5760008684830101525b8096505050505050509250929050565b600181811c908216806200018357607f821691505b602082108103620001a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f857600081815260208120601f850160051c81016020861015620001d35750805b601f850160051c820191505b81811015620001f457828155600101620001df565b5050505b505050565b81516001600160401b0381111562000219576200021962000058565b62000231816200022a84546200016e565b84620001aa565b602080601f831160018114620002695760008415620002505750858301515b600019600386901b1c1916600185901b178555620001f4565b600085815260208120601f198616915b828110156200029a5788860151825594840194600190910190840162000279565b5085821015620002b95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051613188620002eb6000396000818160bd015261075001526131886000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806381ce4d341161006657806381ce4d34146101455780638553287214610168578063a2198c951461017b578063c2f0329f14610190578063c67e15f7146101a357600080fd5b80632a6ded74146100a35780632b7ac3f3146100b857806344c9af28146100fc57806349ff245e1461011d57806357c1c5f414610130575b600080fd5b6100b66100b13660046123a3565b6101c3565b005b6100df7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61010f61010a366004612415565b6101dc565b6040519081526020016100f3565b6100b661012b36600461242e565b6101f2565b610138600281565b6040516100f39190612494565b6101586101533660046124bc565b610204565b60405190151581526020016100f3565b61015861017636600461258b565b6102f4565b6101836104af565b6040516100f3919061267c565b6100b661019e36600461278e565b61053d565b61010f6101b1366004612415565b60016020526000908152604090205481565b604051632974974360e01b815260040160405180910390fd5b6000818152600160205260408120545b92915050565b6101fe848484846106ff565b50505050565b60006102148a8a8a8a87876102f4565b610220575060006102e7565b60006102776102728a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061026d91508290508d61281c565b610801565b61094a565b9050600061029e8260038151811061029157610291612833565b6020026020010151610958565b905086866040516102b0929190612849565b60405180910390206102da828a815181106102cd576102cd612833565b6020026020010151610b7b565b8051906020012014925050505b9998505050505050505050565b60008080808061030686880188612a05565b9350935093509350306001600160a01b031663c2f0329f610337866020015160009081526001602052604090205490565b60001b6103d76000805461034a90612be6565b80601f016020809104026020016040519081016040528092919081815260200182805461037690612be6565b80156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b5050505050856001600160401b0316610b91565b604080516020810188905201604051602081830303815290604052886040518563ffffffff1660e01b81526004016104129493929190612c1a565b60006040518083038186803b15801561042a57600080fd5b505afa15801561043e573d6000803e3d6000fd5b505050506104a08b8b604051602001610458929190612849565b60408051601f198184030181526020601f8d018190048102840181019092528b835291908c908c9081908401838280828437600092019190915250889250879150610bc59050565b9b9a5050505050505050505050565b600080546104bc90612be6565b80601f01602080910402602001604051908101604052809291908181526020018280546104e890612be6565b80156105355780601f1061050a57610100808354040283529160200191610535565b820191906000526020600020905b81548152906001019060200180831161051857829003601f168201915b505050505081565b6105478180612d7c565b600081811061055857610558612833565b905060200281019061056a9190612dc5565b610578906020810190612de5565b604051610586929190612849565b60405180910390208380519060200120146105b45760405163026a287560e51b815260040160405180910390fd5b6105be8180612d7c565b60008181106105cf576105cf612833565b90506020028101906105e19190612dc5565b6105ef906040810190612de5565b6040516105fd929190612849565b604051809103902082805190602001201461062b576040516310d9300f60e11b815260040160405180910390fd5b6106606106388280612d7c565b600081811061064957610649612833565b905060200281019061065b9190612dc5565b610bf5565b61066a8280612d7c565b600181811061067b5761067b612833565b905060200281019061068d9190612dc5565b61069b906040810190612de5565b6106a491612e2b565b146106c257604051636589f0e160e11b815260040160405180910390fd5b6106e06106cf8280612d7c565b600181811061064957610649612833565b84146101fe576040516392cb8fbb60e01b815260040160405180910390fd5b6000828152600160205260409020541561074657600082815260016020526040902054811461074157604051631549535560e01b815260040160405180910390fd5b6101fe565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8d90039838361078560206000898b612e49565b61078e91612e2b565b61079b886020818c612e49565b6040518663ffffffff1660e01b81526004016107bb959493929190612e73565b600060405180830381600087803b1580156107d557600080fd5b505af11580156107e9573d6000803e3d6000fd5b50505060009283525060016020526040909120555050565b60608182601f01101561084c5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064015b60405180910390fd5b82828401101561088f5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610843565b818301845110156108d65760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610843565b6060821580156108f5576040519150600082526020820160405261093f565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561092e578051835260209283019201610916565b5050858452601f01601f1916604052505b5090505b9392505050565b60606101ec61095883610e19565b6060600080600061096885610e6c565b9194509250905060018160018111156109835761098361247e565b146109f65760405162461bcd60e51b815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610843565b8451610a028385612eb7565b14610a6a5760405162461bcd60e51b815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e76616044820152713634b2103230ba30903932b6b0b4b73232b960711b6064820152608401610843565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081610a815790505093506000835b8651811015610b6f57600080610af46040518060400160405280858c60000151610ad8919061281c565b8152602001858c60200151610aed9190612eb7565b9052610e6c565b509150915060405180604001604052808383610b109190612eb7565b8152602001848b60200151610b259190612eb7565b815250888581518110610b3a57610b3a612833565b6020908102919091010152610b50600185612eb7565b9350610b5c8183612eb7565b610b669084612eb7565b92505050610aae565b50845250919392505050565b60606101ec82602001516000846000015161152f565b606082610b9d836115c2565b604051602001610bae929190612ecf565b604051602081830303815290604052905092915050565b6000610bec84610bd68786866116d6565b8051602091820120825192909101919091201490565b95945050505050565b6000806002610c076040850185612de5565b604051610c15929190612849565b602060405180830381855afa158015610c32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c559190612f2a565b90506002610c666060850185612de5565b610c7d610c766020880188612de5565b9050611f6c565b610c8a6020880188612de5565b610c946020611f6c565b87604051602001610cab9796959493929190612f43565b60408051601f1981840301815290829052610cc591612f90565b602060405180830381855afa158015610ce2573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d059190612f2a565b915060005b610d148480612d7c565b9050811015610e12576002610d298580612d7c565b83818110610d3957610d39612833565b9050602002810190610d4b9190612fa2565b610d559080612de5565b85610d608880612d7c565b86818110610d7057610d70612833565b9050602002810190610d829190612fa2565b610d90906020810190612de5565b604051602001610da4959493929190612fb8565b60408051601f1981840301815290829052610dbe91612f90565b602060405180830381855afa158015610ddb573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610dfe9190612f2a565b925080610e0a81612fe0565b915050610d0a565b5050919050565b60408051808201909152600080825260208201526000825111610e4e5760405162461bcd60e51b815260040161084390612ff9565b50604080518082019091528151815260209182019181019190915290565b600080600080846000015111610e945760405162461bcd60e51b815260040161084390612ff9565b6020840151805160001a607f8111610eb9576000600160009450945094505050611528565b60b78111611016576000610ece60808361281c565b905080876000015111610f4e5760405162461bcd60e51b815260206004820152604e602482015260008051602061313383398151915260448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201526d2873686f727420737472696e672960901b608482015260a401610843565b6001838101516001600160f81b0319169082141580610f7b5750600160ff1b6001600160f81b0319821610155b6110035760405162461bcd60e51b815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201526c73686f727420737472696e672960981b608482015260a401610843565b5060019550935060009250611528915050565b60bf811161125757600061102b60b78361281c565b9050808760000151116110ae5760405162461bcd60e51b8152602060048201526051602482015260008051602061313383398151915260448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527067746820286c6f6e6720737472696e672960781b608482015260a401610843565b60018301516001600160f81b03191660008190036111355760405162461bcd60e51b815260206004820152604a602482015260008051602061313383398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152696e6720737472696e672960b01b608482015260a401610843565b600184015160088302610100031c603781116111b85760405162461bcd60e51b8152602060048201526048602482015260008051602061313383398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201526720737472696e672960c01b608482015260a401610843565b6111c28184612eb7565b89511161123a5760405162461bcd60e51b815260206004820152604c602482015260008051602061313383398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201526b6c6f6e6720737472696e672960a01b608482015260a401610843565b611245836001612eb7565b97509550600094506115289350505050565b60f781116112f957600061126c60c08361281c565b9050808760000151116112e85760405162461bcd60e51b815260206004820152604a602482015260008051602061313383398151915260448201527f742062652067726561746572207468616e206c697374206c656e677468202873606482015269686f7274206c6973742960b01b608482015260a401610843565b600195509350849250611528915050565b600061130660f78361281c565b9050808760000151116113855760405162461bcd60e51b815260206004820152604d602482015260008051602061313383398151915260448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201526c6820286c6f6e67206c6973742960981b608482015260a401610843565b60018301516001600160f81b031916600081900361140a5760405162461bcd60e51b8152602060048201526048602482015260008051602061313383398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152676e67206c6973742960c01b608482015260a401610843565b600184015160088302610100031c6037811161148b5760405162461bcd60e51b8152602060048201526046602482015260008051602061313383398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e67606482015265206c6973742960d01b608482015260a401610843565b6114958184612eb7565b89511161150b5760405162461bcd60e51b815260206004820152604a602482015260008051602061313383398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e67746820286064820152696c6f6e67206c6973742960b01b608482015260a401610843565b611516836001612eb7565b97509550600194506115289350505050565b9193909250565b6060816001600160401b038111156115495761154961268f565b6040519080825280601f01601f191660200182016040528015611573576020820181803683370190505b50905081156109435760006115888486612eb7565b90506020820160005b848110156115a9578281015182820152602001611591565b848111156115b8576000858301525b5050509392505050565b6060816000036115e95750506040805180820190915260018152600360fc1b602082015290565b6000825b801561161357816115fd81612fe0565b925061160c9050600a8261307f565b90506115ed565b6000826001600160401b0381111561162d5761162d61268f565b6040519080825280601f01601f191660200182016040528015611657576020820181803683370190505b509050825b80156116cd5761166d600a87613093565b611678906030612eb7565b60f81b8261168760018461281c565b8151811061169757611697612833565b60200101906001600160f81b031916908160001a9053506116b9600a8761307f565b9550806116c5816130a7565b91505061165c565b50949350505050565b606060008451116117215760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b6044820152606401610843565b600061172c84611fdb565b90506000611739866120bf565b905060008460405160200161175091815260200190565b60405160208183030381529060405290506000805b8451811015611f1557600085828151811061178257611782612833565b6020026020010151905084518311156117f45760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b6064820152608401610843565b8260000361189357805180516020918201206040516118429261181c92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61188e5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610843565b611989565b80515160201161191957805180516020918201206040516118bd9261181c92910190815260200190565b61188e5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b6064820152608401610843565b8051845160208087019190912082519190920120146119895760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b6064820152608401610843565b61199560106001612eb7565b81602001515103611b3d5784518303611ad5576119cf81602001516010815181106119c2576119c2612833565b6020026020010151612122565b96506000875111611a485760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610843565b60018651611a56919061281c565b8214611aca5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610843565b505050505050610943565b6000858481518110611ae957611ae9612833565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110611b1457611b14612833565b60200260200101519050611b2781612245565b9550611b34600186612eb7565b94505050611f02565b600281602001515103611ea9576000611b558261226a565b9050600081600081518110611b6c57611b6c612833565b016020015160f81c90506000611b836002836130be565b611b8e9060026130e0565b90506000611b9f848360ff1661228e565b90506000611bad8a8961228e565b90506000611bbb83836122bf565b905080835114611c335760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610843565b60ff851660021480611c48575060ff85166003145b15611de95780825114611cc35760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610843565b611cdd87602001516001815181106119c2576119c2612833565b9c5060008d5111611d565760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610843565b60018c51611d64919061281c565b8814611dd85760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610843565b505050505050505050505050610943565b60ff85161580611dfc575060ff85166001145b15611e3b57611e288760200151600181518110611e1b57611e1b612833565b6020026020010151612245565b9950611e34818a612eb7565b9850611e9e565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b6064820152608401610843565b505050505050611f02565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b6064820152608401610843565b5080611f0d81612fe0565b915050611765565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b6064820152608401610843565b6060805b60808310611fae578083607f1660801760f81b604051602001611f94929190613103565b60408051601f198184030190525260079290921c91611f70565b808360f81b604051602001611fc4929190613103565b604051602081830303815290604052915050919050565b8051606090806001600160401b03811115611ff857611ff861268f565b60405190808252806020026020018201604052801561203d57816020015b60408051808201909152606080825260208201528152602001906001900390816120165790505b50915060005b81811015610e1257604051806040016040528085838151811061206857612068612833565b6020026020010151815260200161209786848151811061208a5761208a612833565b602002602001015161094a565b8152508382815181106120ac576120ac612833565b6020908102919091010152600101612043565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015612117578060011b82018184015160001a8060041c8253600f8116600183015350506001016120e9565b509295945050505050565b6060600080600061213285610e6c565b91945092509050600081600181111561214d5761214d61247e565b146121c05760405162461bcd60e51b815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610843565b6121ca8284612eb7565b8551146122365760405162461bcd60e51b815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527330b71034b73b30b634b2103932b6b0b4b73232b960611b6064820152608401610843565b610bec8560200151848461152f565b606060208260000151106122615761225c82612122565b6101ec565b6101ec82610b7b565b60606101ec61228983602001516000815181106119c2576119c2612833565b6120bf565b6060825182106122ad57506040805160208101909152600081526101ec565b610943838384865161026d919061281c565b60008082518451106122d25782516122d5565b83515b90505b808210801561232c57508282815181106122f4576122f4612833565b602001015160f81c60f81b6001600160f81b03191684838151811061231b5761231b612833565b01602001516001600160f81b031916145b1561233c578160010191506122d8565b5092915050565b60008083601f84011261235557600080fd5b5081356001600160401b0381111561236c57600080fd5b60208301915083602082850101111561238457600080fd5b9250929050565b60006040828403121561239d57600080fd5b50919050565b600080600080606085870312156123b957600080fd5b8435935060208501356001600160401b03808211156123d757600080fd5b6123e388838901612343565b909550935060408701359150808211156123fc57600080fd5b506124098782880161238b565b91505092959194509250565b60006020828403121561242757600080fd5b5035919050565b6000806000806060858703121561244457600080fd5b84356001600160401b0381111561245a57600080fd5b61246687828801612343565b90989097506020870135966040013595509350505050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106124b657634e487b7160e01b600052602160045260246000fd5b91905290565b600080600080600080600080600060a08a8c0312156124da57600080fd5b89356001600160401b03808211156124f157600080fd5b6124fd8d838e01612343565b909b50995060208c013591508082111561251657600080fd5b6125228d838e01612343565b909950975060408c0135965060608c013591508082111561254257600080fd5b61254e8d838e01612343565b909650945060808c013591508082111561256757600080fd5b506125748c828d01612343565b915080935050809150509295985092959850929598565b600080600080600080606087890312156125a457600080fd5b86356001600160401b03808211156125bb57600080fd5b6125c78a838b01612343565b909850965060208901359150808211156125e057600080fd5b6125ec8a838b01612343565b9096509450604089013591508082111561260557600080fd5b5061261289828a01612343565b979a9699509497509295939492505050565b60005b8381101561263f578181015183820152602001612627565b838111156101fe5750506000910152565b60008151808452612668816020860160208601612624565b601f01601f19169290920160200192915050565b6020815260006109436020830184612650565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156126c7576126c761268f565b60405290565b604051608081016001600160401b03811182821017156126c7576126c761268f565b604051601f8201601f191681016001600160401b03811182821017156127175761271761268f565b604052919050565b600082601f83011261273057600080fd5b81356001600160401b038111156127495761274961268f565b61275c601f8201601f19166020016126ef565b81815284602083860101111561277157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156127a457600080fd5b8435935060208501356001600160401b03808211156127c257600080fd5b6127ce8883890161271f565b945060408701359150808211156127e457600080fd5b6127f08883890161271f565b935060608701359150808211156123fc57600080fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561282e5761282e612806565b500390565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b60006001600160401b038211156128725761287261268f565b5060051b60200190565b600082601f83011261288d57600080fd5b813560206128a261289d83612859565b6126ef565b82815260059290921b840181019181810190868411156128c157600080fd5b8286015b8481101561295f5780356001600160401b03808211156128e55760008081fd5b908801906040828b03601f19018113156128ff5760008081fd5b6129076126a5565b87840135838111156129195760008081fd5b6129278d8a8388010161271f565b82525090830135908282111561293d5760008081fd5b61294b8c898487010161271f565b8189015286525050509183019183016128c5565b509695505050505050565b600082601f83011261297b57600080fd5b8135602061298b61289d83612859565b82815260059290921b840181019181810190868411156129aa57600080fd5b8286015b8481101561295f5780356001600160401b038111156129cd5760008081fd5b6129db8986838b010161271f565b8452509183019183016129ae565b80356001600160401b0381168114612a0057600080fd5b919050565b60008060008060808587031215612a1b57600080fd5b6001600160401b038086351115612a3157600080fd5b60408635870188031215612a4457600080fd5b612a4c6126a5565b8187358801351115612a5d57600080fd5b86358701803501601f81018913612a7357600080fd5b612a8061289d8235612859565b81358082526020808301929160051b8401018b1015612a9e57600080fd5b602083015b6020843560051b850101811015612b91578581351115612ac257600080fd5b803584016080818e03601f19011215612ada57600080fd5b612ae26126cd565b8760208301351115612af357600080fd5b612b058e60208085013585010161287c565b81528760408301351115612b1857600080fd5b612b2b8e6020604085013585010161271f565b60208201528760608301351115612b4157600080fd5b612b548e6020606085013585010161271f565b60408201528760808301351115612b6a57600080fd5b612b7d8e6020608085013585010161271f565b606082015284525060209283019201612aa3565b508352505060208735880181013581830152909550860135811015612bb557600080fd5b50612bc6866020870135870161296a565b925060408501359150612bdb606086016129e9565b905092959194509250565b600181811c90821680612bfa57607f821691505b60208210810361239d57634e487b7160e01b600052602260045260246000fd5b84815260006020608081840152612c346080840187612650565b8381036040850152612c468187612650565b905083810360608501526040810185516040835281815180845260608501915060608160051b8601019350858301925060005b81811015612d6757605f19868603018352835180516080808852815190880181905260a0600582901b89018101928b01919089019060005b81811015612d0457609f198b86030183528351805160408752612cd76040880182612650565b90508e82015191508681038f880152612cf08183612650565b96505050928c0192918c0191600101612cb1565b50505050888201518782038a890152612d1d8282612650565b91505060408201518782036040890152612d378282612650565b915050606082015191508681036060880152612d538183612650565b965050509286019291860191600101612c79565b50505050948201519101525090949350505050565b6000808335601e19843603018112612d9357600080fd5b8301803591506001600160401b03821115612dad57600080fd5b6020019150600581901b360382131561238457600080fd5b60008235607e19833603018112612ddb57600080fd5b9190910192915050565b6000808335601e19843603018112612dfc57600080fd5b8301803591506001600160401b03821115612e1657600080fd5b60200191503681900382131561238457600080fd5b803560208310156101ec57600019602084900360031b1b1692915050565b60008085851115612e5957600080fd5b83861115612e6657600080fd5b5050820193919092039150565b85815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60008219821115612eca57612eca612806565b500190565b66636c69656e742f60c81b815260008351612ef1816007850160208801612624565b6c2f72656365697074526f6f742f60981b6007918401918201528351612f1e816014840160208801612624565b01601401949350505050565b600060208284031215612f3c57600080fd5b5051919050565b868882376000878201600081528751612f60818360208c01612624565b018587823760009086019081528451612f7d818360208901612624565b0192835250506020019695505050505050565b60008251612ddb818460208701612624565b60008235603e19833603018112612ddb57600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201612ff257612ff2612806565b5060010190565b6020808252604a908201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60408201527f206d7573742062652067726561746572207468616e207a65726f20746f206265606082015269206465636f6461626c6560b01b608082015260a00190565b634e487b7160e01b600052601260045260246000fd5b60008261308e5761308e613069565b500490565b6000826130a2576130a2613069565b500690565b6000816130b6576130b6612806565b506000190190565b600060ff8316806130d1576130d1613069565b8060ff84160691505092915050565b600060ff821660ff8416808210156130fa576130fa612806565b90039392505050565b60008351613115818460208801612624565b6001600160f81b031993909316919092019081526001019291505056fe524c505265616465723a206c656e677468206f6620636f6e74656e74206d7573a264697066735822122010630dddd17e03511b6f13c5922cf056d9d6f7f378291a3401ee8e01d104d1ec64736f6c634300080f0033"; + "0x60a06040523480156200001157600080fd5b506040516200347f3803806200347f83398101604081905262000034916200006e565b6001600160a01b03821660805260006200004f8282620001fd565b505050620002c9565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200008257600080fd5b82516001600160a01b03811681146200009a57600080fd5b602084810151919350906001600160401b0380821115620000ba57600080fd5b818601915086601f830112620000cf57600080fd5b815181811115620000e457620000e462000058565b604051601f8201601f19908116603f011681019083821181831017156200010f576200010f62000058565b8160405282815289868487010111156200012857600080fd5b600093505b828410156200014c57848401860151818501870152928501926200012d565b828411156200015e5760008684830101525b8096505050505050509250929050565b600181811c908216806200018357607f821691505b602082108103620001a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f857600081815260208120601f850160051c81016020861015620001d35750805b601f850160051c820191505b81811015620001f457828155600101620001df565b5050505b505050565b81516001600160401b0381111562000219576200021962000058565b62000231816200022a84546200016e565b84620001aa565b602080601f831160018114620002695760008415620002505750858301515b600019600386901b1c1916600185901b178555620001f4565b600085815260208120601f198616915b828110156200029a5788860151825594840194600190910190840162000279565b5085821015620002b95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051613194620002eb6000396000818160bd015261075c01526131946000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806381ce4d341161006657806381ce4d34146101455780638553287214610168578063a2198c951461017b578063c2f0329f14610190578063c67e15f7146101a357600080fd5b80632a6ded74146100a35780632b7ac3f3146100b857806344c9af28146100fc57806349ff245e1461011d57806357c1c5f414610130575b600080fd5b6100b66100b13660046123af565b6101c3565b005b6100df7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61010f61010a366004612421565b6101dc565b6040519081526020016100f3565b6100b661012b36600461243a565b6101f2565b610138600281565b6040516100f391906124a0565b6101586101533660046124c8565b610204565b60405190151581526020016100f3565b610158610176366004612597565b6102f4565b6101836104bb565b6040516100f39190612688565b6100b661019e36600461279a565b610549565b61010f6101b1366004612421565b60016020526000908152604090205481565b604051632974974360e01b815260040160405180910390fd5b6000818152600160205260408120545b92915050565b6101fe8484848461070b565b50505050565b60006102148a8a8a8a87876102f4565b610220575060006102e7565b60006102776102728a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061026d91508290508d612828565b61080d565b610956565b9050600061029e826003815181106102915761029161283f565b6020026020010151610964565b905086866040516102b0929190612855565b60405180910390206102da828a815181106102cd576102cd61283f565b6020026020010151610b87565b8051906020012014925050505b9998505050505050505050565b60008080808061030686880188612a11565b9350935093509350306001600160a01b031663c2f0329f610343600187602001516103319190612828565b60009081526001602052604090205490565b60001b6103e36000805461035690612bf2565b80601f016020809104026020016040519081016040528092919081815260200182805461038290612bf2565b80156103cf5780601f106103a4576101008083540402835291602001916103cf565b820191906000526020600020905b8154815290600101906020018083116103b257829003601f168201915b5050505050856001600160401b0316610b9d565b604080516020810188905201604051602081830303815290604052886040518563ffffffff1660e01b815260040161041e9493929190612c26565b60006040518083038186803b15801561043657600080fd5b505afa15801561044a573d6000803e3d6000fd5b505050506104ac8b8b604051602001610464929190612855565b60408051601f198184030181526020601f8d018190048102840181019092528b835291908c908c9081908401838280828437600092019190915250889250879150610bd19050565b9b9a5050505050505050505050565b600080546104c890612bf2565b80601f01602080910402602001604051908101604052809291908181526020018280546104f490612bf2565b80156105415780601f1061051657610100808354040283529160200191610541565b820191906000526020600020905b81548152906001019060200180831161052457829003601f168201915b505050505081565b6105538180612d88565b60008181106105645761056461283f565b90506020028101906105769190612dd1565b610584906020810190612df1565b604051610592929190612855565b60405180910390208380519060200120146105c05760405163026a287560e51b815260040160405180910390fd5b6105ca8180612d88565b60008181106105db576105db61283f565b90506020028101906105ed9190612dd1565b6105fb906040810190612df1565b604051610609929190612855565b6040518091039020828051906020012014610637576040516310d9300f60e11b815260040160405180910390fd5b61066c6106448280612d88565b60008181106106555761065561283f565b90506020028101906106679190612dd1565b610c01565b6106768280612d88565b60018181106106875761068761283f565b90506020028101906106999190612dd1565b6106a7906040810190612df1565b6106b091612e37565b146106ce57604051636589f0e160e11b815260040160405180910390fd5b6106ec6106db8280612d88565b60018181106106555761065561283f565b84146101fe576040516392cb8fbb60e01b815260040160405180910390fd5b6000828152600160205260409020541561075257600082815260016020526040902054811461074d57604051631549535560e01b815260040160405180910390fd5b6101fe565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8d90039838361079160206000898b612e55565b61079a91612e37565b6107a7886020818c612e55565b6040518663ffffffff1660e01b81526004016107c7959493929190612e7f565b600060405180830381600087803b1580156107e157600080fd5b505af11580156107f5573d6000803e3d6000fd5b50505060009283525060016020526040909120555050565b60608182601f0110156108585760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064015b60405180910390fd5b82828401101561089b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161084f565b818301845110156108e25760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161084f565b606082158015610901576040519150600082526020820160405261094b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561093a578051835260209283019201610922565b5050858452601f01601f1916604052505b5090505b9392505050565b60606101ec61096483610e25565b6060600080600061097485610e78565b91945092509050600181600181111561098f5761098f61248a565b14610a025760405162461bcd60e51b815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161084f565b8451610a0e8385612ec3565b14610a765760405162461bcd60e51b815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e76616044820152713634b2103230ba30903932b6b0b4b73232b960711b606482015260840161084f565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081610a8d5790505093506000835b8651811015610b7b57600080610b006040518060400160405280858c60000151610ae49190612828565b8152602001858c60200151610af99190612ec3565b9052610e78565b509150915060405180604001604052808383610b1c9190612ec3565b8152602001848b60200151610b319190612ec3565b815250888581518110610b4657610b4661283f565b6020908102919091010152610b5c600185612ec3565b9350610b688183612ec3565b610b729084612ec3565b92505050610aba565b50845250919392505050565b60606101ec82602001516000846000015161153b565b606082610ba9836115ce565b604051602001610bba929190612edb565b604051602081830303815290604052905092915050565b6000610bf884610be28786866116e2565b8051602091820120825192909101919091201490565b95945050505050565b6000806002610c136040850185612df1565b604051610c21929190612855565b602060405180830381855afa158015610c3e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c619190612f36565b90506002610c726060850185612df1565b610c89610c826020880188612df1565b9050611f78565b610c966020880188612df1565b610ca06020611f78565b87604051602001610cb79796959493929190612f4f565b60408051601f1981840301815290829052610cd191612f9c565b602060405180830381855afa158015610cee573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d119190612f36565b915060005b610d208480612d88565b9050811015610e1e576002610d358580612d88565b83818110610d4557610d4561283f565b9050602002810190610d579190612fae565b610d619080612df1565b85610d6c8880612d88565b86818110610d7c57610d7c61283f565b9050602002810190610d8e9190612fae565b610d9c906020810190612df1565b604051602001610db0959493929190612fc4565b60408051601f1981840301815290829052610dca91612f9c565b602060405180830381855afa158015610de7573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e0a9190612f36565b925080610e1681612fec565b915050610d16565b5050919050565b60408051808201909152600080825260208201526000825111610e5a5760405162461bcd60e51b815260040161084f90613005565b50604080518082019091528151815260209182019181019190915290565b600080600080846000015111610ea05760405162461bcd60e51b815260040161084f90613005565b6020840151805160001a607f8111610ec5576000600160009450945094505050611534565b60b78111611022576000610eda608083612828565b905080876000015111610f5a5760405162461bcd60e51b815260206004820152604e602482015260008051602061313f83398151915260448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201526d2873686f727420737472696e672960901b608482015260a40161084f565b6001838101516001600160f81b0319169082141580610f875750600160ff1b6001600160f81b0319821610155b61100f5760405162461bcd60e51b815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201526c73686f727420737472696e672960981b608482015260a40161084f565b5060019550935060009250611534915050565b60bf811161126357600061103760b783612828565b9050808760000151116110ba5760405162461bcd60e51b8152602060048201526051602482015260008051602061313f83398151915260448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527067746820286c6f6e6720737472696e672960781b608482015260a40161084f565b60018301516001600160f81b03191660008190036111415760405162461bcd60e51b815260206004820152604a602482015260008051602061313f83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152696e6720737472696e672960b01b608482015260a40161084f565b600184015160088302610100031c603781116111c45760405162461bcd60e51b8152602060048201526048602482015260008051602061313f83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201526720737472696e672960c01b608482015260a40161084f565b6111ce8184612ec3565b8951116112465760405162461bcd60e51b815260206004820152604c602482015260008051602061313f83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201526b6c6f6e6720737472696e672960a01b608482015260a40161084f565b611251836001612ec3565b97509550600094506115349350505050565b60f7811161130557600061127860c083612828565b9050808760000151116112f45760405162461bcd60e51b815260206004820152604a602482015260008051602061313f83398151915260448201527f742062652067726561746572207468616e206c697374206c656e677468202873606482015269686f7274206c6973742960b01b608482015260a40161084f565b600195509350849250611534915050565b600061131260f783612828565b9050808760000151116113915760405162461bcd60e51b815260206004820152604d602482015260008051602061313f83398151915260448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201526c6820286c6f6e67206c6973742960981b608482015260a40161084f565b60018301516001600160f81b03191660008190036114165760405162461bcd60e51b8152602060048201526048602482015260008051602061313f83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152676e67206c6973742960c01b608482015260a40161084f565b600184015160088302610100031c603781116114975760405162461bcd60e51b8152602060048201526046602482015260008051602061313f83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e67606482015265206c6973742960d01b608482015260a40161084f565b6114a18184612ec3565b8951116115175760405162461bcd60e51b815260206004820152604a602482015260008051602061313f83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e67746820286064820152696c6f6e67206c6973742960b01b608482015260a40161084f565b611522836001612ec3565b97509550600194506115349350505050565b9193909250565b6060816001600160401b038111156115555761155561269b565b6040519080825280601f01601f19166020018201604052801561157f576020820181803683370190505b509050811561094f5760006115948486612ec3565b90506020820160005b848110156115b557828101518282015260200161159d565b848111156115c4576000858301525b5050509392505050565b6060816000036115f55750506040805180820190915260018152600360fc1b602082015290565b6000825b801561161f578161160981612fec565b92506116189050600a8261308b565b90506115f9565b6000826001600160401b038111156116395761163961269b565b6040519080825280601f01601f191660200182016040528015611663576020820181803683370190505b509050825b80156116d957611679600a8761309f565b611684906030612ec3565b60f81b82611693600184612828565b815181106116a3576116a361283f565b60200101906001600160f81b031916908160001a9053506116c5600a8761308b565b9550806116d1816130b3565b915050611668565b50949350505050565b6060600084511161172d5760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b604482015260640161084f565b600061173884611fe7565b90506000611745866120cb565b905060008460405160200161175c91815260200190565b60405160208183030381529060405290506000805b8451811015611f2157600085828151811061178e5761178e61283f565b6020026020010151905084518311156118005760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b606482015260840161084f565b8260000361189f578051805160209182012060405161184e9261182892910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161084f565b611995565b80515160201161192557805180516020918201206040516118c99261182892910190815260200190565b61189a5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b606482015260840161084f565b8051845160208087019190912082519190920120146119955760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b606482015260840161084f565b6119a160106001612ec3565b81602001515103611b495784518303611ae1576119db81602001516010815181106119ce576119ce61283f565b602002602001015161212e565b96506000875111611a545760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161084f565b60018651611a629190612828565b8214611ad65760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161084f565b50505050505061094f565b6000858481518110611af557611af561283f565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110611b2057611b2061283f565b60200260200101519050611b3381612251565b9550611b40600186612ec3565b94505050611f0e565b600281602001515103611eb5576000611b6182612276565b9050600081600081518110611b7857611b7861283f565b016020015160f81c90506000611b8f6002836130ca565b611b9a9060026130ec565b90506000611bab848360ff1661229a565b90506000611bb98a8961229a565b90506000611bc783836122cb565b905080835114611c3f5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161084f565b60ff851660021480611c54575060ff85166003145b15611df55780825114611ccf5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161084f565b611ce987602001516001815181106119ce576119ce61283f565b9c5060008d5111611d625760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161084f565b60018c51611d709190612828565b8814611de45760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161084f565b50505050505050505050505061094f565b60ff85161580611e08575060ff85166001145b15611e4757611e348760200151600181518110611e2757611e2761283f565b6020026020010151612251565b9950611e40818a612ec3565b9850611eaa565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b606482015260840161084f565b505050505050611f0e565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b606482015260840161084f565b5080611f1981612fec565b915050611771565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b606482015260840161084f565b6060805b60808310611fba578083607f1660801760f81b604051602001611fa092919061310f565b60408051601f198184030190525260079290921c91611f7c565b808360f81b604051602001611fd092919061310f565b604051602081830303815290604052915050919050565b8051606090806001600160401b038111156120045761200461269b565b60405190808252806020026020018201604052801561204957816020015b60408051808201909152606080825260208201528152602001906001900390816120225790505b50915060005b81811015610e1e5760405180604001604052808583815181106120745761207461283f565b602002602001015181526020016120a38684815181106120965761209661283f565b6020026020010151610956565b8152508382815181106120b8576120b861283f565b602090810291909101015260010161204f565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015612123578060011b82018184015160001a8060041c8253600f8116600183015350506001016120f5565b509295945050505050565b6060600080600061213e85610e78565b9194509250905060008160018111156121595761215961248a565b146121cc5760405162461bcd60e51b815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161084f565b6121d68284612ec3565b8551146122425760405162461bcd60e51b815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527330b71034b73b30b634b2103932b6b0b4b73232b960611b606482015260840161084f565b610bf88560200151848461153b565b6060602082600001511061226d576122688261212e565b6101ec565b6101ec82610b87565b60606101ec61229583602001516000815181106119ce576119ce61283f565b6120cb565b6060825182106122b957506040805160208101909152600081526101ec565b61094f838384865161026d9190612828565b60008082518451106122de5782516122e1565b83515b90505b808210801561233857508282815181106123005761230061283f565b602001015160f81c60f81b6001600160f81b0319168483815181106123275761232761283f565b01602001516001600160f81b031916145b15612348578160010191506122e4565b5092915050565b60008083601f84011261236157600080fd5b5081356001600160401b0381111561237857600080fd5b60208301915083602082850101111561239057600080fd5b9250929050565b6000604082840312156123a957600080fd5b50919050565b600080600080606085870312156123c557600080fd5b8435935060208501356001600160401b03808211156123e357600080fd5b6123ef8883890161234f565b9095509350604087013591508082111561240857600080fd5b5061241587828801612397565b91505092959194509250565b60006020828403121561243357600080fd5b5035919050565b6000806000806060858703121561245057600080fd5b84356001600160401b0381111561246657600080fd5b6124728782880161234f565b90989097506020870135966040013595509350505050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106124c257634e487b7160e01b600052602160045260246000fd5b91905290565b600080600080600080600080600060a08a8c0312156124e657600080fd5b89356001600160401b03808211156124fd57600080fd5b6125098d838e0161234f565b909b50995060208c013591508082111561252257600080fd5b61252e8d838e0161234f565b909950975060408c0135965060608c013591508082111561254e57600080fd5b61255a8d838e0161234f565b909650945060808c013591508082111561257357600080fd5b506125808c828d0161234f565b915080935050809150509295985092959850929598565b600080600080600080606087890312156125b057600080fd5b86356001600160401b03808211156125c757600080fd5b6125d38a838b0161234f565b909850965060208901359150808211156125ec57600080fd5b6125f88a838b0161234f565b9096509450604089013591508082111561261157600080fd5b5061261e89828a0161234f565b979a9699509497509295939492505050565b60005b8381101561264b578181015183820152602001612633565b838111156101fe5750506000910152565b60008151808452612674816020860160208601612630565b601f01601f19169290920160200192915050565b60208152600061094f602083018461265c565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156126d3576126d361269b565b60405290565b604051608081016001600160401b03811182821017156126d3576126d361269b565b604051601f8201601f191681016001600160401b03811182821017156127235761272361269b565b604052919050565b600082601f83011261273c57600080fd5b81356001600160401b038111156127555761275561269b565b612768601f8201601f19166020016126fb565b81815284602083860101111561277d57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156127b057600080fd5b8435935060208501356001600160401b03808211156127ce57600080fd5b6127da8883890161272b565b945060408701359150808211156127f057600080fd5b6127fc8883890161272b565b9350606087013591508082111561240857600080fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561283a5761283a612812565b500390565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b60006001600160401b0382111561287e5761287e61269b565b5060051b60200190565b600082601f83011261289957600080fd5b813560206128ae6128a983612865565b6126fb565b82815260059290921b840181019181810190868411156128cd57600080fd5b8286015b8481101561296b5780356001600160401b03808211156128f15760008081fd5b908801906040828b03601f190181131561290b5760008081fd5b6129136126b1565b87840135838111156129255760008081fd5b6129338d8a8388010161272b565b8252509083013590828211156129495760008081fd5b6129578c898487010161272b565b8189015286525050509183019183016128d1565b509695505050505050565b600082601f83011261298757600080fd5b813560206129976128a983612865565b82815260059290921b840181019181810190868411156129b657600080fd5b8286015b8481101561296b5780356001600160401b038111156129d95760008081fd5b6129e78986838b010161272b565b8452509183019183016129ba565b80356001600160401b0381168114612a0c57600080fd5b919050565b60008060008060808587031215612a2757600080fd5b6001600160401b038086351115612a3d57600080fd5b60408635870188031215612a5057600080fd5b612a586126b1565b8187358801351115612a6957600080fd5b86358701803501601f81018913612a7f57600080fd5b612a8c6128a98235612865565b81358082526020808301929160051b8401018b1015612aaa57600080fd5b602083015b6020843560051b850101811015612b9d578581351115612ace57600080fd5b803584016080818e03601f19011215612ae657600080fd5b612aee6126d9565b8760208301351115612aff57600080fd5b612b118e602080850135850101612888565b81528760408301351115612b2457600080fd5b612b378e6020604085013585010161272b565b60208201528760608301351115612b4d57600080fd5b612b608e6020606085013585010161272b565b60408201528760808301351115612b7657600080fd5b612b898e6020608085013585010161272b565b606082015284525060209283019201612aaf565b508352505060208735880181013581830152909550860135811015612bc157600080fd5b50612bd28660208701358701612976565b925060408501359150612be7606086016129f5565b905092959194509250565b600181811c90821680612c0657607f821691505b6020821081036123a957634e487b7160e01b600052602260045260246000fd5b84815260006020608081840152612c40608084018761265c565b8381036040850152612c52818761265c565b905083810360608501526040810185516040835281815180845260608501915060608160051b8601019350858301925060005b81811015612d7357605f19868603018352835180516080808852815190880181905260a0600582901b89018101928b01919089019060005b81811015612d1057609f198b86030183528351805160408752612ce3604088018261265c565b90508e82015191508681038f880152612cfc818361265c565b96505050928c0192918c0191600101612cbd565b50505050888201518782038a890152612d29828261265c565b91505060408201518782036040890152612d43828261265c565b915050606082015191508681036060880152612d5f818361265c565b965050509286019291860191600101612c85565b50505050948201519101525090949350505050565b6000808335601e19843603018112612d9f57600080fd5b8301803591506001600160401b03821115612db957600080fd5b6020019150600581901b360382131561239057600080fd5b60008235607e19833603018112612de757600080fd5b9190910192915050565b6000808335601e19843603018112612e0857600080fd5b8301803591506001600160401b03821115612e2257600080fd5b60200191503681900382131561239057600080fd5b803560208310156101ec57600019602084900360031b1b1692915050565b60008085851115612e6557600080fd5b83861115612e7257600080fd5b5050820193919092039150565b85815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60008219821115612ed657612ed6612812565b500190565b66636c69656e742f60c81b815260008351612efd816007850160208801612630565b6c2f72656365697074526f6f742f60981b6007918401918201528351612f2a816014840160208801612630565b01601401949350505050565b600060208284031215612f4857600080fd5b5051919050565b868882376000878201600081528751612f6c818360208c01612630565b018587823760009086019081528451612f89818360208901612630565b0192835250506020019695505050505050565b60008251612de7818460208701612630565b60008235603e19833603018112612de757600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201612ffe57612ffe612812565b5060010190565b6020808252604a908201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60408201527f206d7573742062652067726561746572207468616e207a65726f20746f206265606082015269206465636f6461626c6560b01b608082015260a00190565b634e487b7160e01b600052601260045260246000fd5b60008261309a5761309a613075565b500490565b6000826130ae576130ae613075565b500690565b6000816130c2576130c2612812565b506000190190565b600060ff8316806130dd576130dd613075565b8060ff84160691505092915050565b600060ff821660ff84168082101561310657613106612812565b90039392505050565b60008351613121818460208801612630565b6001600160f81b031993909316919092019081526001019291505056fe524c505265616465723a206c656e677468206f6620636f6e74656e74206d7573a2646970667358221220e8399ae274e84ee9d18086dbcf4a1b243c0d88551eeb7447d217bc1d033bfa8064736f6c634300080f0033"; type CrossL2ProverConstructorParams = | [signer?: Signer] diff --git a/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts b/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts index f7b98640..6e41e173 100644 --- a/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts +++ b/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts @@ -312,7 +312,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162002dbc38038062002dbc83398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b612d20806200009c6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a1bb8b5146100515780632a6ded741461006657806359c1b56b14610079578063c2f0329f146100a8575b600080fd5b61006461005f3660046124d6565b6100bb565b005b610064610074366004612582565b6103bb565b60005461008c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100646100b63660046126d7565b6103d4565b6100cb606086016040870161274f565b6001600160401b0316816001600160401b0316146100fc57604051630fd8993960e21b815260040160405180910390fd5b610117610109868061276a565b610112916127ba565b61059c565b80519060200120821461013c5760405162fa512960e01b815260040160405180910390fd5b610146858061276a565b60088181106101575761015761283d565b90506020028101906101699190612853565b604051610177929190612899565b60405180910390206101a3866040016020810190610195919061274f565b6001600160401b03166105dd565b80519060200120146101c857604051633395483760e01b815260040160405180910390fd5b6101d2858061276a565b60038181106101e3576101e361283d565b90506020028101906101f59190612853565b604051610203929190612899565b6040518091039020610239866020013560405160200161022591815260200190565b6040516020818303038152906040526105f6565b805190602001201461025e576040516313d643bd60e21b815260040160405180910390fd5b6000805460405160609190911b6bffffffffffffffffffffffff191660208201526102c5906102c0906102bb9060340160408051601f198184030181529190526102a8898061276a565b6102b1916127ba565b8a6020013561064f565b610672565b6106ce565b9050600061033a86604001356040516020016102e391815260200190565b60408051601f19818403018152919052610300602089018961276a565b610309916127ba565b61032c8560028151811061031f5761031f61283d565b60200260200101516108f1565b610335906128a9565b61064f565b905061034d61034882610672565b6108f1565b610356906128a9565b6040805160006020820181905291810188905260608082019290925290880135608082015260a00160405160208183030381529060405280519060200120146103b2576040516330d26e5760e11b815260040160405180910390fd5b50505050505050565b604051632974974360e01b815260040160405180910390fd5b6103de818061276a565b60008181106103ef576103ef61283d565b905060200281019061040191906128cd565b61040f906020810190612853565b60405161041d929190612899565b604051809103902083805190602001201461044b5760405163026a287560e51b815260040160405180910390fd5b610455818061276a565b60008181106104665761046661283d565b905060200281019061047891906128cd565b610486906040810190612853565b604051610494929190612899565b60405180910390208280519060200120146104c2576040516310d9300f60e11b815260040160405180910390fd5b6104f76104cf828061276a565b60008181106104e0576104e061283d565b90506020028101906104f291906128cd565b610a14565b610501828061276a565b60018181106105125761051261283d565b905060200281019061052491906128cd565b610532906040810190612853565b61053b916128ed565b1461055957604051636589f0e160e11b815260040160405180910390fd5b610577610566828061276a565b60018181106104e0576104e061283d565b8414610596576040516392cb8fbb60e01b815260040160405180910390fd5b50505050565b60606105a782610c38565b90506105b5815160c0610d71565b816040516020016105c7929190612946565b6040516020818303038152906040529050919050565b60606105f06105eb83610f1c565b6105f6565b92915050565b60608151600114801561062357506080826000815181106106195761061961283d565b016020015160f81c105b1561062c575090565b61063882516080610d71565b826040516020016105c7929190612946565b919050565b6060600061065c85611048565b9050610669818585611064565b95945050505050565b604080518082019091526000808252602082015260008251116106b05760405162461bcd60e51b81526004016106a790612963565b60405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006106de856118f4565b9194509250905060018160018111156106f9576106f96129d3565b1461076c5760405162461bcd60e51b815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016106a7565b845161077883856129ff565b146107e05760405162461bcd60e51b815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e76616044820152713634b2103230ba30903932b6b0b4b73232b960711b60648201526084016106a7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816107f75790505093506000835b86518110156108e55760008061086a6040518060400160405280858c6000015161084e9190612a17565b8152602001858c6020015161086391906129ff565b90526118f4565b50915091506040518060400160405280838361088691906129ff565b8152602001848b6020015161089b91906129ff565b8152508885815181106108b0576108b061283d565b60209081029190910101526108c66001856129ff565b93506108d281836129ff565b6108dc90846129ff565b92505050610824565b50845250919392505050565b60606000806000610901856118f4565b91945092509050600081600181111561091c5761091c6129d3565b1461098f5760405162461bcd60e51b815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016106a7565b61099982846129ff565b855114610a055760405162461bcd60e51b815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527330b71034b73b30b634b2103932b6b0b4b73232b960611b60648201526084016106a7565b61066985602001518484611fb7565b6000806002610a266040850185612853565b604051610a34929190612899565b602060405180830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a749190612a2e565b90506002610a856060850185612853565b610a9c610a956020880188612853565b905061204a565b610aa96020880188612853565b610ab3602061204a565b87604051602001610aca9796959493929190612a47565b60408051601f1981840301815290829052610ae491612a8b565b602060405180830381855afa158015610b01573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b249190612a2e565b915060005b610b33848061276a565b9050811015610c31576002610b48858061276a565b83818110610b5857610b5861283d565b9050602002810190610b6a9190612a97565b610b749080612853565b85610b7f888061276a565b86818110610b8f57610b8f61283d565b9050602002810190610ba19190612a97565b610baf906020810190612853565b604051602001610bc3959493929190612aad565b60408051601f1981840301815290829052610bdd91612a8b565b602060405180830381855afa158015610bfa573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c1d9190612a2e565b925080610c2981612ad5565b915050610b29565b5050919050565b60608151600003610c5c5760408051600080825260208201909252905b5092915050565b6000805b8351811015610ca357838181518110610c7b57610c7b61283d565b60200260200101515182610c8f91906129ff565b915080610c9b81612ad5565b915050610c60565b816001600160401b03811115610cbb57610cbb612622565b6040519080825280601f01601f191660200182016040528015610ce5576020820181803683370190505b50925060009050602083015b8451821015610d69576000858381518110610d0e57610d0e61283d565b602002602001015190506000602082019050610d2c838284516120b9565b868481518110610d3e57610d3e61283d565b60200260200101515183610d5291906129ff565b925050508180610d6190612ad5565b925050610cf1565b505050919050565b60606038831015610dd75760408051600180825281830190925290602082018180368337019050509050610da58284612aee565b60f81b81600081518110610dbb57610dbb61283d565b60200101906001600160f81b031916908160001a9053506105f0565b600060015b610de68186612b29565b15610e0c5781610df581612ad5565b9250610e05905061010082612b3d565b9050610ddc565b610e178260016129ff565b6001600160401b03811115610e2e57610e2e612622565b6040519080825280601f01601f191660200182016040528015610e58576020820181803683370190505b509250610e658483612aee565b610e70906037612aee565b60f81b83600081518110610e8657610e8661283d565b60200101906001600160f81b031916908160001a905350600190505b818111610f1457610100610eb68284612a17565b610ec290610100612c40565b610ecc9087612b29565b610ed69190612c4c565b60f81b838281518110610eeb57610eeb61283d565b60200101906001600160f81b031916908160001a90535080610f0c81612ad5565b915050610ea2565b505092915050565b6060600082604051602001610f3391815260200190565b604051602081830303815290604052905060005b6020811015610f8a57818181518110610f6257610f6261283d565b01602001516001600160f81b031916600003610f8a5780610f8281612ad5565b915050610f47565b610f95816020612a17565b6001600160401b03811115610fac57610fac612622565b6040519080825280601f01601f191660200182016040528015610fd6576020820181803683370190505b50925060005b8351811015610d69578282610ff081612ad5565b9350815181106110025761100261283d565b602001015160f81c60f81b84828151811061101f5761101f61283d565b60200101906001600160f81b031916908160001a9053508061104081612ad5565b915050610fdc565b606081805190602001206040516020016105c791815260200190565b606060008451116110af5760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106a7565b60006110ba84612116565b905060006110c7866121fa565b90506000846040516020016110de91815260200190565b60405160208183030381529060405290506000805b84518110156118965760008582815181106111105761111061283d565b6020026020010151905084518311156111825760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106a7565b8260000361122157805180516020918201206040516111d0926111aa92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61121c5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106a7565b611317565b8051516020116112a7578051805160209182012060405161124b926111aa92910190815260200190565b61121c5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106a7565b8051845160208087019190912082519190920120146113175760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106a7565b611323601060016129ff565b816020015151036114be578451830361145657611350816020015160108151811061031f5761031f61283d565b965060008751116113c95760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106a7565b600186516113d79190612a17565b821461144b5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106a7565b5050505050506118ed565b600085848151811061146a5761146a61283d565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106114955761149561283d565b602002602001015190506114a88161225d565b95506114b56001866129ff565b94505050611883565b60028160200151510361182a5760006114d682612282565b90506000816000815181106114ed576114ed61283d565b016020015160f81c90506000611504600283612c60565b61150f906002612c82565b90506000611520848360ff166122a6565b9050600061152e8a896122a6565b9050600061153c83836122dc565b9050808351146115b45760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106a7565b60ff8516600214806115c9575060ff85166003145b1561176a57808251146116445760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106a7565b61165e876020015160018151811061031f5761031f61283d565b9c5060008d51116116d75760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106a7565b60018c516116e59190612a17565b88146117595760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106a7565b5050505050505050505050506118ed565b60ff8516158061177d575060ff85166001145b156117bc576117a9876020015160018151811061179c5761179c61283d565b602002602001015161225d565b99506117b5818a6129ff565b985061181f565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106a7565b505050505050611883565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106a7565b508061188e81612ad5565b9150506110f3565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106a7565b9392505050565b60008060008084600001511161191c5760405162461bcd60e51b81526004016106a790612963565b6020840151805160001a607f8111611941576000600160009450945094505050611fb0565b60b78111611a9e576000611956608083612a17565b9050808760000151116119d65760405162461bcd60e51b815260206004820152604e6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201526d2873686f727420737472696e672960901b608482015260a4016106a7565b6001838101516001600160f81b0319169082141580611a035750600160ff1b6001600160f81b0319821610155b611a8b5760405162461bcd60e51b815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201526c73686f727420737472696e672960981b608482015260a4016106a7565b5060019550935060009250611fb0915050565b60bf8111611cdf576000611ab360b783612a17565b905080876000015111611b365760405162461bcd60e51b81526020600482015260516024820152600080516020612ccb83398151915260448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527067746820286c6f6e6720737472696e672960781b608482015260a4016106a7565b60018301516001600160f81b0319166000819003611bbd5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152696e6720737472696e672960b01b608482015260a4016106a7565b600184015160088302610100031c60378111611c405760405162461bcd60e51b81526020600482015260486024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201526720737472696e672960c01b608482015260a4016106a7565b611c4a81846129ff565b895111611cc25760405162461bcd60e51b815260206004820152604c6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201526b6c6f6e6720737472696e672960a01b608482015260a4016106a7565b611ccd8360016129ff565b9750955060009450611fb09350505050565b60f78111611d81576000611cf460c083612a17565b905080876000015111611d705760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e206c697374206c656e677468202873606482015269686f7274206c6973742960b01b608482015260a4016106a7565b600195509350849250611fb0915050565b6000611d8e60f783612a17565b905080876000015111611e0d5760405162461bcd60e51b815260206004820152604d6024820152600080516020612ccb83398151915260448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201526c6820286c6f6e67206c6973742960981b608482015260a4016106a7565b60018301516001600160f81b0319166000819003611e925760405162461bcd60e51b81526020600482015260486024820152600080516020612ccb83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152676e67206c6973742960c01b608482015260a4016106a7565b600184015160088302610100031c60378111611f135760405162461bcd60e51b81526020600482015260466024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e67606482015265206c6973742960d01b608482015260a4016106a7565b611f1d81846129ff565b895111611f935760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e67746820286064820152696c6f6e67206c6973742960b01b608482015260a4016106a7565b611f9e8360016129ff565b9750955060019450611fb09350505050565b9193909250565b6060816001600160401b03811115611fd157611fd1612622565b6040519080825280601f01601f191660200182016040528015611ffb576020820181803683370190505b50905081156118ed57600061201084866129ff565b90506020820160005b84811015612031578281015182820152602001612019565b84811115612040576000858301525b5050509392505050565b6060805b6080831061208c578083607f1660801760f81b604051602001612072929190612ca5565b60408051601f198184030190525260079290921c9161204e565b808360f81b6040516020016120a2929190612ca5565b604051602081830303815290604052915050919050565b8282825b602081106120f557815183526120d46020846129ff565b92506120e16020836129ff565b91506120ee602082612a17565b90506120bd565b905182516020929092036101000a6000190180199091169116179052505050565b8051606090806001600160401b0381111561213357612133612622565b60405190808252806020026020018201604052801561217857816020015b60408051808201909152606080825260208201528152602001906001900390816121515790505b50915060005b81811015610c315760405180604001604052808583815181106121a3576121a361283d565b602002602001015181526020016121d28684815181106121c5576121c561283d565b6020026020010151612359565b8152508382815181106121e7576121e761283d565b602090810291909101015260010161217e565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015612252578060011b82018184015160001a8060041c8253600f811660018301535050600101612224565b509295945050505050565b6060602082600001511061227957612274826108f1565b6105f0565b6105f082612367565b60606105f06122a1836020015160008151811061031f5761031f61283d565b6121fa565b6060825182106122c557506040805160208101909152600081526105f0565b6118ed83838486516122d79190612a17565b61237d565b60008082518451106122ef5782516122f2565b83515b90505b808210801561234957508282815181106123115761231161283d565b602001015160f81c60f81b6001600160f81b0319168483815181106123385761233861283d565b01602001516001600160f81b031916145b15610c55578160010191506122f5565b60606105f06102c083610672565b60606105f0826020015160008460000151611fb7565b60608182601f0110156123c35760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106a7565b8282840110156124065760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106a7565b8183018451101561244d5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106a7565b60608215801561246c57604051915060008252602082016040526124b6565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124a557805183526020928301920161248d565b5050858452601f01601f1916604052505b50949350505050565b80356001600160401b038116811461064a57600080fd5b600080600080600060a086880312156124ee57600080fd5b85356001600160401b038082111561250557600080fd5b908701906060828a03121561251957600080fd5b9095506020870135908082111561252f57600080fd5b5086016080818903121561254257600080fd5b9350604086013592506060860135915061255e608087016124bf565b90509295509295909350565b60006040828403121561257c57600080fd5b50919050565b6000806000806060858703121561259857600080fd5b8435935060208501356001600160401b03808211156125b657600080fd5b818701915087601f8301126125ca57600080fd5b8135818111156125d957600080fd5b8860208285010111156125eb57600080fd5b60208301955080945050604087013591508082111561260957600080fd5b506126168782880161256a565b91505092959194509250565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561266057612660612622565b604052919050565b600082601f83011261267957600080fd5b81356001600160401b0381111561269257612692612622565b6126a5601f8201601f1916602001612638565b8181528460208386010111156126ba57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156126ed57600080fd5b8435935060208501356001600160401b038082111561270b57600080fd5b61271788838901612668565b9450604087013591508082111561272d57600080fd5b61273988838901612668565b9350606087013591508082111561260957600080fd5b60006020828403121561276157600080fd5b6118ed826124bf565b6000808335601e1984360301811261278157600080fd5b8301803591506001600160401b0382111561279b57600080fd5b6020019150600581901b36038213156127b357600080fd5b9250929050565b60006001600160401b03808411156127d4576127d4612622565b8360051b60206127e5818301612638565b8681529185019181810190368411156127fd57600080fd5b865b84811015612831578035868111156128175760008081fd5b61282336828b01612668565b8452509183019183016127ff565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261286a57600080fd5b8301803591506001600160401b0382111561288457600080fd5b6020019150368190038213156127b357600080fd5b8183823760009101908152919050565b8051602080830151919081101561257c5760001960209190910360031b1b16919050565b60008235607e198336030181126128e357600080fd5b9190910192915050565b803560208310156105f057600019602084900360031b1b1692915050565b6000815160005b8181101561292c5760208185018101518683015201612912565b8181111561293b576000828601525b509290920192915050565b600061295b612955838661290b565b8461290b565b949350505050565b6020808252604a908201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60408201527f206d7573742062652067726561746572207468616e207a65726f20746f206265606082015269206465636f6461626c6560b01b608082015260a00190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612a1257612a126129e9565b500190565b600082821015612a2957612a296129e9565b500390565b600060208284031215612a4057600080fd5b5051919050565b86888237600087820160008152612a5e818961290b565b9050858782376000908601908152612a76818661290b565b93845250506020909101979650505050505050565b60006118ed828461290b565b60008235603e198336030181126128e357600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201612ae757612ae76129e9565b5060010190565b600060ff821660ff84168060ff03821115612b0b57612b0b6129e9565b019392505050565b634e487b7160e01b600052601260045260246000fd5b600082612b3857612b38612b13565b500490565b6000816000190483118215151615612b5757612b576129e9565b500290565b600181815b80851115612b97578160001904821115612b7d57612b7d6129e9565b80851615612b8a57918102915b93841c9390800290612b61565b509250929050565b600082612bae575060016105f0565b81612bbb575060006105f0565b8160018114612bd15760028114612bdb57612bf7565b60019150506105f0565b60ff841115612bec57612bec6129e9565b50506001821b6105f0565b5060208310610133831016604e8410600b8410161715612c1a575081810a6105f0565b612c248383612b5c565b8060001904821115612c3857612c386129e9565b029392505050565b60006118ed8383612b9f565b600082612c5b57612c5b612b13565b500690565b600060ff831680612c7357612c73612b13565b8060ff84160691505092915050565b600060ff821660ff841680821015612c9c57612c9c6129e9565b90039392505050565b6000612cb1828561290b565b6001600160f81b0319939093168352505060010191905056fe524c505265616465723a206c656e677468206f6620636f6e74656e74206d7573a2646970667358221220300d7d6e2ed3bc17b349b53ddb3298a6b6514392fb5788feef6872363421407764736f6c634300080f0033"; + "0x60806040523480156200001157600080fd5b5060405162002dbc38038062002dbc83398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b612d20806200009c6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a1bb8b5146100515780632a6ded741461006657806359c1b56b14610079578063c2f0329f146100a8575b600080fd5b61006461005f3660046124d6565b6100bb565b005b610064610074366004612582565b6103bb565b60005461008c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100646100b63660046126d7565b6103d4565b6100cb606086016040870161274f565b6001600160401b0316816001600160401b0316146100fc57604051630fd8993960e21b815260040160405180910390fd5b610117610109868061276a565b610112916127ba565b61059c565b80519060200120821461013c5760405162fa512960e01b815260040160405180910390fd5b610146858061276a565b60088181106101575761015761283d565b90506020028101906101699190612853565b604051610177929190612899565b60405180910390206101a3866040016020810190610195919061274f565b6001600160401b03166105dd565b80519060200120146101c857604051633395483760e01b815260040160405180910390fd5b6101d2858061276a565b60038181106101e3576101e361283d565b90506020028101906101f59190612853565b604051610203929190612899565b6040518091039020610239866020013560405160200161022591815260200190565b6040516020818303038152906040526105f6565b805190602001201461025e576040516313d643bd60e21b815260040160405180910390fd5b6000805460405160609190911b6bffffffffffffffffffffffff191660208201526102c5906102c0906102bb9060340160408051601f198184030181529190526102a8898061276a565b6102b1916127ba565b8a6020013561064f565b610672565b6106ce565b9050600061033a86604001356040516020016102e391815260200190565b60408051601f19818403018152919052610300602089018961276a565b610309916127ba565b61032c8560028151811061031f5761031f61283d565b60200260200101516108f1565b610335906128a9565b61064f565b905061034d61034882610672565b6108f1565b610356906128a9565b6040805160006020820181905291810188905260608082019290925290880135608082015260a00160405160208183030381529060405280519060200120146103b2576040516330d26e5760e11b815260040160405180910390fd5b50505050505050565b604051632974974360e01b815260040160405180910390fd5b6103de818061276a565b60008181106103ef576103ef61283d565b905060200281019061040191906128cd565b61040f906020810190612853565b60405161041d929190612899565b604051809103902083805190602001201461044b5760405163026a287560e51b815260040160405180910390fd5b610455818061276a565b60008181106104665761046661283d565b905060200281019061047891906128cd565b610486906040810190612853565b604051610494929190612899565b60405180910390208280519060200120146104c2576040516310d9300f60e11b815260040160405180910390fd5b6104f76104cf828061276a565b60008181106104e0576104e061283d565b90506020028101906104f291906128cd565b610a14565b610501828061276a565b60018181106105125761051261283d565b905060200281019061052491906128cd565b610532906040810190612853565b61053b916128ed565b1461055957604051636589f0e160e11b815260040160405180910390fd5b610577610566828061276a565b60018181106104e0576104e061283d565b8414610596576040516392cb8fbb60e01b815260040160405180910390fd5b50505050565b60606105a782610c38565b90506105b5815160c0610d71565b816040516020016105c7929190612946565b6040516020818303038152906040529050919050565b60606105f06105eb83610f1c565b6105f6565b92915050565b60608151600114801561062357506080826000815181106106195761061961283d565b016020015160f81c105b1561062c575090565b61063882516080610d71565b826040516020016105c7929190612946565b919050565b6060600061065c85611048565b9050610669818585611064565b95945050505050565b604080518082019091526000808252602082015260008251116106b05760405162461bcd60e51b81526004016106a790612963565b60405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006106de856118f4565b9194509250905060018160018111156106f9576106f96129d3565b1461076c5760405162461bcd60e51b815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016106a7565b845161077883856129ff565b146107e05760405162461bcd60e51b815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e76616044820152713634b2103230ba30903932b6b0b4b73232b960711b60648201526084016106a7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816107f75790505093506000835b86518110156108e55760008061086a6040518060400160405280858c6000015161084e9190612a17565b8152602001858c6020015161086391906129ff565b90526118f4565b50915091506040518060400160405280838361088691906129ff565b8152602001848b6020015161089b91906129ff565b8152508885815181106108b0576108b061283d565b60209081029190910101526108c66001856129ff565b93506108d281836129ff565b6108dc90846129ff565b92505050610824565b50845250919392505050565b60606000806000610901856118f4565b91945092509050600081600181111561091c5761091c6129d3565b1461098f5760405162461bcd60e51b815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016106a7565b61099982846129ff565b855114610a055760405162461bcd60e51b815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527330b71034b73b30b634b2103932b6b0b4b73232b960611b60648201526084016106a7565b61066985602001518484611fb7565b6000806002610a266040850185612853565b604051610a34929190612899565b602060405180830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a749190612a2e565b90506002610a856060850185612853565b610a9c610a956020880188612853565b905061204a565b610aa96020880188612853565b610ab3602061204a565b87604051602001610aca9796959493929190612a47565b60408051601f1981840301815290829052610ae491612a8b565b602060405180830381855afa158015610b01573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b249190612a2e565b915060005b610b33848061276a565b9050811015610c31576002610b48858061276a565b83818110610b5857610b5861283d565b9050602002810190610b6a9190612a97565b610b749080612853565b85610b7f888061276a565b86818110610b8f57610b8f61283d565b9050602002810190610ba19190612a97565b610baf906020810190612853565b604051602001610bc3959493929190612aad565b60408051601f1981840301815290829052610bdd91612a8b565b602060405180830381855afa158015610bfa573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c1d9190612a2e565b925080610c2981612ad5565b915050610b29565b5050919050565b60608151600003610c5c5760408051600080825260208201909252905b5092915050565b6000805b8351811015610ca357838181518110610c7b57610c7b61283d565b60200260200101515182610c8f91906129ff565b915080610c9b81612ad5565b915050610c60565b816001600160401b03811115610cbb57610cbb612622565b6040519080825280601f01601f191660200182016040528015610ce5576020820181803683370190505b50925060009050602083015b8451821015610d69576000858381518110610d0e57610d0e61283d565b602002602001015190506000602082019050610d2c838284516120b9565b868481518110610d3e57610d3e61283d565b60200260200101515183610d5291906129ff565b925050508180610d6190612ad5565b925050610cf1565b505050919050565b60606038831015610dd75760408051600180825281830190925290602082018180368337019050509050610da58284612aee565b60f81b81600081518110610dbb57610dbb61283d565b60200101906001600160f81b031916908160001a9053506105f0565b600060015b610de68186612b29565b15610e0c5781610df581612ad5565b9250610e05905061010082612b3d565b9050610ddc565b610e178260016129ff565b6001600160401b03811115610e2e57610e2e612622565b6040519080825280601f01601f191660200182016040528015610e58576020820181803683370190505b509250610e658483612aee565b610e70906037612aee565b60f81b83600081518110610e8657610e8661283d565b60200101906001600160f81b031916908160001a905350600190505b818111610f1457610100610eb68284612a17565b610ec290610100612c40565b610ecc9087612b29565b610ed69190612c4c565b60f81b838281518110610eeb57610eeb61283d565b60200101906001600160f81b031916908160001a90535080610f0c81612ad5565b915050610ea2565b505092915050565b6060600082604051602001610f3391815260200190565b604051602081830303815290604052905060005b6020811015610f8a57818181518110610f6257610f6261283d565b01602001516001600160f81b031916600003610f8a5780610f8281612ad5565b915050610f47565b610f95816020612a17565b6001600160401b03811115610fac57610fac612622565b6040519080825280601f01601f191660200182016040528015610fd6576020820181803683370190505b50925060005b8351811015610d69578282610ff081612ad5565b9350815181106110025761100261283d565b602001015160f81c60f81b84828151811061101f5761101f61283d565b60200101906001600160f81b031916908160001a9053508061104081612ad5565b915050610fdc565b606081805190602001206040516020016105c791815260200190565b606060008451116110af5760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106a7565b60006110ba84612116565b905060006110c7866121fa565b90506000846040516020016110de91815260200190565b60405160208183030381529060405290506000805b84518110156118965760008582815181106111105761111061283d565b6020026020010151905084518311156111825760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106a7565b8260000361122157805180516020918201206040516111d0926111aa92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61121c5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106a7565b611317565b8051516020116112a7578051805160209182012060405161124b926111aa92910190815260200190565b61121c5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106a7565b8051845160208087019190912082519190920120146113175760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106a7565b611323601060016129ff565b816020015151036114be578451830361145657611350816020015160108151811061031f5761031f61283d565b965060008751116113c95760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106a7565b600186516113d79190612a17565b821461144b5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106a7565b5050505050506118ed565b600085848151811061146a5761146a61283d565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106114955761149561283d565b602002602001015190506114a88161225d565b95506114b56001866129ff565b94505050611883565b60028160200151510361182a5760006114d682612282565b90506000816000815181106114ed576114ed61283d565b016020015160f81c90506000611504600283612c60565b61150f906002612c82565b90506000611520848360ff166122a6565b9050600061152e8a896122a6565b9050600061153c83836122dc565b9050808351146115b45760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106a7565b60ff8516600214806115c9575060ff85166003145b1561176a57808251146116445760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106a7565b61165e876020015160018151811061031f5761031f61283d565b9c5060008d51116116d75760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106a7565b60018c516116e59190612a17565b88146117595760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106a7565b5050505050505050505050506118ed565b60ff8516158061177d575060ff85166001145b156117bc576117a9876020015160018151811061179c5761179c61283d565b602002602001015161225d565b99506117b5818a6129ff565b985061181f565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106a7565b505050505050611883565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106a7565b508061188e81612ad5565b9150506110f3565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106a7565b9392505050565b60008060008084600001511161191c5760405162461bcd60e51b81526004016106a790612963565b6020840151805160001a607f8111611941576000600160009450945094505050611fb0565b60b78111611a9e576000611956608083612a17565b9050808760000151116119d65760405162461bcd60e51b815260206004820152604e6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201526d2873686f727420737472696e672960901b608482015260a4016106a7565b6001838101516001600160f81b0319169082141580611a035750600160ff1b6001600160f81b0319821610155b611a8b5760405162461bcd60e51b815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201526c73686f727420737472696e672960981b608482015260a4016106a7565b5060019550935060009250611fb0915050565b60bf8111611cdf576000611ab360b783612a17565b905080876000015111611b365760405162461bcd60e51b81526020600482015260516024820152600080516020612ccb83398151915260448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527067746820286c6f6e6720737472696e672960781b608482015260a4016106a7565b60018301516001600160f81b0319166000819003611bbd5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152696e6720737472696e672960b01b608482015260a4016106a7565b600184015160088302610100031c60378111611c405760405162461bcd60e51b81526020600482015260486024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201526720737472696e672960c01b608482015260a4016106a7565b611c4a81846129ff565b895111611cc25760405162461bcd60e51b815260206004820152604c6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201526b6c6f6e6720737472696e672960a01b608482015260a4016106a7565b611ccd8360016129ff565b9750955060009450611fb09350505050565b60f78111611d81576000611cf460c083612a17565b905080876000015111611d705760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e206c697374206c656e677468202873606482015269686f7274206c6973742960b01b608482015260a4016106a7565b600195509350849250611fb0915050565b6000611d8e60f783612a17565b905080876000015111611e0d5760405162461bcd60e51b815260206004820152604d6024820152600080516020612ccb83398151915260448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201526c6820286c6f6e67206c6973742960981b608482015260a4016106a7565b60018301516001600160f81b0319166000819003611e925760405162461bcd60e51b81526020600482015260486024820152600080516020612ccb83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152676e67206c6973742960c01b608482015260a4016106a7565b600184015160088302610100031c60378111611f135760405162461bcd60e51b81526020600482015260466024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e67606482015265206c6973742960d01b608482015260a4016106a7565b611f1d81846129ff565b895111611f935760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e67746820286064820152696c6f6e67206c6973742960b01b608482015260a4016106a7565b611f9e8360016129ff565b9750955060019450611fb09350505050565b9193909250565b6060816001600160401b03811115611fd157611fd1612622565b6040519080825280601f01601f191660200182016040528015611ffb576020820181803683370190505b50905081156118ed57600061201084866129ff565b90506020820160005b84811015612031578281015182820152602001612019565b84811115612040576000858301525b5050509392505050565b6060805b6080831061208c578083607f1660801760f81b604051602001612072929190612ca5565b60408051601f198184030190525260079290921c9161204e565b808360f81b6040516020016120a2929190612ca5565b604051602081830303815290604052915050919050565b8282825b602081106120f557815183526120d46020846129ff565b92506120e16020836129ff565b91506120ee602082612a17565b90506120bd565b905182516020929092036101000a6000190180199091169116179052505050565b8051606090806001600160401b0381111561213357612133612622565b60405190808252806020026020018201604052801561217857816020015b60408051808201909152606080825260208201528152602001906001900390816121515790505b50915060005b81811015610c315760405180604001604052808583815181106121a3576121a361283d565b602002602001015181526020016121d28684815181106121c5576121c561283d565b6020026020010151612359565b8152508382815181106121e7576121e761283d565b602090810291909101015260010161217e565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015612252578060011b82018184015160001a8060041c8253600f811660018301535050600101612224565b509295945050505050565b6060602082600001511061227957612274826108f1565b6105f0565b6105f082612367565b60606105f06122a1836020015160008151811061031f5761031f61283d565b6121fa565b6060825182106122c557506040805160208101909152600081526105f0565b6118ed83838486516122d79190612a17565b61237d565b60008082518451106122ef5782516122f2565b83515b90505b808210801561234957508282815181106123115761231161283d565b602001015160f81c60f81b6001600160f81b0319168483815181106123385761233861283d565b01602001516001600160f81b031916145b15610c55578160010191506122f5565b60606105f06102c083610672565b60606105f0826020015160008460000151611fb7565b60608182601f0110156123c35760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106a7565b8282840110156124065760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106a7565b8183018451101561244d5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106a7565b60608215801561246c57604051915060008252602082016040526124b6565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124a557805183526020928301920161248d565b5050858452601f01601f1916604052505b50949350505050565b80356001600160401b038116811461064a57600080fd5b600080600080600060a086880312156124ee57600080fd5b85356001600160401b038082111561250557600080fd5b908701906060828a03121561251957600080fd5b9095506020870135908082111561252f57600080fd5b5086016080818903121561254257600080fd5b9350604086013592506060860135915061255e608087016124bf565b90509295509295909350565b60006040828403121561257c57600080fd5b50919050565b6000806000806060858703121561259857600080fd5b8435935060208501356001600160401b03808211156125b657600080fd5b818701915087601f8301126125ca57600080fd5b8135818111156125d957600080fd5b8860208285010111156125eb57600080fd5b60208301955080945050604087013591508082111561260957600080fd5b506126168782880161256a565b91505092959194509250565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561266057612660612622565b604052919050565b600082601f83011261267957600080fd5b81356001600160401b0381111561269257612692612622565b6126a5601f8201601f1916602001612638565b8181528460208386010111156126ba57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156126ed57600080fd5b8435935060208501356001600160401b038082111561270b57600080fd5b61271788838901612668565b9450604087013591508082111561272d57600080fd5b61273988838901612668565b9350606087013591508082111561260957600080fd5b60006020828403121561276157600080fd5b6118ed826124bf565b6000808335601e1984360301811261278157600080fd5b8301803591506001600160401b0382111561279b57600080fd5b6020019150600581901b36038213156127b357600080fd5b9250929050565b60006001600160401b03808411156127d4576127d4612622565b8360051b60206127e5818301612638565b8681529185019181810190368411156127fd57600080fd5b865b84811015612831578035868111156128175760008081fd5b61282336828b01612668565b8452509183019183016127ff565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261286a57600080fd5b8301803591506001600160401b0382111561288457600080fd5b6020019150368190038213156127b357600080fd5b8183823760009101908152919050565b8051602080830151919081101561257c5760001960209190910360031b1b16919050565b60008235607e198336030181126128e357600080fd5b9190910192915050565b803560208310156105f057600019602084900360031b1b1692915050565b6000815160005b8181101561292c5760208185018101518683015201612912565b8181111561293b576000828601525b509290920192915050565b600061295b612955838661290b565b8461290b565b949350505050565b6020808252604a908201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60408201527f206d7573742062652067726561746572207468616e207a65726f20746f206265606082015269206465636f6461626c6560b01b608082015260a00190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612a1257612a126129e9565b500190565b600082821015612a2957612a296129e9565b500390565b600060208284031215612a4057600080fd5b5051919050565b86888237600087820160008152612a5e818961290b565b9050858782376000908601908152612a76818661290b565b93845250506020909101979650505050505050565b60006118ed828461290b565b60008235603e198336030181126128e357600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201612ae757612ae76129e9565b5060010190565b600060ff821660ff84168060ff03821115612b0b57612b0b6129e9565b019392505050565b634e487b7160e01b600052601260045260246000fd5b600082612b3857612b38612b13565b500490565b6000816000190483118215151615612b5757612b576129e9565b500290565b600181815b80851115612b97578160001904821115612b7d57612b7d6129e9565b80851615612b8a57918102915b93841c9390800290612b61565b509250929050565b600082612bae575060016105f0565b81612bbb575060006105f0565b8160018114612bd15760028114612bdb57612bf7565b60019150506105f0565b60ff841115612bec57612bec6129e9565b50506001821b6105f0565b5060208310610133831016604e8410600b8410161715612c1a575081810a6105f0565b612c248383612b5c565b8060001904821115612c3857612c386129e9565b029392505050565b60006118ed8383612b9f565b600082612c5b57612c5b612b13565b500690565b600060ff831680612c7357612c73612b13565b8060ff84160691505092915050565b600060ff821660ff841680821015612c9c57612c9c6129e9565b90039392505050565b6000612cb1828561290b565b6001600160f81b0319939093168352505060010191905056fe524c505265616465723a206c656e677468206f6620636f6e74656e74206d7573a2646970667358221220fb8e29dff6159739a353fd93595a1fe296c193761fc56f765c8a05f62590e2ad64736f6c634300080f0033"; type OptimisticProofVerifierConstructorParams = | [signer?: Signer]