{ "name": "IgneumStateOracle", "solc": "0.8.28+commit.7893614a.Emscripten.clang", "abi": [ { "inputs": [ { "internalType": "address", "name": "verifier_", "type": "address" }, { "internalType": "uint64", "name": "evmChainId_", "type": "uint64" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "number", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "postRoot", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "blockHash", "type": "bytes32" }, { "indexed": false, "internalType": "uint64", "name": "certIndex", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "carrier", "type": "bytes32" } ], "name": "StateRoot", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "verifier", "type": "address" } ], "name": "VerifierSet", "type": "event" }, { "inputs": [ { "internalType": "bytes[]", "name": "headers", "type": "bytes[]" }, { "internalType": "bytes32", "name": "checkpoint", "type": "bytes32" } ], "name": "checkHeaderPath", "outputs": [ { "internalType": "bytes32", "name": "carrier", "type": "bytes32" }, { "internalType": "bytes32", "name": "merkle", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "evmChainId", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "header", "type": "bytes" } ], "name": "headerHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "leaf", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" } ], "name": "merkleRoot", "outputs": [ { "internalType": "bytes32", "name": "h", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "h", "type": "bytes" } ], "name": "parseHeader", "outputs": [ { "internalType": "uint256", "name": "parentsOff", "type": "uint256" }, { "internalType": "uint256", "name": "parentCount", "type": "uint256" }, { "internalType": "bytes32", "name": "merkle", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "t", "type": "bytes" } ], "name": "payloadOf", "outputs": [ { "internalType": "uint256", "name": "off", "type": "uint256" }, { "internalType": "uint256", "name": "len", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "number", "type": "uint64" }, { "internalType": "address", "name": "a", "type": "address" }, { "internalType": "bytes[]", "name": "accountProof", "type": "bytes[]" } ], "name": "provenAccount", "outputs": [ { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "bytes32", "name": "storageRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "codeHash", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "number", "type": "uint64" }, { "internalType": "address", "name": "a", "type": "address" }, { "internalType": "bytes[]", "name": "accountProof", "type": "bytes[]" } ], "name": "provenBalance", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "number", "type": "uint64" }, { "internalType": "address", "name": "a", "type": "address" }, { "internalType": "bytes32", "name": "slot", "type": "bytes32" }, { "internalType": "bytes[]", "name": "accountProof", "type": "bytes[]" }, { "internalType": "bytes[]", "name": "storageProof", "type": "bytes[]" } ], "name": "provenStorage", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "t", "type": "bytes" }, { "internalType": "uint256", "name": "recordIndex", "type": "uint256" } ], "name": "readRecord", "outputs": [ { "internalType": "uint64", "name": "number", "type": "uint64" }, { "internalType": "bytes32", "name": "blockHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "postRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "chainId", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "t", "type": "bytes" }, { "internalType": "uint256", "name": "payloadOff", "type": "uint256" }, { "internalType": "uint256", "name": "payloadLen", "type": "uint256" } ], "name": "segmentSection", "outputs": [ { "internalType": "uint256", "name": "off", "type": "uint256" }, { "internalType": "uint256", "name": "len", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "v", "type": "address" } ], "name": "setVerifier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "number", "type": "uint64" } ], "name": "stateRoot", "outputs": [ { "internalType": "bytes32", "name": "postRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "blockHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "carrier", "type": "bytes32" }, { "internalType": "uint64", "name": "certIndex", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "certIndex", "type": "uint64" }, { "internalType": "bytes[]", "name": "headers", "type": "bytes[]" }, { "internalType": "bytes", "name": "coinbaseTx", "type": "bytes" }, { "internalType": "uint256", "name": "leafIndex", "type": "uint256" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" }, { "internalType": "uint256", "name": "recordIndex", "type": "uint256" } ], "name": "submitStateRoot", "outputs": [ { "internalType": "uint64", "name": "number", "type": "uint64" }, { "internalType": "bytes32", "name": "postRoot", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "tx_", "type": "bytes" } ], "name": "transactionHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "trust", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "verifier", "outputs": [ { "internalType": "contract IIgneumCertificateVerifier", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "certIndex", "type": "uint64" }, { "internalType": "bytes[]", "name": "headers", "type": "bytes[]" }, { "internalType": "bytes", "name": "coinbaseTx", "type": "bytes" }, { "internalType": "uint256", "name": "leafIndex", "type": "uint256" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" }, { "internalType": "uint256", "name": "recordIndex", "type": "uint256" } ], "name": "verifyStateRoot", "outputs": [ { "internalType": "uint64", "name": "number", "type": "uint64" }, { "internalType": "bytes32", "name": "postRoot", "type": "bytes32" }, { "internalType": "bytes32", "name": "blockHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "carrier", "type": "bytes32" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a0346100a957601f61312538819003918201601f19168301916001600160401b038311848410176100ad5780849260409485528339810103126100a95780516001600160a01b03811691908290036100a95760200151906001600160401b03821682036100a9575f80546001600160a01b0319908116929092179055600180549091163317905560805260405161306390816100c2823960805181818161053d01526118170152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80632b7ac3f3146101445780632bf5baf51461013f5780634aefb0a11461013a5780634cf83845146101355780635437988d146101305780635bed35da1461012b57806362636ea11461012657806364d42b17146101215780636f9fdd661461011c57806372464ca0146101175780637b8affcd146101125780638a01db611461010d5780638da5cb5b14610108578063b378a99714610103578063c60c7964146100fe578063ecb2c31d146100f9578063f2916104146100f4578063f837d413146100ef5763fa228c7f146100ea575f80fd5b610b5b565b610b1c565b610ae4565b610aa1565b610a79565b6108cc565b6107ff565b6107cc565b61075b565b610730565b61058b565b61051e565b6104fe565b610470565b6102f7565b610270565b610210565b610199565b3461016b575f36600319011261016b575f546040516001600160a01b039091168152602090f35b5f80fd5b600435906001600160401b038216820361016b57565b35906001600160401b038216820361016b57565b3461016b57602036600319011261016b5760806001600160401b036101c46101bf61016f565b610b9f565b9160409493945194855260208501526040840152166060820152f35b9181601f8401121561016b578235916001600160401b03831161016b576020808501948460051b01011161016b57565b3461016b57604036600319011261016b576004356001600160401b03811161016b5761024e61024560409236906004016101e0565b60243591610da6565b82519182526020820152f35b600435906001600160a01b038216820361016b57565b3461016b5760a036600319011261016b5761028961016f565b602435906001600160a01b038216820361016b57604435916064356001600160401b03811161016b576102c09036906004016101e0565b60843593916001600160401b03851161016b576020956102e76102ef9636906004016101e0565b959094610e78565b604051908152f35b3461016b57602036600319011261016b5761031061025a565b6001546001600160a01b0316330361036e575f80546001600160a01b0319166001600160a01b039290921691821790556040519081527f480b37e3d134e44cb444c9703493c7db564c707cb8a18cecea165f340431da1f90602090a1005b60405162461bcd60e51b81526020600482015260126024820152716f7261636c653a206f776e6572206f6e6c7960701b6044820152606490fd5b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b038211176103dd57604052565b6103a8565b604051906103f16080836103bc565b565b906103f160405192836103bc565b6001600160401b0381116103dd57601f01601f191660200190565b92919261042882610401565b9161043660405193846103bc565b82948184528183011161016b578281602093845f960137010152565b9080601f8301121561016b5781602061046d9335910161041c565b90565b3461016b57604036600319011261016b576004356001600160401b03811161016b576001600160401b036104b66104ad6080933690600401610452565b60243590611189565b91846040959495519516855260208501526040840152166060820152f35b602060031982011261016b57600435906001600160401b03821161016b5761046d91600401610452565b3461016b5760206102ef610511366104d4565b6105196112e3565b611dc8565b3461016b575f36600319011261016b5760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461016b575f36600319011261016b5761072c6101606105ae60405191826103bc565b61012b81527f436865636b6564206f6e20636861696e3a20686561646572206861736865732060208201527f616e6420706172656e74206c696e6b7320746f2061206365727469666965642060408201527f636865636b706f696e742c2074686520636f696e62617365206d65726b6c652060608201527f706174682c20746865207365676d656e74207265636f7264206c61796f75742c60808201527f20616e6420746865206163636f756e7420616e642073746f726167652070726f60a08201527f6f667320756e64657220706f73745f726f6f742e204e6f7420636865636b656460c08201527f206f6e20636861696e20696e207468697320736c6963653a207468652061676760e08201527f72656761746f72277320424c53207369676e6174757265206f766572207468656101008201527f207365676d656e74207265636f726420616e6420746865205a4b2070726f6f666101208201526a103132b434b7321034ba1760a91b61014082015260405191829182610561565b0390f35b3461016b576060610748610743366104d4565b611310565b9060405192835260208301526040820152f35b3461016b5760206102ef61076e366104d4565b6105196113da565b606060031982011261016b576004356001600160401b038116810361016b57916024356001600160a01b038116810361016b5791604435906001600160401b03821161016b576107c8916004016101e0565b9091565b3461016b5760206107f26107ea6107e236610776565b939092610b9f565b505050612067565b5050915050604051908152f35b3461016b575f36600319011261016b576001546040516001600160a01b039091168152602090f35b60c060031982011261016b5761083d6004610185565b916024356001600160401b03811161016b578261085c916004016101e0565b92909291604435916001600160401b03831161016b578060238401121561016b578260040135926001600160401b03841161016b57816024858301011161016b57602401929160643591608435906001600160401b03821161016b576108c4916004016101e0565b909160a43590565b3461016b576108ef6108dd36610827565b9688999896919695929594939461174b565b9091936001600160401b03841692835f52600260205260405f2054868115918215610a6f575b505015610a14576109f57fb650e8bdb81a79cecbd85292ffa6c38212615677fdc7f99f3332f642d3b1ce2d936109c761094c6103e2565b8981528460208201528260408201526109718660608301906001600160401b03169052565b61098c896001600160401b03165f52600260205260405f2090565b606060036001600160401b039284518155602085015160018201556040850151600282015501920151166001600160401b0319825416179055565b6040519384938985909493926001600160401b03906060936080840197845260208401521660408201520152565b0390a2604080516001600160401b039290921682526020820192909252f35b60405162461bcd60e51b815260206004820152602d60248201527f6f7261636c653a20616e6f7468657220726f6f742069732073746f726564206660448201526c6f72207468617420626c6f636b60981b6064820152608490fd5b149050865f610915565b3461016b57610a8f610a8a366104d4565b61149c565b60408051928352602083019190915290f35b3461016b576080610ac3610ab436610827565b9796909695919594929461174b565b916001600160401b0360405194168452602084015260408301526060820152f35b3461016b5760a0610afa6107ea6107e236610776565b9260409291925194151585526020850152604084015260608301526080820152f35b3461016b57606036600319011261016b576004356001600160401b03811161016b57610b4f610a8f913690600401610452565b60243560443591611945565b3461016b57606036600319011261016b576004356044356024356001600160401b03821161016b57602092610b976102ef9336906004016101e0565b929091611ab3565b6001600160401b03165f52600260205260405f2080548015610bdb576001820154926001600160401b0360036002850154940154169193929190565b60405162461bcd60e51b815260206004820152602560248201527f6f7261636c653a206e6f2070726f76656e20726f6f7420666f72207468617420604482015264626c6f636b60d81b6064820152608490fd5b634e487b7160e01b5f52603260045260245ffd5b9015610c7c57803590601e198136030182121561016b5701908135916001600160401b03831161016b57602001823603811361016b579190565b610c2e565b9190811015610c7c5760051b81013590601e198136030182121561016b5701908135916001600160401b03831161016b57602001823603811361016b579190565b15610cc957565b60405162461bcd60e51b815260206004820152603c60248201527f686561646572733a20612068656164657220646f6573206e6f74206e616d652060448201527f7468652070726576696f7573206f6e65206173206120706172656e74000000006064820152608490fd5b15610d3b57565b60405162461bcd60e51b815260206004820152603860248201527f686561646572733a20746865206c61737420686561646572206973206e6f742060448201527f7468652063657274696669656420636865636b706f696e7400000000000000006064820152608490fd5b919290925f935f938115610e43575f915f5b818110610dcd57505050906103f19114610d34565b610de2610ddb828486610c81565b369161041c565b96610dec88611310565b92919690841597885f14610e235750505050610e0b90976105196113da565b93610e19575b600101610db8565b9296508692610e11565b610e0b945091610e3991610e3e938d959d611b64565b610cc2565b61076e565b60405162461bcd60e51b815260206004820152600d60248201526c686561646572733a206e6f6e6560981b6044820152606490fd5b906107ea610e8b94929796959397610b9f565b50959291505015610e9f5761046d93611c10565b50509050610eab575f90565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a2073746f726167652070726f6f6620666f7220616e20616273656e74604482015267081858d8dbdd5b9d60c21b6064820152608490fd5b634e487b7160e01b5f52601160045260245ffd5b9060018201809211610f2357565b610f01565b90600a8201809211610f2357565b9060128201809211610f2357565b9060768201809211610f2357565b9060088201809211610f2357565b9060108201809211610f2357565b9060948201809211610f2357565b6008019081600811610f2357565b9060248201809211610f2357565b9060028201809211610f2357565b9060228201809211610f2357565b6013019081601311610f2357565b9060138201809211610f2357565b6080019081608011610f2357565b91908201809211610f2357565b9061024a82029180830461024a1490151715610f2357565b600581901b91906001600160fb1b03811603610f2357565b908160011b9180830460021490151715610f2357565b1561103857565b606460405162461bcd60e51b815260206004820152602060248201527f7265636f72643a20696e646578206265796f6e64207468652073656374696f6e6044820152fd5b1561108357565b60405162461bcd60e51b815260206004820152603560248201527f7265636f72643a2073746174656d656e74206973206e6f7420666f7220746865604482015274207365676d656e742773206c61737420626c6f636b60581b6064820152608490fd5b156110ed57565b60405162461bcd60e51b815260206004820152602960248201527f7265636f72643a20626c6f636b2068617368206973206e6f74207468652073746044820152686174656d656e74277360b81b6064820152608490fd5b1561114b57565b60405162461bcd60e51b81526020600482015260166024820152751c9958dbdc990e881e995c9bc81c1bdcdd17dc9bdbdd60521b6044820152606490fd5b919061119e6111978461149c565b9085611945565b61024a810661129157826111be6111ca926111c36111be6111d097610f15565b610feb565b1115611031565b90610fde565b6111e26111dc82610f28565b84611d16565b906111fe6111f86111f283610f36565b86611d41565b91610f44565b926112866112246112186112128789611d41565b60c01c90565b6001600160401b031690565b9261127f6001600160401b0361126d61124b6112186112126112458c610f52565b8d611d41565b9961126761126161125b8c610f60565b83611d41565b9a610f6e565b90611d41565b96166001600160401b0389161461107c565b85146110e6565b6103f1831515611144565b60405162461bcd60e51b81526020600482015260166024820152750e4cac6dee4c87440e6cac6e8d2dedc40d8cadccee8d60531b6044820152606490fd5b604051906112de6020836103bc565b5f8252565b604051906112f26040836103bc565b600f82526e0a8e4c2dce6c2c6e8d2dedc90c2e6d608b1b6020830152565b906001600160401b0361132283611cd0565b1690600182106113955761133861121884611cee565b9160129361134f61134885611003565b6012610fde565b906001925b808410611366575061046d9250611d41565b909161138b816111ca61138661138161121860019689611d16565b611003565b610f7c565b9301929190611354565b60405162461bcd60e51b815260206004820152601860248201527f6865616465723a206e6f20706172656e74206c6576656c7300000000000000006044820152606490fd5b604051906113e96040836103bc565b6009825268084d8dec6d690c2e6d60bb1b6020830152565b1561140857565b60405162461bcd60e51b815260206004820152600f60248201526e18dbda5b98985cd94e881cda1bdc9d608a1b6044820152606490fd5b908151811015610c7c570160200190565b1561145757565b60405162461bcd60e51b815260206004820152601a60248201527f636f696e626173653a207061796c6f6164206f76657272756e730000000000006044820152606490fd5b9061ffff6114a983611d02565b166114b661121884611cd0565b90600a9060015f91109283159384925b878382106115b8576114eb94506114e593506112189250859150611d16565b91610f52565b905f5b81811061152f5750506115019150610f8a565b906103f161151b6115156112188587611d16565b93610f52565b936115268486610fde565b90511015611450565b61154d61153d859394610f28565b6111ca611386611218838b611d16565b9361155f575b600101929190926114ee565b926115a260019161157288518210611401565b60ff611598611592611584848c61143f565b516001600160f81b03191690565b60f81c90565b166115aa57610f15565b939050611553565b6115b390610fa6565b610f15565b916115dd6115e792936111ca6113866112186115d686999a9b610f8a565b8094611d16565b9061160d57610f52565b936115f9575b600101908492916114c6565b92611605600191610f98565b9390506115ed565b61161690610f15565b610f52565b9081602091031261016b575190565b6040513d5f823e3d90fd5b1561163c57565b60405162461bcd60e51b8152602060048201526024808201527f6f7261636c653a206e6f206365727469666963617465206174207468617420696044820152630dcc8caf60e31b6064820152608490fd5b1561169457565b60405162461bcd60e51b815260206004820152603a60248201527f6d65726b6c653a207061746820646f6573206e6f74207265616368207468652060448201527f63617272696572277320686173685f6d65726b6c655f726f6f740000000000006064820152608490fd5b1561170657565b60405162461bcd60e51b815260206004820152601a60248201527f7265636f72643a2073746174656d656e7420636861696e2069640000000000006044820152606490fd5b9660206117a4979493929996959a9861177961176d5f5460018060a01b031690565b6001600160a01b031690565b60405180809b819463b1b0945360e01b8352600483019190916001600160401b036020820193169052565b03915afa93841561188c576117e76117dd6117ff966117f9956103f19d6118049c5f9361185b575b506117d8831515611635565b610da6565b95909c369161041c565b956117f4876105196112e3565b611ab3565b1461168d565b611189565b9592939194909493956001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168015918215611848575b50506116ff565b6001600160401b03161490505f80611841565b61187e91935060203d602011611885575b61187681836103bc565b81019061161b565b915f6117cc565b503d61186c565b61162a565b1561189857565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a20736372697074206f76657272756e73000000000000006044820152606490fd5b156118e457565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a206e6f2049474e532073656374696f6e000000000000006044820152606490fd5b600719810191908211610f2357565b91908203918211610f2357565b909291601381106119d95761046d916119b66119af6119a86119be946119a26119806119796119738c610f36565b8861143f565b5160f81c90565b6119948361198d83610fb4565b1115611891565b61199d8b610fc2565b610fde565b98610fde565b87846121ae565b8683612262565b9485916122bd565b6119ca848214156118dd565b6119d48194611929565b611938565b60405162461bcd60e51b815260206004820152601b60248201527f636f696e626173653a207061796c6f616420746f6f2073686f727400000000006044820152606490fd5b9190811015610c7c5760051b0190565b60405190611a3d6040836103bc565b601082526f09acae4d6d8ca84e4c2dcc6d090c2e6d60831b6020830152565b15611a6357565b60405162461bcd60e51b815260206004820152602260248201527f6d65726b6c653a206c65616620696e646578206265796f6e64207468652070616044820152610e8d60f31b6064820152608490fd5b939290915f915b808310611ace575050506103f19015611a5c565b90919294611b29600191828816155f14611b3257611b2290611b1a611af4888789611a1e565b60408051602081019490945290359083015281606081015b03601f1981018352826103bc565b610519611a2e565b9660011c90565b93019190611aba565b611b5f90611b1a611b44888789611a1e565b60408051913560208301528101929092528160608101611b0c565b611b22565b909291925f5b848110611b7a5750505050505f90565b6001600160fb1b0381168103610f23578060051b8201808311610f2357611ba2859185611d41565b14611baf57600101611b6a565b5050505050600190565b15611bc057565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a2073746f726167652076616c7565206973206e6f74206120737472696044820152616e6760f01b6064820152608490fd5b611c389392916040516020810191825260208152611c2f6040826103bc565b519020906125ee565b9015611c8f57611c4781612b4f565b90815115151580611c70575b91611c6061046d93611bb9565b6060604082015191015191612d4f565b5060408201519160608101518301809311610f23578151909214611c53565b505f90565b15611c9b57565b60405162461bcd60e51b815260206004820152600d60248201526c1a195859195c8e881cda1bdc9d609a1b6044820152606490fd5b602261046d91611ce48151600a1115611c94565b015160c01c612ddd565b602a61046d91611ce4815160121115611c94565b602061046d91611ce4815160081115611c94565b906008810190818111610f235782611d3660209361046d95511015611c94565b01015160c01c612ddd565b906020810191828211610f2357611d5d60209382511015611c94565b01015190565b15611d6a57565b60405162461bcd60e51b81526020600482015260136024820152720c4d8c2d6ca64c47440d6caf240d8cadccee8d606b1b6044820152606490fd5b6040516101009190611db783826103bc565b60d5815291601f1901366020840137565b611ddd81518015159081611fc4575b50611d63565b611de5611da5565b91611df16101006103f3565b676a09e667f3bcc908815267bb67ae8584caa73b6020820152673c6ef372fe94f82b604082015267a54ff53a5f1d36f1606082015267510e527fade682d16080820152679b05688c2b3e6c1f60a0820152671f83d9abfb41bd6b60c0820152675be0cd19137e217960e0820152611ea66301010020611e8a611e7a86516001600160401b031690565b60081b67ffffffffffffff001690565b83516001600160401b0316181882906001600160401b03169052565b600c60238501535f5b60088110611f7d575050805191611eda8460c45f918260648201528260848201528260a48201520152565b80516020606486019201825e611ef1831585612e4d565b5f5b838110611f0557505050506024015190565b80611f13611f349286611938565b9060808211611f74575b60808210611f51575b81602082870101855e610fde565b90611f4b611f4183610fd0565b8584149087612ec3565b90611ef3565b611f6f8760c45f918260648201528260848201528260a48201520152565b611f26565b60809150611f1d565b8060051b8201515f905f905b60088210611fa957505060c01b600382901b860160240152600101611eaf565b909160019060ff838560031b1c169060081b17920190611f89565b6040915011155f611dd7565b15611fd757565b60405162461bcd60e51b815260206004820152601a60248201527f6d70743a206163636f756e74206973206e6f742061206c6973740000000000006044820152606490fd5b1561202357565b606460405162461bcd60e51b815260206004820152602060248201527f6d70743a206163636f756e7420686173206e6f7420666f7572206669656c64736044820152fd5b60405160609290921b6bffffffffffffffffffffffff191660208301908152612099949392611c2f8160348101611b0c565b9190156121a1576120a982612b4f565b9081516120b590151590565b6120be90611fd0565b604082019182516120cf9085612c55565b9160408301948551936060019384516120e791610fde565b6120f19082612c55565b94604086019586519060600190815161210991610fde565b6121139084612c55565b90604082019687519260600192835161212b91610fde565b6121359086612c55565b93604085019788519560600195865161214d91610fde565b9151906060015161215d91610fde565b146121679061201c565b6001995190516121779186612d4f565b975190516121859185612d4f565b955190516121939184612ed9565b935190519061046d92612ed9565b5f91508190819081908190565b6008820190818311610f23578391821061225c57016324a3a72360e11b63ffffffff60e01b601c83015116036122575782600719810111610f23576018015161222e9060e081901c906122249060c81c63ff000000165b62ff0000600884901b161761ff00600884901c16179160181c60ff1690565b1763ffffffff1690565b9061224261223b83610f52565b9184611938565b10612253576119d461046d92611929565b5090565b505090565b50505090565b6008820190818311610f23578391821061225c570163049474e560e41b63ffffffff60e01b601c83015116036122575782600719810111610f23576018015161222e9060e081901c906122249060c81c63ff00000016612205565b6008820190818311610f23578391821061225c57016349474e5360e01b63ffffffff60e01b601c83015116036122575782600719810111610f23576018015161222e9060e081901c906122249060c81c63ff00000016612205565b1561231f57565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a206e6f206e6f64657320666f722061206e6f6e2d656d70747920726f6044820152611bdd60f21b6064820152608490fd5b1561237657565b60405162461bcd60e51b815260206004820152602360248201527f6d70743a20746865206669727374206e6f6465206973206e6f742074686520726044820152621bdbdd60ea1b6064820152608490fd5b156123ce57565b60405162461bcd60e51b815260206004820152601760248201527f6d70743a206e6f6465206973206e6f742061206c6973740000000000000000006044820152606490fd5b6040519061022061242481846103bc565b368337565b1561243057565b60405162461bcd60e51b81526020600482015260136024820152726d70743a20746f6f206d616e79206974656d7360681b6044820152606490fd5b5f198114610f235760010190565b906011811015610c7c5760051b0190565b60405190608082018281106001600160401b038211176103dd576040525f6060838281528260208201528260408201520152565b156124c557565b60405162461bcd60e51b815260206004820152600d60248201526c0dae0e87440c4c2c840e0c2e8d609b1b6044820152606490fd5b1561250157565b60405162461bcd60e51b81526020600482015260126024820152716d70743a20626164207265666572656e636560701b6044820152606490fd5b1561254257565b60405162461bcd60e51b815260206004820152602160248201527f6d70743a2061207265666572656e636564206e6f6465206973206d697373696e6044820152606760f81b6064820152608490fd5b1561259857565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a206e6f646520646f6573206e6f74206861736820746f20697473207260448201526765666572656e636560c01b6064820152608490fd5b939291938215612a545761261a61260c610ddb858897969597610c42565b91825160208401201461236f565b5f918290600190825b605084106126655760405162461bcd60e51b815260206004820152601260248201527106d70743a207061746820746f6f20646565760741b6044820152606490fd5b61266f9085612c55565b9461268261267d8751151590565b6123c7565b61268a612413565b965f986040880197606089519101905b6126a78a51835190610fde565b81101561270257906126f68c836126e58e9f9d9e9d6126a7968e6126d060116126d59410612429565b612c55565b926126df8161246b565b9e612479565b526060604082015191015190610fde565b9a999b9a90915061269a565b505096509796909694919461271561248a565b50601181036128365750604087146127e95761275161274a6127579261274461273e8b8b612f22565b60ff1690565b90612479565b5183612c55565b96610f15565b955b80516127d957606081018051156127c5576020929161277c8460409351146124fa565b01510101519261278d81831061253b565b6127b56127a7610ddb61279f8561246b565b94848c610c81565b948551602087012014612591565b60015f935b019296959496612623565b505050505050505090505f9061046d6112cf565b60206001919592950151936127ba565b93509596505050612808925061280191506102000190565b5182612c55565b9060608201805115612829576040612824930151905191612f49565b600191565b5050505f9061046d6112cf565b909690600203612a0f5761284b875183612c55565b9061285d6128598351151590565b1590565b80612a02575b61286c906124be565b604082019061289b606061289361288a61159261158487518a61143f565b60041c600f1690565b94015161101b565b60018416158015916128b7916129f95760ff60015b1690611938565b925f5b84811061291c575050506128dd6128d66002936128e493610fde565b9960200190565b5184612c55565b911615612759579697509492505050604091500361291057816060604061282494015191015191612f49565b50505f9061046d6112cf565b5f9c979b96999a92939495989c50835f146129e15789600161296161159261158461294b60ff855b1687610fde565b9461295b88516111ca8860011c90565b9061143f565b91166129d95760041c600f165b604061297a8388610fde565b10908115916129b5575b5061299d576001019b97949392919998959a969b6128ba565b50505050505050955050505050505f9061046d6112cf565b905060ff6129cf61273e6129c9858a610fde565b87612f22565b911614155f612984565b600f1661296e565b89600161296161159261158461294b60ff6002612944565b60ff60026128b0565b5060608201511515612863565b60405162461bcd60e51b815260206004820181905260248201527f6d70743a206e6f6465207769746820616e206f6464206974656d20636f756e746044820152606490fd5b9050612a859293507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421915014612318565b5f9061046d6112cf565b15612a9657565b60405162461bcd60e51b815260206004820152600a6024820152691c9b1c0e881cda1bdc9d60b21b6044820152606490fd5b60ff60f6199116019060ff8211610f2357565b60ff60bf199116019060ff8211610f2357565b60ff60b6199116019060ff8211610f2357565b60ff607f199116019060ff8211610f2357565b15612b1b57565b60405162461bcd60e51b815260206004820152600c60248201526b3936381d1037bb32b9393ab760a11b6044820152606490fd5b906103f1612b5b61248a565b92612b6881511515612a8f565b612b786115926115845f8461143f565b5f602086015260ff81166080811015612bb75750505f6040850152600160608501525b612bae6040850151606086015190610fde565b90511015612b14565b60b8811015612be5575061273e612bcd91612b01565b6060850152612bdb5f610f15565b6040850152612b9b565b60c0811015612c1f5750612bfe61273e612bdb92612aee565b612c1181612c0b5f610f15565b85612f84565b606087015261199d5f610f15565b60f81115612c3d5761273e612bcd91612c388760019052565b612adb565b612c4c61273e612bdb92612ac8565b60018652612bfe565b6103f190929192612c6461248a565b93612c7182518210612a8f565b612c81611592611584838561143f565b9080602087015260ff8216608081105f14612cb2575060408601819052600160608701819052612bae925090610fde565b60b8811015612cd55750612ccb61273e612bdb93612b01565b6060870152610f15565b60c0811015612d0f575061199d612cf161273e612bdb94612aee565b91612d0583612cff83610f15565b87612f84565b6060890152610f15565b60f81115612d2b57612ccb61273e612bdb93612c388960019052565b61199d612d3d61273e612bdb94612ac8565b6001885291612d0583612cff83610f15565b9092915f9360208211612da05791905f925b818410612d6e5750505050565b9091929460081b85820190818311610f2357612d9561273e6115926115846001958961143f565b179501929190612d61565b60405162461bcd60e51b8152602060048201526015602482015274726c703a20696e746567657220746f6f207769646560581b6044820152606490fd5b612e4967ff00000000000000603883901b8116600884811b64ff000000001690601886901b65ff00000000001690602887901b66ff000000000000169063ff0000009088901c16931717171762ff0000601885901c161761ff00602885901c1617921660381c60ff1690565b1790565b604091612e5a6080612ddd565b60c01b60e4830152612eb7575b60d5602060248301920160095afa15612e7c57565b60405162461bcd60e51b8152602060048201526013602482015272626c616b6532623a20707265636f6d70696c6560681b6044820152606490fd5b600160f4820153612e67565b9091612e5a6001600160401b0360409416612ddd565b91602003612ee957016020015190565b60405162461bcd60e51b8152602060048201526011602482015270726c703a206e6f7420333220627974657360781b6044820152606490fd5b8160011c906020821015610c7c57901a90600116612f435760041c60ff1690565b600f1690565b9291906020612f5783610401565b91612f6560405193846103bc565b838352612f7184610401565b8284019390601f1901368537950101905e565b9291905f93602083111580613019575b15612fe25791905f925b828410612fab5750505050565b90919294612fbb60019160081b90565b612fd761273e611592611584612fd18b89610fde565b8761143f565b179501929190612f9e565b60405162461bcd60e51b815260206004820152600f60248201526e0e4d8e07440c4c2c840d8cadccee8d608b1b6044820152606490fd5b50828201808311610f235781511015612f9456fea2646970667358221220ce879094835d769d272d5d167c77090fc9d7fde70913d367e3ed7080aa3b6bfd64736f6c634300081c0033", "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c80632b7ac3f3146101445780632bf5baf51461013f5780634aefb0a11461013a5780634cf83845146101355780635437988d146101305780635bed35da1461012b57806362636ea11461012657806364d42b17146101215780636f9fdd661461011c57806372464ca0146101175780637b8affcd146101125780638a01db611461010d5780638da5cb5b14610108578063b378a99714610103578063c60c7964146100fe578063ecb2c31d146100f9578063f2916104146100f4578063f837d413146100ef5763fa228c7f146100ea575f80fd5b610b5b565b610b1c565b610ae4565b610aa1565b610a79565b6108cc565b6107ff565b6107cc565b61075b565b610730565b61058b565b61051e565b6104fe565b610470565b6102f7565b610270565b610210565b610199565b3461016b575f36600319011261016b575f546040516001600160a01b039091168152602090f35b5f80fd5b600435906001600160401b038216820361016b57565b35906001600160401b038216820361016b57565b3461016b57602036600319011261016b5760806001600160401b036101c46101bf61016f565b610b9f565b9160409493945194855260208501526040840152166060820152f35b9181601f8401121561016b578235916001600160401b03831161016b576020808501948460051b01011161016b57565b3461016b57604036600319011261016b576004356001600160401b03811161016b5761024e61024560409236906004016101e0565b60243591610da6565b82519182526020820152f35b600435906001600160a01b038216820361016b57565b3461016b5760a036600319011261016b5761028961016f565b602435906001600160a01b038216820361016b57604435916064356001600160401b03811161016b576102c09036906004016101e0565b60843593916001600160401b03851161016b576020956102e76102ef9636906004016101e0565b959094610e78565b604051908152f35b3461016b57602036600319011261016b5761031061025a565b6001546001600160a01b0316330361036e575f80546001600160a01b0319166001600160a01b039290921691821790556040519081527f480b37e3d134e44cb444c9703493c7db564c707cb8a18cecea165f340431da1f90602090a1005b60405162461bcd60e51b81526020600482015260126024820152716f7261636c653a206f776e6572206f6e6c7960701b6044820152606490fd5b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b038211176103dd57604052565b6103a8565b604051906103f16080836103bc565b565b906103f160405192836103bc565b6001600160401b0381116103dd57601f01601f191660200190565b92919261042882610401565b9161043660405193846103bc565b82948184528183011161016b578281602093845f960137010152565b9080601f8301121561016b5781602061046d9335910161041c565b90565b3461016b57604036600319011261016b576004356001600160401b03811161016b576001600160401b036104b66104ad6080933690600401610452565b60243590611189565b91846040959495519516855260208501526040840152166060820152f35b602060031982011261016b57600435906001600160401b03821161016b5761046d91600401610452565b3461016b5760206102ef610511366104d4565b6105196112e3565b611dc8565b3461016b575f36600319011261016b5760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461016b575f36600319011261016b5761072c6101606105ae60405191826103bc565b61012b81527f436865636b6564206f6e20636861696e3a20686561646572206861736865732060208201527f616e6420706172656e74206c696e6b7320746f2061206365727469666965642060408201527f636865636b706f696e742c2074686520636f696e62617365206d65726b6c652060608201527f706174682c20746865207365676d656e74207265636f7264206c61796f75742c60808201527f20616e6420746865206163636f756e7420616e642073746f726167652070726f60a08201527f6f667320756e64657220706f73745f726f6f742e204e6f7420636865636b656460c08201527f206f6e20636861696e20696e207468697320736c6963653a207468652061676760e08201527f72656761746f72277320424c53207369676e6174757265206f766572207468656101008201527f207365676d656e74207265636f726420616e6420746865205a4b2070726f6f666101208201526a103132b434b7321034ba1760a91b61014082015260405191829182610561565b0390f35b3461016b576060610748610743366104d4565b611310565b9060405192835260208301526040820152f35b3461016b5760206102ef61076e366104d4565b6105196113da565b606060031982011261016b576004356001600160401b038116810361016b57916024356001600160a01b038116810361016b5791604435906001600160401b03821161016b576107c8916004016101e0565b9091565b3461016b5760206107f26107ea6107e236610776565b939092610b9f565b505050612067565b5050915050604051908152f35b3461016b575f36600319011261016b576001546040516001600160a01b039091168152602090f35b60c060031982011261016b5761083d6004610185565b916024356001600160401b03811161016b578261085c916004016101e0565b92909291604435916001600160401b03831161016b578060238401121561016b578260040135926001600160401b03841161016b57816024858301011161016b57602401929160643591608435906001600160401b03821161016b576108c4916004016101e0565b909160a43590565b3461016b576108ef6108dd36610827565b9688999896919695929594939461174b565b9091936001600160401b03841692835f52600260205260405f2054868115918215610a6f575b505015610a14576109f57fb650e8bdb81a79cecbd85292ffa6c38212615677fdc7f99f3332f642d3b1ce2d936109c761094c6103e2565b8981528460208201528260408201526109718660608301906001600160401b03169052565b61098c896001600160401b03165f52600260205260405f2090565b606060036001600160401b039284518155602085015160018201556040850151600282015501920151166001600160401b0319825416179055565b6040519384938985909493926001600160401b03906060936080840197845260208401521660408201520152565b0390a2604080516001600160401b039290921682526020820192909252f35b60405162461bcd60e51b815260206004820152602d60248201527f6f7261636c653a20616e6f7468657220726f6f742069732073746f726564206660448201526c6f72207468617420626c6f636b60981b6064820152608490fd5b149050865f610915565b3461016b57610a8f610a8a366104d4565b61149c565b60408051928352602083019190915290f35b3461016b576080610ac3610ab436610827565b9796909695919594929461174b565b916001600160401b0360405194168452602084015260408301526060820152f35b3461016b5760a0610afa6107ea6107e236610776565b9260409291925194151585526020850152604084015260608301526080820152f35b3461016b57606036600319011261016b576004356001600160401b03811161016b57610b4f610a8f913690600401610452565b60243560443591611945565b3461016b57606036600319011261016b576004356044356024356001600160401b03821161016b57602092610b976102ef9336906004016101e0565b929091611ab3565b6001600160401b03165f52600260205260405f2080548015610bdb576001820154926001600160401b0360036002850154940154169193929190565b60405162461bcd60e51b815260206004820152602560248201527f6f7261636c653a206e6f2070726f76656e20726f6f7420666f72207468617420604482015264626c6f636b60d81b6064820152608490fd5b634e487b7160e01b5f52603260045260245ffd5b9015610c7c57803590601e198136030182121561016b5701908135916001600160401b03831161016b57602001823603811361016b579190565b610c2e565b9190811015610c7c5760051b81013590601e198136030182121561016b5701908135916001600160401b03831161016b57602001823603811361016b579190565b15610cc957565b60405162461bcd60e51b815260206004820152603c60248201527f686561646572733a20612068656164657220646f6573206e6f74206e616d652060448201527f7468652070726576696f7573206f6e65206173206120706172656e74000000006064820152608490fd5b15610d3b57565b60405162461bcd60e51b815260206004820152603860248201527f686561646572733a20746865206c61737420686561646572206973206e6f742060448201527f7468652063657274696669656420636865636b706f696e7400000000000000006064820152608490fd5b919290925f935f938115610e43575f915f5b818110610dcd57505050906103f19114610d34565b610de2610ddb828486610c81565b369161041c565b96610dec88611310565b92919690841597885f14610e235750505050610e0b90976105196113da565b93610e19575b600101610db8565b9296508692610e11565b610e0b945091610e3991610e3e938d959d611b64565b610cc2565b61076e565b60405162461bcd60e51b815260206004820152600d60248201526c686561646572733a206e6f6e6560981b6044820152606490fd5b906107ea610e8b94929796959397610b9f565b50959291505015610e9f5761046d93611c10565b50509050610eab575f90565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a2073746f726167652070726f6f6620666f7220616e20616273656e74604482015267081858d8dbdd5b9d60c21b6064820152608490fd5b634e487b7160e01b5f52601160045260245ffd5b9060018201809211610f2357565b610f01565b90600a8201809211610f2357565b9060128201809211610f2357565b9060768201809211610f2357565b9060088201809211610f2357565b9060108201809211610f2357565b9060948201809211610f2357565b6008019081600811610f2357565b9060248201809211610f2357565b9060028201809211610f2357565b9060228201809211610f2357565b6013019081601311610f2357565b9060138201809211610f2357565b6080019081608011610f2357565b91908201809211610f2357565b9061024a82029180830461024a1490151715610f2357565b600581901b91906001600160fb1b03811603610f2357565b908160011b9180830460021490151715610f2357565b1561103857565b606460405162461bcd60e51b815260206004820152602060248201527f7265636f72643a20696e646578206265796f6e64207468652073656374696f6e6044820152fd5b1561108357565b60405162461bcd60e51b815260206004820152603560248201527f7265636f72643a2073746174656d656e74206973206e6f7420666f7220746865604482015274207365676d656e742773206c61737420626c6f636b60581b6064820152608490fd5b156110ed57565b60405162461bcd60e51b815260206004820152602960248201527f7265636f72643a20626c6f636b2068617368206973206e6f74207468652073746044820152686174656d656e74277360b81b6064820152608490fd5b1561114b57565b60405162461bcd60e51b81526020600482015260166024820152751c9958dbdc990e881e995c9bc81c1bdcdd17dc9bdbdd60521b6044820152606490fd5b919061119e6111978461149c565b9085611945565b61024a810661129157826111be6111ca926111c36111be6111d097610f15565b610feb565b1115611031565b90610fde565b6111e26111dc82610f28565b84611d16565b906111fe6111f86111f283610f36565b86611d41565b91610f44565b926112866112246112186112128789611d41565b60c01c90565b6001600160401b031690565b9261127f6001600160401b0361126d61124b6112186112126112458c610f52565b8d611d41565b9961126761126161125b8c610f60565b83611d41565b9a610f6e565b90611d41565b96166001600160401b0389161461107c565b85146110e6565b6103f1831515611144565b60405162461bcd60e51b81526020600482015260166024820152750e4cac6dee4c87440e6cac6e8d2dedc40d8cadccee8d60531b6044820152606490fd5b604051906112de6020836103bc565b5f8252565b604051906112f26040836103bc565b600f82526e0a8e4c2dce6c2c6e8d2dedc90c2e6d608b1b6020830152565b906001600160401b0361132283611cd0565b1690600182106113955761133861121884611cee565b9160129361134f61134885611003565b6012610fde565b906001925b808410611366575061046d9250611d41565b909161138b816111ca61138661138161121860019689611d16565b611003565b610f7c565b9301929190611354565b60405162461bcd60e51b815260206004820152601860248201527f6865616465723a206e6f20706172656e74206c6576656c7300000000000000006044820152606490fd5b604051906113e96040836103bc565b6009825268084d8dec6d690c2e6d60bb1b6020830152565b1561140857565b60405162461bcd60e51b815260206004820152600f60248201526e18dbda5b98985cd94e881cda1bdc9d608a1b6044820152606490fd5b908151811015610c7c570160200190565b1561145757565b60405162461bcd60e51b815260206004820152601a60248201527f636f696e626173653a207061796c6f6164206f76657272756e730000000000006044820152606490fd5b9061ffff6114a983611d02565b166114b661121884611cd0565b90600a9060015f91109283159384925b878382106115b8576114eb94506114e593506112189250859150611d16565b91610f52565b905f5b81811061152f5750506115019150610f8a565b906103f161151b6115156112188587611d16565b93610f52565b936115268486610fde565b90511015611450565b61154d61153d859394610f28565b6111ca611386611218838b611d16565b9361155f575b600101929190926114ee565b926115a260019161157288518210611401565b60ff611598611592611584848c61143f565b516001600160f81b03191690565b60f81c90565b166115aa57610f15565b939050611553565b6115b390610fa6565b610f15565b916115dd6115e792936111ca6113866112186115d686999a9b610f8a565b8094611d16565b9061160d57610f52565b936115f9575b600101908492916114c6565b92611605600191610f98565b9390506115ed565b61161690610f15565b610f52565b9081602091031261016b575190565b6040513d5f823e3d90fd5b1561163c57565b60405162461bcd60e51b8152602060048201526024808201527f6f7261636c653a206e6f206365727469666963617465206174207468617420696044820152630dcc8caf60e31b6064820152608490fd5b1561169457565b60405162461bcd60e51b815260206004820152603a60248201527f6d65726b6c653a207061746820646f6573206e6f74207265616368207468652060448201527f63617272696572277320686173685f6d65726b6c655f726f6f740000000000006064820152608490fd5b1561170657565b60405162461bcd60e51b815260206004820152601a60248201527f7265636f72643a2073746174656d656e7420636861696e2069640000000000006044820152606490fd5b9660206117a4979493929996959a9861177961176d5f5460018060a01b031690565b6001600160a01b031690565b60405180809b819463b1b0945360e01b8352600483019190916001600160401b036020820193169052565b03915afa93841561188c576117e76117dd6117ff966117f9956103f19d6118049c5f9361185b575b506117d8831515611635565b610da6565b95909c369161041c565b956117f4876105196112e3565b611ab3565b1461168d565b611189565b9592939194909493956001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168015918215611848575b50506116ff565b6001600160401b03161490505f80611841565b61187e91935060203d602011611885575b61187681836103bc565b81019061161b565b915f6117cc565b503d61186c565b61162a565b1561189857565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a20736372697074206f76657272756e73000000000000006044820152606490fd5b156118e457565b60405162461bcd60e51b815260206004820152601960248201527f636f696e626173653a206e6f2049474e532073656374696f6e000000000000006044820152606490fd5b600719810191908211610f2357565b91908203918211610f2357565b909291601381106119d95761046d916119b66119af6119a86119be946119a26119806119796119738c610f36565b8861143f565b5160f81c90565b6119948361198d83610fb4565b1115611891565b61199d8b610fc2565b610fde565b98610fde565b87846121ae565b8683612262565b9485916122bd565b6119ca848214156118dd565b6119d48194611929565b611938565b60405162461bcd60e51b815260206004820152601b60248201527f636f696e626173653a207061796c6f616420746f6f2073686f727400000000006044820152606490fd5b9190811015610c7c5760051b0190565b60405190611a3d6040836103bc565b601082526f09acae4d6d8ca84e4c2dcc6d090c2e6d60831b6020830152565b15611a6357565b60405162461bcd60e51b815260206004820152602260248201527f6d65726b6c653a206c65616620696e646578206265796f6e64207468652070616044820152610e8d60f31b6064820152608490fd5b939290915f915b808310611ace575050506103f19015611a5c565b90919294611b29600191828816155f14611b3257611b2290611b1a611af4888789611a1e565b60408051602081019490945290359083015281606081015b03601f1981018352826103bc565b610519611a2e565b9660011c90565b93019190611aba565b611b5f90611b1a611b44888789611a1e565b60408051913560208301528101929092528160608101611b0c565b611b22565b909291925f5b848110611b7a5750505050505f90565b6001600160fb1b0381168103610f23578060051b8201808311610f2357611ba2859185611d41565b14611baf57600101611b6a565b5050505050600190565b15611bc057565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a2073746f726167652076616c7565206973206e6f74206120737472696044820152616e6760f01b6064820152608490fd5b611c389392916040516020810191825260208152611c2f6040826103bc565b519020906125ee565b9015611c8f57611c4781612b4f565b90815115151580611c70575b91611c6061046d93611bb9565b6060604082015191015191612d4f565b5060408201519160608101518301809311610f23578151909214611c53565b505f90565b15611c9b57565b60405162461bcd60e51b815260206004820152600d60248201526c1a195859195c8e881cda1bdc9d609a1b6044820152606490fd5b602261046d91611ce48151600a1115611c94565b015160c01c612ddd565b602a61046d91611ce4815160121115611c94565b602061046d91611ce4815160081115611c94565b906008810190818111610f235782611d3660209361046d95511015611c94565b01015160c01c612ddd565b906020810191828211610f2357611d5d60209382511015611c94565b01015190565b15611d6a57565b60405162461bcd60e51b81526020600482015260136024820152720c4d8c2d6ca64c47440d6caf240d8cadccee8d606b1b6044820152606490fd5b6040516101009190611db783826103bc565b60d5815291601f1901366020840137565b611ddd81518015159081611fc4575b50611d63565b611de5611da5565b91611df16101006103f3565b676a09e667f3bcc908815267bb67ae8584caa73b6020820152673c6ef372fe94f82b604082015267a54ff53a5f1d36f1606082015267510e527fade682d16080820152679b05688c2b3e6c1f60a0820152671f83d9abfb41bd6b60c0820152675be0cd19137e217960e0820152611ea66301010020611e8a611e7a86516001600160401b031690565b60081b67ffffffffffffff001690565b83516001600160401b0316181882906001600160401b03169052565b600c60238501535f5b60088110611f7d575050805191611eda8460c45f918260648201528260848201528260a48201520152565b80516020606486019201825e611ef1831585612e4d565b5f5b838110611f0557505050506024015190565b80611f13611f349286611938565b9060808211611f74575b60808210611f51575b81602082870101855e610fde565b90611f4b611f4183610fd0565b8584149087612ec3565b90611ef3565b611f6f8760c45f918260648201528260848201528260a48201520152565b611f26565b60809150611f1d565b8060051b8201515f905f905b60088210611fa957505060c01b600382901b860160240152600101611eaf565b909160019060ff838560031b1c169060081b17920190611f89565b6040915011155f611dd7565b15611fd757565b60405162461bcd60e51b815260206004820152601a60248201527f6d70743a206163636f756e74206973206e6f742061206c6973740000000000006044820152606490fd5b1561202357565b606460405162461bcd60e51b815260206004820152602060248201527f6d70743a206163636f756e7420686173206e6f7420666f7572206669656c64736044820152fd5b60405160609290921b6bffffffffffffffffffffffff191660208301908152612099949392611c2f8160348101611b0c565b9190156121a1576120a982612b4f565b9081516120b590151590565b6120be90611fd0565b604082019182516120cf9085612c55565b9160408301948551936060019384516120e791610fde565b6120f19082612c55565b94604086019586519060600190815161210991610fde565b6121139084612c55565b90604082019687519260600192835161212b91610fde565b6121359086612c55565b93604085019788519560600195865161214d91610fde565b9151906060015161215d91610fde565b146121679061201c565b6001995190516121779186612d4f565b975190516121859185612d4f565b955190516121939184612ed9565b935190519061046d92612ed9565b5f91508190819081908190565b6008820190818311610f23578391821061225c57016324a3a72360e11b63ffffffff60e01b601c83015116036122575782600719810111610f23576018015161222e9060e081901c906122249060c81c63ff000000165b62ff0000600884901b161761ff00600884901c16179160181c60ff1690565b1763ffffffff1690565b9061224261223b83610f52565b9184611938565b10612253576119d461046d92611929565b5090565b505090565b50505090565b6008820190818311610f23578391821061225c570163049474e560e41b63ffffffff60e01b601c83015116036122575782600719810111610f23576018015161222e9060e081901c906122249060c81c63ff00000016612205565b6008820190818311610f23578391821061225c57016349474e5360e01b63ffffffff60e01b601c83015116036122575782600719810111610f23576018015161222e9060e081901c906122249060c81c63ff00000016612205565b1561231f57565b60405162461bcd60e51b815260206004820152602260248201527f6d70743a206e6f206e6f64657320666f722061206e6f6e2d656d70747920726f6044820152611bdd60f21b6064820152608490fd5b1561237657565b60405162461bcd60e51b815260206004820152602360248201527f6d70743a20746865206669727374206e6f6465206973206e6f742074686520726044820152621bdbdd60ea1b6064820152608490fd5b156123ce57565b60405162461bcd60e51b815260206004820152601760248201527f6d70743a206e6f6465206973206e6f742061206c6973740000000000000000006044820152606490fd5b6040519061022061242481846103bc565b368337565b1561243057565b60405162461bcd60e51b81526020600482015260136024820152726d70743a20746f6f206d616e79206974656d7360681b6044820152606490fd5b5f198114610f235760010190565b906011811015610c7c5760051b0190565b60405190608082018281106001600160401b038211176103dd576040525f6060838281528260208201528260408201520152565b156124c557565b60405162461bcd60e51b815260206004820152600d60248201526c0dae0e87440c4c2c840e0c2e8d609b1b6044820152606490fd5b1561250157565b60405162461bcd60e51b81526020600482015260126024820152716d70743a20626164207265666572656e636560701b6044820152606490fd5b1561254257565b60405162461bcd60e51b815260206004820152602160248201527f6d70743a2061207265666572656e636564206e6f6465206973206d697373696e6044820152606760f81b6064820152608490fd5b1561259857565b60405162461bcd60e51b815260206004820152602860248201527f6d70743a206e6f646520646f6573206e6f74206861736820746f20697473207260448201526765666572656e636560c01b6064820152608490fd5b939291938215612a545761261a61260c610ddb858897969597610c42565b91825160208401201461236f565b5f918290600190825b605084106126655760405162461bcd60e51b815260206004820152601260248201527106d70743a207061746820746f6f20646565760741b6044820152606490fd5b61266f9085612c55565b9461268261267d8751151590565b6123c7565b61268a612413565b965f986040880197606089519101905b6126a78a51835190610fde565b81101561270257906126f68c836126e58e9f9d9e9d6126a7968e6126d060116126d59410612429565b612c55565b926126df8161246b565b9e612479565b526060604082015191015190610fde565b9a999b9a90915061269a565b505096509796909694919461271561248a565b50601181036128365750604087146127e95761275161274a6127579261274461273e8b8b612f22565b60ff1690565b90612479565b5183612c55565b96610f15565b955b80516127d957606081018051156127c5576020929161277c8460409351146124fa565b01510101519261278d81831061253b565b6127b56127a7610ddb61279f8561246b565b94848c610c81565b948551602087012014612591565b60015f935b019296959496612623565b505050505050505090505f9061046d6112cf565b60206001919592950151936127ba565b93509596505050612808925061280191506102000190565b5182612c55565b9060608201805115612829576040612824930151905191612f49565b600191565b5050505f9061046d6112cf565b909690600203612a0f5761284b875183612c55565b9061285d6128598351151590565b1590565b80612a02575b61286c906124be565b604082019061289b606061289361288a61159261158487518a61143f565b60041c600f1690565b94015161101b565b60018416158015916128b7916129f95760ff60015b1690611938565b925f5b84811061291c575050506128dd6128d66002936128e493610fde565b9960200190565b5184612c55565b911615612759579697509492505050604091500361291057816060604061282494015191015191612f49565b50505f9061046d6112cf565b5f9c979b96999a92939495989c50835f146129e15789600161296161159261158461294b60ff855b1687610fde565b9461295b88516111ca8860011c90565b9061143f565b91166129d95760041c600f165b604061297a8388610fde565b10908115916129b5575b5061299d576001019b97949392919998959a969b6128ba565b50505050505050955050505050505f9061046d6112cf565b905060ff6129cf61273e6129c9858a610fde565b87612f22565b911614155f612984565b600f1661296e565b89600161296161159261158461294b60ff6002612944565b60ff60026128b0565b5060608201511515612863565b60405162461bcd60e51b815260206004820181905260248201527f6d70743a206e6f6465207769746820616e206f6464206974656d20636f756e746044820152606490fd5b9050612a859293507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421915014612318565b5f9061046d6112cf565b15612a9657565b60405162461bcd60e51b815260206004820152600a6024820152691c9b1c0e881cda1bdc9d60b21b6044820152606490fd5b60ff60f6199116019060ff8211610f2357565b60ff60bf199116019060ff8211610f2357565b60ff60b6199116019060ff8211610f2357565b60ff607f199116019060ff8211610f2357565b15612b1b57565b60405162461bcd60e51b815260206004820152600c60248201526b3936381d1037bb32b9393ab760a11b6044820152606490fd5b906103f1612b5b61248a565b92612b6881511515612a8f565b612b786115926115845f8461143f565b5f602086015260ff81166080811015612bb75750505f6040850152600160608501525b612bae6040850151606086015190610fde565b90511015612b14565b60b8811015612be5575061273e612bcd91612b01565b6060850152612bdb5f610f15565b6040850152612b9b565b60c0811015612c1f5750612bfe61273e612bdb92612aee565b612c1181612c0b5f610f15565b85612f84565b606087015261199d5f610f15565b60f81115612c3d5761273e612bcd91612c388760019052565b612adb565b612c4c61273e612bdb92612ac8565b60018652612bfe565b6103f190929192612c6461248a565b93612c7182518210612a8f565b612c81611592611584838561143f565b9080602087015260ff8216608081105f14612cb2575060408601819052600160608701819052612bae925090610fde565b60b8811015612cd55750612ccb61273e612bdb93612b01565b6060870152610f15565b60c0811015612d0f575061199d612cf161273e612bdb94612aee565b91612d0583612cff83610f15565b87612f84565b6060890152610f15565b60f81115612d2b57612ccb61273e612bdb93612c388960019052565b61199d612d3d61273e612bdb94612ac8565b6001885291612d0583612cff83610f15565b9092915f9360208211612da05791905f925b818410612d6e5750505050565b9091929460081b85820190818311610f2357612d9561273e6115926115846001958961143f565b179501929190612d61565b60405162461bcd60e51b8152602060048201526015602482015274726c703a20696e746567657220746f6f207769646560581b6044820152606490fd5b612e4967ff00000000000000603883901b8116600884811b64ff000000001690601886901b65ff00000000001690602887901b66ff000000000000169063ff0000009088901c16931717171762ff0000601885901c161761ff00602885901c1617921660381c60ff1690565b1790565b604091612e5a6080612ddd565b60c01b60e4830152612eb7575b60d5602060248301920160095afa15612e7c57565b60405162461bcd60e51b8152602060048201526013602482015272626c616b6532623a20707265636f6d70696c6560681b6044820152606490fd5b600160f4820153612e67565b9091612e5a6001600160401b0360409416612ddd565b91602003612ee957016020015190565b60405162461bcd60e51b8152602060048201526011602482015270726c703a206e6f7420333220627974657360781b6044820152606490fd5b8160011c906020821015610c7c57901a90600116612f435760041c60ff1690565b600f1690565b9291906020612f5783610401565b91612f6560405193846103bc565b838352612f7184610401565b8284019390601f1901368537950101905e565b9291905f93602083111580613019575b15612fe25791905f925b828410612fab5750505050565b90919294612fbb60019160081b90565b612fd761273e611592611584612fd18b89610fde565b8761143f565b179501929190612f9e565b60405162461bcd60e51b815260206004820152600f60248201526e0e4d8e07440c4c2c840d8cadccee8d608b1b6044820152606490fd5b50828201808311610f235781511015612f9456fea2646970667358221220ce879094835d769d272d5d167c77090fc9d7fde70913d367e3ed7080aa3b6bfd64736f6c634300081c0033" }