[ { "inputs": [], "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": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "NotInitializing", "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": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "txIndex", "type": "uint256" } ], "name": "ConfirmTransaction", "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": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "balance", "type": "uint256" } ], "name": "DepositNative", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "txIndex", "type": "uint256" } ], "name": "ExecuteTransaction", "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": "investor", "type": "address" } ], "name": "InvestorAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "investor", "type": "address" } ], "name": "InvestorRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "txIndex", "type": "uint256" } ], "name": "RevokeConfirmation", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "txIndex", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "SubmitTransaction", "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": "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": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "accreditedInvestor", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "investor", "type": "address" } ], "name": "addInvestor", "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": "uint256", "name": "_txIndex", "type": "uint256" } ], "name": "confirmTransaction", "outputs": [], "stateMutability": "nonpayable", "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": "uint256", "name": "_txIndex", "type": "uint256" } ], "name": "executeTransaction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAuthorizedInvestors", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwners", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_txIndex", "type": "uint256" } ], "name": "getTransaction", "outputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bool", "name": "executed", "type": "bool" }, { "internalType": "uint256", "name": "numConfirmations", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTransactionCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "asset_", "type": "address" }, { "internalType": "address[]", "name": "owners_", "type": "address[]" }, { "internalType": "uint256", "name": "numConfirmationsRequired_", "type": "uint256" }, { "internalType": "uint256", "name": "minInitialInvestment_", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "isConfirmed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "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": [], "name": "numConfirmationsRequired", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "owners", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [ { "internalType": "address", "name": "investor", "type": "address" } ], "name": "removeInvestor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_txIndex", "type": "uint256" } ], "name": "revokeConfirmation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "submitTransaction", "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": "uint256", "name": "", "type": "uint256" } ], "name": "transactions", "outputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bool", "name": "executed", "type": "bool" }, { "internalType": "uint256", "name": "numConfirmations", "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": "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" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b506200001c6200002c565b620000266200002c565b620000e0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156200007d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000dd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61386480620000f06000396000f3fe6080604052600436106102d55760003560e01c806370a0823111610179578063c01a8c84116100d6578063d0549b851161008a578063e641bde111610064578063e641bde1146108c6578063ee22610b146108e6578063ef8b30f7146107eb57600080fd5b8063d0549b851461082b578063d905777e14610841578063dd62ed3e1461086157600080fd5b8063c6427474116100bb578063c6427474146107cb578063c6e6f592146107eb578063ce96cb771461080b57600080fd5b8063c01a8c84146107ab578063c63d75b6146105af57600080fd5b8063a0e67e2b1161012d578063b3d7f6b911610112578063b3d7f6b91461074b578063b460af941461076b578063ba0876521461078b57600080fd5b8063a0e67e2b14610716578063a9059cbb1461072b57600080fd5b806394bf804d1161015e57806394bf804d146106c157806395d89b41146106e15780639ace38c2146106f657600080fd5b806370a082311461063157806380f59a651461068657600080fd5b80632e7700f0116102325780633ebf60f3116101e65780634cdad506116101c05780634cdad506146103bf57806350757c46146105f15780636e553f651461061157600080fd5b80633ebf60f31461057f578063402d267d146105af57806342714978146105d157600080fd5b8063313ce56711610217578063313ce567146104ea57806333ea3dc81461051157806338d52e0f1461054257600080fd5b80632e7700f0146104a55780632f54bf6e146104ba57600080fd5b8063095ea7b31161028957806318160ddd1161026e57806318160ddd1461042f57806320ea8d861461046357806323b872dd1461048557600080fd5b8063095ea7b3146103df5780630a28a4771461040f57600080fd5b806305019e2c116102ba57806305019e2c1461037b57806306fdde031461039d57806307a2d13a146103bf57600080fd5b806301e1d1141461031b578063025e7c271461034357600080fd5b36610316576040805134815247602082015233917f6bb902f8baf2580ae3dae24e58f4b874ecca85152076af921bfd172dce1c7e28910160405180910390a2005b600080fd5b34801561032757600080fd5b50610330610906565b6040519081526020015b60405180910390f35b34801561034f57600080fd5b5061036361035e366004612e98565b6109b5565b6040516001600160a01b03909116815260200161033a565b34801561038757600080fd5b506103906109df565b60405161033a9190612eb1565b3480156103a957600080fd5b506103b2610b39565b60405161033a9190612f6c565b3480156103cb57600080fd5b506103306103da366004612e98565b610c0e565b3480156103eb57600080fd5b506103ff6103fa366004612f9b565b610c21565b604051901515815260200161033a565b34801561041b57600080fd5b5061033061042a366004612e98565b610c39565b34801561043b57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610330565b34801561046f57600080fd5b5061048361047e366004612e98565b610c46565b005b34801561049157600080fd5b506103ff6104a0366004612fc5565b610e6a565b3480156104b157600080fd5b50600454610330565b3480156104c657600080fd5b506103ff6104d5366004613001565b60016020526000908152604090205460ff1681565b3480156104f657600080fd5b506104ff610e90565b60405160ff909116815260200161033a565b34801561051d57600080fd5b5061053161052c366004612e98565b610edf565b60405161033a95949392919061301c565b34801561054e57600080fd5b507f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b0316610363565b34801561058b57600080fd5b506103ff61059a366004613001565b60056020526000908152604090205460ff1681565b3480156105bb57600080fd5b506103306105ca366004613001565b5060001990565b3480156105dd57600080fd5b506104836105ec366004613001565b610fda565b3480156105fd57600080fd5b5061048361060c36600461316c565b611140565b34801561061d57600080fd5b5061033061062c366004613281565b6112e5565b34801561063d57600080fd5b5061033061064c366004613001565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b34801561069257600080fd5b506103ff6106a1366004613281565b600360209081526000928352604080842090915290825290205460ff1681565b3480156106cd57600080fd5b506103306106dc366004613281565b611382565b3480156106ed57600080fd5b506103b2611417565b34801561070257600080fd5b50610531610711366004612e98565b611468565b34801561072257600080fd5b50610390611541565b34801561073757600080fd5b506103ff610746366004612f9b565b6115a3565b34801561075757600080fd5b50610330610766366004612e98565b6115b1565b34801561077757600080fd5b506103306107863660046132ad565b6115be565b34801561079757600080fd5b506103306107a63660046132ad565b611642565b3480156107b757600080fd5b506104836107c6366004612e98565b6116bd565b3480156107d757600080fd5b506104836107e63660046132e9565b6118e4565b3480156107f757600080fd5b50610330610806366004612e98565b611aac565b34801561081757600080fd5b50610330610826366004613001565b611ab9565b34801561083757600080fd5b5061033060025481565b34801561084d57600080fd5b5061033061085c366004613001565b611afc565b34801561086d57600080fd5b5061033061087c366004613354565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b3480156108d257600080fd5b506104836108e1366004613001565b611b39565b3480156108f257600080fd5b50610483610901366004612e98565b611ca3565b6000807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0080546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506001600160a01b0316906370a0823190602401602060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af919061337e565b91505090565b600081815481106109c557600080fd5b6000918252602090912001546001600160a01b0316905081565b60008054600654606092916109f3916133c6565b67ffffffffffffffff811115610a0b57610a0b613058565b604051908082528060200260200182016040528015610a34578160200160208202803683370190505b50905060005b600654811015610ab15760068181548110610a5757610a576133d9565b9060005260206000200160009054906101000a90046001600160a01b0316828281518110610a8757610a876133d9565b6001600160a01b039092166020928302919091019091015280610aa981613408565b915050610a3a565b5060005b600054811015610b335760008181548110610ad257610ad26133d9565b6000918252602090912001546006546001600160a01b03909116908390610af990846133c6565b81518110610b0957610b096133d9565b6001600160a01b039092166020928302919091019091015280610b2b81613408565b915050610ab5565b50919050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610b8a90613422565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb690613422565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b505050505091505090565b6000610c1b826000611f46565b92915050565b600033610c2f818585611f9f565b5060019392505050565b6000610c1b826001611fb1565b3360009081526001602052604090205460ff16610caa5760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60045481908110610cfd5760405162461bcd60e51b815260206004820152601160248201527f747820646f6573206e6f742065786973740000000000000000000000000000006044820152606401610ca1565b8160048181548110610d1157610d116133d9565b600091825260209091206003600590920201015460ff1615610d755760405162461bcd60e51b815260206004820152601360248201527f747820616c7265616479206578656375746564000000000000000000000000006044820152606401610ca1565b600060048481548110610d8a57610d8a6133d9565b600091825260208083208784526003825260408085203386529092529220546005909102909101915060ff16610e025760405162461bcd60e51b815260206004820152601060248201527f7478206e6f7420636f6e6669726d6564000000000000000000000000000000006044820152606401610ca1565b6001816004016000828254610e17919061346f565b90915550506000848152600360209081526040808320338085529252808320805460ff191690555186927ff0dca620e2e81f7841d07bcc105e1704fb01475b278a9d4c236e1c62945edd5591a350505050565b600033610e78858285612000565b610e838585856120b6565b60019150505b9392505050565b6000807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e009050600081546109af919074010000000000000000000000000000000000000000900460ff16613482565b6000806060600080600060048781548110610efc57610efc6133d9565b6000918252602090912060059091020180546001820154600383015460048401546002850180549596506001600160a01b039094169492939260ff909216918390610f4690613422565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7290613422565b8015610fbf5780601f10610f9457610100808354040283529160200191610fbf565b820191906000526020600020905b815481529060010190602001808311610fa257829003601f168201915b50505050509250955095509550955095505091939590929450565b3360009081526001602052604090205460ff166110395760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610ca1565b6001600160a01b03811660009081526005602052604090205460ff166110a15760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420616e20696e766573746f7200000000000000000000000000000000006044820152606401610ca1565b6001600160a01b0381166110f75760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610ca1565b6001600160a01b038116600081815260056020526040808220805460ff19169055517fba0013628ccb89af5bb18edf764d3a7b35c07b894848b8e6fd3434719de39c7d9190a250565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561118b5750825b905060008267ffffffffffffffff1660011480156111a85750303b155b9050811580156111b6575080155b156111ed576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561124e5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61125789612147565b6112618b8b61215b565b61126b88886121be565b61127733328889612420565b83156112d85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b3360009081526005602052604081205460ff168061131257503360009081526001602052604090205460ff165b61135e5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420616e206163637265646974656420696e766573746f720000000000006044820152606401610ca1565b600019600061136c85611aac565b905061137a33858784612420565b949350505050565b3360009081526005602052604081205460ff16806113af57503360009081526001602052604090205460ff165b6113fb5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420616e206163637265646974656420696e766573746f720000000000006044820152606401610ca1565b6000196000611409856115b1565b905061137a33858388612420565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610b8a90613422565b6004818154811061147857600080fd5b60009182526020909120600590910201805460018201546002830180546001600160a01b0390931694509092916114ae90613422565b80601f01602080910402602001604051908101604052809291908181526020018280546114da90613422565b80156115275780601f106114fc57610100808354040283529160200191611527565b820191906000526020600020905b81548152906001019060200180831161150a57829003601f168201915b505050506003830154600490930154919260ff1691905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561159957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161157b575b5050505050905090565b600033610c2f8185856120b6565b6000610c1b826001611f46565b6000806115ca83611ab9565b90508085111561161f576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610ca1565b600061162a86610c39565b905061163933868689856124bf565b95945050505050565b60008061164e83611afc565b9050808511156116a3576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610ca1565b60006116ae86610c0e565b9050611639338686848a6124bf565b3360009081526001602052604090205460ff1661171c5760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610ca1565b6004548190811061176f5760405162461bcd60e51b815260206004820152601160248201527f747820646f6573206e6f742065786973740000000000000000000000000000006044820152606401610ca1565b8160048181548110611783576117836133d9565b600091825260209091206003600590920201015460ff16156117e75760405162461bcd60e51b815260206004820152601360248201527f747820616c7265616479206578656375746564000000000000000000000000006044820152606401610ca1565b6000838152600360209081526040808320338452909152902054839060ff16156118535760405162461bcd60e51b815260206004820152601460248201527f747820616c726561647920636f6e6669726d65640000000000000000000000006044820152606401610ca1565b600060048581548110611868576118686133d9565b90600052602060002090600502019050600181600401600082825461188d91906133c6565b90915550506000858152600360209081526040808320338085529252808320805460ff191660011790555187927f5cbe105e36805f7820e291f799d5794ff948af2a5f664e580382defb6339004191a35050505050565b3360009081526001602052604090205460ff166119435760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610ca1565b600480546040805160a0810182526001600160a01b03878116825260208201878152928201868152600060608401819052608084018190526001860187559590955281517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6005860290810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169290931691909117825592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c84015593519293909290917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d0190611a3890826134e9565b50606082015160038201805460ff19169115159190911790556080909101516004909101556040516001600160a01b03851690829033907fd5a05bf70715ad82a09a756320284a1b54c9ff74cd0f8cce6219e79b563fe59d90611a9e90889088906135c7565b60405180910390a450505050565b6000610c1b826000611fb1565b6001600160a01b03811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610c1b906000611f46565b6001600160a01b03811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610c1b565b3360009081526001602052604090205460ff16611b985760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610ca1565b6001600160a01b03811660009081526005602052604090205460ff1615611c015760405162461bcd60e51b815260206004820152601360248201527f416c726561647920616e20696e766573746f72000000000000000000000000006044820152606401610ca1565b6001600160a01b038116611c575760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610ca1565b6001600160a01b038116600081815260056020526040808220805460ff19166001179055517f62e6a5118be03f9bfedb79b0ed7ed75ee4a9e15fc4c69d2c4976acde26fa2d5f9190a250565b3360009081526001602052604090205460ff16611d025760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610ca1565b60045481908110611d555760405162461bcd60e51b815260206004820152601160248201527f747820646f6573206e6f742065786973740000000000000000000000000000006044820152606401610ca1565b8160048181548110611d6957611d696133d9565b600091825260209091206003600590920201015460ff1615611dcd5760405162461bcd60e51b815260206004820152601360248201527f747820616c7265616479206578656375746564000000000000000000000000006044820152606401610ca1565b600060048481548110611de257611de26133d9565b9060005260206000209060050201905060025481600401541015611e485760405162461bcd60e51b815260206004820152601160248201527f63616e6e6f7420657865637574652074780000000000000000000000000000006044820152606401610ca1565b60038101805460ff191660019081179091558154908201546040516000926001600160a01b03169190611e7f9060028601906135e0565b60006040518083038185875af1925050503d8060008114611ebc576040519150601f19603f3d011682016040523d82523d6000602084013e611ec1565b606091505b5050905080611f125760405162461bcd60e51b815260206004820152600960248201527f7478206661696c656400000000000000000000000000000000000000000000006044820152606401610ca1565b604051859033907f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac90600090a35050505050565b6000610e89611f53610906565b611f5e9060016133c6565b611f6a6000600a61373a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254611f9691906133c6565b85919085612586565b611fac83838360016125d5565b505050565b6000610e89611fc182600a61373a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254611fed91906133c6565b611ff5610906565b611f969060016133c6565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01602090815260408083209386168352929052205460001981146120b057818110156120a1576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610ca1565b6120b0848484840360006125d5565b50505050565b6001600160a01b0383166120f9576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610ca1565b6001600160a01b03821661213c576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610ca1565b611fac8383836126f8565b61214f612861565b612158816128ca565b50565b612163612861565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036121af84826134e9565b50600481016120b083826134e9565b6121c6612861565b60008251116122175760405162461bcd60e51b815260206004820152600f60248201527f6f776e65727320726571756972656400000000000000000000000000000000006044820152606401610ca1565b600081118015612228575081518111155b61229a5760405162461bcd60e51b815260206004820152602860248201527f696e76616c6964206e756d626572206f6620726571756972656420636f6e666960448201527f726d6174696f6e730000000000000000000000000000000000000000000000006064820152608401610ca1565b60005b82518110156124195760008382815181106122ba576122ba6133d9565b6020026020010151905060006001600160a01b0316816001600160a01b0316036123265760405162461bcd60e51b815260206004820152600d60248201527f696e76616c6964206f776e6572000000000000000000000000000000000000006044820152606401610ca1565b6001600160a01b03811660009081526001602052604090205460ff161561238f5760405162461bcd60e51b815260206004820152601060248201527f6f776e6572206e6f7420756e69717565000000000000000000000000000000006044820152606401610ca1565b6001600160a01b031660008181526001602081905260408220805460ff191682179055815490810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790558061241181613408565b91505061229d565b5060025550565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e008054612458906001600160a01b031686308661298f565b6124628483612a0b565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d785856040516124b0929190918252602082015260400190565b60405180910390a35050505050565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e006001600160a01b03868116908516146124fe576124fe848784612000565b6125088483612a5e565b805461251e906001600160a01b03168685612aad565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051612576929190918252602082015260400190565b60405180910390a4505050505050565b600080612594868686612ade565b905061259f83612bbb565b80156125bb5750600084806125b6576125b6613749565b868809115b15611639576125cb6001826133c6565b9695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516612639576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610ca1565b6001600160a01b03841661267c576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610ca1565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156126f157836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516124b091815260200190565b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416612746578181600201600082825461273b91906133c6565b909155506127d19050565b6001600160a01b038416600090815260208290526040902054828110156127b2576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610ca1565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166127ef57600281018054839003905561280e565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161285391815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166128c8576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6128d2612861565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e006000806128ff84612be8565b915091508161290f576012612911565b805b83547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff92909216919091027fffffffffffffffffffffffff000000000000000000000000000000000000000016176001600160a01b0394909416939093179091555050565b6040516001600160a01b0384811660248301528381166044830152606482018390526120b09186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612cf2565b6001600160a01b038216612a4e576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610ca1565b612a5a600083836126f8565b5050565b6001600160a01b038216612aa1576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610ca1565b612a5a826000836126f8565b6040516001600160a01b03838116602483015260448201839052611fac91859182169063a9059cbb906064016129c4565b6000838302816000198587098281108382030391505080600003612b1557838281612b0b57612b0b613749565b0492505050610e89565b808411612b4e576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60006002826003811115612bd157612bd1613778565b612bdb91906137a7565b60ff166001149050919050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829182916001600160a01b03871691612c5d916137f0565b600060405180830381855afa9150503d8060008114612c98576040519150601f19603f3d011682016040523d82523d6000602084013e612c9d565b606091505b5091509150818015612cb157506020815110155b15612ce557600081806020019051810190612ccc919061337e565b905060ff8111612ce3576001969095509350505050565b505b5060009485945092505050565b6000612d076001600160a01b03841683612d6e565b90508051600014158015612d2c575080806020019051810190612d2a919061380c565b155b15611fac576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610ca1565b6060610e898383600084600080856001600160a01b03168486604051612d9491906137f0565b60006040518083038185875af1925050503d8060008114612dd1576040519150601f19603f3d011682016040523d82523d6000602084013e612dd6565b606091505b50915091506125cb868383606082612df657612df182612e56565b610e89565b8151158015612e0d57506001600160a01b0384163b155b15612e4f576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ca1565b5080610e89565b805115612e665780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612eaa57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015612ef25783516001600160a01b031683529284019291840191600101612ecd565b50909695505050505050565b60005b83811015612f19578181015183820152602001612f01565b50506000910152565b60008151808452612f3a816020860160208601612efe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610e896020830184612f22565b80356001600160a01b0381168114612f9657600080fd5b919050565b60008060408385031215612fae57600080fd5b612fb783612f7f565b946020939093013593505050565b600080600060608486031215612fda57600080fd5b612fe384612f7f565b9250612ff160208501612f7f565b9150604084013590509250925092565b60006020828403121561301357600080fd5b610e8982612f7f565b6001600160a01b038616815284602082015260a06040820152600061304460a0830186612f22565b931515606083015250608001529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156130ce576130ce613058565b604052919050565b600067ffffffffffffffff8311156130f0576130f0613058565b61312160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601613087565b905082815283838301111561313557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261315d57600080fd5b610e89838335602085016130d6565b60008060008060008060c0878903121561318557600080fd5b863567ffffffffffffffff8082111561319d57600080fd5b6131a98a838b0161314c565b97506020915081890135818111156131c057600080fd5b6131cc8b828c0161314c565b9750506131db60408a01612f7f565b95506060890135818111156131ef57600080fd5b8901601f81018b1361320057600080fd5b80358281111561321257613212613058565b8060051b9250613223848401613087565b818152928201840192848101908d85111561323d57600080fd5b928501925b848410156132625761325384612f7f565b82529285019290850190613242565b9a9d999c50979a60808101359960a09091013598509650505050505050565b6000806040838503121561329457600080fd5b823591506132a460208401612f7f565b90509250929050565b6000806000606084860312156132c257600080fd5b833592506132d260208501612f7f565b91506132e060408501612f7f565b90509250925092565b6000806000606084860312156132fe57600080fd5b61330784612f7f565b925060208401359150604084013567ffffffffffffffff81111561332a57600080fd5b8401601f8101861361333b57600080fd5b61334a868235602084016130d6565b9150509250925092565b6000806040838503121561336757600080fd5b61337083612f7f565b91506132a460208401612f7f565b60006020828403121561339057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610c1b57610c1b613397565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820361341b5761341b613397565b5060010190565b600181811c9082168061343657607f821691505b602082108103610b33577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81810381811115610c1b57610c1b613397565b60ff8181168382160190811115610c1b57610c1b613397565b601f821115611fac57600081815260208120601f850160051c810160208610156134c25750805b601f850160051c820191505b818110156134e1578281556001016134ce565b505050505050565b815167ffffffffffffffff81111561350357613503613058565b613517816135118454613422565b8461349b565b602080601f83116001811461354c57600084156135345750858301515b600019600386901b1c1916600185901b1785556134e1565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156135995788860151825594840194600190910190840161357a565b50858210156135b75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b82815260406020820152600061137a6040830184612f22565b60008083546135ee81613422565b60018281168015613606576001811461361b5761364a565b60ff198416875282151583028701945061364a565b8760005260208060002060005b858110156136415781548a820152908401908201613628565b50505082870194505b50929695505050505050565b600181815b8085111561369157816000190482111561367757613677613397565b8085161561368457918102915b93841c939080029061365b565b509250929050565b6000826136a857506001610c1b565b816136b557506000610c1b565b81600181146136cb57600281146136d5576136f1565b6001915050610c1b565b60ff8411156136e6576136e6613397565b50506001821b610c1b565b5060208310610133831016604e8410600b8410161715613714575081810a610c1b565b61371e8383613656565b806000190482111561373257613732613397565b029392505050565b6000610e8960ff841683613699565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff8316806137e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160691505092915050565b60008251613802818460208701612efe565b9190910192915050565b60006020828403121561381e57600080fd5b81518015158114610e8957600080fdfea2646970667358221220af6ac790c431a882dfe1432e48630bc5517e139361cf016075e3cbe953f0f29464736f6c63430008140033