[ { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "contract IERC20", "name": "asset_", "type": "address" }, { "internalType": "uint256", "name": "depositCap_", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint96", "name": "perOneAsset", "type": "uint96" } ], "internalType": "struct WallchainVault.InputToken[]", "name": "inputTokens_", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "controller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "RedeemRequest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint96", "name": "perOneAsset", "type": "uint96" } ], "internalType": "struct WallchainVault.InputToken", "name": "inputToken", "type": "tuple" } ], "name": "addInputToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "claimableRedeemAssetsRequest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "controller", "type": "address" } ], "name": "claimableRedeemRequest", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "controller", "type": "address" } ], "name": "claimableRedeemRequestAsAssets", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "depositByToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "inputTokens", "outputs": [ { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint96", "name": "perOneAsset", "type": "uint96" } ], "internalType": "struct WallchainVault.InputToken[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "controller", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "controller", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "internalType": "struct WallchainVault.ClaimableAmounts[]", "name": "amounts", "type": "tuple[]" } ], "name": "makeRequestsClaimable", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "controller", "type": "address" } ], "name": "pendingRedeemRequest", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "pendingRedeemSharesRequest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "controller", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "requestRedeem", "outputs": [ { "internalType": "uint256", "name": "requestId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assetsCap", "type": "uint256" } ], "name": "setDepositCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "index", "type": "uint32" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint96", "name": "perOneAsset", "type": "uint96" } ], "internalType": "struct WallchainVault.InputToken", "name": "inputToken", "type": "tuple" } ], "name": "setInputToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "setTotalAssets", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60c06040525f6007555f60085534801562000018575f80fd5b50604051620027f3380380620027f38339810160408190526200003b9162000498565b8583868660036200004d838262000696565b5060046200005c828262000696565b5050505f8062000072836200024960201b60201c565b91509150816200008457601262000086565b805b60ff1660a05250506001600160a01b039081166080528116620000c357604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620000ce8162000328565b506005805460ff60a01b1916905560088290558051620001315760405162461bcd60e51b815260206004820152601a60248201527f496e70757420746f6b656e732073686f756c64206265207365740000000000006044820152606401620000ba565b826001600160a01b0316815f815181106200015057620001506200075e565b60200260200101515f01516001600160a01b031614620001c55760405162461bcd60e51b815260206004820152602960248201527f466972737420696e70757420746f6b656e2073686f756c642062652073616d6560448201526808185cc8185cdcd95d60ba1b6064820152608401620000ba565b5f5b81518110156200023c576006828281518110620001e857620001e86200075e565b60209081029190910181015182546001810184555f93845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155620002348162000772565b9050620001c7565b50505050505050620007cc565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620002919162000797565b5f60405180830381855afa9150503d805f8114620002cb576040519150601f19603f3d011682016040523d82523d5f602084013e620002d0565b606091505b5091509150818015620002e557506020815110155b156200031c575f81806020019051810190620003029190620007b4565b905060ff81116200031a576001969095509350505050565b505b505f9485945092505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03811681146200038e575f80fd5b50565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715620003ca57620003ca62000391565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620003fb57620003fb62000391565b604052919050565b5f5b838110156200041f57818101518382015260200162000405565b50505f910152565b5f82601f83011262000437575f80fd5b81516001600160401b0381111562000453576200045362000391565b62000468601f8201601f1916602001620003d0565b8181528460208386010111156200047d575f80fd5b6200049082602083016020870162000403565b949350505050565b5f805f805f8060c08789031215620004ae575f80fd5b8651620004bb8162000379565b602088810151919750906001600160401b0380821115620004da575f80fd5b620004e88b838c0162000427565b975060409150818a015181811115620004ff575f80fd5b6200050d8c828d0162000427565b97505060608a0151620005208162000379565b60808b015160a08c01519197509550818111156200053c575f80fd5b8a01601f81018c136200054d575f80fd5b80518281111562000562576200056262000391565b62000572858260051b01620003d0565b818152858101935060069190911b82018501908d82111562000592575f80fd5b918501915b81831015620005f75784838f031215620005b0575f8081fd5b620005ba620003a5565b8351620005c78162000379565b8152838701516001600160601b0381168114620005e3575f8081fd5b818801528452928501929184019162000597565b8096505050505050509295509295509295565b600181811c908216806200061f57607f821691505b6020821081036200063e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000691575f81815260208120601f850160051c810160208610156200066c5750805b601f850160051c820191505b818110156200068d5782815560010162000678565b5050505b505050565b81516001600160401b03811115620006b257620006b262000391565b620006ca81620006c384546200060a565b8462000644565b602080601f83116001811462000700575f8415620006e85750858301515b5f19600386901b1c1916600185901b1785556200068d565b5f85815260208120601f198616915b8281101562000730578886015182559484019460019091019084016200070f565b50858210156200074e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b5f600182016200079057634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f8251620007aa81846020870162000403565b9190910192915050565b5f60208284031215620007c5575f80fd5b5051919050565b60805160a051611fe96200080a5f395f6107a901525f818161035101528181610972015281816109b701528181610e00015261151d0152611fe95ff3fe608060405234801561000f575f80fd5b506004361061028c575f3560e01c80638da5cb5b11610161578063c63d75b6116100ca578063dd62ed3e11610084578063dd62ed3e14610601578063eaed1d0714610639578063ef8b30f7146105ad578063f2fde38b1461064c578063f5a23d8d1461065f578063fd896f9e14610689575f80fd5b8063c63d75b614610391578063c6e6f592146105ad578063ca5c683f146105c0578063ce96cb77146105d3578063d905777e146105e6578063dbd5edc7146105f9575f80fd5b8063ab8c0f051161011b578063ab8c0f0514610507578063b3d7f6b91461051a578063b460af941461052d578063b6363cf214610540578063b90f50841461057b578063ba0876521461059a575f80fd5b80638da5cb5b1461049457806391ac6a06146104a557806394bf804d146104c457806395d89b41146104d75780639fe8eecd146104df578063a9059cbb146104f4575f80fd5b8063402d267d1161020357806370a08231116101bd57806370a0823114610423578063715018a61461044b57806372624857146104535780637d41c86e146104665780638456cb59146104795780638665120314610481575f80fd5b8063402d267d146103915780634cdad506146102bc578063558a7297146103a55780635c975abb146103eb5780636c606a62146103fd5780636e553f6514610410575f80fd5b80631765b313116102545780631765b3131461030557806318160ddd1461031a57806323b872dd14610322578063313ce5671461033557806338d52e0f1461034f5780633f4ba83a14610389575f80fd5b806301e1d1141461029057806306fdde03146102a757806307a2d13a146102bc578063095ea7b3146102cf5780630a28a477146102f2575b5f80fd5b6007545b6040519081526020015b60405180910390f35b6102af6106b3565b60405161029e9190611a0d565b6102946102ca366004611a3f565b610743565b6102e26102dd366004611a71565b610754565b604051901515815260200161029e565b610294610300366004611a3f565b61076b565b610318610313366004611a3f565b610777565b005b600254610294565b6102e2610330366004611a99565b610784565b61033d6107a2565b60405160ff909116815260200161029e565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161029e565b6103186107d2565b61029461039f366004611ad2565b505f1990565b6102e26103b3366004611af8565b335f908152600b602090815260408083206001600160a01b03861684529091529020805482151560ff19909116179055600192915050565b600554600160a01b900460ff166102e2565b61031861040b366004611b2d565b6107e4565b61029461041e366004611b9c565b6109a9565b610294610431366004611ad2565b6001600160a01b03165f9081526020819052604090205490565b6103186109dd565b610294610461366004611bc6565b6109ee565b610294610474366004611bff565b610b02565b610318610bb1565b61031861048f366004611a3f565b610bc1565b6005546001600160a01b0316610371565b6102946104b3366004611ad2565b600a6020525f908152604090205481565b6102946104d2366004611b9c565b610bce565b6102af610c2f565b6104e7610c3e565b60405161029e9190611c2f565b6102e2610502366004611a71565b610cb8565b610318610515366004611d05565b610ccb565b610294610528366004611a3f565b610d2f565b61029461053b366004611bff565b610d3b565b6102e261054e366004611d1f565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b610294610589366004611ad2565b60096020525f908152604090205481565b6102946105a8366004611bff565b610d91565b6102946105bb366004611a3f565b610dde565b6103186105ce366004611d47565b610de9565b6102946105e1366004611ad2565b610ee4565b6102946105f4366004611ad2565b610f01565b600854610294565b61029461060f366004611d1f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610294610647366004611b9c565b610f08565b61031861065a366004611ad2565b610f29565b61029461066d366004611b9c565b6001600160a01b03165f90815260096020526040902054919050565b610294610697366004611b9c565b6001600160a01b03165f908152600a6020526040902054919050565b6060600380546106c290611d7a565b80601f01602080910402602001604051908101604052809291908181526020018280546106ee90611d7a565b80156107395780601f1061071057610100808354040283529160200191610739565b820191905f5260205f20905b81548152906001019060200180831161071c57829003601f168201915b5050505050905090565b5f61074e825f610f66565b92915050565b5f33610761818585610f9f565b5060019392505050565b5f61074e826001610fac565b61077f610fd6565b600755565b5f61078d611003565b61079884848461102e565b90505b9392505050565b5f6107cd817f0000000000000000000000000000000000000000000000000000000000000000611dc6565b905090565b6107da610fd6565b6107e2611051565b565b6107ec610fd6565b5f805b63ffffffff811683111561096c575f61082885858463ffffffff1681811061081957610819611ddf565b90506040020160200135610743565b90506108553086868563ffffffff1681811061084657610846611ddf565b905060400201602001356110a6565b8060075f8282546108669190611df3565b909155508590508463ffffffff841681811061088457610884611ddf565b9050604002016020013560095f87878663ffffffff168181106108a9576108a9611ddf565b6108bf9260206040909202019081019150611ad2565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546108ec9190611df3565b90915550819050600a5f878763ffffffff871681811061090e5761090e611ddf565b6109249260206040909202019081019150611ad2565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546109519190611e06565b9091555061096190508184611e06565b9250506001016107ef565b506109a47f00000000000000000000000000000000000000000000000000000000000000006005546001600160a01b031630846110de565b505050565b5f6109b2611003565b61079b7f000000000000000000000000000000000000000000000000000000000000000084846109ee565b6109e5610fd6565b6107e25f61114b565b5f6109f7611003565b5f5b600654811015610aaa57846001600160a01b031660068281548110610a2057610a20611ddf565b5f918252602090912001546001600160a01b031603610aa2575f610a7a85670de0b6b3a764000060068581548110610a5a57610a5a611ddf565b5f91825260209091200154600160a01b90046001600160601b031661119c565b90505f610a88826002610fac565b9050610a9833888888868661125b565b925061079b915050565b6001016109f9565b5060405162461bcd60e51b815260206004820152602160248201527f5468697320696e70757420746f6b656e206973206e6f7420737570706f7274656044820152601960fa1b60648201526084015b60405180910390fd5b5f610b0b611003565b336001600160a01b03831614610b2657610b2682338661134e565b610b318230866113b0565b6001600160a01b0383165f9081526009602052604081208054869290610b58908490611e06565b909155505060408051338152602081018690525f916001600160a01b0380861692908716917f1fdc681a13d8c5da54e301c7ce6542dcde4581e4725043fdab2db12ddc574506910160405180910390a4505f9392505050565b610bb9610fd6565b6107e261140d565b610bc9610fd6565b600855565b5f610bd7611003565b60405162461bcd60e51b815260206004820152602760248201527f4d696e74696e672069732064697361626c65642c20757365206465706f736974604482015266213caa37b5b2b760c91b6064820152608401610af9565b6060600480546106c290611d7a565b60606006805480602002602001604051908101604052809291908181526020015f905b82821015610caf575f84815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610c61565b50505050905090565b5f610cc1611003565b61079b8383611450565b610cd3610fd6565b600680546001810182555f9190915281516020909201516001600160601b0316600160a01b026001600160a01b03909216919091177ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910155565b5f61074e826001610f66565b5f80610d4683610ee4565b905080851115610d6f57828582604051633fa733bb60e21b8152600401610af993929190611e19565b5f610d798661076b565b9050610d88338686898561145d565b95945050505050565b5f80610d9c83610f01565b905080851115610dc557828582604051632e52afbb60e21b8152600401610af993929190611e19565b5f610dcf86610743565b9050610d88338686848a61145d565b5f61074e825f610fac565b610df1610fd6565b8163ffffffff165f03610e94577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815f01516001600160a01b031614610e945760405162461bcd60e51b815260206004820152602960248201527f466972737420696e70757420746f6b656e2073686f756c642062652073616d6560448201526808185cc8185cdcd95d60ba1b6064820152608401610af9565b8060068363ffffffff1681548110610eae57610eae611ddf565b5f918252602091829020835193909201516001600160601b0316600160a01b026001600160a01b03909316929092179101555050565b6001600160a01b0381165f908152600a602052604081205461074e565b5f61074e5f835b6001600160a01b0381165f908152600a602052604081205461079b90610dde565b610f31610fd6565b6001600160a01b038116610f5a57604051631e4fbdf760e01b81525f6004820152602401610af9565b610f638161114b565b50565b5f61079b610f7360075490565b610f7e906001611e06565b610f895f600a611f1a565b600254610f969190611e06565b859190856115aa565b6109a483838360016115f7565b5f61079b610fbb82600a611f1a565b600254610fc89190611e06565b600754610f96906001611e06565b6005546001600160a01b031633146107e25760405163118cdaa760e01b8152336004820152602401610af9565b600554600160a01b900460ff16156107e25760405163d93c066560e01b815260040160405180910390fd5b5f3361103b85828561134e565b6110468585856113b0565b506001949350505050565b6110596116c9565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166110cf57604051634b637e8f60e11b81525f6004820152602401610af9565b6110da825f836116f3565b5050565b6040516001600160a01b0384811660248301528381166044830152606482018390526111459186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611806565b50505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f838302815f1985870982811083820303915050805f036111d0578382816111c6576111c6611f28565b049250505061079b565b8084116111f05760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600854156112c0576008548261127060075490565b61127a9190611e06565b11156112c05760405162461bcd60e51b815260206004820152601560248201527404465706f736974206d6f7265207468656e2043617605c1b6044820152606401610af9565b6112dd85876112d76005546001600160a01b031690565b876110de565b6112e78382611867565b8160075f8282546112f89190611e06565b909155505060408051838152602081018390526001600160a01b0380861692908916917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811461114557818110156113a257828183604051637dc7a0d960e11b8152600401610af993929190611e19565b61114584848484035f6115f7565b6001600160a01b0383166113d957604051634b637e8f60e11b81525f6004820152602401610af9565b6001600160a01b0382166114025760405163ec442f0560e01b81525f6004820152602401610af9565b6109a48383836116f3565b611415611003565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110893390565b5f336107618185856113b0565b611465611003565b826001600160a01b0316856001600160a01b0316141580156114ac57506001600160a01b038084165f908152600b602090815260408083209389168352929052205460ff16155b156114eb5760405162461bcd60e51b815260206004820152600f60248201526e2737ba1030b71037b832b930ba37b960891b6044820152606401610af9565b6001600160a01b0383165f908152600a602052604081208054849290611512908490611df3565b9091555061154390507f0000000000000000000000000000000000000000000000000000000000000000858461189b565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db858560405161159b929190918252602082015260400190565b60405180910390a45050505050565b5f806115b786868661119c565b90506115c2836118cc565b80156115dd57505f84806115d8576115d8611f28565b868809115b15610d88576115ed600182611e06565b9695505050505050565b6001600160a01b0384166116205760405163e602df0560e01b81525f6004820152602401610af9565b6001600160a01b03831661164957604051634a1406b160e11b81525f6004820152602401610af9565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561114557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516116bb91815260200190565b60405180910390a350505050565b600554600160a01b900460ff166107e257604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b03831661171d578060025f8282546117129190611e06565b9091555061177a9050565b6001600160a01b0383165f908152602081905260409020548181101561175c5783818360405163391434e360e21b8152600401610af993929190611e19565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611796576002805482900390556117b4565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117f991815260200190565b60405180910390a3505050565b5f61181a6001600160a01b038416836118f8565b905080515f1415801561183e57508080602001905181019061183c9190611f3c565b155b156109a457604051635274afe760e01b81526001600160a01b0384166004820152602401610af9565b6001600160a01b0382166118905760405163ec442f0560e01b81525f6004820152602401610af9565b6110da5f83836116f3565b6040516001600160a01b038381166024830152604482018390526109a491859182169063a9059cbb90606401611113565b5f60028260038111156118e1576118e1611f57565b6118eb9190611f6b565b60ff166001149050919050565b606061079b83835f845f80856001600160a01b0316848660405161191c9190611f98565b5f6040518083038185875af1925050503d805f8114611956576040519150601f19603f3d011682016040523d82523d5f602084013e61195b565b606091505b50915091506115ed86838360608261197b57611976826119c2565b61079b565b815115801561199257506001600160a01b0384163b155b156119bb57604051639996b31560e01b81526001600160a01b0385166004820152602401610af9565b508061079b565b8051156119d25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f5b83811015611a055781810151838201526020016119ed565b50505f910152565b602081525f8251806020840152611a2b8160408501602087016119eb565b601f01601f19169190910160400192915050565b5f60208284031215611a4f575f80fd5b5035919050565b80356001600160a01b0381168114611a6c575f80fd5b919050565b5f8060408385031215611a82575f80fd5b611a8b83611a56565b946020939093013593505050565b5f805f60608486031215611aab575f80fd5b611ab484611a56565b9250611ac260208501611a56565b9150604084013590509250925092565b5f60208284031215611ae2575f80fd5b61079b82611a56565b8015158114610f63575f80fd5b5f8060408385031215611b09575f80fd5b611b1283611a56565b91506020830135611b2281611aeb565b809150509250929050565b5f8060208385031215611b3e575f80fd5b823567ffffffffffffffff80821115611b55575f80fd5b818501915085601f830112611b68575f80fd5b813581811115611b76575f80fd5b8660208260061b8501011115611b8a575f80fd5b60209290920196919550909350505050565b5f8060408385031215611bad575f80fd5b82359150611bbd60208401611a56565b90509250929050565b5f805f60608486031215611bd8575f80fd5b611be184611a56565b925060208401359150611bf660408501611a56565b90509250925092565b5f805f60608486031215611c11575f80fd5b83359250611c2160208501611a56565b9150611bf660408501611a56565b602080825282518282018190525f919060409081850190868401855b82811015611c8257815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611c4b565b5091979650505050505050565b5f60408284031215611c9f575f80fd5b6040516040810181811067ffffffffffffffff82111715611cce57634e487b7160e01b5f52604160045260245ffd5b604052905080611cdd83611a56565b815260208301356001600160601b0381168114611cf8575f80fd5b6020919091015292915050565b5f60408284031215611d15575f80fd5b61079b8383611c8f565b5f8060408385031215611d30575f80fd5b611d3983611a56565b9150611bbd60208401611a56565b5f8060608385031215611d58575f80fd5b823563ffffffff81168114611d6b575f80fd5b9150611bbd8460208501611c8f565b600181811c90821680611d8e57607f821691505b602082108103611dac57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b60ff818116838216019081111561074e5761074e611db2565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561074e5761074e611db2565b8082018082111561074e5761074e611db2565b6001600160a01b039390931683526020830191909152604082015260600190565b600181815b80851115611e7457815f1904821115611e5a57611e5a611db2565b80851615611e6757918102915b93841c9390800290611e3f565b509250929050565b5f82611e8a5750600161074e565b81611e9657505f61074e565b8160018114611eac5760028114611eb657611ed2565b600191505061074e565b60ff841115611ec757611ec7611db2565b50506001821b61074e565b5060208310610133831016604e8410600b8410161715611ef5575081810a61074e565b611eff8383611e3a565b805f1904821115611f1257611f12611db2565b029392505050565b5f61079b60ff841683611e7c565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215611f4c575f80fd5b815161079b81611aeb565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680611f8957634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f8251611fa98184602087016119eb565b919091019291505056fea2646970667358221220b55a68a4ca17b2a77f56e9e8a5a6a0de9ad6964548632965676ef3d3a0fa93dc64736f6c63430008140033000000000000000000000000d9a4322473a87b9d89204acd027d23db148d431200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000174876e8000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000977616c6c32555344430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000677325553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000de0b6b3a7640000
0x000000000000000000000000d9a4322473a87b9d89204acd027d23db148d431200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000174876e8000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000977616c6c32555344430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000677325553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000de0b6b3a7640000