UNPKG

@layerzerolabs/hyperliquid-composer

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation for Hyperliquid

1 lines 143 kB
{"abi":[{"type":"constructor","inputs":[{"name":"_endpoint","type":"address","internalType":"address"},{"name":"_oft","type":"address","internalType":"address"},{"name":"_coreIndexId","type":"uint64","internalType":"uint64"},{"name":"_assetDecimalDiff","type":"int64","internalType":"int64"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"CORE_WRITER_VERSION","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"HLP_CORE_WRITER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"HLP_PRECOMPILE_READ_SPOT_BALANCE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"HYPE_CHAIN_ID_MAINNET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"HYPE_CHAIN_ID_TESTNET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"HYPE_INDEX_MAINNET","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"HYPE_INDEX_TESTNET","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"SPOT_SEND_ACTION_ID","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"SPOT_SEND_HEADER","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"balanceOfHyperCore","inputs":[{"name":"_user","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"endpoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"fundAddressOnHyperCore","inputs":[{"name":"_receiver","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_executor","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getErrorPayload","inputs":[{"name":"_err","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"getHypeAsset","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IHyperAsset","components":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}]}],"stateMutability":"view"},{"type":"function","name":"getOFTAsset","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IHyperAsset","components":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}]}],"stateMutability":"view"},{"type":"function","name":"hypeAsset","inputs":[],"outputs":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}],"stateMutability":"view"},{"type":"function","name":"hypeIndexByChainId","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lzCompose","inputs":[{"name":"_oft","type":"address","internalType":"address"},{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_executor","type":"address","internalType":"address"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"oft","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IOFT"}],"stateMutability":"view"},{"type":"function","name":"oftAsset","inputs":[],"outputs":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}],"stateMutability":"view"},{"type":"function","name":"quoteHyperCoreAmount","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_isOFT","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IHyperAssetAmount","components":[{"name":"evm","type":"uint256","internalType":"uint256"},{"name":"dust","type":"uint256","internalType":"uint256"},{"name":"core","type":"uint64","internalType":"uint64"}]}],"stateMutability":"view"},{"type":"function","name":"refundERC20","inputs":[{"name":"_refundAddress","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"refundNativeTokens","inputs":[{"name":"_refundAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"sendAssetToHyperCore","inputs":[{"name":"_receiver","type":"address","internalType":"address"},{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"validate_message","inputs":[{"name":"_composeMessage","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"validate_msg_or_refund","inputs":[{"name":"_composeMsg","type":"bytes","internalType":"bytes"},{"name":"_senderBytes32","type":"bytes32","internalType":"bytes32"},{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"event","name":"ErrorERC20_Refund","inputs":[{"name":"refundTo","type":"address","indexed":false,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ErrorHYPE_Refund","inputs":[{"name":"refundTo","type":"address","indexed":false,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ErrorMessage","inputs":[{"name":"reason","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ErrorSpot_FailedToSend","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"tokenId","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"errorMessage","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ExcessHYPE_Refund","inputs":[{"name":"refundTo","type":"address","indexed":false,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ErrorMsg","inputs":[{"name":"errorMessage","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"HyperLiquidComposerCore_SpotBalanceRead_Failed","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"tokenId","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"HyperLiquidComposer_FailedToRefund_HYPE","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"HyperLiquidComposer_FailedToSend_HYPE","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"HyperLiquidComposer_InvalidArgument_EndpointShouldNotBeZeroAddress","inputs":[{"name":"receivedEndpointAddress","type":"address","internalType":"address"}]},{"type":"error","name":"HyperLiquidComposer_InvalidCall_NotComposer","inputs":[{"name":"notComposerAddress","type":"address","internalType":"address"}]},{"type":"error","name":"HyperLiquidComposer_InvalidCall_NotEndpoint","inputs":[{"name":"notEndpointAddress","type":"address","internalType":"address"},{"name":"expectedEndpointAddress","type":"address","internalType":"address"}]},{"type":"error","name":"HyperLiquidComposer_InvalidCall_NotOFT","inputs":[{"name":"internalOFTAddress","type":"address","internalType":"address"},{"name":"receivedOFTAddress","type":"address","internalType":"address"}]},{"type":"error","name":"HyperLiquidComposer_InvalidComposeMessage","inputs":[{"name":"errorMessage","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"NotEnoughMsgValue","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"requiredValue","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b50604051620032683803806200326883398101604081905262000033916200028a565b83836001600160a01b0382166200006c5760405163fb82c1f160e01b81526001600160a01b038316600482015260240160405180910390fd5b6001600160a01b03808316608052811660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000bb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000e19190620002f9565b6001600160a01b031660c05250505f60208190527f2802b8ca0a4d9948ac89ce9ba15f4015f0f68c52469c4df23bbaf374f1d4604080546001600160401b0319908116610451179091556103e79091527f332eac5de6beffe8ee7761a0342c75594c3acb5fdde0a2555227e56aa65d4141805490911660961790556040805160608101909152806200017c6001600160401b03851662000257565b6001600160a01b0390811682526001600160401b0394851660208084019190915260079490940b604092830152825160018054858701519284166001600160e01b031991821617600160a01b93891684021790915593830151600280546001600160401b031990811692891692909217905583516060810185527322222222222222222222222222222222222222228152465f90815280885285902054909716958701869052600a938701849052955160038054919093169416939093179390920292909217905560048054909216179055506200033c9050565b5f62000268826001609d1b6200031c565b92915050565b80516001600160a01b038116811462000285575f80fd5b919050565b5f805f80608085870312156200029e575f80fd5b620002a9856200026e565b9350620002b9602086016200026e565b60408601519093506001600160401b0381168114620002d6575f80fd5b8092505060608501518060070b8114620002ee575f80fd5b939692955090935050565b5f602082840312156200030a575f80fd5b62000315826200026e565b9392505050565b808201808211156200026857634e487b7160e01b5f52601160045260245ffd5b60805160a05160c051612ed0620003985f395f81816107bb015281816112b90152818161149d01526119ea01525f81816105ae01528181610bd50152610c4c01525f81816103ee01528181610b110152610b890152612ed05ff3fe6080604052600436106101a7575f3560e01c80639180b744116100e7578063d0a1026011610087578063ebaeefd611610062578063ebaeefd6146106e8578063f6e6b24014610707578063f9716faf1461075f578063fc0c546a146107aa575f80fd5b8063d0a1026014610697578063d9acf0ec146106aa578063da001a29146106c9575f80fd5b8063aae12e46116100c2578063aae12e46146105d0578063ba87267914610659578063bc963bc71461066e578063d00b1ad514610683575f80fd5b80639180b74414610526578063970e7f9d146105545780639b5215f61461059d575f80fd5b80634bd162df11610152578063765008a11161012d578063765008a1146104355780637ecd9ac3146104cb57806381e8dcb4146104f25780638483bc0014610511575f80fd5b80634bd162df1461037a5780635b9a2373146103c85780635e280f11146103dd575f80fd5b806320d9af9a1161018257806320d9af9a1461024157806322dbe29c146102645780632d0e315c146102ac575f80fd5b806303be2050146101b25780630d1995e0146101e75780631f8164d91461022d575f80fd5b366101ae57005b5f80fd5b3480156101bd575f80fd5b506101d16101cc36600461247e565b6107dd565b6040516101de919061250a565b60405180910390f35b3480156101f2575f80fd5b506101d16040518060400160405280600381526020017d06000000000000000000000000000000000000000000000000000000000081525081565b348015610238575f80fd5b506101d16107f2565b34801561024c575f80fd5b506102566103e681565b6040519081526020016101de565b34801561026f575f80fd5b506101d16040518060400160405280600181526020017f010000000000000000000000000000000000000000000000000000000000000081525081565b3480156102b7575f80fd5b50610335604080516060810182525f8082526020820181905291810191909152506040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260025460070b9181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015160070b908201526060016101de565b348015610385575f80fd5b506103af61039436600461251c565b5f6020819052908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101de565b3480156103d3575f80fd5b506102566103e781565b3480156103e8575f80fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101de565b348015610440575f80fd5b5060015460025461048d9173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845267ffffffffffffffff909216602084015260070b908201526060016101de565b3480156104d6575f80fd5b5061041073333333333333333333333333333333333333333381565b3480156104fd575f80fd5b506103af61050c366004612569565b610876565b61052461051f3660046125a0565b610881565b005b348015610531575f80fd5b5061054561054036600461247e565b6109a3565b6040516101de939291906125c2565b34801561055f575f80fd5b5061057361056e36600461268e565b6109db565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101de565b3480156105a8575f80fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b3480156105db575f80fd5b50610335604080516060810182525f8082526020820181905291810191909152506040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260045460070b9181019190915290565b348015610664575f80fd5b5061041061080181565b348015610679575f80fd5b506103af61045181565b34801561068e575f80fd5b506103af609681565b6105246106a536600461271a565b610b0f565b3480156106b5575f80fd5b506105246106c43660046127b4565b611248565b3480156106d4575f80fd5b506105246106e33660046127de565b6114ca565b3480156106f3575f80fd5b506105246107023660046127b4565b61196c565b348015610712575f80fd5b5060035460045461048d9173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b34801561076a575f80fd5b5061077e61077936600461281d565b611a11565b6040805182518152602080840151908201529181015167ffffffffffffffff16908201526060016101de565b3480156107b5575f80fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b60606107e98383611b50565b90505b92915050565b604080518082018252600181527f010000000000000000000000000000000000000000000000000000000000000060208083019190915282518084018452600381527d060000000000000000000000000000000000000000000000000000000000818301529251610864939101612844565b60405160208183030381529060405281565b5f6107e98383611b9a565b3330146108c1576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b5f341180156108e5575073ffffffffffffffffffffffffffffffffffffffff811615155b156109a0575f8173ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114610940576040519150601f19603f3d011682016040523d82523d5f602084013e610945565b606091505b505090508061099e576040517fc8ee485e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523460248201526044016108b8565b505b50565b5f8060605f6109b28686611cae565b90505f6109bf8787611cc6565b90505f6109cc8888611cd5565b92989197509195509350505050565b5f805f80868060200190518101906109f391906128b4565b915091505f610a0187611ce4565b90505f610a0d83611d0f565b905073ffffffffffffffffffffffffffffffffffffffff8116610b005782516040515f917f09b347310000000000000000000000000000000000000000000000000000000091610a619187916024016128f8565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610acd81848a611d72565b6040517f4f9520330000000000000000000000000000000000000000000000000000000081526004016108b8919061250a565b92989297509195505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bbc576040517fefa9309d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016108b8565b8673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610c81576040517f86fee0c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152881660248201526044016108b8565b5f805f60603073ffffffffffffffffffffffffffffffffffffffff16639180b7448a8a6040518363ffffffff1660e01b8152600401610cc1929190612919565b5f60405180830381865afa925050508015610cfd57506040513d5f823e601f3d908101601f19168201604052610cfa9190810190612947565b60015b610d63573d808015610d2a576040519150601f19603f3d011682016040523d82523d5f602084013e610d2f565b606091505b50806040517ed4895a0000000000000000000000000000000000000000000000000000000081526004016108b8919061250a565b919450925090506040517f970e7f9d000000000000000000000000000000000000000000000000000000008152309063970e7f9d90610daa90849086908890600401612993565b6040805180830381865afa925050508015610de2575060408051601f3d908101601f19168201909252610ddf918101906129b7565b60015b610e64573d808015610e0f576040519150601f19603f3d011682016040523d82523d5f602084013e610e14565b606091505b505f610e20828a611dcd565b90507f612baef0082f9abcf6dc7b491d75346418381b75756830d7029939026d1b46b981604051610e51919061250a565b60405180910390a150505050505061123f565b81341015610ea7576040517f78770392000000000000000000000000000000000000000000000000000000008152346004820152602481018390526044016108b8565b94505034156110a6576040517fda001a2900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015234602483015288166044820152309063da001a29906064015f604051808303815f87803b158015610f22575f80fd5b505af1925050508015610f33575060015b6110a6573d808015610f60576040519150601f19603f3d011682016040523d82523d5f602084013e610f65565b606091505b506040517f8483bc0000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201523090638483bc009034906024015f604051808303818588803b158015610fcc575f80fd5b505af193505050508015610fde575060015b61106d576040515f908190329034908381818185875af1925050503d805f8114611023576040519150601f19603f3d011682016040523d82523d5f602084013e611028565b606091505b50915091508161106a577f612baef0082f9abcf6dc7b491d75346418381b75756830d7029939026d1b46b981604051611061919061250a565b60405180910390a15b50505b7f612baef0082f9abcf6dc7b491d75346418381b75756830d7029939026d1b46b98160405161109c919061250a565b60405180910390a1505b6040517fd9acf0ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101849052309063d9acf0ec906044015f604051808303815f87803b158015611111575f80fd5b505af1925050508015611122575060015b61123a573d80801561114f576040519150601f19603f3d011682016040523d82523d5f602084013e611154565b606091505b506040517febaeefd600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260248101859052309063ebaeefd6906044015f604051808303815f87803b1580156111c0575f80fd5b505af11580156111d2573d5f803e3d5ffd5b50506001546040517f775ce5b47736b2186798494ee89239e4c0341b516c05bf613205d83ffbfffdc693506112309250889174010000000000000000000000000000000000000000900467ffffffffffffffff1690889086906129da565b60405180910390a1505b505050505b50505050505050565b333014611283576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108b8565b5f61128f826001611a11565b8051909150156114735760015481516112e39173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690612133565b600154604082810151815173ffffffffffffffffffffffffffffffffffffffff871660208201527401000000000000000000000000000000000000000090930467ffffffffffffffff908116928401929092521660608201525f9060800160408051601f198184030181528282018252600183527f010000000000000000000000000000000000000000000000000000000000000060208481019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292519194505f936113c4939092909101612844565b60408051601f19818403018152908290526113e3918490602001612844565b60408051601f19818403018152908290527f17938e130000000000000000000000000000000000000000000000000000000082529150733333333333333333333333333333333333333333906317938e139061144390849060040161250a565b5f604051808303815f87803b15801561145a575f80fd5b505af115801561146c573d5f803e3d5ffd5b5050505050505b6020810151156114c55760208101516114c59073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908590612133565b505050565b333014611505576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108b8565b5f611510835f611a11565b60035481516040519293505f9273ffffffffffffffffffffffffffffffffffffffff909216918381818185875af1925050503d805f811461156c576040519150601f19603f3d011682016040523d82523d5f602084013e611571565b606091505b50509050806115af576040517fb7e54a07000000000000000000000000000000000000000000000000000000008152600481018590526024016108b8565b600354604083810151815173ffffffffffffffffffffffffffffffffffffffff891660208201527401000000000000000000000000000000000000000090930467ffffffffffffffff908116928401929092521660608201525f9060800160408051601f198184030181528282018252600183527f010000000000000000000000000000000000000000000000000000000000000060208481019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292519194505f93611690939092909101612844565b60408051601f19818403018152908290526116af918490602001612844565b60408051601f19818403018152908290527f17938e130000000000000000000000000000000000000000000000000000000082529150733333333333333333333333333333333333333333906317938e139061170f90849060040161250a565b5f604051808303815f87803b158015611726575f80fd5b505af1158015611738573d5f803e3d5ffd5b5050505060208401511561123f5760208401516040517f8483bc0000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891660048201523091638483bc00916024015f604051808303818588803b1580156117af575f80fd5b505af1935050505080156117c1575060015b61190e57602084015160405173ffffffffffffffffffffffffffffffffffffffff871691905f81818185875af1925050503d805f811461181c576040519150601f19603f3d011682016040523d82523d5f602084013e611821565b606091505b50909350508215611887576020808501516040805173ffffffffffffffffffffffffffffffffffffffff89168152928301919091527fbb643711c959f203f346d453edf6f91a40b637a95c46c992089c63726b8eaa1791015b60405180910390a161123f565b60208401516040513291905f81818185875af1925050503d805f81146118c8576040519150601f19603f3d011682016040523d82523d5f602084013e6118cd565b606091505b505060208581015160408051328152928301919091529194507fbb643711c959f203f346d453edf6f91a40b637a95c46c992089c63726b8eaa17910161187a565b6020808501516040805173ffffffffffffffffffffffffffffffffffffffff8b168152928301919091527fbb643711c959f203f346d453edf6f91a40b637a95c46c992089c63726b8eaa17910160405180910390a150505050505050565b3330146119a7576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108b8565b5f811180156119cb575073ffffffffffffffffffffffffffffffffffffffff821615155b1561099e5761099e73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383612133565b611a3c60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b604080516060810182525f80825260208201819052918101829052908315611acf576040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260025460070b93830193909352909350611ac891611b9a565b9050611b3c565b6040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260045460070b93830193909352909350611b3991611b9a565b90505b611b478582846121c0565b95945050505050565b6060611b5f8260448186612a28565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316818301528151808203830181526060918201928390525f9283929161080191611bee9190612a4f565b5f60405180830381855afa9150503d805f8114611c26576040519150601f19603f3d011682016040523d82523d5f602084013e611c2b565b606091505b50909250905081611c90576040517fa91ed72100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015267ffffffffffffffff851660248201526044016108b8565b80806020019051810190611ca49190612a6a565b5195945050505050565b5f611cbd602c600c8486612a28565b6107e991612abc565b5f611cbd604c602c8486612a28565b6060611b5f82604c8186612a28565b5f8173ffffffffffffffffffffffffffffffffffffffff8111611d075792915050565b505f92915050565b80515f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec8101611d4d57611d4383612af8565b60601c9392505050565b60208103611d07575f611d5f84612b47565b9050611d6a81611ce4565b949350505050565b606060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200185815250604051602001611db59190612b89565b60405160208183030381529060405290509392505050565b6040517f03be20500000000000000000000000000000000000000000000000000000000081526060905f9030906303be205090611e0e90879060040161250a565b5f60405180830381865afa158015611e28573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e4f9190810190612bcd565b90505f81806020019051810190611e669190612bff565b805160208201516040517febaeefd600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152909150309063ebaeefd6906044015f604051808303815f87803b158015611eda575f80fd5b505af1925050508015611eeb575060015b611f455780516020808301516040805173ffffffffffffffffffffffffffffffffffffffff9094168452918301527feb907f6e0de6862ca2ced78e890a55c5e8352dc4051697356bc835abf7cedcac910160405180910390a15b80515f9073ffffffffffffffffffffffffffffffffffffffff1615611f6b578151611f6d565b845b6040517f8483bc0000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201529091503090638483bc009034906024015f604051808303818588803b158015611fd6575f80fd5b505af193505050508015611fe8575060015b612126575f8573ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114612042576040519150601f19603f3d011682016040523d82523d5f602084013e612047565b606091505b5050905080156120a4576040805173ffffffffffffffffffffffffffffffffffffffff881681523460208201527fbb643711c959f203f346d453edf6f91a40b637a95c46c992089c63726b8eaa17910160405180910390a1612124565b604051329034905f81818185875af1925050503d805f81146120e1576040519150601f19603f3d011682016040523d82523d5f602084013e6120e6565b606091505b5050604080513281523460208201529192507fbb643711c959f203f346d453edf6f91a40b637a95c46c992089c63726b8eaa17910160405180910390a15b505b5060400151949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526114c590849061229b565b6121eb60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b5f805f806122018767ffffffffffffffff612340565b90505f866040015160070b131561222d5761222188828860400151612368565b9195509350915061226f565b612267888288604001517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122629190612cb1565b6123e1565b919550935091505b5060408051606081018252938452602084019290925267ffffffffffffffff1690820152949350505050565b5f8060205f8451602086015f885af1806122ba576040513d5f823e3d81fd5b50505f513d915081156122d15780600114156122eb565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561233a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108b8565b50505050565b5f8167ffffffffffffffff168367ffffffffffffffff161161236257826107e9565b50919050565b5f80808061237785600a612df5565b90505f61238e8267ffffffffffffffff8916612e0a565b905061239a8289612e4e565b93506123a68489612e61565b97506123b2888261242b565b94506123be8589612e61565b6123c89085612e74565b93506123d48286612e87565b9250505093509350939050565b5f8080806123f085600a612df5565b90505f6124078267ffffffffffffffff8916612e87565b9050612413888261242b565b945061241f8589612e61565b93506123d48286612e0a565b5f81831161236257826107e9565b5f8083601f840112612449575f80fd5b50813567ffffffffffffffff811115612460575f80fd5b602083019150836020828501011115612477575f80fd5b9250929050565b5f806020838503121561248f575f80fd5b823567ffffffffffffffff8111156124a5575f80fd5b6124b185828601612439565b90969095509350505050565b5f5b838110156124d75781810151838201526020016124bf565b50505f910152565b5f81518084526124f68160208601602086016124bd565b601f01601f19169290920160200192915050565b602081525f6107e960208301846124df565b5f6020828403121561252c575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109a0575f80fd5b67ffffffffffffffff811681146109a0575f80fd5b5f806040838503121561257a575f80fd5b823561258581612533565b9150602083013561259581612554565b809150509250929050565b5f602082840312156125b0575f80fd5b81356125bb81612533565b9392505050565b838152826020820152606060408201525f611b4760608301846124df565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612630576126306125e0565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561265f5761265f6125e0565b604052919050565b5f67ffffffffffffffff821115612680576126806125e0565b50601f01601f191660200190565b5f805f606084860312156126a0575f80fd5b833567ffffffffffffffff8111156126b6575f80fd5b8401601f810186136126c6575f80fd5b80356126d96126d482612667565b612636565b8181528760208385010111156126ed575f80fd5b816020840160208301375f6020838301015280955050505060208401359150604084013590509250925092565b5f805f805f805f60a0888a031215612730575f80fd5b873561273b81612533565b965060208801359550604088013567ffffffffffffffff8082111561275e575f80fd5b61276a8b838c01612439565b909750955060608a0135915061277f82612533565b90935060808901359080821115612794575f80fd5b506127a18a828b01612439565b989b979a50959850939692959293505050565b5f80604083850312156127c5575f80fd5b82356127d081612533565b946020939093013593505050565b5f805f606084860312156127f0575f80fd5b83356127fb81612533565b925060208401359150604084013561281281612533565b809150509250925092565b5f806040838503121561282e575f80fd5b8235915060208301358015158114612595575f80fd5b5f83516128558184602088016124bd565b8351908301906128698183602088016124bd565b01949350505050565b5f82601f830112612881575f80fd5b815161288f6126d482612667565b8181528460208386010111156128a3575f80fd5b611d6a8260208301602087016124bd565b5f80604083850312156128c5575f80fd5b82519150602083015167ffffffffffffffff8111156128e2575f80fd5b6128ee85828601612872565b9150509250929050565b604081525f61290a60408301856124df565b90508260208301529392505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f805f60608486031215612959575f80fd5b8351925060208401519150604084015167ffffffffffffffff81111561297d575f80fd5b61298986828701612872565b9150509250925092565b606081525f6129a560608301866124df565b60208301949094525060400152919050565b5f80604083850312156129c8575f80fd5b82519150602083015161259581612533565b73ffffffffffffffffffffffffffffffffffffffff8516815267ffffffffffffffff84166020820152826040820152608060608201525f612a1e60808301846124df565b9695505050505050565b5f8085851115612a36575f80fd5b83861115612a42575f80fd5b5050820193919092039150565b5f8251612a608184602087016124bd565b9190910192915050565b5f60608284031215612a7a575f80fd5b612a8261260d565b8251612a8d81612554565b81526020830151612a9d81612554565b60208201526040830151612ab081612554565b60408201529392505050565b803560208310156107ec577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f815160208301517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000080821693506014831015612b3f5780818460140360031b1b83161693505b505050919050565b80516020808301519190811015612362577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6020815273ffffffffffffffffffffffffffffffffffffffff8251166020820152602082015160408201525f6040830151606080840152611d6a60808401826124df565b5f60208284031215612bdd575f80fd5b815167ffffffffffffffff811115612bf3575f80fd5b611d6a84828501612872565b5f60208284031215612c0f575f80fd5b815167ffffffffffffffff80821115612c26575f80fd5b9083019060608286031215612c39575f80fd5b612c4161260d565b8251612c4c81612533565b815260208381015190820152604083015182811115612c69575f80fd5b612c7587828601612872565b60408301525095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8260070b8260070b028060070b9150808214612cd057612cd0612c84565b5092915050565b600181815b80851115612d3057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612d1657612d16612c84565b80851615612d2357918102915b93841c9390800290612cdc565b509250929050565b5f82612d46575060016107ec565b81612d5257505f6107ec565b8160018114612d685760028114612d7257612d8e565b60019150506107ec565b60ff841115612d8357612d83612c84565b50506001821b6107ec565b5060208310610133831016604e8410600b8410161715612db1575081810a6107ec565b612dbb8383612cd7565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612ded57612ded612c84565b029392505050565b5f6107e967ffffffffffffffff841683612d38565b80820281158282048414176107ec576107ec612c84565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612e5c57612e5c612e21565b500690565b818103818111156107ec576107ec612c84565b808201808211156107ec576107ec612c84565b5f82612e9557612e95612e21565b50049056fea2646970667358221220f35f28faa7f76976fb64f24d568a71611e00e80f71061ab748cde821c916dde464736f6c63430008160033","sourceMap":"769:13009:0:-:0;;;1645:1673;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1798:9;1809:4;-1:-1:-1;;;;;2395:23:1;;2391:195;;2441:134;;-1:-1:-1;;;2441:134:1;;-1:-1:-1;;;;;986:32:80;;2441:134:1;;;968:51:80;941:18;;2441:134:1;;;;;;;2391:195;-1:-1:-1;;;;;2595:20:1;;;;;2687:16;;;;;;2728:11;;;-1:-1:-1;;;2728:11:1;;;;:9;;:11;;;;;;;;;;;;;;;2687:16;2728:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2713:27:1;;;-1:-1:-1;;2751:18:1;:41;;;;;:62;;-1:-1:-1;;;;;;2751:62:1;;;1953:4;2751:62;;;;1806:3;2823:41;;;;:62;;;;;2092:3;2823:62;;;2751:41;2244:178:0;;::::1;::::0;::::1;::::0;;;;2290:38:::1;-1:-1:-1::0;;;;;2290:36:0;::::1;;:38::i;:::-;-1:-1:-1::0;;;;;2244:178:0;;::::1;::::0;;-1:-1:-1;;;;;2244:178:0;;::::1;;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;;;2233:189;;:8:::1;:189:::0;;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;;2233:189:0;;;;-1:-1:-1;;;2233:189:0;;::::1;::::0;::::1;;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;;2233:189:0;;::::1;::::0;;;;;;::::1;::::0;;2950:361;;::::1;::::0;::::1;::::0;;2996:42:::1;2950:361:::0;;3084:13:::1;-1:-1:-1::0;3065:33:0;;;;;;;;;;;;::::1;2950:361:::0;;::::1;::::0;;;3294:6:::1;2950:361:::0;;;;;;2938:373;;:9:::1;:373:::0;;;;;::::1;::::0;;;;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;::::1;;::::0;;-1:-1:-1;769:13009:0;;-1:-1:-1;769:13009:0;1873:177:7;1951:7;1993:48;2029:12;-1:-1:-1;;;1993:48:7;:::i;:::-;1970:73;1873:177;-1:-1:-1;;1873:177:7:o;14::80:-;93:13;;-1:-1:-1;;;;;135:31:80;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:621::-;290:6;298;306;314;367:3;355:9;346:7;342:23;338:33;335:53;;;384:1;381;374:12;335:53;407:40;437:9;407:40;:::i;:::-;397:50;;466:49;511:2;500:9;496:18;466:49;:::i;:::-;558:2;543:18;;537:25;456:59;;-1:-1:-1;;;;;;591:30:80;;581:41;;571:69;;636:1;633;626:12;571:69;659:5;649:15;;;709:2;698:9;694:18;688:25;758:7;755:1;744:22;735:7;732:35;722:63;;781:1;778;771:12;722:63;196:621;;;;-1:-1:-1;196:621:80;;-1:-1:-1;;196:621:80:o;1030:208::-;1100:6;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1192:40;1222:9;1192:40;:::i;:::-;1182:50;1030:208;-1:-1:-1;;;1030:208:80:o;1243:222::-;1308:9;;;1329:10;;;1326:133;;;1381:10;1376:3;1372:20;1369:1;1362:31;1416:4;1413:1;1406:15;1444:4;1441:1;1434:15;1243:222;769:13009:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101a7575f3560e01c80639180b744116100e7578063d0a1026011610087578063ebaeefd611610062578063ebaeefd6146106e8578063f6e6b24014610707578063f9716faf1461075f578063fc0c546a146107aa575f80fd5b8063d0a1026014610697578063d9acf0ec146106aa578063da001a29146106c9575f80fd5b8063aae12e46116100c2578063aae12e46146105d0578063ba87267914610659578063bc963bc71461066e578063d00b1ad514610683575f80fd5b80639180b74414610526578063970e7f9d146105545780639b5215f61461059d575f80fd5b80634bd162df11610152578063765008a11161012d578063765008a1146104355780637ecd9ac3146104cb57806381e8dcb4146104f25780638483bc0014610511575f80fd5b80634bd162df1461037a5780635b9a2373146103c85780635e280f11146103dd575f80fd5b806320d9af9a1161018257806320d9af9a1461024157806322dbe29c146102645780632d0e315c146102ac575f80fd5b806303be2050146101b25780630d1995e0146101e75780631f8164d91461022d575f80fd5b366101ae57005b5f80fd5b3480156101bd575f80fd5b506101d16101cc36600461247e565b6107dd565b6040516101de919061250a565b60405180910390f35b3480156101f2575f80fd5b506101d16040518060400160405280600381526020017d06000000000000000000000000000000000000000000000000000000000081525081565b348015610238575f80fd5b506101d16107f2565b34801561024c575f80fd5b506102566103e681565b6040519081526020016101de565b34801561026f575f80fd5b506101d16040518060400160405280600181526020017f010000000000000000000000000000000000000000000000000000000000000081525081565b3480156102b7575f80fd5b50610335604080516060810182525f8082526020820181905291810191909152506040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260025460070b9181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015160070b908201526060016101de565b348015610385575f80fd5b506103af61039436600461251c565b5f6020819052908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101de565b3480156103d3575f80fd5b506102566103e781565b3480156103e8575f80fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101de565b348015610440575f80fd5b5060015460025461048d9173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845267ffffffffffffffff909216602084015260070b908201526060016101de565b3480156104d6575f80fd5b5061041073333333333333333333333333333333333333333381565b3480156104fd575f80fd5b506103af61050c366004612569565b610876565b61052461051f3660046125a0565b610881565b005b348015610531575f80fd5b5061054561054036600461247e565b6109a3565b6040516101de939291906125c2565b34801561055f575f80fd5b5061057361056e36600461268e565b6109db565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101de565b3480156105a8575f80fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b3480156105db575f80fd5b50610335604080516060810182525f8082526020820181905291810191909152506040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260045460070b9181019190915290565b348015610664575f80fd5b5061041061080181565b348015610679575f80fd5b506103af61045181565b34801561068e575f80fd5b506103af609681565b6105246106a536600461271a565b610b0f565b3480156106b5575f80fd5b506105246106c43660046127b4565b611248565b3480156106d4575f80fd5b506105246106e33660046127de565b6114ca565b3480156106f3575f80fd5b506105246107023660046127b4565b61196c565b348015610712575f80fd5b5060035460045461048d9173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b34801561076a575f80fd5b5061077e61077936600461281d565b611a11565b6040805182518152602080840151908201529181015167ffffffffffffffff16908201526060016101de565b3480156107b5575f80fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b60606107e98383611b50565b90505b92915050565b604080518082018252600181527f010000000000000000000000000000000000000000000000000000000000000060208083019190915282518084018452600381527d060000000000000000000000000000000000000000000000000000000000818301529251610864939101612844565b60405160208183030381529060405281565b5f6107e98383611b9a565b3330146108c1576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b5f341180156108e5575073ffffffffffffffffffffffffffffffffffffffff811615155b156109a0575f8173ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114610940576040519150601f19603f3d011682016040523d82523d5f602084013e610945565b606091505b505090508061099e576040517fc8ee485e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523460248201526044016108b8565b505b50565b5f8060605f6109b28686611cae565b90505f6109bf8787611cc6565b90505f6109cc8888611cd5565b92989197509195509350505050565b5f805f80868060200190518101906109f391906128b4565b915091505f610a0187611ce4565b90505f610a0d83611d0f565b905073ffffffffffffffffffffffffffffffffffffffff8116610b005782516040515f917f09b347310000000000000000000000000000000000000000000000000000000091610a619187916024016128f8565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610acd81848a611d72565b6040517f4f9520330000000000000000000000000000000000000000000000000000000081526004016108b8919061250a565b92989297509195505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bbc576040517fefa9309d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016108b8565b8673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610c81576040517f86fee0c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152881660248201526044016108b8565b5f805f60603073ffffffffffffffffffffffffffffffffffffffff16639180b7448a8a6040518363ffffffff1660e01b8152600401610cc1929190612919565b5f60405180830381865afa925050508015610cfd57506040513d5f823e601f3d908101601f19168201604052610cfa9190810190612947565b60015b610d63573d808015610d2a576040519150601f19603f3d011682016040523d82523d5f602084013e610d2f565b606091505b50806040517ed4895a0000000000000000000000000000000000000000000000000000000081526004016108b8919061250a565b919450925090506040517f970e7f9d000000000000000000000000000000000000000000000000000000008152309063970e7f9d90610daa90849086908890600401612993565b6040805180830381865afa925050508015610de2575060408051601f3d908101601f19168201909252610ddf918101906129b7565b60015b610e64573d808015610e0f576040519150601f19603f3d011682016040523d82523d5f602084013e610e14565b606091505b505f610e20828a611dcd565b90507f612baef0082f9abcf6dc7b491d75346418381b75756830d7029939026d1b46b981604051610e51919061250a565b60405180910390a150505050505061123f565b81341015610ea7576040517f78770392000000000000000000000000000000000000000000000000000000008152346004820152602481018390526044016108b8565b94505034156110a6576040517fda001a2900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015234602483015288166044820152309063da001a29906064015f604051808303815f87803b158015610f22575f80fd5b505af1925050508015610f33575060015b6110a6573d808015610f60576040519150601f19603f3d011682016040523d82523d5f602084013e610f65565b606091505b506040517f8483bc0000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201523090638483bc009034906024015f604051808303818588803b158015610fcc575f80fd5b505af193505050508015610fde575060015b61106d576040515f908190329034908381818185875af1925050503d805f8114611023576040519150601f19603f3d011682016040523d82523d5f602084013e611028565b606091505b50915091508161106a577f612baef0082f9abcf6dc7b491d75346418381b75756830d7029939026d1b46b981604051611061919061250a565b60405180910390a15b50505b7f612baef0082f9abcf6dc7b491d75346418381b75756830d7029939026d1b46b98160405161109c919061250a565b60405180910390a1505b6040517fd9acf0ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101849052309063d9acf0ec906044015f604051808303815f87803b158015611111575f80fd5b505af1925050508015611122575060015b61123a573d80801561114f576040519150601f19603f3d011682016040523d82523d5f602084013e611154565b606091505b506040517febaeefd600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260248101859052309063ebaeefd6906044015f604051808303815f87803b1580156111c0575f80fd5b505af11580156111d2573d5f803e3d5ffd5b50506001546040517f775ce5b47736b2186798494ee89239e4c0341b516c05bf613205d83ffbfffdc693506112309250889174010000000000000000000000000000000000000000900467ffffffffffffffff1690889086906129da565b60405180910390a1505b505050505b50505050505050565b333014611283576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108b8565b5f61128f826001611a11565b8051909150156114735760015481516112e39173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690612133565b600154604082810151815173ffffffffffffffffffffffffffffffffffffffff871660208201527401000000000000000000000000000000000000000090930467ffffffffffffffff908116928401929092521660608201525f9060800160408051601f198184030181528282018252600183527f010000000000000000000000000000000000000000000000000000000000000060208481019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292519194505f936113c4939092909101612844565b60408051601f19818403018152908290526113e3918490602001612844565b60408051601f19818403018152908290527f17938e130000000000000000000000000000000000000000000000000000000082529150733333333333333333333333333333333333333333906317938e139061144390849060040161250a565b5f604051808303815f87803b15801561145a575f80fd5b505af115801561146c573d5f803e3d5ffd5b5050505050505b6020810151156114c55760208101516114c59073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908590612133565b505050565b333014611505576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108b8565b5f611510835f611a11565b60035481516040519293505f9273ffffffffffffffffffffffffffffffffffffffff909216918381818185875af1925050503d805f811461156c576040519150601f19603f3d011682016040523d82523d5f602084013e611571565b606091505b50509050806115af576040517fb7e54a07000000000000000000000000000000000000000000000000000000008152600481018590526024016108b8565b600354604083810151815173ffffffffffffffffffffffffffffffffffffffff891660208201527401000000000000000000000000000000000000000090930467ffffffffffffffff908116928401929092521660608201525f9060800160408051601f198184030181528282018252600183527f010000000000000000000000000000000000000000000000000000000000000060208481019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292519194505f93611690939092909101612844565b60408051601f19818403018152908290526116af918490602001612844565b60408051601f19818403018152908290527f17938e130000000000000000000000000000000000000000000000000000000082529150733333333333333333333333333333333333333333906317938e139061170f90849060040161250a565b5f604051808303815f87803b158015611726575f80fd5b505af1158015611738573d5f803e3d5ffd5b5050505060208401511561123f5760208401516040517f8483bc0000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891660048201523091638483bc00916024015f604051808303818588803b1580156117af575f80fd5b505af193505