@layerzerolabs/oapp-alt-evm
Version:
LayerZero Labs reference EVM OmniChain Application (OAppAlt) for EndpointV2Alt implementation
1 lines • 266 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"_verifyHelper","type":"address","internalType":"address payable"},{"name":"_endpoint","type":"address","internalType":"address"},{"name":"_treasuryGasLimit","type":"uint256","internalType":"uint256"},{"name":"_treasuryGasForFeeCap","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"cmdHashLookup","inputs":[{"name":"oapp","type":"address","internalType":"address"},{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"nonce","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"cmdHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"commitVerification","inputs":[{"name":"_packetHeader","type":"bytes","internalType":"bytes"},{"name":"_cmdHash","type":"bytes32","internalType":"bytes32"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"fees","inputs":[{"name":"worker","type":"address","internalType":"address"}],"outputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAppReadLibConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ReadLibConfig","components":[{"name":"executor","type":"address","internalType":"address"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"stateMutability":"view"},{"type":"function","name":"getConfig","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_oapp","type":"address","internalType":"address"},{"name":"_configType","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getReadLibConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"rtnConfig","type":"tuple","internalType":"struct ReadLibConfig","components":[{"name":"executor","type":"address","internalType":"address"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"stateMutability":"view"},{"type":"function","name":"getTreasuryAndNativeFeeCap","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"hashLookup","inputs":[{"name":"headerHash","type":"bytes32","internalType":"bytes32"},{"name":"cmdHash","type":"bytes32","internalType":"bytes32"},{"name":"dvn","type":"address","internalType":"address"}],"outputs":[{"name":"payloadHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"isSupportedEid","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"messageLibType","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum MessageLibType"}],"stateMutability":"pure"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quote","inputs":[{"name":"_packet","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"send","inputs":[{"name":"_packet","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]},{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"setConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_params","type":"tuple[]","internalType":"struct SetConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"configType","type":"uint32","internalType":"uint32"},{"name":"config","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultReadLibConfigs","inputs":[{"name":"_params","type":"tuple[]","internalType":"struct SetDefaultReadLibConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct ReadLibConfig","components":[{"name":"executor","type":"address","internalType":"address"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTreasury","inputs":[{"name":"_treasury","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTreasuryNativeFeeCap","inputs":[{"name":"_newTreasuryNativeFeeCap","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"_interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"testHelper","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract TestHelperOz5"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifiable","inputs":[{"name":"_config","type":"tuple","internalType":"struct ReadLibConfig","components":[{"name":"executor","type":"address","internalType":"address"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]},{"name":"_headerHash","type":"bytes32","internalType":"bytes32"},{"name":"_cmdHash","type":"bytes32","internalType":"bytes32"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"verify","inputs":[{"name":"_packetHeader","type":"bytes","internalType":"bytes"},{"name":"_cmdHash","type":"bytes32","internalType":"bytes32"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"major","type":"uint64","internalType":"uint64"},{"name":"minor","type":"uint8","internalType":"uint8"},{"name":"endpointVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"withdrawFee","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawLzTokenFee","inputs":[{"name":"_lzToken","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"DVNFeePaid","inputs":[{"name":"requiredDVNs","type":"address[]","indexed":false,"internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","indexed":false,"internalType":"address[]"},{"name":"fees","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"DefaultReadLibConfigsSet","inputs":[{"name":"params","type":"tuple[]","indexed":false,"internalType":"struct SetDefaultReadLibConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct ReadLibConfig","components":[{"name":"executor","type":"address","internalType":"address"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}]}],"anonymous":false},{"type":"event","name":"ExecutorFeePaid","inputs":[{"name":"executor","type":"address","indexed":false,"internalType":"address"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LzTokenFeeWithdrawn","inputs":[{"name":"lzToken","type":"address","indexed":false,"internalType":"address"},{"name":"receiver","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NativeFeeWithdrawn","inputs":[{"name":"worker","type":"address","indexed":false,"internalType":"address"},{"name":"receiver","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PayloadVerified","inputs":[{"name":"dvn","type":"address","indexed":false,"internalType":"address"},{"name":"header","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"cmdHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"payloadHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ReadLibConfigSet","inputs":[{"name":"oapp","type":"address","indexed":false,"internalType":"address"},{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"config","type":"tuple","indexed":false,"internalType":"struct ReadLibConfig","components":[{"name":"executor","type":"address","internalType":"address"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"anonymous":false},{"type":"event","name":"TreasuryNativeFeeCapSet","inputs":[{"name":"newTreasuryNativeFeeCap","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TreasurySet","inputs":[{"name":"treasury","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"DVN_InvalidDVNIdx","inputs":[]},{"type":"error","name":"DVN_InvalidDVNOptions","inputs":[{"name":"cursor","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_MessageLib_OnlyEndpoint","inputs":[]},{"type":"error","name":"LZ_RL_AtLeastOneDVN","inputs":[]},{"type":"error","name":"LZ_RL_CannotWithdrawAltToken","inputs":[]},{"type":"error","name":"LZ_RL_InvalidAmount","inputs":[{"name":"requested","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_RL_InvalidCmdHash","inputs":[]},{"type":"error","name":"LZ_RL_InvalidConfigType","inputs":[{"name":"configType","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"LZ_RL_InvalidEid","inputs":[]},{"type":"error","name":"LZ_RL_InvalidExecutor","inputs":[]},{"type":"error","name":"LZ_RL_InvalidOptionalDVNCount","inputs":[]},{"type":"error","name":"LZ_RL_InvalidOptionalDVNThreshold","inputs":[]},{"type":"error","name":"LZ_RL_InvalidPacketHeader","inputs":[]},{"type":"error","name":"LZ_RL_InvalidPacketVersion","inputs":[]},{"type":"error","name":"LZ_RL_InvalidReceiver","inputs":[]},{"type":"error","name":"LZ_RL_InvalidRequiredDVNCount","inputs":[]},{"type":"error","name":"LZ_RL_NotTreasury","inputs":[]},{"type":"error","name":"LZ_RL_Unsorted","inputs":[]},{"type":"error","name":"LZ_RL_UnsupportedEid","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"LZ_RL_Verifying","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidLegacyType1Option","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidLegacyType2Option","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidWorkerId","inputs":[{"name":"workerId","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"LZ_ULN_InvalidWorkerOptions","inputs":[{"name":"cursor","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_ULN_UnsupportedOptionType","inputs":[{"name":"optionType","type":"uint16","internalType":"uint16"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Transfer_NativeFailed","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"Transfer_ToAddressIsZero","inputs":[]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b5060405162004a6c38038062004a6c833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051614838620002345f395f8181611ad8015261258901525f610baa01525f818161062c0152818161072f0152818161086b01528181610d2c01526116f901526148385ff3fe60806040526004361061017e575f3560e01c80637620fd01116100cd578063d15b0d4911610087578063f0f4426011610062578063f0f44260146104fc578063f2fde38b1461051b578063faaebd211461053a578063fd9be52214610565575f80fd5b8063d15b0d4914610492578063d80e9bd9146104b1578063ea69d69d146104dd575f80fd5b80637620fd011461039e5780638da5cb5b146103e05780638eb0bf30146103fc5780639c33abf714610428578063ab750e7514610454578063c85f4b4e14610473575f80fd5b806320efd7221161013857806354fd4d501161011357806354fd4d5014610321578063594924da1461034c5780636750cd4c1461036b578063715018a61461038a575f80fd5b806320efd722146102995780633c782a52146102b85780634389e58f146102f4575f80fd5b806301ffc9a714610189578063052368ca146101bd5780630e97289b146101dc5780631881d94d146102135780631fb512251461022e578063200175f714610278575f80fd5b3661018557005b5f80fd5b348015610194575f80fd5b506101a86101a33660046137a4565b610584565b60405190151581526020015b60405180910390f35b3480156101c8575f80fd5b506101a86101d73660046137cb565b6105d5565b3480156101e7575f80fd5b506002546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020016101b4565b34801561021e575f80fd5b5060026040516101b4919061381e565b348015610239575f80fd5b5061026a610248366004613891565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101b4565b348015610283575f80fd5b506102976102923660046138d3565b6105f5565b005b3480156102a4575f80fd5b506102976102b3366004613958565b61072d565b3480156102c3575f80fd5b5061026a6102d23660046139a8565b600460209081525f938452604080852082529284528284209052825290205481565b3480156102ff575f80fd5b5061031361030e366004613a1b565b610854565b6040516101b4929190613ae9565b34801561032c575f80fd5b5060408051600a81525f60208201526002918101919091526060016101b4565b348015610357575f80fd5b50610297610366366004613b0c565b610b5a565b348015610376575f80fd5b506101a8610385366004613b58565b610d90565b348015610395575f80fd5b50610297610d9a565b3480156103a9575f80fd5b506103c16007546006546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016101b4565b3480156103eb575f80fd5b505f546001600160a01b03166101fb565b348015610407575f80fd5b5061041b610416366004613b71565b610dad565b6040516101b49190613c56565b348015610433575f80fd5b50610447610442366004613c68565b61109c565b6040516101b49190613ca1565b34801561045f575f80fd5b5061029761046e366004613b0c565b611104565b34801561047e575f80fd5b5061029761048d366004613cb3565b61118d565b34801561049d575f80fd5b506102976104ac366004613cf1565b61131c565b3480156104bc575f80fd5b506104d06104cb366004613a1b565b611391565b6040516101b49190613d08565b3480156104e8575f80fd5b5061041b6104f7366004613b71565b6114d4565b348015610507575f80fd5b50610297610516366004613d1f565b611606565b348015610526575f80fd5b50610297610535366004613d1f565b61165c565b348015610545575f80fd5b5061026a610554366004613d1f565b60056020525f908152604090205481565b348015610570575f80fd5b5061029761057f366004613d3a565b611699565b5f6001600160e01b031982166325fc096160e21b14806105b457506001600160e01b0319821663b6e9ace360e01b145b806105cf57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6105ea6105e286613f35565b8585856117bd565b90505b949350505050565b6007546001600160a01b0316331461062057604051634b41868f60e11b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106aa9190613f40565b6001600160a01b0316036106d157604051632ddfd41160e21b815260040160405180910390fd5b6106dc838383611910565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107765760405163467409c360e01b815260040160405180910390fd5b5f5b8181101561084e573683838381811061079357610793613f5b565b90506020028101906107a59190613f6f565b90506107bc6107b76020830183613b58565b611950565b60016107ce6040830160208401613b58565b63ffffffff160361080e576108096107e96020830183613b58565b866107f76040850185613f8d565b8101906108049190613fcf565b61197e565b610845565b61081e6040820160208301613b58565b60405163065c274160e11b815263ffffffff90911660048201526024015b60405180910390fd5b50600101610778565b50505050565b604080518082019091525f808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146108b25760405163467409c360e01b815260040160405180910390fd5b60808601356108d66108ca6060890160408a01613d1f565b6001600160a01b031690565b146108f45760405163a4884a5960e01b815260040160405180910390fd5b5f806109018888886119c7565b90925090505f8061093261091b60608c0160408d01613d1f565b61092b60808d0160608e01613b58565b858a611a4c565b90925090506109418284614014565b925061095060c08b018b613f8d565b60405161095e929190614027565b604051809103902060035f8c604001602081019061097c9190613d1f565b6001600160a01b0316815260208101919091526040015f908120906109a760808e0160608f01613b58565b63ffffffff1681526020808201929092526040015f908120916109cc908e018e614036565b6001600160401b03166001600160401b031681526020019081526020015f20819055505f610ad66040518060e001604052808d5f016020810190610a109190614036565b6001600160401b031681526020018d6060016020810190610a319190613b58565b63ffffffff1681526020018d6040016020810190610a4f9190613d1f565b6001600160a01b031681526020018d6020016020810190610a709190613b58565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610a9c60c08f018f613f8d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250611b56565b600254604051631f5dad8b60e31b81529192506001600160a01b03169063faed6c5890610b0b9084908e908e90600401614077565b5f604051808303815f87803b158015610b22575f80fd5b505af1158015610b34573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610b7b5760405163864d08b360e01b815260040160405180910390fd5b6001610b878585611bae565b60ff1614610ba857604051637952a82f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610bd98585611bcf565b63ffffffff1614610bfd57604051631f4b6f8b60e11b815260040160405180910390fd5b5f610c088585611bf1565b90505f610c158686611c02565b90505f610c228787611c11565b6001600160a01b0384165f90815260036020908152604080832063ffffffff8716845282528083206001600160401b03851684529091529020549091508514610c7e576040516333074b7760e11b815260040160405180910390fd5b5f610c898484610dad565b9050610cae818989604051610c9f929190614027565b60405180910390208888611c33565b5f60405180606001604052808563ffffffff168152602001610cd08b8b611d7b565b81526001600160401b038581166020928301526040805163a825d74760e01b8152845163ffffffff1660048201529284015160248401528301511660448201526001600160a01b038781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b158015610d6f575f80fd5b505af1158015610d81573d5f803e3d5ffd5b50505050505050505050505050565b5f6105cf82611d93565b610da2611ded565b610dab5f611e19565b565b610db56136f2565b63ffffffff82165f8181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03888116855260018452828520958552949092529091208054919290911680610e255782546001600160a01b0316610e27565b805b6001600160a01b031684528154600160a01b900460ff16610eca578254600160a01b900460ff1615610ec55782600101805480602002602001604051908101604052809291908181526020018280548015610ea957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610e8b575b505050505060808501528254600160a01b900460ff1660208501525b610f4f565b8154600160a01b900460ff90811614610f4f5781600101805480602002602001604051908101604052809291908181526020018280548015610f3357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610f15575b505050505060808501528154600160a01b900460ff1660208501525b8154600160a81b900460ff16610ff6578254600160a81b900460ff1615610ff15782600201805480602002602001604051908101604052809291908181526020018280548015610fc657602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610fa8575b505050505060a0850152825460ff600160a81b820481166040870152600160b01b9091041660608501525b61108a565b8154600160a81b900460ff9081161461108a578160020180548060200260200160405190810160405280929190818152602001828054801561105f57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611041575b505050505060a0850152815460ff600160a81b820481166040870152600160b01b9091041660608501525b61109384611e68565b50505092915050565b60605f1963ffffffff8316016110dc576110b68385610dad565b6040516020016110c69190613c56565b60405160208183030381529060405290506110fd565b60405163065c274160e11b815263ffffffff8316600482015260240161083c565b9392505050565b8060045f8686604051611118929190614027565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a952589161117f9187908790879087906140a6565b60405180910390a150505050565b611195611ded565b5f5b818110156112de57368383838181106111b2576111b2613f5b565b90506020028101906111c491906140de565b905060ff6111d560208301836140f2565b6111e6906040810190602001614106565b60ff160361120757604051632ad00e0160e11b815260040160405180910390fd5b60ff61121660208301836140f2565b611227906060810190604001614106565b60ff1603611248576040516371aa1b6360e11b815260040160405180910390fd5b61126661125860208301836140f2565b61126190613f35565b611e68565b5f61127460208301836140f2565b611282906020810190613d1f565b6001600160a01b0316036112a957604051633b6faad360e11b815260040160405180910390fd5b6112d55f6112ba6020840184613b58565b6112c760208501856140f2565b6112d090613f35565b611ea0565b50600101611197565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f34828260405161131092919061419f565b60405180910390a15050565b611324611ded565b6006548111156113555760065460405163b79d126360e01b815261083c918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806113b08686612128565b90925090505f6113c66060890160408a01613d1f565b90505f6113d960808a0160608b01613b58565b90505f6113e68383610dad565b90505f61141582856113ff6113fa8f61434b565b6122dc565b8e8060c0019061140f9190613f8d565b8a612357565b825160405163c8f8dcd160e01b81529192506001600160a01b03169063c8f8dcd1906114479087908a906004016143e5565b602060405180830381865afa158015611462573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114869190614408565b6114909082614014565b90505f806114a08686858d6124fd565b90925090506114af8284614014565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6114dc6136f2565b6001600160a01b038084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff600160a01b8704811682850152600160a81b8704811682870152600160b01b9096049095166060860152918201805484518184028101840190955280855292936080860193909283018282801561159557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611577575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156115f557602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115d7575b505050505081525050905092915050565b61160e611ded565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611386565b611664611ded565b6001600160a01b03811661168d57604051631e4fbdf760e01b81525f600482015260240161083c565b61169681611e19565b50565b335f90815260056020526040902054808211156116d35760405163b79d126360e01b8152600481018390526024810182905260440161083c565b335f90815260056020908152604080832085850390558051631c2eb17b60e31b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263e1758bd892600480820193918290030181865afa158015611746573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176a9190613f40565b90506117778185856125cb565b604080513381526001600160a01b03861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161117f565b60208401515f9060ff1615611864575f5b856020015160ff168160ff16101561184d5761183886608001518260ff16815181106117fc576117fc613f5b565b60200260200101518686865f9283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b611845575f9150506105ed565b6001016117ce565b50846040015160ff165f03611864575060016105ed565b60608501515f5b866040015160ff168160ff161015611904576118d58760a001518260ff168151811061189957611899613f5b565b60200260200101518787875f9283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b156118fc57816118e48161441f565b9250508160ff165f036118fc576001925050506105ed565b60010161186b565b505f9695505050505050565b6001600160a01b038216611937576040516306b7a93160e41b815260040160405180910390fd5b61194b6001600160a01b03841683836125ee565b505050565b61195981611d93565b611696576040516303fc0f9560e21b815263ffffffff8216600482015260240161083c565b611989828483611ea0565b6119938284610dad565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e1428284836040516107209392919061443a565b60605f805f6119d68686612128565b90925090505f6119ff6119ef60608a0160408b01613d1f565b61041660808b0160608c01613b58565b8051909150611a1e90611a1860608b0160408c01613d1f565b85612640565b93505f80611a2d838b8661272e565b9092509050611a3c8287614014565b909a909950975050505050505050565b6007545f9081906001600160a01b031615610b51576040516001600160a01b038716602482015263ffffffff861660448201526064810185905283151560848201525f9060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526007549192505f918291611b00916001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000908490876127f4565b91509150611b108787848461289e565b90955093508415611b4a576007546001600160a01b03165f9081526005602052604081208054879290611b44908490614014565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398611b9898600198919791966001600160a01b03169501614469565b6040516020818303038152906040529050919050565b5f611bbc60018284866144e3565b611bc59161450a565b60f81c9392505050565b5f611bde6031602d84866144e3565b611be79161453a565b60e01c9392505050565b5f6110fd611bff8484612915565b90565b5f611bde600d600984866144e3565b5f611c206009600184866144e3565b611c2991614568565b60c01c9392505050565b611c3f848484846117bd565b611c5c576040516328ca4b5160e01b815260040160405180910390fd5b602084015160ff1615611ce9575f5b846020015160ff168160ff161015611ce7575f84815260046020908152604080832086845290915281206080870151805191929160ff8516908110611cb257611cb2613f5b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9055806001019050611c6b565b505b604084015160ff161561084e575f5b846040015160ff168160ff161015611d74575f848152600460209081526040808320868452909152812060a0870151805191929160ff8516908110611d3f57611d3f613f5b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9055806001019050611cf8565b5050505050565b5f611d8a602d600d84866144e3565b6110fd91614596565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160a01b900460ff161515806110fd575054600160b01b900460ff16151592915050565b5f546001600160a01b03163314610dab5760405163118cdaa760e01b815233600482015260240161083c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff16158015611e825750606081015160ff16155b1561169657604051634dafcfbd60e11b815260040160405180910390fd5b602081015160ff9081161480611ebb5750602081015160ff16155b15611ee95760808101515115611ee457604051632ad00e0160e11b815260040160405180910390fd5b611f4f565b806020015160ff16816080015151141580611f2457506002611f0d600160ff6145b3565b611f1791906145cc565b60ff16816020015160ff16115b15611f4257604051632ad00e0160e11b815260040160405180910390fd5b611f4f8160800151612924565b604081015160ff9081161480611f6a5750604081015160ff16155b15611fbe5760a08101515115611f93576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615611fb957604051637c94a05f60e11b815260040160405180910390fd5b612063565b806040015160ff168160a0015151141580611ff957506002611fe2600160ff6145b3565b611fec91906145cc565b60ff16816040015160ff16115b15612017576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615806120385750806040015160ff16816060015160ff16115b1561205657604051637c94a05f60e11b815260040160405180910390fd5b6120638160a00151612924565b6001600160a01b038381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097166001600160a81b031990911617600160a01b60ff968716021761ffff60a81b1916600160a81b9686169690960260ff60b01b191695909517600160b01b9490951693909302939093178255608084015180518594612104938501920190613736565b5060a08201518051612120916002840191602090910190613736565b505050505050565b606080600283101561214f5760405163196499c760e21b81525f600482015260240161083c565b5f61215d60028286886144e3565b612166916145f9565b60f01c9050600260021982016122c557805f5b8683101561226b575f61219160018501858a8c6144e3565b61219a9161450a565b60f81c90505f8190036121c257604051636780cfaf60e01b81525f600482015260240161083c565b8160ff165f036121d457809150612210565b8160ff168160ff161461221057365f6121ef86868c8e6144e3565b915091506122008989868585612989565b9099509750859450919250829150505b60018401935f9061222690600301868b8d6144e3565b61222f916145f9565b60f01c90505f8190036122585760405163196499c760e21b81526004810186905260240161083c565b8060020161ffff16850194505050612179565b82871461228e5760405163196499c760e21b81526004810184905260240161083c565b60028711156122be57365f6122a585858b8d6144e3565b915091506122b68888858585612989565b909850965050505b50506122d3565b6122d0828787612aa6565b93505b50509250929050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d8301526051820152607101611b98565b5f805f61236384612c2c565b915091505f89604001518a6020015161237c9190614627565b90505f5b8160ff168160ff1610156124ef575f8b6020015160ff168260ff16106123d45760a08c015160208d01516123b490846145b3565b60ff16815181106123c7576123c7613f5b565b60200260200101516123f6565b8b608001518260ff16815181106123ed576123ed613f5b565b60200260200101515b60408051602081019091525f808252919250905b8551811015612462578360ff1686828151811061242957612429613f5b565b602002602001015160ff160361245a5786818151811061244b5761244b613f5b565b60200260200101519150612462565b60010161240a565b5060405163fdb9b0f160e01b81526001600160a01b0383169063fdb9b0f190612497908f908f908f908f908890600401614640565b602060405180830381865afa1580156124b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d69190614408565b6124e09088614014565b96505050806001019050612380565b505050509695505050505050565b6007545f9081906001600160a01b031615610b51576040516001600160a01b038716602482015263ffffffff861660448201526064810185905283151560848201525f9060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526007549192505f9182916125af916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612e87565b915091506125bf8787848461289e565b94509450505050610b51565b6001600160a01b0383166125e35761194b8282612f2d565b61194b838383611910565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261194b908490612fd6565b60405163c015bb7d60e01b81525f906001600160a01b0385169063c015bb7d9061267090869086906004016143e5565b6020604051808303815f875af115801561268c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b09190614408565b905080156126e5576001600160a01b0384165f90815260056020526040812080548392906126df908490614014565b90915550505b604080516001600160a01b0386168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f60608161273e6113fa8661434b565b90505f61275261274d8761434b565b613042565b9050606061277d8861276989840160408b01613d1f565b8561277760c08c018c613f8d565b8b61305f565b60405191965091506127959084908490602001614696565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516127e1939291906146c4565b60405180910390a1505050935093915050565b5f6060863b80830361281957604080515f808252602082019092529250925050612894565b5f805f8761ffff166001600160401b0381111561283857612838613d64565b6040519080825280601f01601f191660200182016040528015612862576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612882578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806128ae575082516020115b156128bd57505f905080610b51565b5f838060200190518101906128d29190614408565b905085156128e25780915061290b565b5f60065488116128f4576006546128f6565b875b90508082116129055781612907565b805b9350505b5094509492505050565b5f611d8a6051603184866144e3565b5f805b825181101561194b575f83828151811061294357612943613f5b565b60200260200101519050826001600160a01b0316816001600160a01b03161161297f5760405163c0762a5d60e01b815260040160405180910390fd5b9150600101612927565b6060805f1960ff861601612a04578651156129c7578684846040516020016129b393929190614720565b6040516020818303038152906040526129fd565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650612a9b565b60011960ff861601612a7d57855115612a4057858484604051602001612a2c93929190614720565b604051602081830303815290604052612a76565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550612a9b565b604051636780cfaf60e01b815260ff8616600482015260240161083c565b509495939450505050565b60605f1961ffff851601612b445760228214612ad5576040516301b8ca5560e31b815260040160405180910390fd5b5f612af5612ae76022600286886144e3565b612af091614596565b613306565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506110fd565b60011961ffff851601612c0d57604282111580612b615750606282115b15612b7f576040516360493e2b60e11b815260040160405180910390fd5b5f612b91612ae76022600286886144e3565b90505f612ba5612ae76042602287896144e3565b90505f6041198501612bba866042818a6144e3565b612bc391614596565b60405160086020938403029190911c9250612bf4916001916011918391889183916031916002918b918b9101614746565b60405160208183030381529060405293505050506110fd565b604051630417051360e41b815261ffff8516600482015260240161083c565b60608082515f03612c3c57915091565b5f612c4684613346565b90508060ff16600103612cf65760408051600180825281830190925290816020015b6060815260200190600190039081612c6857905050925083835f81518110612c9257612c92613f5b565b602090810291909101015260408051600180825281830190925290816020016020820280368337019050509150612cca84600361341d565b825f81518110612cdc57612cdc613f5b565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b03811115612d1157612d11613d64565b604051908082528060200260200182016040528015612d3a578160200160208202803683370190505b5091508060ff166001600160401b03811115612d5857612d58613d64565b604051908082528060200260200182016040528015612d8b57816020015b6060815260200190600190039081612d765790505b5092505f8060ff5b8651831015612e1d576001909201915f612dad8885613478565b6002949094019390505f612dc1898661341d565b90508260ff1660ff03612dd657809250612e0e565b8260ff168160ff1614612e0e57600219848603015f612df68b87846134d4565b9050612e048a8a87846135e0565b5093909301929150815b5061ffff169290920191612d93565b8183035f612e2c8985846134d4565b9050612e3a888885846135e0565b5f5b8660ff168160ff161015612e7b57878160ff1681518110612e5f57612e5f613f5b565b6020908102919091010180515f190160ff169052600101612e3c565b50505050505050915091565b5f6060853b808303612eac57604080515f808252602082019092529250925050610b51565b5f805f8761ffff166001600160401b03811115612ecb57612ecb613d64565b6040519080825280601f01601f191660200182016040528015612ef5576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612f14578792505b828152825f602083013e90999098509650505050505050565b6001600160a01b038216612f54576040516306b7a93160e41b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612f9d576040519150601f19603f3d011682016040523d82523d5f602084013e612fa2565b606091505b505090508061194b57604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161083c565b5f8060205f8451602086015f885af180612ff5576040513d5f823e3d81fd5b50505f513d9150811561300c578060011415613019565b6001600160a01b0384163b155b1561084e57604051635274afe760e01b81526001600160a01b038516600482015260240161083c565b60608160a001518260c00151604051602001611b989291906147dd565b5f60605f8061306d85612c2c565b915091505f8a604001518b602001516130869190614627565b90508060ff166001600160401b038111156130a3576130a3613d64565b6040519080825280602002602001820160405280156130cc578160200160208202803683370190505b5093505f5b8160ff168160ff1610156132f7575f8c6020015160ff168260ff16106131255760a08d015160208e015161310590846145b3565b60ff168151811061311857613118613f5b565b6020026020010151613147565b8c608001518260ff168151811061313e5761313e613f5b565b60200260200101515b60408051602081019091525f808252919250905b85518110156131b3578360ff1686828151811061317a5761317a613f5b565b602002602001015160ff16036131ab5786818151811061319c5761319c613f5b565b602002602001015191506131b3565b60010161315b565b50816001600160a01b031663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b81526004016131e8959493929190614640565b6020604051808303815f875af1158015613204573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132289190614408565b878460ff168151811061323d5761323d613f5b565b6020026020010181815250505f878460ff168151811061325f5761325f613f5b565b602002602001015111156132ed57868360ff168151811061328257613282613f5b565b602002602001015160055f846001600160a01b03166001600160a01b031681526020019081526020015f205f8282546132bb9190614014565b92505081905550868360ff16815181106132d7576132d7613f5b565b6020026020010151886132ea9190614014565b97505b50506001016130d1565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff821115613342576040516306dfcc6560e41b8152608060048201526024810183905260440161083c565b5090565b5f80805b83518210156133f2576001909101905f6133648584613478565b905060028301925060028161ffff1610156133955760405163013adb8360e21b81526004810184905260240161083c565b5f6133a0868561341d565b90508060ff1660ff036133c6576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166133e35760019485019460ff82161b831792505b5061ffff16919091019061334a565b835182146134165760405163013adb8360e21b81526004810183905260240161083c565b5050919050565b5f613429826001614014565b8351101561346f5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b604482015260640161083c565b50016001015190565b5f613484826002614014565b835110156134cb5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b604482015260640161083c565b50016002015190565b6060816134e281601f614014565b10156135215760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161083c565b61352b8284614014565b8451101561356f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161083c565b60608215801561358d5760405191505f8252602082016040526135d7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135c65780518352602092830192016135ae565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff03613604576040516334f4f66f60e21b815260040160405180910390fd5b5f613610836001614627565b90505f5b8451811015612120575f85828151811061363057613630613f5b565b602002602001015190508060ff168360ff16036136a55786828151811061365957613659613f5b565b602002602001015184604051602001613673929190614696565b60405160208183030381529060405287838151811061369457613694613f5b565b602002602001018190525050612120565b8060ff165f036136e957828683815181106136c2576136c2613f5b565b602002602001019060ff16908160ff16815250508387838151811061369457613694613f5b565b50600101613614565b6040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b828054828255905f5260205f20908101928215613789579160200282015b8281111561378957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613754565b506133429291505b80821115613342575f8155600101613791565b5f602082840312156137b4575f80fd5b81356001600160e01b0319811681146110fd575f80fd5b5f805f80608085870312156137de575f80fd5b84356001600160401b038111156137f3575f80fd5b850160c08188031215613804575f80fd5b966020860135965060408601359560600135945092505050565b602081016003831061383e57634e487b7160e01b5f52602160045260245ffd5b91905290565b6001600160a01b0381168114611696575f80fd5b803561386381613844565b919050565b803563ffffffff81168114613863575f80fd5b80356001600160401b0381168114613863575f80fd5b5f805f606084860312156138a3575f80fd5b83356138ae81613844565b92506138bc60208501613868565b91506138ca6040850161387b565b90509250925092565b5f805f606084860312156138e5575f80fd5b83356138f081613844565b9250602084013561390081613844565b929592945050506040919091013590565b5f8083601f840112613921575f80fd5b5081356001600160401b03811115613937575f80fd5b6020830191508360208260051b8501011115613951575f80fd5b9250929050565b5f805f6040848603121561396a575f80fd5b833561397581613844565b925060208401356001600160401b0381111561398f575f80fd5b61399b86828701613911565b9497909650939450505050565b5f805f606084860312156139ba575f80fd5b833592506020840135915060408401356139d381613844565b809150509250925092565b5f8083601f8401126139ee575f80fd5b5081356001600160401b03811115613a04575f80fd5b602083019150836020828501011115613951575f80fd5b5f805f8060608587031215613a2e575f80fd5b84356001600160401b0380821115613a44575f80fd5b9086019060e08289031215613a57575f80fd5b90945060208601359080821115613a6c575f80fd5b50613a79878288016139de565b90945092505060408501358015158114613a91575f80fd5b939692955090935050565b5f5b83811015613ab6578181015183820152602001613a9e565b50505f910152565b5f8151808452613ad5816020860160208601613a9c565b601f01601f19169290920160200192915050565b8251815260208084015190820152606060408201525f6105ed6060830184613abe565b5f805f8060608587031215613b1f575f80fd5b84356001600160401b03811115613b34575f80fd5b613b40878288016139de565b90989097506020870135966040013595509350505050565b5f60208284031215613b68575f80fd5b6110fd82613868565b5f8060408385031215613b82575f80fd5b8235613b8d81613844565b9150613b9b60208401613868565b90509250929050565b5f815180845260208085019450602084015f5b83811015613bdc5781516001600160a01b031687529582019590820190600101613bb7565b509495945050505050565b60018060a01b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152613c3460c0850182613ba4565b905060a083015184820360a0860152613c4d8282613ba4565b95945050505050565b602081525f6110fd6020830184613be7565b5f805f60608486031215613c7a575f80fd5b613c8384613868565b92506020840135613c9381613844565b91506138ca60408501613868565b602081525f6110fd6020830184613abe565b5f8060208385031215613cc4575f80fd5b82356001600160401b03811115613cd9575f80fd5b613ce585828601613911565b90969095509350505050565b5f60208284031215613d01575f80fd5b5035919050565b8151815260208083015190820152604081016105cf565b5f60208284031215613d2f575f80fd5b81356110fd81613844565b5f8060408385031215613d4b575f80fd5b8235613d5681613844565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715613d9a57613d9a613d64565b60405290565b60405160e081016001600160401b0381118282101715613d9a57613d9a613d64565b604051601f8201601f191681016001600160401b0381118282101715613dea57613dea613d64565b604052919050565b803560ff81168114613863575f80fd5b5f82601f830112613e11575f80fd5b813560206001600160401b03821115613e2c57613e2c613d64565b8160051b613e3b828201613dc2565b9283528481018201928281019087851115613e54575f80fd5b83870192505b84831015613e7c578235613e6d81613844565b82529183019190830190613e5a565b979650505050505050565b5f60c08284031215613e97575f80fd5b613e9f613d78565b9050613eaa82613858565b8152613eb860208301613df2565b6020820152613ec960408301613df2565b6040820152613eda60608301613df2565b606082015260808201356001600160401b0380821115613ef8575f80fd5b613f0485838601613e02565b608084015260a0840135915080821115613f1c575f80fd5b50613f2984828501613e02565b60a08301525092915050565b5f6105cf3683613e87565b5f60208284031215613f50575f80fd5b81516110fd81613844565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112613f83575f80fd5b9190910192915050565b5f808335601e19843603018112613fa2575f80fd5b8301803591506001600160401b03821115613fbb575f80fd5b6020019150