@devasher/kuru-sdk
Version:
Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)
650 lines • 89.9 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Router",
"sourceName": "contracts/Router.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AlreadyInitialized",
"type": "error"
},
{
"inputs": [],
"name": "BaseAndQuoteAssetSame",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "InvalidMarket",
"type": "error"
},
{
"inputs": [],
"name": "LengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "NativeAssetTransferFail",
"type": "error"
},
{
"inputs": [],
"name": "NewOwnerIsZeroAddress",
"type": "error"
},
{
"inputs": [],
"name": "NoHandoverRequest",
"type": "error"
},
{
"inputs": [],
"name": "NoMarketsPassed",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [],
"name": "SlippageExceeded",
"type": "error"
},
{
"inputs": [],
"name": "Unauthorized",
"type": "error"
},
{
"inputs": [],
"name": "UnauthorizedCallContext",
"type": "error"
},
{
"inputs": [],
"name": "UpgradeFailed",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "baseAsset",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "quoteAsset",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "market",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "vaultAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint32",
"name": "pricePrecision",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint96",
"name": "sizePrecision",
"type": "uint96"
},
{
"indexed": false,
"internalType": "uint32",
"name": "tickSize",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint96",
"name": "minSize",
"type": "uint96"
},
{
"indexed": false,
"internalType": "uint96",
"name": "maxSize",
"type": "uint96"
},
{
"indexed": false,
"internalType": "uint256",
"name": "takerFeeBps",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "makerFeeBps",
"type": "uint256"
}
],
"name": "MarketRegistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "OwnershipHandoverCanceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "OwnershipHandoverRequested",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oldOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "_marketAddresses",
"type": "address[]"
},
{
"internalType": "bool[]",
"name": "_isBuy",
"type": "bool[]"
},
{
"internalType": "bool[]",
"name": "_nativeSend",
"type": "bool[]"
},
{
"internalType": "address",
"name": "_debitToken",
"type": "address"
},
{
"internalType": "address",
"name": "_creditToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minAmountOut",
"type": "uint256"
}
],
"name": "anyToAnySwap",
"outputs": [
{
"internalType": "uint256",
"name": "_amountOut",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "cancelOwnershipHandover",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "completeOwnershipHandover",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_baseAssetAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_quoteAssetAddress",
"type": "address"
},
{
"internalType": "uint96",
"name": "_sizePrecision",
"type": "uint96"
},
{
"internalType": "uint32",
"name": "_pricePrecision",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "_tickSize",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "_minSize",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "_maxSize",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "_takerFeeBps",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_makerFeeBps",
"type": "uint256"
},
{
"internalType": "address",
"name": "oldImplementation",
"type": "address"
},
{
"internalType": "bool",
"name": "old",
"type": "bool"
}
],
"name": "computeAddress",
"outputs": [
{
"internalType": "address",
"name": "proxy",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum IOrderBook.OrderBookType",
"name": "_type",
"type": "uint8"
},
{
"internalType": "address",
"name": "_baseAssetAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_quoteAssetAddress",
"type": "address"
},
{
"internalType": "uint96",
"name": "_sizePrecision",
"type": "uint96"
},
{
"internalType": "uint32",
"name": "_pricePrecision",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "_tickSize",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "_minSize",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "_maxSize",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "_takerFeeBps",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_makerFeeBps",
"type": "uint256"
},
{
"internalType": "uint96",
"name": "_kuruAmmSpread",
"type": "uint96"
}
],
"name": "deployProxy",
"outputs": [
{
"internalType": "address",
"name": "proxy",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "address",
"name": "_marginAccount",
"type": "address"
},
{
"internalType": "address",
"name": "_implementation",
"type": "address"
},
{
"internalType": "address",
"name": "_trustedForwarder",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "result",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pendingOwner",
"type": "address"
}
],
"name": "ownershipHandoverExpiresAt",
"outputs": [
{
"internalType": "uint256",
"name": "result",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "requestOwnershipHandover",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
}
],
"name": "upgradeImplementation",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "proxies",
"type": "address[]"
}
],
"name": "upgradeMultipleProxies",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "verifiedMarket",
"outputs": [
{
"internalType": "uint32",
"name": "pricePrecision",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "sizePrecision",
"type": "uint96"
},
{
"internalType": "address",
"name": "baseAssetAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "baseAssetDecimals",
"type": "uint256"
},
{
"internalType": "address",
"name": "quoteAssetAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "quoteAssetDecimals",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "tickSize",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "minSize",
"type": "uint96"
},
{
"internalType": "uint96",
"name": "maxSize",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "takerFeeBps",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "makerFeeBps",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60a080604052346099573060805263409feecd195460018116608c5760011c6002600160401b0319016048575b6144bb908161009e823960805181818161135f01526113fb0152f35b6002600160411b0363409feecd19556001600160401b0360209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a1602c565b63f92ee8a95f526004601cfd5b5f80fdfe60a0604052600436101561001a575b3615610018575f80fd5b005b5f803560e01c806321a1bc521461150957806325692962146114c05780634f1ef286146113a757806352d1902d1461134c57806354d1f13d146113085780635f71a07c1461123d578063715018a61461120357806383f94db7146111bb5780638da5cb5b1461118f578063c0c53b8b1461107d578063ce186ec3146107b8578063dd44783e14610673578063f04e283e14610625578063f2fde38b146105e6578063fee81cf4146105b35763ffa5210a146100d5575061000e565b60e03660031901126105b0576004356001600160401b0381116105ac57610100903690600401611732565b906024356001600160401b0381116105a857610120903690600401611732565b906044356001600160401b0381116105a457610140903690600401611732565b60643595909491906001600160a01b03871687036105a057608435956001600160a01b0387169586880361059c5760a435928a996001821061058d5781830361057b5781840361057b578315610567576101998661180a565b15610517575b509594939291908a925b87841061028f578b8b8b8b60c4358310610280571561020957826044601082602094336014528660345263a9059cbb60601b82525af13d1560018451141716156101fc576020916034525b604051908152f35b6390b8ec1882526004601cfd5b50908080808085335af13d1561027b573d6001600160401b0381116102675760405190610240601f8201601f191660200183611711565b81528260203d92013e5b1561025857506020906101f4565b63386bf62b60e11b8152600490fd5b634e487b7160e01b83526041600452602483fd5b61024a565b638199f5f360e01b8452600484fd5b9091929394959699506102a3848b886117e6565b356001600160a01b038116919082900361051357818c528b60205260408c206040516102ce816116f5565b815463ffffffff8116908183526001600160601b03602084019160201c16815260018060a01b0360018501541660408401526002840154916060840192835260018060a01b036003860154166080850152600760048601549560a086019687526001600160601b03600582015463ffffffff811660c0890152818160201c1660e089015260801c16610100870152600681015461012087015201546101408501521561050357938f936084938d936020976103a96103978f8f908f826103979161039c936117e6565b61180a565b156104fb578d88996117e6565b15610465575050916103d26103cc6103d89363ffffffff8096511690519361193b565b91611962565b90611970565b169060405195869485936364216b0f60e01b855260048501528060248501526044840152600160648401525af190811561045a578b91610425575b50985b959493926001019190896101a9565b90506020813d8211610452575b8161043f60209383611711565b8101031261044e57515f610413565b5f80fd5b3d9150610432565b6040513d8d823e3d90fd5b61048893506001600160601b039492506103d291856103cc92511690519361193b565b1690604051958694859363532c46db60e01b855260048501528060248501526044840152600160648401525af190811561045a578b916104ca575b5098610416565b90506020813d82116104f3575b816104e460209383611711565b8101031261044e57515f6104c3565b3d91506104d7565b8d8b996117e6565b50639db8d5b160e01b8f5260048ffd5b8b80fd5b60208c6064601c82604051958a606052306040523360601b602c526323b872dd60601b600c525af18c516001143d1517161561055a578b6060526040525f61019f565b637939f4248c526004601cfd5b634e487b7160e01b8c52603260045260248cfd5b6001621398b960e31b03198c5260048cfd5b63684d939f60e11b8c5260048cfd5b8980fd5b8780fd5b8580fd5b8380fd5b5080fd5b80fd5b50346105b05760203660031901126105b0576105cd61168a565b9063389a75e1600c5252602080600c2054604051908152f35b5060203660031901126105b0576105fb61168a565b6106036118d7565b8060601b1561061857610615906118f3565b80f35b637448fbae82526004601cfd5b5060203660031901126105b05761063a61168a565b6106426118d7565b63389a75e1600c528082526020600c208054421161066657908261061592556118f3565b636f5e881883526004601cfd5b50346105b05760203660031901126105b0576004356001600160401b0381116105ac57366023820112156105ac578060040135906001600160401b038211610267578160051b90604051926106cb6020840185611711565b8352602460208401928201019036821161079057602401915b8183106107985750505081826020915b835181101561079457600581901b84018301516001546040516001600160a01b0392831692909116906107278682611711565b848152823b15610790576107549285928360405180968195829463278f794360e11b845260048401611783565b03925af1908115610785578391610770575b50506001016106f4565b8161077a91611711565b6105ac57815f610766565b6040513d85823e3d90fd5b8480fd5b5080f35b82356001600160a01b03811681036105a4578152602092830192016106e4565b503461044e5761016036600319011261044e576003600435101561044e576107de6116a0565b6107e66116b6565b6064356001600160601b038116810361044e576108016116e2565b9060a4359063ffffffff8216820361044e5761081b6116cc565b9260e435946001600160601b038616860361044e5761014435906001600160601b038216820361044e576001600160a01b038881169082161461106e576108e5986004356001036110655761088c5f5b60043560020361105e575f905b8a8a8a898b61012435966101043596611817565b6040519061089f60206103e60183611711565b6103e682526103e661198f602084013960018060a01b03600154169161093060209d8e6108f36040516108d28382611711565b5f8152604051938491848301998a611783565b03601f198101845283611711565b60405195869261092060206109118587019889815193849201611762565b85019151809385840190611762565b010103601f198101855284611711565b82511561101b5791516001600160a01b03925ff51660805260805115610fda57600254604051906001600160a01b03166126d18083016001600160401b03811184821017610fc657610120928e8e8694611d75863960018060a01b0316835260018060a01b03881690830152604082015260805160608201526001600160601b03600a8189160416608082015260e060a08201525f60e082015261010060c08201525f6101008201520301905ff0928315610eec57600435600103610f64576012905b600435600203610f045760125b638b78c6d8195491600435600103610efd575f905b600435600203610ef7575f5b60018060a01b0360025416906080513b1561044e576001600160601b039360405196632adb82d360e01b885260018060a01b03166004880152600435602488015260018060a01b0316604487015286606487015260018060a01b031660848601528360a486015260c4850152818a1660e485015263ffffffff891661010485015263ffffffff8b16610124850152818c16610144850152818d1661016485015261010435610184850152610124356101a485015260018060a01b0388166101c4850152166101e48301525f8261020481836080515af1908115610eec578b8b8f94928f8d948d96610ed7575b5060405197610b1b896116f5565b63ffffffff8d168952878901966001600160601b031687526040890191600160a01b60019003168252606089019081526080890191600160a01b600190038c16835260a08a0193845260c08a019663ffffffff16875260e08a01946001600160601b031685526101008a01956001600160601b031686526101208a01976101043589528b6101408c019a610124358c5260805182525260408c209a5163ffffffff1663ffffffff1663ffffffff198c5416178b55516001600160601b0316610be3908b6117be565b5160018a0180546001600160a01b03199081166001600160a01b0393841617909155915160028b0155915160038a0180549092169216919091179055516004870155915160058601805463ffffffff191663ffffffff9092169190911781559151610c57906001600160601b0316836117be565b5181546bffffffffffffffffffffffff60801b191660809190911b6bffffffffffffffffffffffff60801b16179055516006830155516007909101556001600160a01b0383163b156105b057604051637660b15360e01b81528181600481836001600160a01b0389165af18015610def57908291610ec2575b5050600160043503610e66575b600260043503610dfa575b6002546001600160a01b0316803b156105ac578180916024604051809481936301aef34960e01b835260805160048401525af18015610def57908b939291610dd4575b5050604080516001600160a01b03808c168252928316818501526080805192820192909252918416606083015263ffffffff858116918301919091526001600160601b0386811660a084015290871660c083015287811660e0830152881661010082015261010435610120820152610124356101408201527f197cfe9a998474c7ba7c9a7eb8aaf3db5ac8e156c85f5abec830567cb09c29ea9061016090a16040516080518152f35b8180939450610de291611711565b6105b05790818a92610d2b565b6040513d84823e3d90fd5b60405163095ea7b360e01b815260805160048201525f1960248201528a81604481856001600160a01b0388165af18015610def57610e39575b50610ce8565b610e58908b3d8d11610e5f575b610e508183611711565b810190611923565b505f610e33565b503d610e46565b60405163095ea7b360e01b815260805160048201525f1960248201528a81604481856001600160a01b038f165af18015610def57610ea5575b50610cdd565b610ebb908b3d8d11610e5f57610e508183611711565b505f610e9f565b81610ecc91611711565b6105b057805f610cd0565b610ee49199505f90611711565b5f975f610b0d565b6040513d5f823e3d90fd5b86610a21565b8c90610a15565b60405163313ce56760e01b81528c816004815f6001600160a01b038a165af1908115610eec575f91610f37575b50610a00565b90508c81813d8311610f5d575b610f4e8183611711565b8101031261044e57515f610f31565b503d610f44565b5f8b8b60046040518094819363313ce56760e01b835260018060a01b03165af1908115610eec575f91610f99575b50906109f3565b90508b81813d8311610fbf575b610fb08183611711565b8101031261044e57515f610f92565b503d610fa6565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b8152600481018b90526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b6044820152606490fd5b60648d6040519062461bcd60e51b825280600483015260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152fd5b8390610878565b61088c8961086b565b630261cf2f60e31b5f5260045ffd5b3461044e57606036600319011261044e5761109661168a565b61109e6116a0565b906110a76116b6565b63409feecd199283548060038655611166575b50638b78c6d81954611159576001600160a01b03909216801560ff1b8117638b78c6d819558392905f5f805160206144668339815191528180a3600280546001600160a01b039283166001600160a01b0319918216179091556001805493909216921691909117905561112957005b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a1005b630dc149f05f526004601cfd5b600181819693961c14303b10156111825760ff1b1b92846110ba565b63f92ee8a95f526004601cfd5b3461044e575f36600319011261044e57638b78c6d819546040516001600160a01b039091168152602090f35b3461044e57602036600319011261044e576111d461168a565b6111dc6118d7565b6001546001600160a01b03918216918116821461044e576001600160a01b03191617600155005b5f36600319011261044e576112166118d7565b5f638b78c6d819545f805160206144668339815191528280a3600160ff1b638b78c6d81955005b3461044e57602036600319011261044e576001600160a01b0361125e61168a565b165f525f60205261016060405f2080549060018060a01b03600182015416906001600160601b03600282015460018060a01b036003840154166004840154906005850154926007600687015496015496856040519963ffffffff81168b5260201c1660208a015260408901526060880152608087015260a086015263ffffffff811660c0860152818160201c1660e086015260801c16610100840152610120830152610140820152f35b5f36600319011261044e5763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b3461044e575f36600319011261044e57307f00000000000000000000000000000000000000000000000000000000000000000361139a5760206040515f805160206144468339815191528152f35b639f03a0265f526004601cfd5b604036600319011261044e576113bb61168a565b602435906001600160401b03821161044e573660238301121561044e578160040135906001600160401b03821161044e57366024838501011161044e57307f00000000000000000000000000000000000000000000000000000000000000001461139a576114276118d7565b60018060a01b03166352d1902d6001525f80516020614446833981519152602060016004601d855afa51036114b257807fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281815f805160206144468339815191525561149257005b815f926024604051950185378338925af4156114aa57005b3d5f823e3d90fd5b6355299b496001526004601dfd5b5f36600319011261044e5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461044e5761016036600319011261044e5761152361168a565b61152b6116a0565b90604435906001600160601b038216820361044e576064359063ffffffff8216820361044e576115596116e2565b9260a435946001600160601b038616860361044e576115766116cc565b6101243593906001600160a01b038516850361044e576101443597881515890361044e57605597600b976115b296610104359660e43596611817565b906103e690604051956115c86020840188611711565b828752602087019261198f84391561166f5761164361163391965b6020809861160d61161b6040516115fa8582611711565b5f81526040519283918683019586611783565b03601f198101835282611711565b604051958694610911858701998a9251928391611762565b010103601f198101835282611711565b51902090604051916040830152848201523081520160ff8153206040516001600160a01b039091168152f35b506001546001600160a01b03169461163390611643906115e3565b600435906001600160a01b038216820361044e57565b602435906001600160a01b038216820361044e57565b604435906001600160a01b038216820361044e57565b60c435906001600160601b038216820361044e57565b6084359063ffffffff8216820361044e57565b61016081019081106001600160401b03821117610fc657604052565b90601f801991011681019081106001600160401b03821117610fc657604052565b9181601f8401121561044e578235916001600160401b03831161044e576020808501948460051b01011161044e57565b5f5b8381106117735750505f910152565b8181015183820152602001611764565b909160609260018060a01b03168252604060208301526117b28151809281604086015260208686019101611762565b601f01601f1916010190565b90640100000000600160801b0382549160201b1690640100000000600160801b031916179055565b91908110156117f65760051b0190565b634e487b7160e01b5f52603260045260245ffd5b35801515810361044e5790565b9791969195919491939192906001600160a01b03808216908a1611156118d15797965b6040516bffffffffffffffffffffffff1960609a8b1b81166020830190815299909a1b90991660348a01526001600160a01b031960a091821b811660488b01526001600160e01b031960e093841b811660548c01529390921b909216605889015291811b8216605c8801529190911b16606885015260748401526094808401919091528252906118cb60b482611711565b51902090565b9661183a565b638b78c6d8195433036118e657565b6382b429005f526004601cfd5b60018060a01b031680638b78c6d819545f805160206144668339815191525f80a3801560ff1b17638b78c6d81955565b9081602091031261044e5751801515810361044e5790565b8181029291811591840414171561194e57565b634e487b7160e01b5f52601160045260245ffd5b604d811161194e57600a0a90565b811561197a570490565b634e487b7160e01b5f52601260045260245ffdfe60806040526103e680380380610014816101f2565b9283398101906040818303126101ee5780516001600160a01b038116918282036101ee576020810151906001600160401b0382116101ee57019183601f840112156101ee5782519261006d6100688561022b565b6101f2565b938085526020850195602082840101116101ee5785602061008e9301610246565b813b15610193577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281511580159061018c575b610108575b60405160cb908161031b8239f35b5f8061017b9461011860606101f2565b94602786527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c6020870152660819985a5b195960ca1b60408701525190845af43d15610184573d9161016c6100688461022b565b9283523d5f602085013e610267565b505f80806100fa565b606091610267565b505f6100f5565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761021757604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161021757601f01601f191660200190565b5f5b8381106102575750505f910152565b8181015183820152602001610248565b919290156102c9575081511561027b575090565b3b156102845790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156102dc5750805190602001fd5b6044604051809262461bcd60e51b82526020600483015261030c8151809281602486015260208686019101610246565b601f01601f19168101030190fdfe608060405236156051577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e15604d573d5ff35b3d5ffd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e15604d573d5ff3fea2646970667358221220c5d0cb6ee81a4cf2816fa7c4034c9b7e7d330411653c956943ba9479f901ebfb64736f6c634300081a00336101608060405234610609576126d1803803809161001d828561060d565b8339810160e0828203126106095761003482610630565b61004060208401610630565b61004c60408501610630565b9161005960608601610630565b6080860151959094906001600160601b03871687036106095760a08101516001600160401b0381116106095782610091918301610644565b60c08201519092906001600160401b038111610609576100b19201610644565b815190916001600160401b03821161050c5760035490600182811c921680156105ff575b60208310146104ee5781601f849311610591575b50602090601f831160011461052b575f92610520575b50508160011b915f199060031b1c1916176003555b8051906001600160401b03821161050c5760045490600182811c92168015610502575b60208310146104ee5781601f849311610480575b50602090601f831160011461041a575f9261040f575b50508160011b915f199060031b1c1916176004555b670de0b6b3a764000060055560808190526001600160a01b0316908115801591906104065760405163313ce56760e01b8152602081600481875afa80156103545760ff915f916103e7575b505b1660a05260c08190526001600160a01b0316948515801594906103de5760405163313ce56760e01b81526020816004818b5afa80156103545760ff915f916103af575b505b1660e0526001600160a01b039081166101008190529516610120526101405261035f575b506102ed575b604051611fee90816106e38239608051818181610bb101528181610f6001526110cf015260a05181505060c051818181610c1501528181610fd70152818161133101526115f4015260e05181505061010051818181610b8601528181610f880152818161150d01528181611d250152611df301526101205181818161045201528181610a11015281816111ae0152611a78015261014051818181610a5801528181610dea015281816111f5015281816114150152611abc0152f35b5f916044602092604051948593849263095ea7b360e01b84526004840152811960248401525af1801561035457610325575b80610232565b6103469060203d60201161034d575b61033e818361060d565b8101906106ca565b505f61031f565b503d610334565b6040513d5f823e3d90fd5b60205f9160446040518094819363095ea7b360e01b8352886004840152811960248401525af18015610354571561022c576103a89060203d60201161034d5761033e818361060d565b505f61022c565b6103d1915060203d6020116103d7575b6103c9818361060d565b8101906106b1565b5f610206565b503d6103bf565b60ff6012610208565b610400915060203d6020116103d7576103c9818361060d565b5f6101c1565b60ff60126101c3565b015190505f80610161565b60045f9081528281209350601f198516905b8181106104685750908460019594939210610450575b505050811b01600455610176565b01515f1960f88460031b161c191690555f8080610442565b9293602060018192878601518155019501930161042c565b60045f529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810191602085106104e4575b90601f859493920160051c01905b8181106104d6575061014b565b5f81558493506001016104c9565b90915081906104bb565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610137565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100ff565b60035f9081528281209350601f198516905b8181106105795750908460019594939210610561575b505050811b01600355610114565b01515f1960f88460031b161c191690555f8080610553565b9293602060018192878601518155019501930161053d565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106105f5575b90601f859493920160051c01905b8181106105e757506100e9565b5f81558493506001016105da565b90915081906105cc565b91607f16916100d5565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761050c57604052565b51906001600160a01b038216820361060957565b81601f82011215610609578051906001600160401b03821161050c5760405192610678601f8401601f19166020018561060d565b82845260208383010111610609575f5b82811061069c57505060205f918301015290565b80602080928401015182828701015201610688565b90816020910312610609575160ff811681036106095790565b9081602091031261060957518015158103610609579056fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301e1d1141461085e57806306fdde03146107a3578063095ea7b31461077d57806318160ddd1461076057806323b872dd14610728578063313ce5671461070d57806339509351146106bf578063488bd7b0146106855780634cdad5061461064b57806370a08231146106145780637660b1531461042c5780637a7af70d146104095780638dbdbe6d146103d157806394bf804d1461037c57806395d89b4114610278578063a457c2d7146101d5578063a9059cbb146101a4578063b3d7f6b91461015e578063b460af9414610159578063ba087652146101595763dd62ed3e0361000e57346101555760403660031901126101555761011e6108bf565b6101266108d5565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b610901565b3461015557602036600319011261015557604061018e610198600435610182610f43565b93906002549083611ca9565b9260025491611ca9565b82519182526020820152f35b34610155576040366003190112610155576101ca6101c06108bf565b60243590336117be565b602060405160018152f35b34610155576040366003190112610155576101ee6108bf565b60243590335f52600160205260405f2060018060a01b0382165f5260205260405f205491808310610225576101ca92039033611622565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b34610155575f366003190112610155576040515f6004548060011c90600181168015610372575b60208310811461035e5782855290811561033a57506001146102dc575b6102d8836102cc81850382610f0d565b60405191829182610878565b0390f35b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610320575090915081016020016102cc6102bc565b919260018160209254838588010152019101909291610308565b60ff191660208086019190915291151560051b840190910191506102cc90506102bc565b634e487b7160e01b5f52602260045260245ffd5b91607f169161029f565b60403660031901126101555760406103b26103956108d5565b6103c46103bc6004356103a6610f43565b95906002549083611ca9565b9460025491611ca9565b9182846110cb565b5082519182526020820152f35b6060366003190112610155576044356001600160a01b0381168103610155576104016020916024356004356110cb565b604051908152f35b3461015557602061040161041c366108eb565b610424611a69565b929050611921565b34610155575f36600319011261015557604051632432509f60e21b8152610160816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610609575f905f925f915f915f915f915f80915f935f915f91610546575b5090640100000000600160801b039291600d55600c5563ffffffff600b549116936001600160601b0360801b9060801b169063ffffffff60e01b16179160201b161717600b55600a5560018060a01b031660018060a01b0319600954161760095560085560018060a01b031660018060a01b03196007541617600755640100000000600160801b0363ffffffff60065492169260201b169060018060801b03191617176006555f80f35b9a5050505050505050505050610160813d8211610601575b8161056c6101609383610f0d565b810103126101555761057d81611092565b9061058a602082016110a3565b90610597604082016110b7565b926060820151916105aa608082016110b7565b9160a0820151916105bd60c08201611092565b91640100000000600160801b036105d660e084016110a3565b6105e361010085016110a3565b9261014061012086015195015190999a98979695919394919261049c565b3d915061055e565b6040513d5f823e3d90fd5b34610155576020366003190112610155576001600160a01b036106356108bf565b165f525f602052602060405f2054604051908152f35b3461015557602036600319011261015557604061067b61019860043561066f610f43565b93906002549083611c93565b9260025491611c93565b346101555760206106af610698366108eb565b91906106a56106a5610f43565b9260025490611ca9565b8181109082180218604051908152f35b34610155576040366003190112610155576101ca6106db6108bf565b335f52600160205260405f2060018060a01b0382165f5260205261070660405f206024359054611085565b9033611622565b34610155575f36600319011261015557602060405160128152f35b34610155576060366003190112610155576101ca6107446108bf565b61074c6108d5565b6044359161075b833383611726565b6117be565b34610155575f366003190112610155576020600254604051908152f35b34610155576040366003190112610155576101ca6107996108bf565b6024359033611622565b34610155575f366003190112610155576040515f6003548060011c90600181168015610854575b60208310811461035e5782855290811561033a57506001146107f6576102d8836102cc81850382610f0d565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061083a575090915081016020016102cc6102bc565b919260018160209254838588010152019101909291610822565b91607f16916107ca565b34610155575f366003190112610155576040610198610f43565b9190916020815282518060208301525f5b8181106108a9575060409293505f838284010152601f8019910116010190565b8060208092870101516040828601015201610889565b600435906001600160a01b038216820361015557565b602435906001600160a01b038216820361015557565b6040906003190112610155576004359060243590565b34610155576060366003190112610155576024356004356001600160a01b038216820361015557604435906001600160a01b03821690818303610155575f90825f525f60205260405f20548111610efe576109789381843303610eec575b505061098361096c610f43565b95906002549084611c93565b946002549083611c93565b9261098c611a69565b919092869160025480610ed8575b508015610e8957805f525f60205260405f205491808310610e39576020815f80516020611f99833981519152925f958587528684520360408620558060025403600255604051908152a36109ec611be6565b908303928311610d03575f9283925f1914610d96575b604051630445da7b60e51b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919061010081600481865afa938415610609575f915f95610d17575b507f00000000000000000000000000000000000000000000000000000000000000006001600160601b038116610a8b8582611a38565b91602084019283516001600160601b0316610aa591611a38565b90610aaf906119ee565b93606001938451610abf90611a2a565b610ad1916001600160601b0316611a38565b610ada91611a4b565b6001600160601b031694610aed91611a38565b90516001600160601b0316610b0191611a38565b9051610b0c90611a2a565b806107d002906107d0820403610d0357610b306001600160601b0392918392611a4b565b169416821190811591610cef575b50610ce057813b15610155575f6084928195604051978896879563e55bb4e360e01b875260048701526024860152604485015260648401525af1801561060957610ccd575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090823b15610ca657604051627b8a6760e11b8152600481018690526001600160a01b0383166024820152818160448183885af18015610ca957908291610cb8575b50507f000000000000000000000000000000000000000000000000000000000000000092803b15610cb457604051627b8a6760e11b8152600481018690526001600160a01b03851660248201529082908290604490829084905af18015610ca957610c91575b50509361019891610c8b8260409787611eaf565b83611eaf565b610c9c828092610f0d565b610ca65780610c77565b80fd5b6040513d84823e3d90fd5b5080fd5b81610cc291610f0d565b610ca657805f610c11565b610cd991505f90610f0d565b5f80610b83565b636a2628d960e01b5f5260045ffd5b6001600160601b039150168311155f610b3e565b634e487b7160e01b5f52601160045260245ffd5b91509350610100813d8211610d8e575b81610d356101009383610f0d565b8101031261015557610d46816110b7565b50610d53604082016110a3565b610d8560e0610d64608085016110a3565b93610d7160a082016110a3565b50610d7e60c082016110a3565b50016110a3565b5090935f610a55565b3d9150610d27565b819350809250610dd7610dce610dbb610db56060610ddc960151611a2a565b89611a38565b610dc860a0880151611a2a565b90611a4b565b60055490611a38565b611a4b565b916001600160601b03610e0e7f0000000000000000000000000000000000000000000000000000000000000000611a0c565b166103e88402816103e8868304148615170215610e2c570491610a02565b63ad251c275f526004601cfd5b60405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b610ee59193508583611c93565b915f61099a565b610ef7913390611726565b5f8161095f565b631e9acf1760e31b5f5260045ffd5b90601f8019910116810190811067ffffffffffffffff821117610f2f57604052565b634e487b7160e01b5f52604160045260245ffd5b60405163d4fac45d60e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169190602081604481865afa908115610609575f91611053575b5060405163d4fac45d60e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482015292602090849060449082905afa928315610609575f9361102357509190565b9092506020813d60201161104b575b8161103f60209383610f0d565b81010312610155575190565b3d9150611032565b90506020813d60201161107d575b8161106e60209383610f0d565b8101031261015557515f610fc1565b3d9150611061565b91908201809211610d0357565b519063ffffffff8216820361015557565b51906001600160601b038216820361015557565b51906001600160a01b038216820361015557565b90917f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b038316158080156115f1575b156115e957156115e357805b3410155b156115d4578392611121611a69565b6002549195909115611475575061115d6111526111416005548487611ca9565b61114c600a54611a2a565b90611a38565b610dc8600854611a2a565b9586116114665761117a611172828886611921565b809795611cc7565b8515611457576111928361118c611be6565b96611085565b945f955f925f19146113db575b604051630445da7b60e51b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919061010081600481865afa938415610609575f915f9561137d575b507f00000000000000000000000000000000000000000000000000000000000000006001600160601b0381166112288582611a38565b91602084019283516001600160601b031661124291611a38565b9061124c906119ee565b9360600193845161125c90611a2a565b61126e916001600160601b0316611a38565b61127791611a4b565b6001600160601b03169461128a91611a38565b90516001600160601b031661129e91611a38565b90516112a990611a2a565b806107d002906107d0820403610d03576112cd6001600160601b0392918392611a4b565b169416821190811591611369575b50610ce057813b15610155575f60849281956040519a8b96879563e55bb4e360e01b875260048701526024860152604485015260648401525af1918215610609576113569461132f93611359575b50611d11565b7f000000000000000000000000000000000000000000000000000000000000000090611d11565b90565b5f61136391610f0d565b5f611329565b6001600160601b039150168311155f6112db565b91509350610100813d82116113d3575b8161139b6101009383610f0d565b81010312610155576113ac816110b7565b506113b9604082016110a3565b6113ca60e0610d64608085016110a3565b5090935f6111f2565b3d915061138d565b819650809250610dd7610dce6113fa610db56060611407960151611a2a565b610dc860a08b0151611a2a565b946001600160601b036114397f0000000000000000000000000000000000000000000000000000000000000000611a0c565b166103e88702816103e8898304148915170215610e2c57049161119f565b633489be7560e21b5f5260045ffd5b635cc39c2360e11b5f5260045ffd5b93956114819084611a38565b8060018060881b031060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900360018060a01b037f000000000000000000000000000000000000000000000000000000000000000016801561158f576002546103e88101809111610d0357600255805f525f60205260405f206103e881540190555f5f80516020611f9983398151915260206040516103e88152a36103e7198101908111610d03578061158a9197611cc7565b61117a565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b63cd41a9e360e01b5f5260045ffd5b8361110e565b503415611112565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615611102565b6001600160a01b03169081156116d5576001600160a01b03169182156116855760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9060018060a01b0382165f52600160205260405f2060018060a01b0382165f52602052604