[ { "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": "receiver", "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": "uint256", "name": "amount", "type": "uint256" } ], "name": "Invest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newStrategy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "time", "type": "uint256" } ], "name": "StrategyAnnounced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newStrategy", "type": "address" }, { "indexed": false, "internalType": "address", "name": "oldStrategy", "type": "address" } ], "name": "StrategyChanged", "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": [], "name": "TEN", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "_strategy", "type": "address" } ], "name": "announceStrategyUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "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": "_depositor", "type": "address" } ], "name": "assetsOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "assetsPerShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "availableToInvestOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "_strategy", "type": "address" } ], "name": "canUpdateStrategy", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "controller", "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": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "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": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "minted", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "holder", "type": "address" } ], "name": "depositFor", "outputs": [ { "internalType": "uint256", "name": "minted", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "doHardWork", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "finalizeStrategyUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "finalizeUpgrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getPricePerFullShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "governance", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_underlying", "type": "address" }, { "internalType": "uint256", "name": "_toInvestNumerator", "type": "uint256" }, { "internalType": "uint256", "name": "_toInvestDenominator", "type": "uint256" }, { "internalType": "uint256", "name": "_underlyingUnit", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_storage", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_storage", "type": "address" }, { "internalType": "address", "name": "_underlying", "type": "address" }, { "internalType": "uint256", "name": "_toInvestNumerator", "type": "uint256" }, { "internalType": "uint256", "name": "_toInvestDenominator", "type": "uint256" } ], "name": "initializeVault", "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": "_caller", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_caller", "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": "nextImplementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextImplementationDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextImplementationTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextStrategy", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextStrategyTimestamp", "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": [], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "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": "impl", "type": "address" } ], "name": "scheduleUpgrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_store", "type": "address" } ], "name": "setStorage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_strategy", "type": "address" } ], "name": "setStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numerator", "type": "uint256" }, { "internalType": "uint256", "name": "denominator", "type": "uint256" } ], "name": "setVaultFractionToInvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "shouldUpgrade", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "strategy", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "underlyingBalanceInVault", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "underlyingBalanceWithInvestment", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" } ], "name": "underlyingBalanceWithInvestmentForHolder", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "underlyingUnit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vaultFractionToInvestDenominator", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vaultFractionToInvestNumerator", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amtUnderlying", "type": "uint256" } ], "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" }, { "inputs": [], "name": "withdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b5061547e806100206000396000f3fe608060405234801561001057600080fd5b50600436106103e65760003560e01c8063853828b61161020a578063b6b55f2511610125578063d905777e116100b8578063ee2f3a0511610087578063ee2f3a0514610aa4578063ef8b30f714610503578063f0cf91e714610aac578063f2768c1e14610ad2578063f77c479114610ada576103e6565b8063d905777e14610a40578063dd62ed3e14610a66578063e175ae1314610a94578063eda199aa14610a9c576103e6565b8063c4d66de8116100f4578063c4d66de8146109d7578063c63d75b6146106a3578063c6e6f592146109fd578063ce96cb7714610a1a576103e6565b8063b6b55f2514610976578063ba08765214610993578063bfebc962146109c7578063c2baf356146109cf576103e6565b8063a457c2d71161019d578063a9059cbb1161016c578063a9059cbb1461090e578063b3d7f6b9146106d1578063b460af941461093a578063b592c3901461096e576103e6565b8063a457c2d7146108af578063a5b1a24d146108db578063a8365693146108fe578063a8c62e7614610906576103e6565b806394bf804d116101d957806394bf804d1461084857806395d89b41146108745780639a508c8e1461087c5780639d16acfd14610884576103e6565b8063853828b6146107b85780638cb1d67f146107c05780638fc1708c146107e65780639137c1a714610822576103e6565b806336efd16f1161030557806353ceb01c1161029857806370a082311161026757806370a082311461077257806377c7b8fc146107985780637d7c2a1c146107a05780638129fc1c146107a857806382de9c1b146107b0576103e6565b806353ceb01c1461072e5780635aa6e675146107365780636e553f651461073e5780636f307dc31461076a576103e6565b80634af1758b116102d45780634af1758b146106c95780634cdad506146106d15780634ec81af1146106ee5780634fa5d85414610726576103e6565b806336efd16f1461064357806338d52e0f1461066f5780633950935114610677578063402d267d146106a3576103e6565b806318160ddd1161037d5780632e1a7d4d1161034c5780632e1a7d4d146105da578063313ce567146105f757806333a100ca1461061557806335d16e171461063b576103e6565b806318160ddd1461056e5780631bf8e7be1461057657806323b872dd1461057e5780632c62fa10146105b4576103e6565b806309ff18f0116103b957806309ff18f0146104df5780630a28a477146105035780630a6bbeb3146105205780630c80447a14610548576103e6565b806301e1d114146103eb57806306fdde031461040557806307a2d13a14610482578063095ea7b31461049f575b600080fd5b6103f3610ae2565b60408051918252519081900360200190f35b61040d610af2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044757818101518382015260200161042f565b50505050905090810190601f1680156104745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103f36004803603602081101561049857600080fd5b5035610b88565b6104cb600480360360408110156104b557600080fd5b506001600160a01b038135169060200135610c59565b604080519115158252519081900360200190f35b6104e7610c77565b604080516001600160a01b039092168252519081900360200190f35b6103f36004803603602081101561051957600080fd5b5035610c81565b6105466004803603602081101561053657600080fd5b50356001600160a01b0316610c8c565b005b6105466004803603602081101561055e57600080fd5b50356001600160a01b0316610e3e565b6103f3610f1f565b6103f3610f25565b6104cb6004803603606081101561059457600080fd5b506001600160a01b03813581169160208101359091169060400135610fcb565b6103f3600480360360208110156105ca57600080fd5b50356001600160a01b0316611053565b6103f3600480360360208110156105f057600080fd5b5035611076565b6105ff6111d3565b6040805160ff9092168252519081900360200190f35b6105466004803603602081101561062b57600080fd5b50356001600160a01b03166111dc565b6103f361166e565b6103f36004803603604081101561065957600080fd5b50803590602001356001600160a01b0316611686565b6104e76117e3565b6104cb6004803603604081101561068d57600080fd5b506001600160a01b0381351690602001356117ed565b6103f3600480360360208110156106b957600080fd5b50356001600160a01b031661183b565b6103f3611842565b6103f3600480360360208110156106e757600080fd5b503561184c565b6105466004803603608081101561070457600080fd5b506001600160a01b038135169060208101359060408101359060600135611857565b610546611949565b6103f3611b50565b6104e7611b5a565b6103f36004803603604081101561075457600080fd5b50803590602001356001600160a01b0316611bcd565b6104e7611d2d565b6103f36004803603602081101561078857600080fd5b50356001600160a01b0316611d37565b6103f3611d52565b610546611d98565b610546611eec565b6103f3611fa6565b610546611fb0565b6103f3600480360360208110156107d657600080fd5b50356001600160a01b0316612195565b610546600480360360808110156107fc57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356121ca565b6105466004803603602081101561083857600080fd5b50356001600160a01b0316612735565b6103f36004803603604081101561085e57600080fd5b50803590602001356001600160a01b031661285b565b61040d6129c6565b610546612a27565b61088c612e98565b6040805192151583526001600160a01b0390911660208301528051918290030190f35b6104cb600480360360408110156108c557600080fd5b506001600160a01b038135169060200135612ee4565b610546600480360360408110156108f157600080fd5b5080359060200135612f4c565b6103f36130a2565b6104e76130e4565b6104cb6004803603604081101561092457600080fd5b506001600160a01b0381351690602001356130ee565b6103f36004803603606081101561095057600080fd5b508035906001600160a01b0360208201358116916040013516613102565b6103f361326d565b6103f36004803603602081101561098c57600080fd5b5035613340565b6103f3600480360360608110156109a957600080fd5b508035906001600160a01b0360208201358116916040013516613482565b6103f36135e2565b6103f36135ec565b610546600480360360208110156109ed57600080fd5b50356001600160a01b0316613642565b6103f360048036036020811015610a1357600080fd5b50356136ed565b6103f360048036036020811015610a3057600080fd5b50356001600160a01b03166137a5565b6103f360048036036020811015610a5657600080fd5b50356001600160a01b03166137b0565b6103f360048036036040811015610a7c57600080fd5b506001600160a01b03813581169160200135166137bb565b6104e76137e6565b6105466137f0565b6103f3613946565b6104cb60048036036020811015610ac257600080fd5b50356001600160a01b031661394b565b6103f36139b7565b6104e76139c1565b6000610aec610f25565b90505b90565b60368054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b820191906000526020600020905b815481529060010190602001808311610b6157829003601f168201915b5050505050905090565b6000610b92610ae2565b1580610ba35750610ba1610f1f565b155b610bc657610baf610f1f565b610bb7610ae2565b830281610bc057fe5b04610c51565b610bce6111d3565b60ff16600a0a610bdc611d2d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1457600080fd5b505afa158015610c28573d6000803e3d6000fd5b505050506040513d6020811015610c3e57600080fd5b505160ff16600a0a830281610c4f57fe5b045b90505b919050565b6000610c6d610c66613a03565b8484613a07565b5060015b92915050565b6000610aec613af3565b6000610c51826136ed565b610c94613b1e565b6001600160a01b031663b429afeb336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ce057600080fd5b505afa158015610cf4573d6000803e3d6000fd5b505050506040513d6020811015610d0a57600080fd5b505180610d935750610d1a613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d6020811015610d9057600080fd5b50515b610dce5760405162461bcd60e51b815260040180806020018281038252602b8152602001806150af602b913960400191505060405180910390fd5b6000610de2610ddb6130a2565b4290613b43565b9050610ded81613b9d565b610df682613bc7565b604080516001600160a01b03841681526020810183905281517f7d5e1cfe55788983acd19d248da36a27c9413e8e43445ed36a76ae0e741a04ed929181900390910190a15050565b610e46613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e9257600080fd5b505afa158015610ea6573d6000803e3d6000fd5b505050506040513d6020811015610ebc57600080fd5b5051610f00576040805162461bcd60e51b815260206004820152600e60248201526d4e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b610f0981613bf1565b610f1c610f17610ddb6130a2565b613c1b565b50565b60355490565b600080610f306130e4565b6001600160a01b03161415610f4e57610f476135ec565b9050610aef565b610aec610f596130e4565b6001600160a01b03166345d01e4a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9157600080fd5b505afa158015610fa5573d6000803e3d6000fd5b505050506040513d6020811015610fbb57600080fd5b5051610fc56135ec565b90613b43565b6000610fd8848484613c45565b61104884610fe4613a03565b611043856040518060600160405280602881526020016152d3602891396001600160a01b038a16600090815260346020526040812090611022613a03565b6001600160a01b031681526020810191909152604001600020549190613da2565b613a07565b5060015b9392505050565b600061105d610f1f565b61106683611d37565b61106e610ae2565b0281610c4f57fe5b600061108f60008051602061520d833981519152613e39565b6110ce576040805162461bcd60e51b815260206004820152601f602482015260008051602061511f833981519152604482015290519081900360640190fd5b6110e760008051602061520d8339815191526000613e40565b3332148061117257506110f86139c1565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561114457600080fd5b505afa158015611158573d6000803e3d6000fd5b505050506040513d602081101561116e57600080fd5b5051155b6111ad5760405162461bcd60e51b815260040180806020018281038252602881526020018061522d6028913960400191505060405180910390fd5b6111b8823333613e44565b9050610c5460008051602061520d8339815191526001613e40565b60385460ff1690565b6111e4613b1e565b6001600160a01b031663b429afeb336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561123057600080fd5b505afa158015611244573d6000803e3d6000fd5b505050506040513d602081101561125a57600080fd5b5051806112e3575061126a613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112b657600080fd5b505afa1580156112ca573d6000803e3d6000fd5b505050506040513d60208110156112e057600080fd5b50515b61131e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806150af602b913960400191505060405180910390fd5b6113278161394b565b6113625760405162461bcd60e51b815260040180806020018281038252603a8152602001806152fb603a913960400191505060405180910390fd5b6001600160a01b0381166113bd576040805162461bcd60e51b815260206004820152601d60248201527f6e6577205f73747261746567792063616e6e6f7420626520656d707479000000604482015290519081900360640190fd5b6113c5611d2d565b6001600160a01b0316816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561140757600080fd5b505afa15801561141b573d6000803e3d6000fd5b505050506040513d602081101561143157600080fd5b50516001600160a01b0316146114785760405162461bcd60e51b815260040180806020018281038252602f815260200180615255602f913960400191505060405180910390fd5b306001600160a01b0316816001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114bb57600080fd5b505afa1580156114cf573d6000803e3d6000fd5b505050506040513d60208110156114e557600080fd5b50516001600160a01b03161461152c5760405162461bcd60e51b815260040180806020018281038252602a815260200180615183602a913960400191505060405180910390fd5b7f254c88e7a2ea123aeeb89b7cc413fb949188fefcdb7584c4f3d493294daf65c5816115566130e4565b60405180836001600160a01b03168152602001826001600160a01b031681526020019250505060405180910390a161158c6130e4565b6001600160a01b0316816001600160a01b0316146116665760006115ae6130e4565b6001600160a01b03161461163c576115e16115c76130e4565b60006115d1611d2d565b6001600160a01b03169190614110565b6115e96130e4565b6001600160a01b031663bfd131f16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561162357600080fd5b505af1158015611637573d6000803e3d6000fd5b505050505b61164581614228565b6116506115c76130e4565b61166661165b6130e4565b6000196115d1611d2d565b610f1c6137f0565b6000610aec61167b6111d3565b60ff16600a0a610b88565b600061169f60008051602061520d833981519152613e39565b6116de576040805162461bcd60e51b815260206004820152601f602482015260008051602061511f833981519152604482015290519081900360640190fd5b6116f760008051602061520d8339815191526000613e40565b3332148061178257506117086139c1565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d602081101561177e57600080fd5b5051155b6117bd5760405162461bcd60e51b815260040180806020018281038252602881526020018061522d6028913960400191505060405180910390fd5b6117c8833384614252565b9050610c7160008051602061520d8339815191526001613e40565b6000610aec611d2d565b6000610c6d6117fa613a03565b84611043856034600061180b613a03565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613b43565b5060001990565b6000610aec61446c565b6000610c5182610b88565b600054610100900460ff16806118705750611870614497565b8061187e575060005460ff16155b6118b95760405162461bcd60e51b815260040180806020018281038252602e815260200180615284602e913960400191505060405180910390fd5b600054610100900460ff161580156118e4576000805460ff1961ff0019909116610100171660011790555b6118ed856144a8565b6118f6846144d2565b6118ff836144fc565b61190882614526565b6119126000613b9d565b61191c6000613bc7565b6119266000614550565b611930600061457a565b8015611942576000805461ff00191690555b5050505050565b60006119536130e4565b6001600160a01b031614156119aa576040805162461bcd60e51b815260206004820152601860248201527714dd1c985d1959de481b5d5cdd081899481919599a5b995960421b604482015290519081900360640190fd5b6119b2613b1e565b6001600160a01b031663b429afeb336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b505180611ab15750611a38613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a8457600080fd5b505afa158015611a98573d6000803e3d6000fd5b505050506040513d6020811015611aae57600080fd5b50515b611aec5760405162461bcd60e51b815260040180806020018281038252602b8152602001806150af602b913960400191505060405180910390fd5b611af46145a4565b611afc6130e4565b6001600160a01b0316634fa5d8546040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b3657600080fd5b505af1158015611b4a573d6000803e3d6000fd5b50505050565b6000610aec614661565b6000611b64613b1e565b6001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9c57600080fd5b505afa158015611bb0573d6000803e3d6000fd5b505050506040513d6020811015611bc657600080fd5b5051905090565b6000611be660008051602061520d833981519152613e39565b611c25576040805162461bcd60e51b815260206004820152601f602482015260008051602061511f833981519152604482015290519081900360640190fd5b611c3e60008051602061520d8339815191526000613e40565b33321480611cc95750611c4f6139c1565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611c9b57600080fd5b505afa158015611caf573d6000803e3d6000fd5b505050506040513d6020811015611cc557600080fd5b5051155b611d045760405162461bcd60e51b815260040180806020018281038252602881526020018061522d6028913960400191505060405180910390fd5b6000611d11843385614252565b915050610c7160008051602061520d8339815191526001613e40565b6000610aec61468c565b6001600160a01b031660009081526033602052604090205490565b6000611d5c610f1f565b15611d9057611d8b611d6c610f1f565b611d85611d77610f25565b611d7f611b50565b906146b7565b90614710565b610aec565b610aec611b50565b611da0613b1e565b6001600160a01b031663b429afeb336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611dec57600080fd5b505afa158015611e00573d6000803e3d6000fd5b505050506040513d6020811015611e1657600080fd5b505180611e9f5750611e26613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611e7257600080fd5b505afa158015611e86573d6000803e3d6000fd5b505050506040513d6020811015611e9c57600080fd5b50515b611eda5760405162461bcd60e51b815260040180806020018281038252602b8152602001806150af602b913960400191505060405180910390fd5b611ee2611fb0565b611eea6145a4565b565b600054610100900460ff1680611f055750611f05614497565b80611f13575060005460ff16155b611f4e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615284602e913960400191505060405180910390fd5b600054610100900460ff16158015611f79576000805460ff1961ff0019909116610100171660011790555b611f9260008051602061520d8339815191526001613e40565b8015610f1c576000805461ff001916905550565b6000610aec614777565b611fb8613b1e565b6001600160a01b031663b429afeb336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561200457600080fd5b505afa158015612018573d6000803e3d6000fd5b505050506040513d602081101561202e57600080fd5b5051806120b7575061203e613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561208a57600080fd5b505afa15801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b50515b6120f25760405162461bcd60e51b815260040180806020018281038252602b8152602001806150af602b913960400191505060405180910390fd5b60006120fc6130e4565b6001600160a01b03161415612153576040805162461bcd60e51b815260206004820152601860248201527714dd1c985d1959de481b5d5cdd081899481919599a5b995960421b604482015290519081900360640190fd5b61215b6130e4565b6001600160a01b031663bfd131f16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b3657600080fd5b600061219f610f1f565b6121ab57506000610c54565b610c516121b6610f1f565b611d856121c285611d37565b611d7f610f25565b600054610100900460ff16806121e357506121e3614497565b806121f1575060005460ff16155b61222c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615284602e913960400191505060405180910390fd5b600054610100900460ff16158015612257576000805460ff1961ff0019909116610100171660011790555b818311156122ac576040805162461bcd60e51b815260206004820152601c60248201527f63616e6e6f7420696e76657374206d6f7265207468616e203130302500000000604482015290519081900360640190fd5b816122f3576040805162461bcd60e51b8152602060048201526012602482015271063616e6e6f742064697669646520627920360741b604482015290519081900360640190fd5b61262b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561232f57600080fd5b505afa158015612343573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561236c57600080fd5b8101908080516040519392919084600160201b82111561238b57600080fd5b9083019060208201858111156123a057600080fd5b8251600160201b8111828201881017156123b957600080fd5b82525081516020918201929091019080838360005b838110156123e65781810151838201526020016123ce565b50505050905090810190601f1680156124135780820380516001836020036101000a031916815260200191505b506040525050506040516020018080644641524d5f60d81b81525060050182805190602001908083835b6020831061245c5780518252601f19909201916020918201910161243d565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052856001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156124c957600080fd5b505afa1580156124dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561250657600080fd5b8101908080516040519392919084600160201b82111561252557600080fd5b90830190602082018581111561253a57600080fd5b8251600160201b81118282018810171561255357600080fd5b82525081516020918201929091019080838360005b83811015612580578181015183820152602001612568565b50505050905090810190601f1680156125ad5780820380516001836020036101000a031916815260200191505b506040525050506040516020018080603360f91b81525060010182805190602001908083835b602083106125f25780518252601f1990920191602091820191016125d3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526147a2565b612698846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561266757600080fd5b505afa15801561267b573d6000803e3d6000fd5b505050506040513d602081101561269157600080fd5b5051614857565b6126a185613642565b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156126dc57600080fd5b505afa1580156126f0573d6000803e3d6000fd5b505050506040513d602081101561270657600080fd5b505160ff16600a0a905061271c85858584611857565b508015611942576000805461ff00191690555050505050565b61273d613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561278957600080fd5b505afa15801561279d573d6000803e3d6000fd5b505050506040513d60208110156127b357600080fd5b50516127f7576040805162461bcd60e51b815260206004820152600e60248201526d4e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6001600160a01b038116612852576040805162461bcd60e51b815260206004820152601e60248201527f6e65772073746f726167652073686f756c646e277420626520656d7074790000604482015290519081900360640190fd5b610f1c8161486d565b600061287460008051602061520d833981519152613e39565b6128b3576040805162461bcd60e51b815260206004820152601f602482015260008051602061511f833981519152604482015290519081900360640190fd5b6128cc60008051602061520d8339815191526000613e40565b3332148061295757506128dd6139c1565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561292957600080fd5b505afa15801561293d573d6000803e3d6000fd5b505050506040513d602081101561295357600080fd5b5051155b6129925760405162461bcd60e51b815260040180806020018281038252602881526020018061522d6028913960400191505060405180910390fd5b600061299d84610b88565b90506129aa813385614252565b509050610c7160008051602061520d8339815191526001613e40565b60378054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b612a2f613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612a7b57600080fd5b505afa158015612a8f573d6000803e3d6000fd5b505050506040513d6020811015612aa557600080fd5b5051612ae9576040805162461bcd60e51b815260206004820152600e60248201526d4e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b612af36000613bf1565b612afd6000613c1b565b600160008051602061520d83398151915255612e55612b1a611d2d565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612b5257600080fd5b505afa158015612b66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b8f57600080fd5b8101908080516040519392919084600160201b821115612bae57600080fd5b908301906020820185811115612bc357600080fd5b8251600160201b811182820188101715612bdc57600080fd5b82525081516020918201929091019080838360005b83811015612c09578181015183820152602001612bf1565b50505050905090810190601f168015612c365780820380516001836020036101000a031916815260200191505b506040525050506040516020018080644641524d5f60d81b81525060050182805190602001908083835b60208310612c7f5780518252601f199092019160209182019101612c60565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052612cbb611d2d565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612cf357600080fd5b505afa158015612d07573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d3057600080fd5b8101908080516040519392919084600160201b821115612d4f57600080fd5b908301906020820185811115612d6457600080fd5b8251600160201b811182820188101715612d7d57600080fd5b82525081516020918201929091019080838360005b83811015612daa578181015183820152602001612d92565b50505050905090810190601f168015612dd75780820380516001836020036101000a031916815260200191505b506040525050506040516020018080603360f91b81525060010182805190602001908083835b60208310612e1c5780518252601f199092019160209182019101612dfd565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052614891565b611eea612e60611d2d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561266757600080fd5b600080612ea3611fa6565b15801590612eb75750612eb4611fa6565b42115b8015612ed457506000612ec8610c77565b6001600160a01b031614155b612edc610c77565b915091509091565b6000610c6d612ef1613a03565b84611043856040518060600160405280602581526020016154246025913960346000612f1b613a03565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613da2565b612f54613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612fa057600080fd5b505afa158015612fb4573d6000803e3d6000fd5b505050506040513d6020811015612fca57600080fd5b505161300e576040805162461bcd60e51b815260206004820152600e60248201526d4e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6000811161304d5760405162461bcd60e51b81526004018080602001828103825260228152602001806150fd6022913960400191505060405180910390fd5b8082111561308c5760405162461bcd60e51b815260040180806020018281038252603a8152602001806151ad603a913960400191505060405180910390fd5b613095826144d2565b61309e816144fc565b5050565b60006130ac6139c1565b6001600160a01b031663a83656936040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9c57600080fd5b6000610aec6148ca565b6000610c6d6130fb613a03565b8484613c45565b600061311b60008051602061520d833981519152613e39565b61315a576040805162461bcd60e51b815260206004820152601f602482015260008051602061511f833981519152604482015290519081900360640190fd5b61317360008051602061520d8339815191526000613e40565b333214806131fe57506131846139c1565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156131d057600080fd5b505afa1580156131e4573d6000803e3d6000fd5b505050506040513d60208110156131fa57600080fd5b5051155b6132395760405162461bcd60e51b815260040180806020018281038252602881526020018061522d6028913960400191505060405180910390fd5b6000613244856136ed565b9050613251818585613e44565b50905061104c60008051602061520d8339815191526001613e40565b60008061328661327b6139b7565b611d856121c2611842565b905060006132926130e4565b6001600160a01b03166345d01e4a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132ca57600080fd5b505afa1580156132de573d6000803e3d6000fd5b505050506040513d60208110156132f457600080fd5b5051905081811061330a57600092505050610aef565b600061331683836148f5565b90506133206135ec565b8111156133345761332f6135ec565b613336565b805b9350505050610aef565b600061335960008051602061520d833981519152613e39565b613398576040805162461bcd60e51b815260206004820152601f602482015260008051602061511f833981519152604482015290519081900360640190fd5b6133b160008051602061520d8339815191526000613e40565b3332148061343c57506133c26139c1565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561340e57600080fd5b505afa158015613422573d6000803e3d6000fd5b505050506040513d602081101561343857600080fd5b5051155b6134775760405162461bcd60e51b815260040180806020018281038252602881526020018061522d6028913960400191505060405180910390fd5b6111b8823333614252565b600061349b60008051602061520d833981519152613e39565b6134da576040805162461bcd60e51b815260206004820152601f602482015260008051602061511f833981519152604482015290519081900360640190fd5b6134f360008051602061520d8339815191526000613e40565b3332148061357e57506135046139c1565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561355057600080fd5b505afa158015613564573d6000803e3d6000fd5b505050506040513d602081101561357a57600080fd5b5051155b6135b95760405162461bcd60e51b815260040180806020018281038252602881526020018061522d6028913960400191505060405180910390fd5b60006135c6858585613e44565b91505061104c60008051602061520d8339815191526001613e40565b6000610aec614952565b60006135f6611d2d565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611b9c57600080fd5b600054610100900460ff168061365b575061365b614497565b80613669575060005460ff16155b6136a45760405162461bcd60e51b815260040180806020018281038252602e815260200180615284602e913960400191505060405180910390fd5b600054610100900460ff161580156136cf576000805460ff1961ff0019909116610100171660011790555b6136d88261497d565b801561309e576000805461ff00191690555050565b60006136f7610ae2565b15806137085750613706610f1f565b155b61371c57613714610ae2565b610bb7610f1f565b613724611d2d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561375c57600080fd5b505afa158015613770573d6000803e3d6000fd5b505050506040513d602081101561378657600080fd5b505160ff16600a0a6137966111d3565b60ff16600a0a830281610c4f57fe5b6000610c5182611053565b6000610c5182611d37565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6000610aec614a1b565b6137f8613b1e565b6001600160a01b031663b429afeb336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561384457600080fd5b505afa158015613858573d6000803e3d6000fd5b505050506040513d602081101561386e57600080fd5b5051806138f7575061387e613b1e565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138ca57600080fd5b505afa1580156138de573d6000803e3d6000fd5b505050506040513d60208110156138f457600080fd5b50515b6139325760405162461bcd60e51b815260040180806020018281038252602b8152602001806150af602b913960400191505060405180910390fd5b61393c6000613b9d565b611eea6000613bc7565b600a81565b600080806139576130e4565b6001600160a01b0316149050600061396d6135e2565b42118015613981575061397e6135e2565b15155b905081806139af57506139926137e6565b6001600160a01b0316846001600160a01b03161480156139af5750805b949350505050565b6000610aec614a46565b60006139cb613b1e565b6001600160a01b031663f77c47916040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9c57600080fd5b3390565b6001600160a01b038316613a4c5760405162461bcd60e51b81526004018080602001828103825260248152602001806153a06024913960400191505060405180910390fd5b6001600160a01b038216613a915760405162461bcd60e51b81526004018080602001828103825260228152602001806151616022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610aec7fb1acf527cd7cd1668b30e5a9a1c0d845714604de29ce560150922c9d8c0937df614a6d565b7fa7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dc5490565b60008282018381101561104c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b610f1c7f5d2b24811886ad126f78c499d71a932a5435795e4f2f6552f0900f12d663cdcf82613e40565b610f1c7fcd7bd9250b0e02f3b13eccf8c73ef5543cb618e0004628f9ca53b65fbdbde2d082613e40565b610f1c7fb1acf527cd7cd1668b30e5a9a1c0d845714604de29ce560150922c9d8c0937df82613e40565b610f1c7f3bc747f4b148b37be485de3223c90b4468252967d2ea7f9fcbd8b6e653f434c982613e40565b6001600160a01b038316613c8a5760405162461bcd60e51b815260040180806020018281038252602581526020018061537b6025913960400191505060405180910390fd5b6001600160a01b038216613ccf5760405162461bcd60e51b81526004018080602001828103825260238152602001806150da6023913960400191505060405180910390fd5b613cda838383614223565b613d17816040518060600160405280602681526020016151e7602691396001600160a01b0386166000908152603360205260409020549190613da2565b6001600160a01b038085166000908152603360205260408082209390935590841681522054613d469082613b43565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115613e315760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613df6578181015183820152602001613dde565b50505050905090810190601f168015613e235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b5460011490565b9055565b600080613e4f610f1f565b11613e97576040805162461bcd60e51b81526020600482015260136024820152725661756c7420686173206e6f2073686172657360681b604482015290519081900360640190fd5b60008411613ed65760405162461bcd60e51b81526004018080602001828103825260258152602001806153356025913960400191505060405180910390fd5b6000613ee0610f1f565b9050336001600160a01b0384168114613f58576000613eff85836137bb565b90506000198114613f565786811015613f495760405162461bcd60e51b81526004018080602001828103825260288152602001806152d36028913960400191505060405180910390fd5b613f568583898403613a07565b505b613f628487614a71565b6000613f7483611d8589611d7f610f25565b9050613f7e6135ec565b81111561408c5782871415613fec57613f956130e4565b6001600160a01b031663bfd131f16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fcf57600080fd5b505af1158015613fe3573d6000803e3d6000fd5b50505050614069565b6000614000613ff96135ec565b83906148f5565b905061400a6130e4565b6001600160a01b031663ce8c42e8826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561404f57600080fd5b505af1158015614063573d6000803e3d6000fd5b50505050505b61408961407c84611d858a611d7f610f25565b6140846135ec565b614b6d565b90505b6140a98682614099611d2d565b6001600160a01b03169190614b83565b846001600160a01b0316866001600160a01b0316836001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848b604051808381526020018281526020019250505060405180910390a49695505050505050565b801580614196575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561416857600080fd5b505afa15801561417c573d6000803e3d6000fd5b505050506040513d602081101561419257600080fd5b5051155b6141d15760405162461bcd60e51b81526004018080602001828103825260368152602001806153ee6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052614223908490614bd1565b505050565b610f1c7ff1a169aa0f736c2813818fdfbdc5755c31e0839c8f49831a16543496b28574ea82613e40565b600080841161429b576040805162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206465706f73697420360841b604482015290519081900360640190fd5b6001600160a01b0382166142ef576040805162461bcd60e51b81526020600482015260166024820152751a1bdb19195c881b5d5cdd081899481919599a5b995960521b604482015290519081900360640190fd5b60006142f96130e4565b6001600160a01b0316146143b35761430f6130e4565b6001600160a01b031663c2a2a07b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561434757600080fd5b505afa15801561435b573d6000803e3d6000fd5b505050506040513d602081101561437157600080fd5b50516143b3576040805162461bcd60e51b815260206004820152600c60248201526b2a37b79036bab1b41030b93160a11b604482015290519081900360640190fd5b60006143bd610f1f565b156143e4576143df6143cd610f25565b611d856143d8610f1f565b88906146b7565b6143e6565b845b90506143f28382614c82565b614411843087614400611d2d565b6001600160a01b0316929190614d74565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78784604051808381526020018281526020019250505060405180910390a3949350505050565b6000610aec7f39122c9adfb653455d0c05043bd52fcfbc2be864e832efd3abc72ce5a3d7ed5a614a6d565b60006144a230614dce565b15905090565b610f1c7f1994607607e11d53306ef62e45e3bd85762c58d9bf38b5578bc4a258a26a737182613e40565b610f1c7f39122c9adfb653455d0c05043bd52fcfbc2be864e832efd3abc72ce5a3d7ed5a82613e40565b610f1c7f469a3bad2fab7b936c45eecd1f5da52af89cead3e2ed7f732b6f3fc92ed3230882613e40565b610f1c7fa66bc57d4b4eed7c7687876ca77997588987307cb13ecc23f5e52725192e5fff82613e40565b610f1c7f22f7033891e85fc76735ebd320e0d3f546da431c4729c2f6d2613b11923aaaed82614dd4565b610f1c7f4215fbb95dc0890d3e1660fb9089350f2d3f350c0a756934874cae6febf42a7982614dd4565b60006145ae6130e4565b6001600160a01b03161415614605576040805162461bcd60e51b815260206004820152601860248201527714dd1c985d1959de481b5d5cdd081899481919599a5b995960421b604482015290519081900360640190fd5b600061460f61326d565b90508015610f1c5761462b6146226130e4565b82614099611d2d565b6040805182815290517fa09b7ae452b7bffb9e204c3a016e80caeecf46f554d112644f36fa114dac6ffa9181900360200190a150565b6000610aec7fa66bc57d4b4eed7c7687876ca77997588987307cb13ecc23f5e52725192e5fff614a6d565b6000610aec7f1994607607e11d53306ef62e45e3bd85762c58d9bf38b5578bc4a258a26a7371614a6d565b6000826146c657506000610c71565b828202828482816146d357fe5b041461104c5760405162461bcd60e51b81526004018080602001828103825260218152602001806152b26021913960400191505060405180910390fd5b6000808211614766576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161476f57fe5b049392505050565b6000610aec7f3bc747f4b148b37be485de3223c90b4468252967d2ea7f9fcbd8b6e653f434c9614a6d565b600054610100900460ff16806147bb57506147bb614497565b806147c9575060005460ff16155b6148045760405162461bcd60e51b815260040180806020018281038252602e815260200180615284602e913960400191505060405180910390fd5b600054610100900460ff1615801561482f576000805460ff1961ff0019909116610100171660011790555b614837614def565b6148418383614891565b8015614223576000805461ff0019169055505050565b6038805460ff191660ff92909216919091179055565b7fa7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dc55565b81516148a490603690602085019061501b565b5080516148b890603790602084019061501b565b50506038805460ff1916601217905550565b6000610aec7ff1a169aa0f736c2813818fdfbdc5755c31e0839c8f49831a16543496b28574ea614a6d565b60008282111561494c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000610aec7f5d2b24811886ad126f78c499d71a932a5435795e4f2f6552f0900f12d663cdcf614a6d565b600054610100900460ff16806149965750614996614497565b806149a4575060005460ff16155b6149df5760405162461bcd60e51b815260040180806020018281038252602e815260200180615284602e913960400191505060405180910390fd5b600054610100900460ff16158015614a0a576000805460ff1961ff0019909116610100171660011790555b614a138261486d565b6136d8611eec565b6000610aec7fcd7bd9250b0e02f3b13eccf8c73ef5543cb618e0004628f9ca53b65fbdbde2d0614a6d565b6000610aec7f469a3bad2fab7b936c45eecd1f5da52af89cead3e2ed7f732b6f3fc92ed323085b5490565b6001600160a01b038216614ab65760405162461bcd60e51b815260040180806020018281038252602181526020018061535a6021913960400191505060405180910390fd5b614ac282600083614223565b614aff8160405180606001604052806022815260200161513f602291396001600160a01b0385166000908152603360205260409020549190613da2565b6001600160a01b038316600090815260336020526040902055603554614b2590826148f5565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000818310614b7c578161104c565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526142239084905b6060614c26826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614e8f9092919063ffffffff16565b80519091501561422357808060200190516020811015614c4557600080fd5b50516142235760405162461bcd60e51b815260040180806020018281038252602a8152602001806153c4602a913960400191505060405180910390fd5b6001600160a01b038216614cdd576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b614ce960008383614223565b603554614cf69082613b43565b6035556001600160a01b038216600090815260336020526040902054614d1c9082613b43565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611b4a908590614bd1565b3b151590565b61309e8282614de4576000614de7565b60015b60ff16613e40565b600054610100900460ff1680614e085750614e08614497565b80614e16575060005460ff16155b614e515760405162461bcd60e51b815260040180806020018281038252602e815260200180615284602e913960400191505060405180910390fd5b600054610100900460ff16158015611f92576000805460ff1961ff0019909116610100171660011790558015610f1c576000805461ff001916905550565b60606139af848460008585614ea385614dce565b614ef4576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310614f335780518252601f199092019160209182019101614f14565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614f95576040519150601f19603f3d011682016040523d82523d6000602084013e614f9a565b606091505b5091509150614faa828286614fb5565b979650505050505050565b60608315614fc457508161104c565b825115614fd45782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315613df6578181015183820152602001613dde565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061505c57805160ff1916838001178555615089565b82800160010185558215615089579182015b8281111561508957825182559160200191906001019061506e565b50615095929150615099565b5090565b5b80821115615095576000815560010161509a56fe5468652063616c6c6572206d75737420626520636f6e74726f6c6c6572206f7220676f7665726e616e636545524332303a207472616e7366657220746f20746865207a65726f206164647265737364656e6f6d696e61746f72206d7573742062652067726561746572207468616e20305265656e7472616e637947756172643a207265656e7472616e742063616c6c0045524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737374686520737472617465677920646f6573206e6f742062656c6f6e6720746f2074686973207661756c7464656e6f6d696e61746f72206d7573742062652067726561746572207468616e206f7220657175616c20746f20746865206e756d657261746f7245524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636562ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe255468697320736d61727420636f6e747261637420686173206265656e2067726579206c69737465645661756c7420756e6465726c79696e67206d757374206d6174636820537472617465677920756e6465726c79696e67496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655468652073747261746567792065786973747320616e64207377697463682074696d656c6f636b20646964206e6f7420656c61707365207965746e756d6265724f66536861726573206d7573742062652067726561746572207468616e203045524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca0f425f578e108b1029be4f34a5fc346d4c7be0b1b947e54c330e6e7fbd748264736f6c634300060c0033