[ { "inputs": [ { "internalType": "address", "name": "_bedrockVault", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "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": "ERC5143SlippageProtectionFailed", "type": "error" }, { "inputs": [], "name": "FailedCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "RedeemNotImplemented", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "WithdrawNotImplemented", "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": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "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": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vaultShares", "type": "uint256" } ], "name": "Unwrap", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Wrap", "type": "event" }, { "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": [], "name": "bedrockVault", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "_wbtc", "type": "address" }, { "internalType": "address", "name": "_uniBTC", "type": "address" } ], "name": "initialize", "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": "", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "shares", "type": "uint256" } ], "name": "previewUnwrap", "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": "vaultShares", "type": "uint256" } ], "name": "previewWrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [], "name": "totalVaultShares", "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": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "minVaultShares", "type": "uint256" } ], "name": "unwrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "unwrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vault", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "vaultShares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "wrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "vaultShares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "minShares", "type": "uint256" } ], "name": "wrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60a060405234801562000010575f80fd5b506040516200207938038062002079833981016040819052620000339162000105565b6001600160a01b0381166080526200004a62000051565b5062000134565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000a25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001025780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f6020828403121562000116575f80fd5b81516001600160a01b03811681146200012d575f80fd5b9392505050565b608051611f1e6200015b5f395f81816103db015281816107f6015261142b0152611f1e5ff3fe608060405234801561000f575f80fd5b5060043610610208575f3560e01c8063728a16111161011f578063c63d75b6116100a9578063d905777e11610079578063d905777e1461046f578063dd62ed3e14610495578063ef8b30f71461045c578063fb183a02146104a8578063fbfa77cf146104bb575f80fd5b8063c63d75b61461031d578063c6e6f5921461045c578063ce96cb771461046f578063d01ab8ee14610482575f80fd5b8063a9059cbb116100ef578063a9059cbb146103fd578063aa9b074e14610410578063b3d7f6b914610423578063b460af9414610436578063ba08765214610449575f80fd5b8063728a1611146103b357806394bf804d146103bb57806395d89b41146103ce578063a1b3361f146103d6575f80fd5b8063313ce567116101a0578063485cc95511610170578063485cc955146103445780634cdad5061461023c578063621b1b7c146103595780636e553f651461036c57806370a082311461037f575f80fd5b8063313ce567146102bf57806338d52e0f146102d9578063402d267d1461031d578063404b9d8114610331575f80fd5b80630a28a477116101db5780630a28a4771461027257806313bac8201461028557806318160ddd1461029857806323b872dd146102ac575f80fd5b806301e1d1141461020c57806306fdde031461022757806307a2d13a1461023c578063095ea7b31461024f575b5f80fd5b6102146104cb565b6040519081526020015b60405180910390f35b61022f6104ef565b60405161021e919061187d565b61021461024a3660046118af565b6105af565b61026261025d3660046118e1565b6105c0565b604051901515815260200161021e565b6102146102803660046118af565b6105d7565b610214610293366004611909565b6105e3565b5f80516020611ec983398151915254610214565b6102626102ba366004611933565b610681565b6102c76106a6565b60405160ff909116815260200161021e565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b03165b6040516001600160a01b03909116815260200161021e565b61021461032b36600461196c565b505f1990565b61021461033f3660046118af565b61071b565b610357610352366004611985565b610726565b005b6102146103673660046119ad565b61086b565b61021461037a366004611909565b6108a4565b61021461038d36600461196c565b6001600160a01b03165f9081525f80516020611ea9833981519152602052604090205490565b6102146108d5565b6102146103c9366004611909565b61093f565b61022f61095a565b6103057f000000000000000000000000000000000000000000000000000000000000000081565b61026261040b3660046118e1565b610998565b61021461041e3660046118af565b6109a5565b6102146104313660046118af565b6109b0565b6102146104443660046119ee565b6109bc565b6102146104573660046119ee565b6109d6565b61021461046a3660046118af565b6109f0565b61021461047d36600461196c565b505f90565b610214610490366004611a27565b6109fb565b6102146104a3366004611985565b610a2a565b6102146104b63660046119ee565b610a73565b5f546001600160a01b0316610305565b5f6104ea6104e45f80516020611ec98339815191525490565b5f610b35565b905090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f80516020611ea98339815191529161052d90611a49565b80601f016020809104026020016040519081016040528092919081815260200182805461055990611a49565b80156105a45780601f1061057b576101008083540402835291602001916105a4565b820191905f5260205f20905b81548152906001019060200180831161058757829003601f168201915b505050505091505090565b5f6105ba825f610b35565b92915050565b5f336105cd818585610b4e565b5060019392505050565b5f6105ba826001610b60565b5f33816105ef8561071b565b90506106198230876106085f546001600160a01b031690565b6001600160a01b0316929190610b79565b6106238482610be6565b836001600160a01b0316826001600160a01b03167f764bd851d2423ff95fbc9b4db718c64299b808c0948fa9eec41c3b30001aea5e8784604051610671929190918252602082015260400190565b60405180910390a3949350505050565b5f3361068e858285610c1e565b610699858585610c7b565b60019150505b9392505050565b5f80546040805163313ce56760e01b8152905183926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156106ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107119190611a81565b6104ea9190611ab5565b5f6105ba825f610cd8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561076b5750825b90505f8267ffffffffffffffff1660011480156107875750303b155b905081158015610795575080155b156107b35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107dd57845460ff60401b1916600160401b1785555b6107e78787610d1c565b61081c6001600160a01b0388167f00000000000000000000000000000000000000000000000000000000000000005f19610d5f565b831561086257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f80610878868686610a73565b90508281101561089b57604051630f033da760e41b815260040160405180910390fd5b95945050505050565b5f5f196108b5565b60405180910390fd5b5f6108bf856109f0565b90506108cd33858784610dee565b949350505050565b5f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561091b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ea9190611ace565b5f5f195f61094c856109b0565b90506108cd33858388610dee565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f80516020611ea98339815191529161052d90611a49565b5f336105cd818585610c7b565b5f6105ba825f610e03565b5f6105ba826001610b35565b5f60405163ad28754360e01b815260040160405180910390fd5b5f60405163a17426f760e01b815260040160405180910390fd5b5f6105ba825f610b60565b5f80610a0785856105e3565b9050828110156108cd57604051630f033da760e41b815260040160405180910390fd5b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b5f336001600160a01b0383168114610a9057610a90838287610c1e565b5f610a9a866109a5565b9050610aa68487610e3e565b610acc8582610abc5f546001600160a01b031690565b6001600160a01b03169190610e72565b836001600160a01b0316856001600160a01b0316836001600160a01b03167fddce703dce003cfc0a2d7cddef5f904f35cc1d27200a1b9153a656dc5208a8498985604051610b24929190918252602082015260400190565b60405180910390a495945050505050565b5f825f03610b4457505f6105ba565b61069f8383610e03565b610b5b8383836001610ea3565b505050565b5f825f03610b6f57505f6105ba565b61069f8383610cd8565b6040516001600160a01b038481166024830152838116604483015260648201839052610be09186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610f87565b50505050565b6001600160a01b038216610c0f5760405163ec442f0560e01b81525f60048201526024016108ac565b610c1a5f8383610fe8565b5050565b5f610c298484610a2a565b90505f198114610be05781811015610c6d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016108ac565b610be084848484035f610ea3565b6001600160a01b038316610ca457604051634b637e8f60e11b81525f60048201526024016108ac565b6001600160a01b038216610ccd5760405163ec442f0560e01b81525f60048201526024016108ac565b610b5b838383610fe8565b5f61069f610ce782600a611bc5565b5f80516020611ec983398151915254610d009190611bd3565b610d086108d5565b610d13906001611bd3565b85919085611121565b610d24611163565b5f80546001600160a01b0319166001600160a01b038316179055610d47826111ae565b610c1a610d526111c2565b610d5a611253565b6112d0565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610db084826112e2565b610be0576040516001600160a01b0384811660248301525f6044830152610de491869182169063095ea7b390606401610bae565b610be08482610f87565b610dfa8484848461137f565b610be08261140f565b5f61069f610e0f6108d5565b610e1a906001611bd3565b610e255f600a611bc5565b5f80516020611ec983398151915254610d139190611bd3565b6001600160a01b038216610e6757604051634b637e8f60e11b81525f60048201526024016108ac565b610c1a825f83610fe8565b6040516001600160a01b03838116602483015260448201839052610b5b91859182169063a9059cbb90606401610bae565b5f80516020611ea98339815191526001600160a01b038516610eda5760405163e602df0560e01b81525f60048201526024016108ac565b6001600160a01b038416610f0357604051634a1406b160e11b81525f60048201526024016108ac565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610f8057836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610f7791815260200190565b60405180910390a35b5050505050565b5f610f9b6001600160a01b03841683611486565b905080515f14158015610fbf575080806020019051810190610fbd9190611be6565b155b15610b5b57604051635274afe760e01b81526001600160a01b03841660048201526024016108ac565b5f80516020611ea98339815191526001600160a01b0384166110225781816002015f8282546110179190611bd3565b909155506110929050565b6001600160a01b0384165f90815260208290526040902054828110156110745760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016108ac565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166110b05760028101805483900390556110ce565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161111391815260200190565b60405180910390a350505050565b5f61114e61112e83611493565b801561114957505f848061114457611144611c05565b868809115b151590565b6111598686866114bf565b61089b9190611bd3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166111ac57604051631afcd79f60e31b815260040160405180910390fd5b565b6111b6611163565b6111bf8161157c565b50565b5f8054604080516306fdde0360e01b815290516060936001600160a01b03909316926306fdde0392600480820193918290030181865afa158015611208573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261122f9190810190611c2d565b60405160200161123f9190611cd5565b604051602081830303815290604052905090565b5f8054604080516395d89b4160e01b815290516060936001600160a01b03909316926395d89b4192600480820193918290030181865afa158015611299573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112c09190810190611c2d565b60405160200161123f9190611d19565b6112d8611163565b610c1a82826115ff565b5f805f846001600160a01b0316846040516112fd9190611d43565b5f604051808303815f865af19150503d805f8114611336576040519150601f19603f3d011682016040523d82523d5f602084013e61133b565b606091505b50915091508180156113655750805115806113655750808060200190518101906113659190611be6565b801561089b5750505050506001600160a01b03163b151590565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0080546113b7906001600160a01b0316863086610b79565b6113c18483610be6565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051610f77929190918252602082015260400190565b80156111bf5760405163140e25ad60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a0712d68906024015f604051808303815f87803b158015611474575f80fd5b505af1158015610f80573d5f803e3d5ffd5b606061069f83835f61164f565b5f60028260038111156114a8576114a8611d5e565b6114b29190611d72565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f036114f3578382816114e9576114e9611c05565b049250505061069f565b80841161151157611511841561150a5760116116ef565b60126116ef565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b611584611163565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f806115b084611700565b91509150816115c05760126115c2565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b611607611163565b5f80516020611ea98339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036116408482611dec565b5060048101610be08382611dec565b60608147101561167b5760405163cf47918160e01b8152476004820152602481018390526044016108ac565b5f80856001600160a01b031684866040516116969190611d43565b5f6040518083038185875af1925050503d805f81146116d0576040519150601f19603f3d011682016040523d82523d5f602084013e6116d5565b606091505b50915091506116e58683836117d6565b9695505050505050565b634e487b715f52806020526024601cfd5b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b0387169161174691611d43565b5f60405180830381855afa9150503d805f811461177e576040519150601f19603f3d011682016040523d82523d5f602084013e611783565b606091505b509150915081801561179757506020815110155b156117ca575f818060200190518101906117b19190611ace565b905060ff81116117c8576001969095509350505050565b505b505f9485945092505050565b6060826117eb576117e682611832565b61069f565b815115801561180257506001600160a01b0384163b155b1561182b57604051639996b31560e01b81526001600160a01b03851660048201526024016108ac565b508061069f565b8051156118425780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5b8381101561187557818101518382015260200161185d565b50505f910152565b602081525f825180602084015261189b81604085016020870161185b565b601f01601f19169190910160400192915050565b5f602082840312156118bf575f80fd5b5035919050565b80356001600160a01b03811681146118dc575f80fd5b919050565b5f80604083850312156118f2575f80fd5b6118fb836118c6565b946020939093013593505050565b5f806040838503121561191a575f80fd5b8235915061192a602084016118c6565b90509250929050565b5f805f60608486031215611945575f80fd5b61194e846118c6565b925061195c602085016118c6565b9150604084013590509250925092565b5f6020828403121561197c575f80fd5b61069f826118c6565b5f8060408385031215611996575f80fd5b61199f836118c6565b915061192a602084016118c6565b5f805f80608085870312156119c0575f80fd5b843593506119d0602086016118c6565b92506119de604086016118c6565b9396929550929360600135925050565b5f805f60608486031215611a00575f80fd5b83359250611a10602085016118c6565b9150611a1e604085016118c6565b90509250925092565b5f805f60608486031215611a39575f80fd5b8335925061195c602085016118c6565b600181811c90821680611a5d57607f821691505b602082108103611a7b57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611a91575f80fd5b815160ff8116811461069f575f80fd5b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156105ba576105ba611aa1565b5f60208284031215611ade575f80fd5b5051919050565b600181815b80851115611b1f57815f1904821115611b0557611b05611aa1565b80851615611b1257918102915b93841c9390800290611aea565b509250929050565b5f82611b35575060016105ba565b81611b4157505f6105ba565b8160018114611b575760028114611b6157611b7d565b60019150506105ba565b60ff841115611b7257611b72611aa1565b50506001821b6105ba565b5060208310610133831016604e8410600b8410161715611ba0575081810a6105ba565b611baa8383611ae5565b805f1904821115611bbd57611bbd611aa1565b029392505050565b5f61069f60ff841683611b27565b808201808211156105ba576105ba611aa1565b5f60208284031215611bf6575f80fd5b8151801515811461069f575f80fd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611c3d575f80fd5b815167ffffffffffffffff80821115611c54575f80fd5b818401915084601f830112611c67575f80fd5b815181811115611c7957611c79611c19565b604051601f8201601f19908116603f01168101908382118183101715611ca157611ca1611c19565b81604052828152876020848701011115611cb9575f80fd5b611cca83602083016020880161185b565b979650505050505050565b7f53706563747261204552433436323620577261707065723a200000000000000081525f8251611d0c81601985016020870161185b565b9190910160190192915050565b6273772d60e81b81525f8251611d3681600385016020870161185b565b9190910160030192915050565b5f8251611d5481846020870161185b565b9190910192915050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680611d9057634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b601f821115610b5b575f81815260208120601f850160051c81016020861015611dc55750805b601f850160051c820191505b81811015611de457828155600101611dd1565b505050505050565b815167ffffffffffffffff811115611e0657611e06611c19565b611e1a81611e148454611a49565b84611d9f565b602080601f831160018114611e4d575f8415611e365750858301515b5f19600386901b1c1916600185901b178555611de4565b5f85815260208120601f198616915b82811015611e7b57888601518255948401946001909101908401611e5c565b5085821015611e9857878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a26469706673582212203d6c45d4045de8517b67aa9f80eec6929a6e85d6215c20dfbdd40b13570e6d7f64736f6c63430008140033000000000000000000000000047d41f2544b7f63a8e991af2068a363d210d6da