[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_depositToken", "type": "address" }, { "internalType": "address", "name": "_swapPairDepositToken", "type": "address" }, { "components": [ { "internalType": "address", "name": "reward", "type": "address" }, { "internalType": "address", "name": "swapPair", "type": "address" } ], "internalType": "struct VariableRewardsStrategy.RewardSwapPairs[]", "name": "_rewardSwapPairs", "type": "tuple[]" }, { "internalType": "address", "name": "_stakingContract", "type": "address" }, { "internalType": "address", "name": "_boosterFeeCollector", "type": "address" }, { "internalType": "address", "name": "_timelock", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "minTokensToReinvest", "type": "uint256" }, { "internalType": "uint256", "name": "adminFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "devFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "reinvestRewardBips", "type": "uint256" } ], "internalType": "struct VariableRewardsStrategy.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "swapPair", "type": "address" } ], "name": "AddReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AllowDepositor", "type": "event" }, { "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": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "DepositsEnabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newTotalDeposits", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "Reinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "RemoveDepositor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "RemoveReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateAdminFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateDevAddr", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateDevFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMaxTokensToDepositWithoutReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMinTokensToReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateReinvestReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "ADMIN_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEPOSITS_ENABLED", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEV_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TOKENS_TO_DEPOSIT_WITHOUT_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_TOKENS_TO_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REINVEST_REWARD_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION_HASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_swapPair", "type": "address" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "allowDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowedDepositors", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "boosterFeeCollector", "outputs": [ { "internalType": "contract IBoosterFeeCollector", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateDepositFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateWithdrawFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkReward", "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": "_amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" }, { "internalType": "uint8", "name": "_v", "type": "uint8" }, { "internalType": "bytes32", "name": "_r", "type": "bytes32" }, { "internalType": "bytes32", "name": "_s", "type": "bytes32" } ], "name": "depositWithPermit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "devAddr", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateDeployedBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateReinvestReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getDepositTokensForShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getSharesForDepositTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numberOfAllowedDepositors", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverAVAX", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "removeDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "removeReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minReturnAmountAccepted", "type": "uint256" }, { "internalType": "bool", "name": "", "type": "bool" } ], "name": "rescueDeployedFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "revokeAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardSwapPairs", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setAllowances", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedRewards", "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": "totalDeposits", "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": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateAdminFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_collector", "type": "address" } ], "name": "updateBoosterFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "updateDepositsEnabled", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newValue", "type": "address" } ], "name": "updateDevAddr", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateDevFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMaxTokensToDepositWithoutReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMinTokensToReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateReinvestReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vectorMainStaking", "outputs": [ { "internalType": "contract IVectorMainStaking", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60e0604052600960a0819052685969656c642059616b60b81b60c09081526200002c916000919062000b08565b506040805180820190915260038082526216549560ea1b6020909201918252620000599160019162000b08565b503480156200006757600080fd5b5060405162005f6e38038062005f6e8339810160408190526200008a9162000d28565b87878787858585858484846000620000a162000294565b600680546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005f4e833981519152908290a3508451620000f390600090602088019062000b08565b50600980546001600160a01b0386166001600160a01b031991821617909155600a8054821673b31f66aa3c1e785363f0875a1b74e27b85fd66c7179055600b8054909116732d580f9cf2fb2d09bc411532988f2afda4e7beff17905560005b8351811015620001a7576200019e8482815181106200016d57fe5b6020026020010151600001518583815181106200018657fe5b6020026020010151602001516200029860201b60201c565b60010162000152565b508051620001b590620003cc565b6020810151620001c59062000454565b6040810151620001d59062000522565b6060810151620001e590620005dc565b620001f1600162000696565b620001fc826200073e565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346000806040516200023092919062000e94565b60405180910390a150505050506200024e84620007f860201b60201c565b505050505060609490941b6001600160601b0319166080525050601680546001600160a01b0319166001600160a01b039290921691909117905550620010599350505050565b3390565b600a546001600160a01b038381169116146200030357620002db8183600a60009054906101000a90046001600160a01b03166200086560201b620020511760201c565b620003035760405162461bcd60e51b8152600401620002fa9062000ea2565b60405180910390fd5b6001600160a01b038083166000818152601260209081526040822080549486166001600160a01b03199586161790556013805460018181018355919093527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090909201805490941690921790925560145462000389929091620022a262000aca821b17901c565b6014556040517f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f8090620003c0908490849062000e6f565b60405180910390a15050565b620003d662000294565b6001600160a01b0316620003e962000af9565b6001600160a01b031614620004125760405162461bcd60e51b8152600401620002fa9062001000565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c54826040516200044792919062000e94565b60405180910390a1600c55565b6200045e62000294565b6001600160a01b03166200047162000af9565b6001600160a01b0316146200049a5760405162461bcd60e51b8152600401620002fa9062001000565b612710620004d4600f54620004c06011548562000aca60201b620022a21790919060201c565b62000aca60201b620022a21790919060201c565b1115620004e057600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a601054826040516200051592919062000e94565b60405180910390a1601055565b6200052c62000294565b6001600160a01b03166200053f62000af9565b6001600160a01b031614620005685760405162461bcd60e51b8152600401620002fa9062001000565b6127106200058e600f54620004c06010548562000aca60201b620022a21790919060201c565b11156200059a57600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051620005cf92919062000e94565b60405180910390a1601155565b620005e662000294565b6001600160a01b0316620005f962000af9565b6001600160a01b031614620006225760405162461bcd60e51b8152600401620002fa9062001000565b61271062000648601154620004c06010548562000aca60201b620022a21790919060201c565b11156200065457600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f54826040516200068992919062000e94565b60405180910390a1600f55565b620006a062000294565b6001600160a01b0316620006b362000af9565b6001600160a01b031614620006dc5760405162461bcd60e51b8152600401620002fa9062001000565b600e5460ff1615158115151415620006f357600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906200073390839062000e89565b60405180910390a150565b6200074862000294565b6001600160a01b03166200075b62000af9565b6001600160a01b031614620007845760405162461bcd60e51b8152600401620002fa9062001000565b6001600160a01b038116620007ad5760405162461bcd60e51b8152600401620002fa9062000f00565b6006546040516001600160a01b0380841692169060008051602062005f4e83398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600954600a54620008249183916001600160a01b03918216911662000865602090811b6200205117901c565b620008435760405162461bcd60e51b8152600401620002fa9062000f7d565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620008a157600080fd5b505afa158015620008b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008dc919062000d0b565b6001600160a01b0316836001600160a01b03161480620009815750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200093157600080fd5b505afa15801562000946573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096c919062000d0b565b6001600160a01b0316836001600160a01b0316145b801562000aa35750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620009c357600080fd5b505afa158015620009d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009fe919062000d0b565b6001600160a01b0316826001600160a01b0316148062000aa35750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a5357600080fd5b505afa15801562000a68573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a8e919062000d0b565b6001600160a01b0316826001600160a01b0316145b801562000ac25750816001600160a01b0316836001600160a01b031614155b949350505050565b60008282018381101562000af25760405162461bcd60e51b8152600401620002fa9062000f46565b9392505050565b6006546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000b4b57805160ff191683800117855562000b7b565b8280016001018555821562000b7b579182015b8281111562000b7b57825182559160200191906001019062000b5e565b5062000b8992915062000b8d565b5090565b5b8082111562000b89576000815560010162000b8e565b80516001600160a01b038116811462000bbc57600080fd5b919050565b600082601f83011262000bd2578081fd5b81516001600160401b0381111562000be657fe5b602062000bf7818284020162001035565b828152925080830184820160408085028701840188101562000c1857600080fd5b60005b8581101562000c435762000c30898462000c4f565b8452928401929181019160010162000c1b565b50505050505092915050565b60006040828403121562000c61578081fd5b604080519081016001600160401b038111828210171562000c7e57fe5b60405290508062000c8f8362000ba4565b815262000c9f6020840162000ba4565b60208201525092915050565b60006080828403121562000cbd578081fd5b604051608081016001600160401b038111828210171562000cda57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201525092915050565b60006020828403121562000d1d578081fd5b62000af28262000ba4565b600080600080600080600080610160898b03121562000d45578384fd5b88516001600160401b038082111562000d5c578586fd5b818b0191508b601f83011262000d70578586fd5b81518181111562000d7d57fe5b602062000d93601f8301601f1916820162001035565b8281528e8284870101111562000da7578889fd5b885b8381101562000dc657858101830151828201840152820162000da9565b8381111562000dd757898385840101525b509b5062000de78d820162000ba4565b9a50505062000df960408c0162000ba4565b975060608b015191508082111562000e0f578586fd5b5062000e1e8b828c0162000bc1565b95505062000e2f60808a0162000ba4565b935062000e3f60a08a0162000ba4565b925062000e4f60c08a0162000ba4565b915062000e608a60e08b0162000cab565b90509295985092959890939650565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b918252602082015260400190565b602080825260409082018190527f5661726961626c655265776172647353747261746567793a3a53776170207061908201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252605a908201527f5661726961626c65526577617264735374726174656779466f7253413a3a737760408201527f6170506169724465706f736974546f6b656e20646f6573206e6f74206d61746360608201527f68206465706f73697420616e642072657761726420746f6b656e000000000000608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040518181016001600160401b03811182821017156200105157fe5b604052919050565b60805160601c614ed26200107c6000398061100a5280612a7b5250614ed26000f3fe608060405234801561001057600080fd5b50600436106103d05760003560e01c80638980f11f116101ff578063bd079f551161011a578063dd8ce4d6116100ad578063ed24911d1161007c578063ed24911d14610764578063f2fde38b1461076c578063f7c618c11461077f578063fdb5a03e14610787576103d0565b8063dd8ce4d614610718578063e21ac8251461072b578063e75ab0451461073e578063eab89a5a14610751576103d0565b8063d505accf116100e9578063d505accf146106e2578063da09c72c146106f5578063dbd9a4d4146106fd578063dd62ed3e14610705576103d0565b8063bd079f55146106b7578063c4b24a46146106bf578063c89039c5146106c7578063cff1b6ef146106cf576103d0565b8063a4d5e67c11610192578063ac0d31ff11610161578063ac0d31ff14610681578063b52a321f14610694578063b6b55f251461069c578063b9e57b80146106af576103d0565b8063a4d5e67c14610635578063a5534e7114610648578063a8ae2b7c1461065b578063a9059cbb1461066e576103d0565b80639291d563116101ce5780639291d563146105ff57806395d89b411461061257806399729ec11461061a5780639e4e73181461062d576103d0565b80638980f11f146105c95780638aff733d146105dc5780638b73e606146105e45780638da5cb5b146105f7576103d0565b8063483c2ef0116102ef578063715018a6116102825780637d882097116102515780637d882097146105935780637e08c1851461059b5780637ecebe00146105a357806381837230146105b6576103d0565b8063715018a614610568578063789139bc1461057057806379085425146105785780637ae2677314610580576103d0565b80634ebb7916116102be5780634ebb7916146105275780635ea682ea1461053a5780636c8b4b521461054257806370a0823114610555576103d0565b8063483c2ef0146104db5780634a970be7146104ee5780634bebd1e7146105015780634e77ace514610514576103d0565b806323b872dd1161036757806330adf81f1161033657806330adf81f146104a3578063313ce567146104ab5780633bdc6e72146104c057806340b47e1a146104c8576103d0565b806323b872dd14610468578063247d284b146104455780632e1a7d4d1461047b5780632f4f21e214610490576103d0565b80630fccc400116103a35780630fccc40014610430578063110560351461044557806318160ddd1461045857806320606b7014610460576103d0565b806306fdde03146103d557806307677111146103f3578063095ea7b3146104085780630f23475d14610428575b600080fd5b6103dd61078f565b6040516103ea91906144eb565b60405180910390f35b6103fb61081d565b6040516103ea9190614464565b61041b6104163660046140ac565b610823565b6040516103ea9190614459565b6103fb61083a565b610438610866565b6040516103ea91906143ad565b6103fb61045336600461415d565b610875565b6103fb610888565b6103fb61088e565b61041b610476366004613fff565b6108b2565b61048e61048936600461415d565b61099b565b005b61048e61049e3660046140ac565b610a5d565b6103fb610a6b565b6104b3610a8f565b6040516103ea9190614d94565b6103fb610a94565b61048e6104d6366004613fc7565b610a9a565b61041b6104e9366004613f8f565b610ace565b61048e6104fc366004614279565b610ae3565b61048e61050f366004613f8f565b610b7b565b61048e6105223660046140d7565b610c5f565b61048e61053536600461415d565b610cfd565b6103fb610da9565b61048e610550366004613f8f565b610daf565b6103fb610563366004613f8f565b610e10565b61048e610e2b565b6103fb610eb4565b6103fb610eba565b61048e61058e366004613fc7565b610ec0565b6103fb610f89565b610438611008565b6103fb6105b1366004613f8f565b61102c565b61048e6105c436600461415d565b61103e565b61048e6105d73660046140ac565b6110bd565b6103fb6111cf565b61048e6105f2366004613f8f565b6111d5565b6104386112db565b61048e61060d366004613f8f565b6112ea565b6103dd61137d565b61048e61062836600461415d565b6113d7565b6103fb611485565b61048e610643366004613f8f565b6114a9565b610438610656366004613f8f565b611630565b61048e61066936600461415d565b61164b565b61041b61067c3660046140ac565b6116f3565b61048e61068f36600461418d565b611700565b61041b6118d8565b61048e6106aa36600461415d565b6118e1565b6103fb6118ee565b6103fb611935565b6103fb61193b565b610438611bb1565b61048e6106dd36600461415d565b611bc0565b61048e6106f036600461403f565b611c68565b610438611d1d565b61048e611d2c565b6103fb610713366004613fc7565b611d83565b6103fb61072636600461415d565b611dae565b61048e61073936600461415d565b611de8565b61043861074c36600461415d565b611e67565b6103fb61075f36600461415d565b611e8e565b6103fb611ebf565b61048e61077a366004613f8f565b611f56565b610438612017565b61048e612026565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505081565b60105481565b60006108303384846122c7565b5060015b92915050565b600080610845610f89565b905060006108528261237b565b905061085e828261239d565b925050505b90565b6016546001600160a01b031681565b60006108808261237b565b90505b919050565b60025481565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6001600160a01b0383166000818152600360209081526040808320338085529252822054919290919082148015906108ec57506000198114155b15610982576000610918856040518060600160405280602f8152602001614e19602f91398491906123db565b6001600160a01b03808916600081815260036020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610978908590614464565b60405180910390a3505b61098d868686612407565b6001925050505b9392505050565b60006109a682611e8e565b9050600081116109d15760405162461bcd60e51b81526004016109c8906144fe565b60405180910390fd5b60006109dc826124eb565b905060006109e98361237b565b9050610a0c336109f9848461239d565b6009546001600160a01b03169190612669565b610a1633856126f1565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610a4f9190614464565b60405180910390a250505050565b610a6782826127cb565b5050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60075481565b600b546001600160a01b03163314610ac45760405162461bcd60e51b81526004016109c890614b00565b610a678282612949565b60086020526000908152604090205460ff1681565b6009546040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d505accf90610b3890339030908a908a908a908a908a906004016143e5565b600060405180830381600087803b158015610b5257600080fd5b505af1158015610b66573d6000803e3d6000fd5b50505050610b7433866127cb565b5050505050565b610b83612a3f565b6001600160a01b0316610b946112db565b6001600160a01b031614610bba5760405162461bcd60e51b81526004016109c890614a00565b6001600160a01b03811660009081526008602052604090205460ff1615610bf35760405162461bcd60e51b81526004016109c8906147f8565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610c25916122a2565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b610c67612a3f565b6001600160a01b0316610c786112db565b6001600160a01b031614610c9e5760405162461bcd60e51b81526004016109c890614a00565b600e5460ff1615158115151415610cb457600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590610cf2908390614459565b60405180910390a150565b610d05612a3f565b6001600160a01b0316610d166112db565b6001600160a01b031614610d3c5760405162461bcd60e51b81526004016109c890614a00565b60008111610d4957600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610d76573d6000803e3d6000fd5b507f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28600082604051610cf2929190614426565b60115481565b610db7612a3f565b6001600160a01b0316610dc86112db565b6001600160a01b031614610dee5760405162461bcd60e51b81526004016109c890614a00565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526004602052604090205490565b610e33612a3f565b6001600160a01b0316610e446112db565b6001600160a01b031614610e6a5760405162461bcd60e51b81526004016109c890614a00565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600d5481565b60145481565b610ec8612a3f565b6001600160a01b0316610ed96112db565b6001600160a01b031614610eff5760405162461bcd60e51b81526004016109c890614a00565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f2e908490600090600401614426565b602060405180830381600087803b158015610f4857600080fd5b505af1158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8091906140f3565b610a6757600080fd5b6000610f93612a43565b6001600160a01b031663cee7b7d26040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcb57600080fd5b505afa158015610fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110039190614175565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60056020526000908152604090205481565b611046612a3f565b6001600160a01b03166110576112db565b6001600160a01b03161461107d5760405162461bcd60e51b81526004016109c890614a00565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c54826040516110b0929190614d4e565b60405180910390a1600c55565b6110c5612a3f565b6001600160a01b03166110d66112db565b6001600160a01b0316146110fc5760405162461bcd60e51b81526004016109c890614a00565b6000811161110957600080fd5b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906111379033908590600401614426565b602060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118991906140f3565b61119257600080fd5b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2882826040516111c3929190614426565b60405180910390a15050565b600f5481565b6111dd612a3f565b6001600160a01b03166111ee6112db565b6001600160a01b0316146112145760405162461bcd60e51b81526004016109c890614a00565b6000600754116112365760405162461bcd60e51b81526004016109c890614684565b6001600160a01b03811660009081526008602052604090205460ff1615156001146112735760405162461bcd60e51b81526004016109c8906148e9565b6001600160a01b0381166000908152600860205260409020805460ff191690556007546112a190600161239d565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6006546001600160a01b031690565b600b546001600160a01b031633146113145760405162461bcd60e51b81526004016109c890614b00565b600b546040517fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c0091611353916001600160a01b0390911690849061443f565b60405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108155780601f106107ea57610100808354040283529160200191610815565b6113df612a3f565b6001600160a01b03166113f06112db565b6001600160a01b0316146114165760405162461bcd60e51b81526004016109c890614a00565b61271061143a600f54611434601054856122a290919063ffffffff16565b906122a2565b111561144557600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051611478929190614d4e565b60405180910390a1601155565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b600b546001600160a01b031633146114d35760405162461bcd60e51b81526004016109c890614b00565b6001600160a01b038116600090815260126020526040812080546001600160a01b0319169055805b6013548110156115a4576013818154811061151257fe5b6000918252602090912001546001600160a01b038481169116141561159c576013805460019350600019810190811061154757fe5b600091825260209091200154601380546001600160a01b03909216918390811061156d57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001016114fb565b50806115c25760405162461bcd60e51b81526004016109c890614946565b60138054806115cd57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556014546115fd90600161239d565b6014556040517f963b7c735475147a62c589c2d7cb8ec4b0a6b7af4f97373d79ebfa42ab8aa7dc906111c39084906143ad565b6012602052600090815260409020546001600160a01b031681565b611653612a3f565b6001600160a01b03166116646112db565b6001600160a01b03161461168a5760405162461bcd60e51b81526004016109c890614a00565b6127106116a8601154611434601054856122a290919063ffffffff16565b11156116b357600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f54826040516116e6929190614d4e565b60405180910390a1600f55565b6000610830338484612407565b611708612a3f565b6001600160a01b03166117196112db565b6001600160a01b03161461173f5760405162461bcd60e51b81526004016109c890614a00565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906117709030906004016143ad565b60206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c09190614175565b90506117ca612b13565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906117fb9030906004016143ad565b60206040518083038186803b15801561181357600080fd5b505afa158015611827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184b9190614175565b905083611858828461239d565b10156118765760405162461bcd60e51b81526004016109c89061482f565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef23461189f610f89565b6002546040516118b0929190614d4e565b60405180910390a1600e5460ff161515600114156118d2576118d26000610c5f565b50505050565b600e5460ff1681565b6118eb33826127cb565b50565b6000806118f961193b565b9050600c54811061192d5761192561271061191f600f5484612c0890919063ffffffff16565b90612c42565b915050610863565b600091505090565b600c5481565b60006060611947612c84565b6040516370a0823160e01b815290915060009073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a08231906119849030906004016143ad565b60206040518083038186803b15801561199c57600080fd5b505afa1580156119b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d49190614175565b90506119e081476122a2565b5060005b8251811015611baa5760008382815181106119fb57fe5b602002602001015160000151905073b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b0316816001600160a01b03161415611a6857611a61848381518110611a4657fe5b602002602001015160200151846122a290919063ffffffff16565b9250611ba1565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611a979030906004016143ad565b60206040518083038186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190614175565b90506000611b15868581518110611afa57fe5b602002602001015160200151836122a290919063ffffffff16565b9050600060126000888781518110611b2957fe5b602090810291909101810151516001600160a01b03908116835290820192909252604001600020541690508115801590611b6b57506001600160a01b03811615155b15611b9d57611b9a611b93838673b31f66aa3c1e785363f0875a1b74e27b85fd66c785613006565b87906122a2565b95505b5050505b506001016119e4565b5091505090565b6009546001600160a01b031681565b611bc8612a3f565b6001600160a01b0316611bd96112db565b6001600160a01b031614611bff5760405162461bcd60e51b81526004016109c890614a00565b612710611c1d600f54611434601154856122a290919063ffffffff16565b1115611c2857600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a60105482604051611c5b929190614d4e565b60405180910390a1601055565b42841015611c885760405162461bcd60e51b81526004016109c8906148b2565b6001600160a01b03871660009081526005602090815260408083208054600181019091559051611ce3927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c910161446d565b604051602081830303815290604052805190602001209050611d0888828686866130e1565b611d138888886122c7565b5050505050505050565b600b546001600160a01b031681565b611d34612a3f565b6001600160a01b0316611d456112db565b6001600160a01b031614611d6b5760405162461bcd60e51b81526004016109c890614a00565b60405162461bcd60e51b81526004016109c890614ac9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000611dc4611dbb610f89565b60025490612c08565b611dcf575080610883565b610880611dda610f89565b60025461191f908590612c08565b611df0612a3f565b6001600160a01b0316611e016112db565b6001600160a01b031614611e275760405162461bcd60e51b81526004016109c890614a00565b7fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f600d5482604051611e5a929190614d4e565b60405180910390a1600d55565b60138181548110611e7457fe5b6000918252602090912001546001600160a01b0316905081565b6000611e9b611dbb610f89565b611ea757506000610883565b61088060025461191f611eb8610f89565b8590612c08565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6000604051611ef49190614307565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611f266131b7565b30604051602001611f3b9594939291906144a1565b60405160208183030381529060405280519060200120905090565b611f5e612a3f565b6001600160a01b0316611f6f6112db565b6001600160a01b031614611f955760405162461bcd60e51b81526004016109c890614a00565b6001600160a01b038116611fbb5760405162461bcd60e51b81526004016109c8906145b9565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b3233146120455760405162461bcd60e51b81526004016109c890614616565b61204f60006131bb565b565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561208c57600080fd5b505afa1580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c49190613fab565b6001600160a01b0316836001600160a01b031614806121645750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561211757600080fd5b505afa15801561212b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214f9190613fab565b6001600160a01b0316836001600160a01b0316145b801561227c5750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156121a457600080fd5b505afa1580156121b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121dc9190613fab565b6001600160a01b0316826001600160a01b0316148061227c5750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122679190613fab565b6001600160a01b0316826001600160a01b0316145b801561229a5750816001600160a01b0316836001600160a01b031614155b949350505050565b6000828201838110156109945760405162461bcd60e51b81526004016109c89061464d565b6001600160a01b0383166122ed5760405162461bcd60e51b81526004016109c890614a35565b6001600160a01b0382166123135760405162461bcd60e51b81526004016109c890614ce2565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061236e908590614464565b60405180910390a3505050565b6000806123866132e6565b90506109946123936132eb565b61191f8584612c08565b600061099483836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152505b600081848411156123ff5760405162461bcd60e51b81526004016109c891906144eb565b505050900390565b6001600160a01b03821661242d5760405162461bcd60e51b81526004016109c890614a6c565b61246a816040518060600160405280602e8152602001614e6f602e91396001600160a01b03861660009081526004602052604090205491906123db565b6001600160a01b03808516600090815260046020526040808220939093559084168152205461249990826122a2565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061236e908590614464565b6009546040516370a0823160e01b815260009182916001600160a01b03909116906370a08231906125209030906004016143ad565b60206040518083038186803b15801561253857600080fd5b505afa15801561254c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125709190614175565b905061257a612a43565b6001600160a01b031663441a3e708460006040518363ffffffff1660e01b81526004016125a8929190614d4e565b600060405180830381600087803b1580156125c257600080fd5b505af11580156125d6573d6000803e3d6000fd5b50506009546040516370a0823160e01b8152600093506001600160a01b0390911691506370a082319061260d9030906004016143ad565b60206040518083038186803b15801561262557600080fd5b505afa158015612639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265d9190614175565b905061229a818361239d565b6126ec8363a9059cbb60e01b8484604051602401612688929190614426565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526132f1565b505050565b61272e81604051806060016040528060278152602001614e48602791396001600160a01b03851660009081526004602052604090205491906123db565b60046000846001600160a01b03166001600160a01b031681526020019081526020016000208190555061277e81604051806060016040528060278152602001614df26027913960025491906123db565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127bf908590614464565b60405180910390a35050565b600e5460ff1615156001146127f25760405162461bcd60e51b81526004016109c8906146e1565b600d541561281c57600061280461193b565b9050600d5481111561281a5761281a60016131bb565b505b6009546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd90612869903390309086906004016143c1565b602060405180830381600087803b15801561288357600080fd5b505af1158015612897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bb91906140f3565b6128d75760405162461bcd60e51b81526004016109c890614c28565b60006128e28261237b565b90506128fa836128f5610726858561239d565b613380565b61290382613402565b826001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8360405161293c9190614464565b60405180910390a2505050565b600a546001600160a01b0383811691161461299357600a5461297790829084906001600160a01b0316612051565b6129935760405162461bcd60e51b81526004016109c89061455b565b6001600160a01b03808316600081815260126020526040812080549385166001600160a01b03199485161790556013805460018181018355919092527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0909091018054909316909117909155601454612a0a916122a2565b6014556040517f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f80906111c3908490849061443f565b3390565b6009546040517f06bfa93800000000000000000000000000000000000000000000000000000000815260009182916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926306bfa93892612ab49291909116906004016143ad565b6101206040518083038186803b158015612acd57600080fd5b505afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0591906141b1565b995050505050505050505090565b6000612b1d612a43565b60095460405163095ea7b360e01b81529192506001600160a01b03169063095ea7b390612b51908490600090600401614426565b602060405180830381600087803b158015612b6b57600080fd5b505af1158015612b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba391906140f3565b50806001600160a01b031663441a3e70612bbb610f89565b60006040518363ffffffff1660e01b8152600401612bda929190614d4e565b600060405180830381600087803b158015612bf457600080fd5b505af1158015610b74573d6000803e3d6000fd5b600082612c1757506000610834565b82820282848281612c2457fe5b04146109945760405162461bcd60e51b81526004016109c8906149a3565b600061099483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061342b565b60606000612c90612a43565b60145490915060608167ffffffffffffffff81118015612caf57600080fd5b50604051908082528060200260200182016040528015612ce957816020015b612cd6613f49565b815260200190600190039081612cce5790505b509050600080846001600160a01b0316628cc2627322d4002028f537599be9f666d1c4fa138522f9c86040518263ffffffff1660e01b8152600401612d2e91906143ad565b604080518083038186803b158015612d4557600080fd5b505afa158015612d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7d9190614256565b601654604051633cb6bbcb60e21b81529294509092506000916001600160a01b039091169063f2daef2c90612db89030908690600401614426565b60206040518083038186803b158015612dd057600080fd5b505afa158015612de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e089190614175565b604080518082019091527322d4002028f537599be9f666d1c4fa138522f9c8815290915060208101612e3a848461239d565b81525084600081518110612e4a57fe5b60200260200101819052506040518060400160405280735817d4f0b62a59b17f75207da1848c2ce75e7af46001600160a01b031681526020018481525084600181518110612e9457fe5b6020908102919091010152600260005b86811015612ff957600060138281548110612ebb57fe5b6000918252602090912001546001600160a01b031690507322d4002028f537599be9f666d1c4fa138522f9c8811480612f1057506001600160a01b038116735817d4f0b62a59b17f75207da1848c2ce75e7af4145b15612f1b5750612ff1565b6040517e8cc2620000000000000000000000000000000000000000000000000000000081526000906001600160a01b038b1690628cc26290612f619085906004016143ad565b604080518083038186803b158015612f7857600080fd5b505afa158015612f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb09190614256565b9150506040518060400160405280836001600160a01b0316815260200182815250888581518110612fdd57fe5b602090810291909101015250506001909101905b600101612ea4565b5093965050505050505090565b6000806130138585613462565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561305257600080fd5b505afa158015613066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308a919061410f565b5091509150866001600160a01b0316836001600160a01b0316146130aa57905b6130d588836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16613493565b98975050505050505050565b60006130eb611ebf565b856040516020016130fd929190614377565b60405160208183030381529060405280519060200120905060006001828686866040516000815260200160405260405161313a94939291906144cd565b6020604051602081039080840390855afa15801561315c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906131925750866001600160a01b0316816001600160a01b0316145b6131ae5760405162461bcd60e51b81526004016109c89061473e565b50505050505050565b4690565b6131c36134db565b60006131cd613708565b9050816131f657600c548110156131f65760405162461bcd60e51b81526004016109c890614b37565b600061321361271061191f60115485612c0890919063ffffffff16565b9050801561323857600b54600a54613238916001600160a01b03918216911683612669565b600061325561271061191f600f5486612c0890919063ffffffff16565b9050801561327457600a54613274906001600160a01b03163383612669565b600061329261328d83613287878761239d565b9061239d565b613951565b905061329d81613402565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346132c6610f89565b6002546040516132d7929190614d4e565b60405180910390a15050505050565b600090565b61271090565b6060613346826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139799092919063ffffffff16565b8051909150156126ec578080602001905181019061336491906140f3565b6126ec5760405162461bcd60e51b81526004016109c890614c85565b60025461338d90826122a2565b6002556001600160a01b0382166000908152600460205260409020546133b390826122a2565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127bf908590614464565b600081116134225760405162461bcd60e51b81526004016109c890614b94565b6118eb81613988565b6000818361344c5760405162461bcd60e51b81526004016109c891906144eb565b50600083858161345857fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b031610613485578284613488565b83835b915091509250929050565b6000806134a2856103e5612c08565b905060006134b08285612c08565b905060006134c483611434886103e8612c08565b90506134d08282612c42565b979650505050505050565b6040516370a0823160e01b81526000907322d4002028f537599be9f666d1c4fa138522f9c8906370a08231906135159030906004016143ad565b60206040518083038186803b15801561352d57600080fd5b505afa158015613541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135659190614175565b905061356f612a43565b6001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156135a957600080fd5b505af11580156135bd573d6000803e3d6000fd5b50506040516370a0823160e01b815260009250613651915083907322d4002028f537599be9f666d1c4fa138522f9c8906370a08231906136019030906004016143ad565b60206040518083038186803b15801561361957600080fd5b505afa15801561362d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132879190614175565b601654604051633cb6bbcb60e21b81529192506000916001600160a01b039091169063f2daef2c906136899030908690600401614426565b60206040518083038186803b1580156136a157600080fd5b505afa1580156136b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d99190614175565b6016549091506126ec907322d4002028f537599be9f666d1c4fa138522f9c8906001600160a01b031683612669565b6040516370a0823160e01b8152600090819073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a08231906137449030906004016143ad565b60206040518083038186803b15801561375c57600080fd5b505afa158015613770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137949190614175565b60135490915060005b81811015613949576000601382815481106137b457fe5b6000918252602090912001546001600160a01b0316905073b31f66aa3c1e785363f0875a1b74e27b85fd66c78114156138735747801561386c5773b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561383d57600080fd5b505af1158015613851573d6000803e3d6000fd5b505050505061386981866122a290919063ffffffff16565b94505b5050613941565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906138a29030906004016143ad565b60206040518083038186803b1580156138ba57600080fd5b505afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f29190614175565b9050801561393e576001600160a01b0380831660009081526012602052604090205416801561393c57600a5461393990611b9390849086906001600160a01b031685613c17565b95505b505b50505b60010161379d565b509091505090565b600a546009546015546000926108809285926001600160a01b03928316929182169116613c17565b606061229a8484600085613db8565b6000613992612a43565b9050600960009054906101000a90046001600160a01b03166001600160a01b031663095ea7b3826001600160a01b0316631208e15b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156139f157600080fd5b505afa158015613a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a299190613fab565b846040518363ffffffff1660e01b8152600401613a47929190614426565b602060405180830381600087803b158015613a6157600080fd5b505af1158015613a75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9991906140f3565b506040517fb6b55f250000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063b6b55f2590613adf908590600401614464565b600060405180830381600087803b158015613af957600080fd5b505af1158015613b0d573d6000803e3d6000fd5b50505050600960009054906101000a90046001600160a01b03166001600160a01b031663095ea7b3826001600160a01b0316631208e15b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613b6e57600080fd5b505afa158015613b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba69190613fab565b60006040518363ffffffff1660e01b8152600401613bc5929190614426565b602060405180830381600087803b158015613bdf57600080fd5b505af1158015613bf3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ec91906140f3565b600080613c248585613462565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c6357600080fd5b505afa158015613c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9b919061410f565b5091509150866001600160a01b0316836001600160a01b031614613cbb57905b600080613ce98a856dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff16613493565b9050886001600160a01b0316856001600160a01b031614613d0657905b613d1189888c613e6e565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091526001600160a01b0388169063022c0d9f90613d699085908590309060248101614d5c565b600060405180830381600087803b158015613d8357600080fd5b505af1158015613d97573d6000803e3d6000fd5b50505050818111613da85781613daa565b805b9a9950505050505050505050565b606082471015613dda5760405162461bcd60e51b81526004016109c89061479b565b613de385613f0a565b613dff5760405162461bcd60e51b81526004016109c890614bf1565b60006060866001600160a01b03168587604051613e1c91906142eb565b60006040518083038185875af1925050503d8060008114613e59576040519150601f19603f3d011682016040523d82523d6000602084013e613e5e565b606091505b50915091506134d0828286613f10565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90613e9c9085908590600401614426565b602060405180830381600087803b158015613eb657600080fd5b505af1158015613eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eee91906140f3565b6126ec5760405162461bcd60e51b81526004016109c890614d19565b3b151590565b60608315613f1f575081610994565b825115613f2f5782518084602001fd5b8160405162461bcd60e51b81526004016109c891906144eb565b604080518082019091526000808252602082015290565b80516dffffffffffffffffffffffffffff8116811461088357600080fd5b803560ff8116811461088357600080fd5b600060208284031215613fa0578081fd5b813561099481614dce565b600060208284031215613fbc578081fd5b815161099481614dce565b60008060408385031215613fd9578081fd5b8235613fe481614dce565b91506020830135613ff481614dce565b809150509250929050565b600080600060608486031215614013578081fd5b833561401e81614dce565b9250602084013561402e81614dce565b929592945050506040919091013590565b600080600080600080600060e0888a031215614059578283fd5b873561406481614dce565b9650602088013561407481614dce565b9550604088013594506060880135935061409060808901613f7e565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156140be578182fd5b82356140c981614dce565b946020939093013593505050565b6000602082840312156140e8578081fd5b813561099481614de3565b600060208284031215614104578081fd5b815161099481614de3565b600080600060608486031215614123578283fd5b61412c84613f60565b925061413a60208501613f60565b9150604084015163ffffffff81168114614152578182fd5b809150509250925092565b60006020828403121561416e578081fd5b5035919050565b600060208284031215614186578081fd5b5051919050565b6000806040838503121561419f578182fd5b823591506020830135613ff481614de3565b60008060008060008060008060006101208a8c0312156141cf578283fd5b8951985060208a01516141e181614de3565b60408b01519098506141f281614dce565b60608b015190975061420381614dce565b60808b015160a08c0151919750955061421b81614dce565b60c08b015160e08c0151919550935061423381614dce565b6101008b015190925061424581614dce565b809150509295985092959850929598565b60008060408385031215614268578182fd5b505080516020909101519092909150565b600080600080600060a08688031215614290578283fd5b85359450602086013593506142a760408701613f7e565b94979396509394606081013594506080013592915050565b600081518084526142d7816020860160208601614da2565b601f01601f19169290920160200192915050565b600082516142fd818460208701614da2565b9190910192915050565b6000808354600180821660008114614326576001811461433d5761436c565b60ff198316865260028304607f168601935061436c565b600283048786526020808720875b838110156143645781548a82015290850190820161434b565b505050860193505b509195945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261099460208301846142bf565b60208082526030908201527f5661726961626c655265776172647353747261746567793a3a5769746864726160408201527f7720616d6f756e7420746f6f206c6f7700000000000000000000000000000000606082015260800190565b602080825260409082018190527f5661726961626c655265776172647353747261746567793a3a53776170207061908201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79454f41000000000000000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526034908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f20616c6c6f776564206465706f7369746f7273000000000000000000000000606082015260800190565b6020808252602a908201527f5661726961626c655265776172647353747261746567793a3a4465706f73697460408201527f732064697361626c656400000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160408201527f7475726500000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f7200000000604082015260600190565b6020808252604d908201527f5661726961626c655265776172647353747261746567793a3a456d657267656e60408201527f6379207769746864726177206d696e696d756d2072657475726e20616d6f756e60608201527f74206e6f74207265616368656400000000000000000000000000000000000000608082015260a00190565b6020808252600f908201527f7065726d69743a3a657870697265640000000000000000000000000000000000604082015260600190565b6020808252602a908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f7420616c6c6f77656400000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f5661726961626c655265776172647353747261746567793a3a5265776172642060408201527f746f2064656c657465206e6f7420666f756e6421000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f5f617070726f76653a3a6f776e6572207a65726f206164647265737300000000604082015260600190565b60208082526034908201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260408201527f20746f20746865207a65726f2061646472657373000000000000000000000000606082015260800190565b60208082526019908201527f736574416c6c6f77616e6365733a3a6465707265636174656400000000000000604082015260600190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604082015260600190565b60208082526030908201527f5661726961626c655265776172647353747261746567793a3a5265696e76657360408201527f7420616d6f756e7420746f6f206c6f7700000000000000000000000000000000606082015260800190565b6020808252602d908201527f5661726961626c655265776172647353747261746567793a3a5374616b65206160408201527f6d6f756e7420746f6f206c6f7700000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526036908201527f5661726961626c655265776172647353747261746567793a3a4465706f73697460408201527f20746f6b656e207472616e73666572206661696c656400000000000000000000606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f5f617070726f76653a3a7370656e646572207a65726f20616464726573730000604082015260600190565b6020808252818101527f4465784c6962726172793a3a5452414e534645525f46524f4d5f4641494c4544604082015260600190565b918252602082015260400190565b60008582528460208301526001600160a01b038416604083015260806060830152614d8a60808301846142bf565b9695505050505050565b60ff91909116815260200190565b60005b83811015614dbd578181015183820152602001614da5565b838111156118d25750506000910152565b6001600160a01b03811681146118eb57600080fd5b80151581146118eb57600080fdfe5f6275726e3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c797472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f6275726e3a206275726e20616d6f756e7420657863656564732066726f6d2062616c616e63655f7472616e73666572546f6b656e733a207472616e7366657220657863656564732066726f6d2062616c616e6365a26469706673582212209c5c0a2e53a9de6b8e6cd8c58cec6b98a040cf1c46ea6f5134db10bef8d262e564736f6c634300070300338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000c7198437980c041c805a1edcba50c1ce5db95118000000000000000000000000ed8cbd9f0ce3c6986b22002f03c6475ceb7a625600000000000000000000000000000000000000000000000000000000000001a00000000000000000000000008b3d9f0017fa369cd8c164d0cc078bf4ca588ae5000000000000000000000000a1cfc90a52ba3453a78f460b8be1fcde068e29e7000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e44000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000185969656c642059616b3a20566563746f7220555344542e650000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000022d4002028f537599be9f666d1c4fa138522f9c8000000000000000000000000cdfd91eea657cc2701117fe9711c9a4f61feed230000000000000000000000005817d4f0b62a59b17f75207da1848c2ce75e7af40000000000000000000000009ef0c12b787f90f59cbbe0b611b82d30cab92929