[ { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "bool", "name": "_allowToken0", "type": "bool" }, { "internalType": "bool", "name": "_allowToken1", "type": "bool" }, { "internalType": "address", "name": "__owner", "type": "address" }, { "internalType": "uint32", "name": "_twapPeriod", "type": "uint32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "affiliate", "type": "address" } ], "name": "Affiliate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "ammFeeRecipient", "type": "address" } ], "name": "AmmFeeRecipient", "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": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount1", "type": "uint256" } ], "name": "CollectFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "allowToken0", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "allowToken1", "type": "bool" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "twapPeriod", "type": "uint256" } ], "name": "DeployICHIVault", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "deposit0Max", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "deposit1Max", "type": "uint256" } ], "name": "DepositMax", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "hysteresis", "type": "uint256" } ], "name": "Hysteresis", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "maxTotalSupply", "type": "uint256" } ], "name": "MaxTotalSupply", "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": "int24", "name": "tick", "type": "int24" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Rebalance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "newTwapPeriod", "type": "uint32" } ], "name": "SetTwapPeriod", "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": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "PRECISION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "affiliate", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "allowToken0", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "allowToken1", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [], "name": "ammFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "baseLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collectFees", "outputs": [ { "internalType": "uint256", "name": "fees0", "type": "uint256" }, { "internalType": "uint256", "name": "fees1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentTick", "outputs": [ { "internalType": "int24", "name": "tick", "type": "int24" } ], "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": "deposit0", "type": "uint256" }, { "internalType": "uint256", "name": "deposit1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deposit0Max", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deposit1Max", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBasePosition", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLimitPosition", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalAmounts", "outputs": [ { "internalType": "uint256", "name": "total0", "type": "uint256" }, { "internalType": "uint256", "name": "total1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hysteresis", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ichiVaultFactory", "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": [], "name": "limitLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "_baseLower", "type": "int24" }, { "internalType": "int24", "name": "_baseUpper", "type": "int24" }, { "internalType": "int24", "name": "_limitLower", "type": "int24" }, { "internalType": "int24", "name": "_limitUpper", "type": "int24" }, { "internalType": "int256", "name": "swapQuantity", "type": "int256" } ], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_affiliate", "type": "address" } ], "name": "setAffiliate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_ammFeeRecipient", "type": "address" } ], "name": "setAmmFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_deposit0Max", "type": "uint256" }, { "internalType": "uint256", "name": "_deposit1Max", "type": "uint256" } ], "name": "setDepositMax", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_hysteresis", "type": "uint256" } ], "name": "setHysteresis", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxTotalSupply", "type": "uint256" } ], "name": "setMaxTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newTwapPeriod", "type": "uint32" } ], "name": "setTwapPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tickSpacing", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "twapPeriod", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3SwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
6101806040523480156200001257600080fd5b5060405162005b7b38038062005b7b833981810160405260a08110156200003857600080fd5b50805160208083015160408085015160608601516080909601518251808401845260128152714171756142657261204c697175696469747960701b9581019590955282516313eb27bb60e31b81526001600160a01b0387166004820152841515602482015292519596939591949092909173088ee1fb556cbd24383afe3ed9812235ee931e1391639f593dd8916044808301926000929190829003018186803b158015620000e557600080fd5b505af4158015620000fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200012457600080fd5b81019080805160405193929190846401000000008211156200014557600080fd5b9083019060208201858111156200015b57600080fd5b82516401000000008111828201881017156200017657600080fd5b82525081516020918201929091019080838360005b83811015620001a55781810151838201526020016200018b565b50505050905090810190601f168015620001d35780820380516001836020036101000a031916815260200191505b5060405250508251620001ef9150600390602085019062000790565b5080516200020590600490602084019062000790565b50506005805460ff1916601217905550600160065560006200022662000609565b600780546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005b3a833981519152908290a3506001600160a01b038516620002bf576040805162461bcd60e51b815260206004820152601c60248201527f49562e636f6e7374727563746f723a207a65726f206164647265737300000000604482015290519081900360640190fd5b8380620002c95750825b620003065760405162461bcd60e51b815260040180806020018281038252602181526020018062005b5a6021913960400191505060405180910390fd5b33606090811b60805285901b6001600160601b03191660a05260408051630dfe168160e01b815290516001600160a01b03871691630dfe1681916004808301926020929190829003018186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d60208110156200038c57600080fd5b505160601b6001600160601b03191660c0526040805163d21220a760e01b815290516001600160a01b0387169163d21220a7916004808301926020929190829003018186803b158015620003df57600080fd5b505afa158015620003f4573d6000803e3d6000fd5b505050506040513d60208110156200040b57600080fd5b505160601b6001600160601b03191660e0526040805163ddca3f4360e01b815290516001600160a01b0387169163ddca3f43916004808301926020929190829003018186803b1580156200045e57600080fd5b505afa15801562000473573d6000803e3d6000fd5b505050506040513d60208110156200048a57600080fd5b505160e81b6001600160e81b0319166101405283151560f890811b61010052831515901b61012052600e805463ffffffff191663ffffffff8316179055604080516334324e9f60e21b815290516001600160a01b0387169163d0c93a7c916004808301926020929190829003018186803b1580156200050857600080fd5b505afa1580156200051d573d6000803e3d6000fd5b505050506040513d60208110156200053457600080fd5b5051600290810b900b60e81b610160526200054f826200060d565b6000600c5562000575670de0b6b3a7640000606462000718602090811b6200328417901c565b600d55600019600a819055600b55600880546001600160a01b031990811690915560098054909116905560408051851515815284151560208201526001600160a01b038481168284015263ffffffff8416606083015291519187169133917f3e708ccf7d0e6de8558e020ea36189511cb3435bbfec54e721a48ee4df0d4f8c919081900360800190a350505050506200083c565b3390565b6200061762000609565b6001600160a01b03166200062a62000781565b6001600160a01b03161462000686576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620006cd5760405162461bcd60e51b815260040180806020018281038252602681526020018062005b146026913960400191505060405180910390fd5b6007546040516001600160a01b0380841692169060008051602062005b3a83398151915290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60008082116200076f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816200077957fe5b049392505050565b6007546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620007c8576000855562000813565b82601f10620007e357805160ff191683800117855562000813565b8280016001018555821562000813579182015b8281111562000813578251825591602001919060010190620007f6565b506200082192915062000825565b5090565b5b8082111562000821576000815560010162000826565b60805160601c60a05160601c60c05160601c60e05160601c6101005160f81c6101205160f81c6101405160e81c6101605160e81c615140620009d4600039806121475280612428528061246452806124e45280612520525080612ea3525080610fbf52806114e6525080611313528061146b525080610b0c5280610bc6528061197552806119fd5280611b5e5280611f17528061216b52806122c0528061233a52806129405280612ca35280613228528061325c528061452d52806147a252806147e0525080610a5b5280610b8c5280610e11528061195452806119db5280611b235280611e6e528061228652806122ff52806128ae5280612bec5280612dab52806131a052806131d952806144d052806146e25280614720525080610c875280610e45528061170d528061187152806119b952806121f4528061261252806127095280612a035280613102528061389a5280613c9b5280613d4b5280613f25528061419d52806142c9528061481a5280614ac3525080612e7f528061436552806144085280614570528061460852506151406000f3fe608060405234801561001057600080fd5b50600436106102d55760003560e01c806381de128b11610182578063d0c93a7c116100e9578063dd81fa63116100a2578063f62073261161007c578063f620732614610825578063f9c95d4614610846578063fa08274314610869578063fa461e3314610871576102d5565b8063dd81fa63146107d7578063ddca3f43146107df578063f2fde38b146107ff576102d5565b8063d0c93a7c146106d4578063d21220a7146106dc578063d2eabcfc146106e4578063d3487997146106ec578063d87346aa14610768578063dd62ed3e146107a9576102d5565b8063a049de6b1161013b578063a049de6b14610634578063a457c2d714610664578063a9059cbb14610690578063aaf5eb68146106bc578063c4a7761e146106c4578063c8796572146106cc576102d5565b806381de128b146105bc578063888a9134146105e2578063897f078c146105ea5780638da5cb5b146105f25780638dbdbe6d146105fa57806395d89b411461062c576102d5565b806337e41b401161024157806351e87af7116101fa57806370a08231116101d457806370a082311461057e578063715018a6146105a45780637aea5309146105ac5780637f7a1eec146105b4576102d5565b806351e87af7146105515780635ffc1ff714610559578063648cab8514610576576102d5565b806337e41b40146104cd57806339509351146104d55780633e091ee9146105015780633f3e4c111461052457806345e05f43146105415780634d461fbb14610549576102d5565b806316f0115b1161029357806316f0115b1461042757806318160ddd1461042f57806323b872dd146104495780632ab4d0521461047f5780632bbb56d914610487578063313ce567146104af576102d5565b8062f714ce146102da578063065e53601461031f57806306fdde031461033e578063095ea7b3146103bb5780630dfe1681146103fb5780630f35bcac1461041f575b600080fd5b610306600480360360408110156102f057600080fd5b50803590602001356001600160a01b03166108ed565b6040805192835260208301919091528051918290030190f35b610327610c80565b6040805160029290920b8252519081900360200190f35b610346610d5b565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610380578181015183820152602001610368565b50505050905090810190601f1680156103ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e7600480360360408110156103d157600080fd5b506001600160a01b038135169060200135610df1565b604080519115158252519081900360200190f35b610403610e0f565b604080516001600160a01b039092168252519081900360200190f35b610327610e33565b610403610e43565b610437610e67565b60408051918252519081900360200190f35b6103e76004803603606081101561045f57600080fd5b506001600160a01b03813581169160208101359091169060400135610e6d565b610437610ef5565b6104ad6004803603602081101561049d57600080fd5b50356001600160a01b0316610efb565b005b6104b7610fb4565b6040805160ff9092168252519081900360200190f35b6103e7610fbd565b6103e7600480360360408110156104eb57600080fd5b506001600160a01b038135169060200135610fe1565b6104ad6004803603604081101561051757600080fd5b508035906020013561102f565b6104ad6004803603602081101561053a57600080fd5b50356110d9565b610403611179565b610437611188565b61032761118e565b6104ad6004803603602081101561056f57600080fd5b503561119e565b61043761123e565b6104376004803603602081101561059457600080fd5b50356001600160a01b0316611244565b6104ad61125f565b61043761130b565b6103e7611311565b6104ad600480360360208110156105d257600080fd5b50356001600160a01b0316611335565b6103276113ee565b6104036113fe565b61040361140d565b6104376004803603606081101561061057600080fd5b50803590602081013590604001356001600160a01b031661141c565b610346611cc0565b61063c611d21565b604080516001600160801b039094168452602084019290925282820152519081900360600190f35b6103e76004803603604081101561067a57600080fd5b506001600160a01b038135169060200135611db9565b6103e7600480360360408110156106a657600080fd5b506001600160a01b038135169060200135611e21565b610437611e35565b610306611e41565b610306611f8c565b610327612145565b610403612169565b61063c61218d565b6104ad6004803603606081101561070257600080fd5b81359160208101359181019060608101604082013564010000000081111561072957600080fd5b82018360208201111561073b57600080fd5b8035906020019184600183028401116401000000008311171561075d57600080fd5b5090925090506121e9565b6104ad600480360360a081101561077e57600080fd5b508035600290810b916020810135820b916040820135810b91606081013590910b9060800135612369565b610437600480360360408110156107bf57600080fd5b506001600160a01b0381358116916020013516612e52565b610403612e7d565b6107e7612ea1565b6040805162ffffff9092168252519081900360200190f35b6104ad6004803603602081101561081557600080fd5b50356001600160a01b0316612ec5565b61082d612fc8565b6040805163ffffffff9092168252519081900360200190f35b6104ad6004803603602081101561085c57600080fd5b503563ffffffff16612fd4565b6103276130e7565b6104ad6004803603606081101561088757600080fd5b8135916020810135918101906060810160408201356401000000008111156108ae57600080fd5b8201836020820111156108c057600080fd5b803590602001918460018302840111640100000000831117156108e257600080fd5b5090925090506130f7565b60008060026006541415610936576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b600260065583610983576040805162461bcd60e51b815260206004820152601360248201527249562e77697468647261773a2073686172657360681b604482015290519081900360640190fd5b6001600160a01b0383166109d0576040805162461bcd60e51b815260206004820152600f60248201526e49562e77697468647261773a20746f60881b604482015290519081900360640190fd5b6009546000908190610a0590600160a01b8104600290810b91600160b81b9004900b6109fd82828b6132eb565b88600061332b565b60095491935091506000908190610a3f90600160d01b8104600290810b91600160e81b9004900b610a3782828d6132eb565b8a600061332b565b915091506000610a4d610e67565b90506000610afe82610af88c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ac657600080fd5b505afa158015610ada573d6000803e3d6000fd5b505050506040513d6020811015610af057600080fd5b505190613359565b90613284565b90506000610b7783610af88d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ac657600080fd5b90508115610bb357610bb36001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b846133b2565b8015610bed57610bed6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b836133b2565b610c0182610bfb8988613409565b90613409565b9850610c1181610bfb8887613409565b9750610c1d338c613463565b604080518c8152602081018b90528082018a905290516001600160a01b038c169133917febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360600190a35050505050505060016006819055509250929050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610cde57600080fd5b505afa158015610cf2573d6000803e3d6000fd5b505050506040513d60e0811015610d0857600080fd5b50602081015160c090910151909250905080610d555760405162461bcd60e51b8152600401808060200182810382526022815260200180614fa36022913960400191505060405180910390fd5b50919050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b5050505050905090565b6000610e05610dfe61355f565b8484613563565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600954600160e81b900460020b81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b6000610e7a84848461364f565b610eea84610e8661355f565b610ee585604051806060016040528060288152602001614fe6602891396001600160a01b038a16600090815260016020526040812090610ec461355f565b6001600160a01b0316815260208101919091526040016000205491906137aa565b613563565b5060015b9392505050565b600c5481565b610f0361355f565b6001600160a01b0316610f1461140d565b6001600160a01b031614610f5d576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600980546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917f3066ef5dd340e8b2ea28d62f5a8391eb7a82d3ee87532724a1ca4386d34f7523919081900360200190a250565b60055460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e05610fee61355f565b84610ee58560016000610fff61355f565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613409565b61103761355f565b6001600160a01b031661104861140d565b6001600160a01b031614611091576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600a829055600b8190556040805183815260208101839052815133927fafd3b05a4086b378b6f291200a528d8aed8c5e0317af77436b001f1bec28821a928290030190a25050565b6110e161355f565b6001600160a01b03166110f261140d565b6001600160a01b03161461113b576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600c81905560408051828152905133917f7423cea36ad2104e8e8c3d9aa1e24288bdf3bfa7b4f37868cfa6d4d34ffdaf3a919081900360200190a250565b6009546001600160a01b031681565b600b5481565b600954600160d01b900460020b81565b6111a661355f565b6001600160a01b03166111b761140d565b6001600160a01b031614611200576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600d81905560408051828152905133917f529698f34660760dcb172def5c99d62e1b5b74b444df322e8f7da31f2bd0a86b919081900360200190a250565b600a5481565b6001600160a01b031660009081526020819052604090205490565b61126761355f565b6001600160a01b031661127861140d565b6001600160a01b0316146112c1576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61133d61355f565b6001600160a01b031661134e61140d565b6001600160a01b031614611397576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600880546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917fbb78b7c13893a913fa8c9ecb9fdaf97597aa412a39c778bf976790555f0942f7919081900360200190a250565b600954600160b81b900460020b81565b6008546001600160a01b031681565b6007546001600160a01b031690565b600060026006541415611464576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b60026006557f000000000000000000000000000000000000000000000000000000000000000080611493575083155b6114e4576040805162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a20746f6b656e30206e6f7420616c6c6f7765640000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000008061150e575082155b61155f576040805162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a20746f6b656e31206e6f7420616c6c6f7765640000604482015290519081900360640190fd5b600084118061156e5750600083115b6115bf576040805162461bcd60e51b815260206004820181905260248201527f49562e6465706f7369743a206465706f73697473206d757374206265203e2030604482015290519081900360640190fd5b600a54841080156115d15750600b5483105b611622576040805162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a206465706f7369747320746f6f206c617267650000604482015290519081900360640190fd5b6001600160a01b0382161580159061164357506001600160a01b0382163014155b611685576040805162461bcd60e51b815260206004820152600e60248201526d49562e6465706f7369743a20746f60901b604482015290519081900360640190fd5b6009546000906116aa90600160a01b8104600290810b91600160b81b9004900b613841565b50909150506001600160801b038116156117e9576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b15801561175157600080fd5b505af1158015611765573d6000803e3d6000fd5b505050506040513d604081101561177b57600080fd5b508051602090910151909250905081158015611795575080155b6117e6576040805162461bcd60e51b815260206004820152601f60248201527f49562e6465706f7369743a20756e6578706563746564206275726e2028312900604482015290519081900360640190fd5b50505b60095460009061180e90600160d01b8104600290810b91600160e81b9004900b613841565b50909150506001600160801b0381161561194d576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b1580156118b557600080fd5b505af11580156118c9573d6000803e3d6000fd5b505050506040513d60408110156118df57600080fd5b5080516020909101519092509050811580156118f9575080155b61194a576040805162461bcd60e51b815260206004820152601f60248201527f49562e6465706f7369743a20756e6578706563746564206275726e2028322900604482015290519081900360640190fd5b50505b60006119aa7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061199c610c80565b670de0b6b3a7640000613942565b600e54909150600090611a31907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009063ffffffff16670de0b6b3a7640000613a76565b90506000818311611a6157611a5c82610af8670de0b6b3a7640000611a568388613c39565b90613359565b611a7b565b611a7b83610af8670de0b6b3a7640000611a568387613c39565b9050600d54811115611ad857611a8f613c96565b611ad8576040805162461bcd60e51b815260206004820152601560248201527424ab173232b837b9b4ba1d103a393c903630ba32b960591b604482015290519081900360640190fd5b600080611ae3611e41565b915091506000611b0e670de0b6b3a7640000610af8878910611b055787611b07565b885b8f90613359565b90508b15611b4b57611b4b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308f613dce565b8a15611b8657611b866001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308e613dce565b611b908b82613409565b9850611b9a610e67565b15611beb576000611bc6670de0b6b3a7640000610af8888a11611bbd5788611bbf565b895b8790613359565b9050611be7611bd58285613409565b610af8611be0610e67565b8d90613359565b9950505b611bf58a8a613e2e565b604080518a8152602081018e90528082018d905290516001600160a01b038c169133917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69181900360600190a3600c541580611c5a5750600c54611c57610e67565b11155b611cab576040805162461bcd60e51b815260206004820152601a60248201527f49562e6465706f7369743a206d6178546f74616c537570706c79000000000000604482015290519081900360640190fd5b50506001600655509498975050505050505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de75780601f10610dbc57610100808354040283529160200191610de7565b600080600080600080611d526009601a9054906101000a900460020b6009601d9054906101000a900460020b613841565b6009549295509093509150611d7d90600160d01b8104600290810b91600160e81b9004900b85613f1e565b93965094509192508491611d9a856001600160801b038416613409565b9450611daf846001600160801b038316613409565b9350505050909192565b6000610e05611dc661355f565b84610ee5856040518060600160405280602581526020016150e66025913960016000611df061355f565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906137aa565b6000610e05611e2e61355f565b848461364f565b670de0b6b3a764000081565b600080600080611e4f61218d565b9250925050600080611e5f611d21565b9250925050611f0b82610bfb867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ed957600080fd5b505afa158015611eed573d6000803e3d6000fd5b505050506040513d6020811015611f0357600080fd5b505190613409565b9550611f8281610bfb857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ed957600080fd5b9450505050509091565b60008060026006541415611fd5576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b60026006819055600954600091611fff91600160a01b8104820b91600160b81b909104900b613841565b50909150506001600160801b0381161561205e57600954600090819061203e90600160a01b8104600290810b91600160b81b9004900b83306001614159565b909250905061204d8583613409565b94506120598482613409565b935050505b60095460009061208390600160d01b8104600290810b91600160e81b9004900b613841565b50909150506001600160801b038116156120e25760095460009081906120c290600160d01b8104600290810b91600160e81b9004900b83306001614159565b90925090506120d18683613409565b95506120dd8582613409565b945050505b6040805185815260208101859052815133927fec8208dd791fa8ffdc0d7427f3ba9c0ed06f1bce9a86254e6940c10cc1802fef928290030190a2600084118061212b5750600083115b1561213a5761213a8484614361565b505060016006559091565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000806121be600960149054906101000a900460020b600960179054906101000a900460020b613841565b6009549295509093509150611d7d90600160a01b8104600290810b91600160b81b9004900b85613f1e565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461224c576040805162461bcd60e51b815260206004820152600360248201526263623160e81b604482015290519081900360640190fd5b60008282602081101561225e57600080fd5b50356001600160a01b03169050308114156122ec5784156122ad576122ad6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633876133b2565b83156122e7576122e76001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633866133b2565b612362565b8415612327576123276001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823388613dce565b8315612362576123626001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823387613dce565b5050505050565b600260065414156123af576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b60026006556123bc61355f565b6001600160a01b03166123cd61140d565b6001600160a01b031614612416576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b8360020b8560020b12801561245b57507f000000000000000000000000000000000000000000000000000000000000000060020b8560020b8161245557fe5b0760020b155b801561249757507f000000000000000000000000000000000000000000000000000000000000000060020b8460020b8161249157fe5b0760020b155b6124d25760405162461bcd60e51b8152600401808060200182810382526023815260200180614f346023913960400191505060405180910390fd5b8160020b8360020b12801561251757507f000000000000000000000000000000000000000000000000000000000000000060020b8360020b8161251157fe5b0760020b155b801561255357507f000000000000000000000000000000000000000000000000000000000000000060020b8260020b8161254d57fe5b0760020b155b61258e5760405162461bcd60e51b81526004018080602001828103825260248152602001806150c26024913960400191505060405180910390fd5b6009546000906125b390600160a01b8104600290810b91600160b81b9004900b613841565b50909150506001600160801b03811615612685576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b15801561265857600080fd5b505af115801561266c573d6000803e3d6000fd5b505050506040513d604081101561268257600080fd5b50505b6009546000906126aa90600160d01b8104600290810b91600160e81b9004900b613841565b50909150506001600160801b0381161561277c576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b15801561274f57600080fd5b505af1158015612763573d6000803e3d6000fd5b505050506040513d604081101561277957600080fd5b50505b60095460009081906127a390600160a01b8104600290810b91600160b81b9004900b613841565b6009546001600160801b039283169550911692506000915081906127dc90600160d01b8104600290810b91600160e81b9004900b613841565b6001600160801b039182169450169150600090506127fa8584613409565b905060006128088584613409565b60095490915061283190600160a01b8104600290810b91600160b81b9004900b8a30600161332b565b505060095461285990600160d01b8104600290810b91600160e81b9004900b8930600161332b565b50506128658282614361565b7fbc4c20ad04f161d631d9ce94d27659391196415aa3c42f6a71c62e905ece782d61288e610c80565b604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156128f457600080fd5b505afa158015612908573d6000803e3d6000fd5b505050506040513d602081101561291e57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561298657600080fd5b505afa15801561299a573d6000803e3d6000fd5b505050506040513d60208110156129b057600080fd5b505185856129bc610e67565b6040805160029790970b87526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190a18815612b83576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663128acb083060008c1380612a3b578c600003612a3d565b8c5b60008e13612a5f5773fffd8963efd1fc6a506488495d951d5263988d25612a66565b6401000276a45b3060405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612b07578181015183820152602001612aef565b50505050905090810190601f168015612b345780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b158015612b5657600080fd5b505af1158015612b6a573d6000803e3d6000fd5b505050506040513d6040811015612b8057600080fd5b50505b8c600960146101000a81548162ffffff021916908360020b62ffffff1602179055508b600960176101000a81548162ffffff021916908360020b62ffffff160217905550612d1a600960149054906101000a900460020b600960179054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612c5757600080fd5b505afa158015612c6b573d6000803e3d6000fd5b505050506040513d6020811015612c8157600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b158015612ce957600080fd5b505afa158015612cfd573d6000803e3d6000fd5b505050506040513d6020811015612d1357600080fd5b5051614815565b600954909850612d4090600160a01b8104600290810b91600160b81b9004900b8a614a45565b50508a6009601a6101000a81548162ffffff021916908360020b62ffffff160217905550896009601d6101000a81548162ffffff021916908360020b62ffffff160217905550612e166009601a9054906101000a900460020b6009601d9054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612c5757600080fd5b600954909750612e3c90600160d01b8104600290810b91600160e81b9004900b89614a45565b5050600160065550505050505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b612ecd61355f565b6001600160a01b0316612ede61140d565b6001600160a01b031614612f27576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b6001600160a01b038116612f6c5760405162461bcd60e51b8152600401808060200182810382526026815260200180614eec6026913960400191505060405180910390fd5b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600e5463ffffffff1681565b612fdc61355f565b6001600160a01b0316612fed61140d565b6001600160a01b031614613036576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b60008163ffffffff1611613091576040805162461bcd60e51b815260206004820181905260248201527f49562e73657454776170506572696f643a206d697373696e6720706572696f64604482015290519081900360640190fd5b600e805463ffffffff191663ffffffff831690811790915560408051338152602081019290925280517fe4c60f4984caeb7f45b0cfe6d4233c115601ab11d141bc2cbf68b48346cdef389281900390910190a150565b600954600160a01b900460020b81565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461315a576040805162461bcd60e51b815260206004820152600360248201526231b11960e91b604482015290519081900360640190fd5b60008282602081101561316c57600080fd5b50356001600160a01b031690506000851315613201576001600160a01b0381163014156131cc576131c76001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633876133b2565b6122e7565b6122e76001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823388613dce565b6000841315612362576001600160a01b03811630141561324f576122e76001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633866133b2565b6123626001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823387613dce565b60008082116132da576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816132e357fe5b049392505050565b6000806132f88585613841565b5050905061332261331d61330a610e67565b610af86001600160801b03851687613359565b614ba9565b95945050505050565b6000806001600160801b0385161561334f5761334a8787878787614159565b915091505b9550959350505050565b60008261336857506000610e09565b8282028284828161337557fe5b0414610eee5760405162461bcd60e51b8152600401808060200182810382526021815260200180614fc56021913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052613404908490614bf7565b505050565b600082820183811015610eee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166134a85760405162461bcd60e51b815260040180806020018281038252602181526020018061502e6021913960400191505060405180910390fd5b6134b482600083613404565b6134f181604051806060016040528060228152602001614eca602291396001600160a01b03851660009081526020819052604090205491906137aa565b6001600160a01b0383166000908152602081905260409020556002546135179082613c39565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b3390565b6001600160a01b0383166135a85760405162461bcd60e51b81526004018080602001828103825260248152602001806150746024913960400191505060405180910390fd5b6001600160a01b0382166135ed5760405162461bcd60e51b8152600401808060200182810382526022815260200180614f126022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166136945760405162461bcd60e51b815260040180806020018281038252602581526020018061504f6025913960400191505060405180910390fd5b6001600160a01b0382166136d95760405162461bcd60e51b8152600401808060200182810382526023815260200180614e876023913960400191505060405180910390fd5b6136e4838383613404565b61372181604051806060016040528060268152602001614f57602691396001600160a01b03861660009081526020819052604090205491906137aa565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546137509082613409565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156138395760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137fe5781810151838201526020016137e6565b50505050905090810190601f16801561382b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060008030868660405160200180846001600160a01b031660601b81526014018360020b60e81b81526003018260020b60e81b815260030193505050506040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf826040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b1580156138fc57600080fd5b505afa158015613910573d6000803e3d6000fd5b505050506040513d60a081101561392657600080fd5b5080516060820151608090920151909891975095509350505050565b600073088ee1fb556cbd24383afe3ed9812235ee931e136343c57a278473088ee1fb556cbd24383afe3ed9812235ee931e1363809fdd33866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156139ae57600080fd5b505af41580156139c2573d6000803e3d6000fd5b505050506040513d60208110156139d857600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808a16604484015288166064830152516084808301926020929190829003018186803b158015613a4157600080fd5b505af4158015613a55573d6000803e3d6000fd5b505050506040513d6020811015613a6b57600080fd5b505195945050505050565b60008073088ee1fb556cbd24383afe3ed9812235ee931e13638241348988866040518363ffffffff1660e01b815260040180836001600160a01b031681526020018263ffffffff1681526020019250505060206040518083038186803b158015613adf57600080fd5b505af4158015613af3573d6000803e3d6000fd5b505050506040513d6020811015613b0957600080fd5b50516040805163809fdd3360e01b815260048101869052905160029290920b925073088ee1fb556cbd24383afe3ed9812235ee931e13916343c57a27918491849163809fdd33916024808301926020929190829003018186803b158015613b6f57600080fd5b505af4158015613b83573d6000803e3d6000fd5b505050506040513d6020811015613b9957600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808b16604484015289166064830152516084808301926020929190829003018186803b158015613c0257600080fd5b505af4158015613c16573d6000803e3d6000fd5b505050506040513d6020811015613c2c57600080fd5b5051979650505050505050565b600082821115613c90576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613cf257600080fd5b505afa158015613d06573d6000803e3d6000fd5b505050506040513d60e0811015613d1c57600080fd5b50604090810151815163252c09d760e01b815261ffff8216600482015291519092506000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163252c09d791602480820192608092909190829003018186803b158015613d9257600080fd5b505afa158015613da6573d6000803e3d6000fd5b505050506040513d6080811015613dbc57600080fd5b505163ffffffff164214159392505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613e28908590614bf7565b50505050565b6001600160a01b038216613e89576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613e9560008383613404565b600254613ea29082613409565b6002556001600160a01b038216600090815260208190526040902054613ec89082613409565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613f7c57600080fd5b505afa158015613f90573d6000803e3d6000fd5b505050506040513d60e0811015613fa657600080fd5b50516040805163986cfba360e01b8152600289900b6004820152905191925073088ee1fb556cbd24383afe3ed9812235ee931e139163c72e160b918491849163986cfba3916024808301926020929190829003018186803b15801561400a57600080fd5b505af415801561401e573d6000803e3d6000fd5b505050506040513d602081101561403457600080fd5b50516040805163986cfba360e01b815260028b900b6004820152905173088ee1fb556cbd24383afe3ed9812235ee931e139163986cfba3916024808301926020929190829003018186803b15801561408b57600080fd5b505af415801561409f573d6000803e3d6000fd5b505050506040513d60208110156140b557600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0388166064820152815160848083019392829003018186803b15801561411757600080fd5b505af415801561412b573d6000803e3d6000fd5b505050506040513d604081101561414157600080fd5b5080516020909101519093509150505b935093915050565b6040805163a34123a760e01b8152600287810b600483015286900b60248201526001600160801b038516604482015281516000928392839283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a7926064808301939282900301818787803b1580156141e057600080fd5b505af11580156141f4573d6000803e3d6000fd5b505050506040513d604081101561420a57600080fd5b508051602090910151909250905060008561422d5761422883614ba9565b614236565b6001600160801b035b905060008661424d5761424883614ba9565b614256565b6001600160801b035b90506000826001600160801b0316118061427957506000816001600160801b0316115b1561435357604080516309e3d67b60e31b81526001600160a01b038a8116600483015260028e810b60248401528d900b60448301526001600160801b0385811660648401528416608483015282517f000000000000000000000000000000000000000000000000000000000000000090911692634f1eb3d89260a480820193918290030181600087803b15801561430f57600080fd5b505af1158015614323573d6000803e3d6000fd5b505050506040513d604081101561433957600080fd5b5080516020909101516001600160801b0391821697501694505b505050509550959350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663665a17c56040518163ffffffff1660e01b815260040160206040518083038186803b1580156143bc57600080fd5b505afa1580156143d0573d6000803e3d6000fd5b505050506040513d60208110156143e657600080fd5b5051604080516337792e1d60e11b815290519192506000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636ef25c3a916004808301926020929190829003018186803b15801561444e57600080fd5b505afa158015614462573d6000803e3d6000fd5b505050506040513d602081101561447857600080fd5b50519050811580159061449557506008546001600160a01b031615155b156145545783156144f7576008546144f7906001600160a01b03166144c6670de0b6b3a7640000610af88887613359565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906133b2565b821561455457600854614554906001600160a01b0316614523670de0b6b3a7640000610af88787613359565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906133b2565b8015613e28576009546000906001600160a01b0316156145f8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663acc8247d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145c757600080fd5b505afa1580156145db573d6000803e3d6000fd5b505050506040513d60208110156145f157600080fd5b5051614602565b670de0b6b3a76400005b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b15801561465f57600080fd5b505afa158015614673573d6000803e3d6000fd5b505050506040513d602081101561468957600080fd5b50519050851561474d5760006146ab670de0b6b3a7640000610af88987613359565b905060006146c5670de0b6b3a7640000610af88487613359565b905060006146d38383613c39565b90506147096001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685846133b2565b801561474957600954614749906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116836133b2565b5050505b841561480d57600061476b670de0b6b3a7640000610af88887613359565b90506000614785670de0b6b3a7640000610af88487613359565b905060006147938383613c39565b90506147c96001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685846133b2565b801561480957600954614809906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116836133b2565b5050505b505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561487157600080fd5b505afa158015614885573d6000803e3d6000fd5b505050506040513d60e081101561489b57600080fd5b50516040805163986cfba360e01b8152600289900b6004820152905191925073088ee1fb556cbd24383afe3ed9812235ee931e1391636098fd4a918491849163986cfba3916024808301926020929190829003018186803b1580156148ff57600080fd5b505af4158015614913573d6000803e3d6000fd5b505050506040513d602081101561492957600080fd5b50516040805163986cfba360e01b815260028b900b6004820152905173088ee1fb556cbd24383afe3ed9812235ee931e139163986cfba3916024808301926020929190829003018186803b15801561498057600080fd5b505af4158015614994573d6000803e3d6000fd5b505050506040513d60208110156149aa57600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810188905260848101879052905160a4808301926020929190829003018186803b158015614a0f57600080fd5b505af4158015614a23573d6000803e3d6000fd5b505050506040513d6020811015614a3957600080fd5b50519695505050505050565b6000806001600160801b03831615614151576040805130602080830182905283518084038201815283850194859052633c8a7d8d60e01b9094526044830182815260028a810b606486015289900b60848501526001600160801b03881660a485015260a060c48501908152855160e486015285516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001696633c8a7d8d968d958d958d959394909392610104019185019080838360005b83811015614b1b578181015183820152602001614b03565b50505050905090810190601f168015614b485780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b158015614b6a57600080fd5b505af1158015614b7e573d6000803e3d6000fd5b505050506040513d6040811015614b9457600080fd5b50805160209091015190969095509350505050565b60006001600160801b03821115614bf3576040805162461bcd60e51b815260206004820152600960248201526824ab1718991c2fa7a360b91b604482015290519081900360640190fd5b5090565b6000614c4c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614ca89092919063ffffffff16565b80519091501561340457808060200190516020811015614c6b57600080fd5b50516134045760405162461bcd60e51b815260040180806020018281038252602a815260200180615098602a913960400191505060405180910390fd5b6060614cb78484600085614cbf565b949350505050565b606082471015614d005760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7d6026913960400191505060405180910390fd5b614d0985614e1a565b614d5a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614d985780518252601f199092019160209182019101614d79565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614dfa576040519150601f19603f3d011682016040523d82523d6000602084013e614dff565b606091505b5091509150614e0f828286614e20565b979650505050505050565b3b151590565b60608315614e2f575081610eee565b825115614e3f5782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156137fe5781810151838201526020016137e656fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735265656e7472616e637947756172643a207265656e7472616e742063616c6c0045524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737349562e726562616c616e63653a206261736520706f736974696f6e20696e76616c696445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c49562e63757272656e745469636b3a2074686520706f6f6c206973206c6f636b6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656449562e726562616c616e63653a206c696d697420706f736974696f6e20696e76616c696445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077c38064c0fc1ea437535c2ea3efdd26abd3ce7c262500bcff50b943c65b510b64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e049562e636f6e7374727563746f723a206e6f20616c6c6f77656420746f6b656e730000000000000000000000002c5cd76a57ebccf0307a2ffed1fa666057a875a700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249397aa78be5955dbc2102df31b3fb2a92b1aa80000000000000000000000000000000000000000000000000000000000000e10