[ { "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": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "pancakeV3MintCallback", "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": "pancakeV3SwapCallback", "outputs": [], "stateMutability": "nonpayable", "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": "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" } ]
6101806040523480156200001257600080fd5b5060405162005a5138038062005a51833981810160405260a08110156200003857600080fd5b508051602080830151604080850151606086015160809096015182518084018452601481527f49434849205661756c74204c69717569646974790000000000000000000000008187019081528451808601909552600d85526c0494348495f5661756c745f4c5609c1b968501969096528051969794969295919390929091620000c5916003919062000666565b508051620000db90600490602084019062000666565b50506005805460ff191660121790555060016006556000620000fc620004df565b600780546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005a10833981519152908290a3506001600160a01b03851662000195576040805162461bcd60e51b815260206004820152601c60248201527f49562e636f6e7374727563746f723a207a65726f206164647265737300000000604482015290519081900360640190fd5b83806200019f5750825b620001dc5760405162461bcd60e51b815260040180806020018281038252602181526020018062005a306021913960400191505060405180910390fd5b33606090811b60805285901b6001600160601b03191660a05260408051630dfe168160e01b815290516001600160a01b03871691630dfe1681916004808301926020929190829003018186803b1580156200023657600080fd5b505afa1580156200024b573d6000803e3d6000fd5b505050506040513d60208110156200026257600080fd5b505160601b6001600160601b03191660c0526040805163d21220a760e01b815290516001600160a01b0387169163d21220a7916004808301926020929190829003018186803b158015620002b557600080fd5b505afa158015620002ca573d6000803e3d6000fd5b505050506040513d6020811015620002e157600080fd5b505160601b6001600160601b03191660e0526040805163ddca3f4360e01b815290516001600160a01b0387169163ddca3f43916004808301926020929190829003018186803b1580156200033457600080fd5b505afa15801562000349573d6000803e3d6000fd5b505050506040513d60208110156200036057600080fd5b505160e81b6001600160e81b0319166101405283151560f890811b61010052831515901b61012052600e805463ffffffff191663ffffffff8316179055604080516334324e9f60e21b815290516001600160a01b0387169163d0c93a7c916004808301926020929190829003018186803b158015620003de57600080fd5b505afa158015620003f3573d6000803e3d6000fd5b505050506040513d60208110156200040a57600080fd5b5051600290810b900b60e81b610160526200042582620004e3565b6000600c556200044b670de0b6b3a76400006064620005ee602090811b6200328417901c565b600d55600019600a819055600b55600880546001600160a01b031990811690915560098054909116905560408051851515815284151560208201526001600160a01b038481168284015263ffffffff8416606083015291519187169133917f3e708ccf7d0e6de8558e020ea36189511cb3435bbfec54e721a48ee4df0d4f8c919081900360800190a3505050505062000712565b3390565b620004ed620004df565b6001600160a01b03166200050062000657565b6001600160a01b0316146200055c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005a35760405162461bcd60e51b8152600401808060200182810382526026815260200180620059ea6026913960400191505060405180910390fd5b6007546040516001600160a01b0380841692169060008051602062005a1083398151915290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600080821162000645576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816200064f57fe5b049392505050565b6007546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200069e5760008555620006e9565b82601f10620006b957805160ff1916838001178555620006e9565b82800160010185558215620006e9579182015b82811115620006e9578251825591602001919060010190620006cc565b50620006f7929150620006fb565b5090565b5b80821115620006f75760008155600101620006fc565b60805160601c60a05160601c60c05160601c60e05160601c6101005160f81c6101205160f81c6101405160e81c6101605160e81c615140620008aa6000398061245452806125b552806125f1528061267152806126ad525080613030525080611158528061167f5250806114ac5280611604525080610b0c5280610bc65280610fa35280610fd75280611b0e5280611b965280611cf75280611f915280612006528061222452806124785280612acd5280612e30528061452d52806147a252806147e0525080610a5b5280610b8c5280610e115280610f165280610f4f5280611aed5280611b745280611cbc5280611f575280611fcb528061217b5280612a3b5280612d795280612f3852806144d052806146e25280614720525080610c875280610e455280610e7852806118a65280611a0a5280611b525280611ec5528061279f52806128965280612b9052806138fa5280613cfb5280613dab5280613f25528061419d52806142c9528061481a5280614ac352508061300c528061436552806144085280614570528061460852506151406000f3fe608060405234801561001057600080fd5b50600436106102d55760003560e01c80637f7a1eec11610182578063c4a7761e116100e9578063dd62ed3e116100a2578063f2fde38b1161007c578063f2fde38b1461087b578063f6207326146108a1578063f9c95d46146108c2578063fa082743146108e5576102d5565b8063dd62ed3e14610825578063dd81fa6314610853578063ddca3f431461085b576102d5565b8063c4a7761e146107bc578063c8796572146107c4578063d0c93a7c146107cc578063d21220a7146107d4578063d2eabcfc146107dc578063d87346aa146107e4576102d5565b806395d89b411161013b57806395d89b41146106a857806399eee9d0146106b0578063a049de6b1461072c578063a457c2d71461075c578063a9059cbb14610788578063aaf5eb68146107b4576102d5565b80637f7a1eec1461063057806381de128b14610638578063888a91341461065e578063897f078c146106665780638da5cb5b1461066e5780638dbdbe6d14610676576102d5565b8063313ce567116102415780634d461fbb116101fa578063648cab85116101d4578063648cab85146105f257806370a08231146105fa578063715018a6146106205780637aea530914610628576102d5565b80634d461fbb146105c557806351e87af7146105cd5780635ffc1ff7146105d5576102d5565b8063313ce5671461052b57806337e41b401461054957806339509351146105515780633e091ee91461057d5780633f3e4c11146105a057806345e05f43146105bd576102d5565b806316f0115b1161029357806316f0115b1461042757806318160ddd1461042f57806323a69e751461044957806323b872dd146104c75780632ab4d052146104fd5780632bbb56d914610505576102d5565b8062f714ce146102da578063065e53601461031f57806306fdde031461033e578063095ea7b3146103bb5780630dfe1681146103fb5780630f35bcac1461041f575b600080fd5b610306600480360360408110156102f057600080fd5b50803590602001356001600160a01b03166108ed565b6040805192835260208301919091528051918290030190f35b610327610c80565b6040805160029290920b8252519081900360200190f35b610346610d5b565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610380578181015183820152602001610368565b50505050905090810190601f1680156103ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e7600480360360408110156103d157600080fd5b506001600160a01b038135169060200135610df1565b604080519115158252519081900360200190f35b610403610e0f565b604080516001600160a01b039092168252519081900360200190f35b610327610e33565b610403610e43565b610437610e67565b60408051918252519081900360200190f35b6104c56004803603606081101561045f57600080fd5b81359160208101359181019060608101604082013564010000000081111561048657600080fd5b82018360208201111561049857600080fd5b803590602001918460018302840111640100000000831117156104ba57600080fd5b509092509050610e6d565b005b6103e7600480360360608110156104dd57600080fd5b506001600160a01b03813581169160208101359091169060400135611006565b61043761108e565b6104c56004803603602081101561051b57600080fd5b50356001600160a01b0316611094565b61053361114d565b6040805160ff9092168252519081900360200190f35b6103e7611156565b6103e76004803603604081101561056757600080fd5b506001600160a01b03813516906020013561117a565b6104c56004803603604081101561059357600080fd5b50803590602001356111c8565b6104c5600480360360208110156105b657600080fd5b5035611272565b610403611312565b610437611321565b610327611327565b6104c5600480360360208110156105eb57600080fd5b5035611337565b6104376113d7565b6104376004803603602081101561061057600080fd5b50356001600160a01b03166113dd565b6104c56113f8565b6104376114a4565b6103e76114aa565b6104c56004803603602081101561064e57600080fd5b50356001600160a01b03166114ce565b610327611587565b610403611597565b6104036115a6565b6104376004803603606081101561068c57600080fd5b50803590602081013590604001356001600160a01b03166115b5565b610346611e59565b6104c5600480360360608110156106c657600080fd5b8135916020810135918101906060810160408201356401000000008111156106ed57600080fd5b8201836020820111156106ff57600080fd5b8035906020019184600183028401116401000000008311171561072157600080fd5b509092509050611eba565b61073461202e565b604080516001600160801b039094168452602084019290925282820152519081900360600190f35b6103e76004803603604081101561077257600080fd5b506001600160a01b0381351690602001356120c6565b6103e76004803603604081101561079e57600080fd5b506001600160a01b03813516906020013561212e565b610437612142565b61030661214e565b610306612299565b610327612452565b610403612476565b61073461249a565b6104c5600480360360a08110156107fa57600080fd5b508035600290810b916020810135820b916040820135810b91606081013590910b90608001356124f6565b6104376004803603604081101561083b57600080fd5b506001600160a01b0381358116916020013516612fdf565b61040361300a565b61086361302e565b6040805162ffffff9092168252519081900360200190f35b6104c56004803603602081101561089157600080fd5b50356001600160a01b0316613052565b6108a9613155565b6040805163ffffffff9092168252519081900360200190f35b6104c5600480360360208110156108d857600080fd5b503563ffffffff16613161565b610327613274565b60008060026006541415610936576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b600260065583610983576040805162461bcd60e51b815260206004820152601360248201527249562e77697468647261773a2073686172657360681b604482015290519081900360640190fd5b6001600160a01b0383166109d0576040805162461bcd60e51b815260206004820152600f60248201526e49562e77697468647261773a20746f60881b604482015290519081900360640190fd5b6009546000908190610a0590600160a01b8104600290810b91600160b81b9004900b6109fd82828b6132eb565b88600061332b565b60095491935091506000908190610a3f90600160d01b8104600290810b91600160e81b9004900b610a3782828d6132eb565b8a600061332b565b915091506000610a4d610e67565b90506000610afe82610af88c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ac657600080fd5b505afa158015610ada573d6000803e3d6000fd5b505050506040513d6020811015610af057600080fd5b505190613359565b90613284565b90506000610b7783610af88d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ac657600080fd5b90508115610bb357610bb36001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b846133b2565b8015610bed57610bed6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b836133b2565b610c0182610bfb8988613409565b90613409565b9850610c1181610bfb8887613409565b9750610c1d338c613463565b604080518c8152602081018b90528082018a905290516001600160a01b038c169133917febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360600190a35050505050505060016006819055509250929050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610cde57600080fd5b505afa158015610cf2573d6000803e3d6000fd5b505050506040513d60e0811015610d0857600080fd5b50602081015160c090910151909250905080610d555760405162461bcd60e51b8152600401808060200182810382526022815260200180614fa36022913960400191505060405180910390fd5b50919050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b5050505050905090565b6000610e05610dfe61355f565b8484613563565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600954600160e81b900460020b81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ed0576040805162461bcd60e51b815260206004820152600360248201526231b11960e91b604482015290519081900360640190fd5b600082826020811015610ee257600080fd5b50356001600160a01b031690506000851315610f7c576001600160a01b038116301415610f4257610f3d6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633876133b2565b610f77565b610f776001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682338861364f565b610fff565b6000841315610fff576001600160a01b038116301415610fca57610f776001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633866133b2565b610fff6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682338761364f565b5050505050565b60006110138484846136af565b6110838461101f61355f565b61107e85604051806060016040528060288152602001614fe6602891396001600160a01b038a1660009081526001602052604081209061105d61355f565b6001600160a01b03168152602081019190915260400160002054919061380a565b613563565b5060015b9392505050565b600c5481565b61109c61355f565b6001600160a01b03166110ad6115a6565b6001600160a01b0316146110f6576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600980546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917f3066ef5dd340e8b2ea28d62f5a8391eb7a82d3ee87532724a1ca4386d34f7523919081900360200190a250565b60055460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e0561118761355f565b8461107e856001600061119861355f565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613409565b6111d061355f565b6001600160a01b03166111e16115a6565b6001600160a01b03161461122a576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600a829055600b8190556040805183815260208101839052815133927fafd3b05a4086b378b6f291200a528d8aed8c5e0317af77436b001f1bec28821a928290030190a25050565b61127a61355f565b6001600160a01b031661128b6115a6565b6001600160a01b0316146112d4576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600c81905560408051828152905133917f7423cea36ad2104e8e8c3d9aa1e24288bdf3bfa7b4f37868cfa6d4d34ffdaf3a919081900360200190a250565b6009546001600160a01b031681565b600b5481565b600954600160d01b900460020b81565b61133f61355f565b6001600160a01b03166113506115a6565b6001600160a01b031614611399576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600d81905560408051828152905133917f529698f34660760dcb172def5c99d62e1b5b74b444df322e8f7da31f2bd0a86b919081900360200190a250565b600a5481565b6001600160a01b031660009081526020819052604090205490565b61140061355f565b6001600160a01b03166114116115a6565b6001600160a01b03161461145a576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6114d661355f565b6001600160a01b03166114e76115a6565b6001600160a01b031614611530576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b600880546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917fbb78b7c13893a913fa8c9ecb9fdaf97597aa412a39c778bf976790555f0942f7919081900360200190a250565b600954600160b81b900460020b81565b6008546001600160a01b031681565b6007546001600160a01b031690565b6000600260065414156115fd576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b60026006557f00000000000000000000000000000000000000000000000000000000000000008061162c575083155b61167d576040805162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a20746f6b656e30206e6f7420616c6c6f7765640000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000806116a7575082155b6116f8576040805162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a20746f6b656e31206e6f7420616c6c6f7765640000604482015290519081900360640190fd5b60008411806117075750600083115b611758576040805162461bcd60e51b815260206004820181905260248201527f49562e6465706f7369743a206465706f73697473206d757374206265203e2030604482015290519081900360640190fd5b600a548410801561176a5750600b5483105b6117bb576040805162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a206465706f7369747320746f6f206c617267650000604482015290519081900360640190fd5b6001600160a01b038216158015906117dc57506001600160a01b0382163014155b61181e576040805162461bcd60e51b815260206004820152600e60248201526d49562e6465706f7369743a20746f60901b604482015290519081900360640190fd5b60095460009061184390600160a01b8104600290810b91600160b81b9004900b6138a1565b50909150506001600160801b03811615611982576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b1580156118ea57600080fd5b505af11580156118fe573d6000803e3d6000fd5b505050506040513d604081101561191457600080fd5b50805160209091015190925090508115801561192e575080155b61197f576040805162461bcd60e51b815260206004820152601f60248201527f49562e6465706f7369743a20756e6578706563746564206275726e2028312900604482015290519081900360640190fd5b50505b6009546000906119a790600160d01b8104600290810b91600160e81b9004900b6138a1565b50909150506001600160801b03811615611ae6576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b158015611a4e57600080fd5b505af1158015611a62573d6000803e3d6000fd5b505050506040513d6040811015611a7857600080fd5b508051602090910151909250905081158015611a92575080155b611ae3576040805162461bcd60e51b815260206004820152601f60248201527f49562e6465706f7369743a20756e6578706563746564206275726e2028322900604482015290519081900360640190fd5b50505b6000611b437f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611b35610c80565b670de0b6b3a76400006139a2565b600e54909150600090611bca907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009063ffffffff16670de0b6b3a7640000613ad6565b90506000818311611bfa57611bf582610af8670de0b6b3a7640000611bef8388613c99565b90613359565b611c14565b611c1483610af8670de0b6b3a7640000611bef8387613c99565b9050600d54811115611c7157611c28613cf6565b611c71576040805162461bcd60e51b815260206004820152601560248201527424ab173232b837b9b4ba1d103a393c903630ba32b960591b604482015290519081900360640190fd5b600080611c7c61214e565b915091506000611ca7670de0b6b3a7640000610af8878910611c9e5787611ca0565b885b8f90613359565b90508b15611ce457611ce46001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308f61364f565b8a15611d1f57611d1f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308e61364f565b611d298b82613409565b9850611d33610e67565b15611d84576000611d5f670de0b6b3a7640000610af8888a11611d565788611d58565b895b8790613359565b9050611d80611d6e8285613409565b610af8611d79610e67565b8d90613359565b9950505b611d8e8a8a613e2e565b604080518a8152602081018e90528082018d905290516001600160a01b038c169133917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69181900360600190a3600c541580611df35750600c54611df0610e67565b11155b611e44576040805162461bcd60e51b815260206004820152601a60248201527f49562e6465706f7369743a206d6178546f74616c537570706c79000000000000604482015290519081900360640190fd5b50506001600655509498975050505050505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de75780601f10610dbc57610100808354040283529160200191610de7565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f1d576040805162461bcd60e51b815260206004820152600360248201526263623160e81b604482015290519081900360640190fd5b600082826020811015611f2f57600080fd5b50356001600160a01b0316905030811415611fb8578415611f7e57611f7e6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633876133b2565b8315610f7757610f776001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633866133b2565b8415611ff357611ff36001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682338861364f565b8315610fff57610fff6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682338761364f565b60008060008060008061205f6009601a9054906101000a900460020b6009601d9054906101000a900460020b6138a1565b600954929550909350915061208a90600160d01b8104600290810b91600160e81b9004900b85613f1e565b939650945091925084916120a7856001600160801b038416613409565b94506120bc846001600160801b038316613409565b9350505050909192565b6000610e056120d361355f565b8461107e856040518060600160405280602581526020016150e660259139600160006120fd61355f565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061380a565b6000610e0561213b61355f565b84846136af565b670de0b6b3a764000081565b60008060008061215c61249a565b925092505060008061216c61202e565b925092505061221882610bfb867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156121e657600080fd5b505afa1580156121fa573d6000803e3d6000fd5b505050506040513d602081101561221057600080fd5b505190613409565b955061228f81610bfb857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156121e657600080fd5b9450505050509091565b600080600260065414156122e2576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b6002600681905560095460009161230c91600160a01b8104820b91600160b81b909104900b6138a1565b50909150506001600160801b0381161561236b57600954600090819061234b90600160a01b8104600290810b91600160b81b9004900b83306001614159565b909250905061235a8583613409565b94506123668482613409565b935050505b60095460009061239090600160d01b8104600290810b91600160e81b9004900b6138a1565b50909150506001600160801b038116156123ef5760095460009081906123cf90600160d01b8104600290810b91600160e81b9004900b83306001614159565b90925090506123de8683613409565b95506123ea8582613409565b945050505b6040805185815260208101859052815133927fec8208dd791fa8ffdc0d7427f3ba9c0ed06f1bce9a86254e6940c10cc1802fef928290030190a260008411806124385750600083115b15612447576124478484614361565b505060016006559091565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000806124cb600960149054906101000a900460020b600960179054906101000a900460020b6138a1565b600954929550909350915061208a90600160a01b8104600290810b91600160b81b9004900b85613f1e565b6002600654141561253c576040805162461bcd60e51b815260206004820152601f6024820152600080516020614eaa833981519152604482015290519081900360640190fd5b600260065561254961355f565b6001600160a01b031661255a6115a6565b6001600160a01b0316146125a3576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b8360020b8560020b1280156125e857507f000000000000000000000000000000000000000000000000000000000000000060020b8560020b816125e257fe5b0760020b155b801561262457507f000000000000000000000000000000000000000000000000000000000000000060020b8460020b8161261e57fe5b0760020b155b61265f5760405162461bcd60e51b8152600401808060200182810382526023815260200180614f346023913960400191505060405180910390fd5b8160020b8360020b1280156126a457507f000000000000000000000000000000000000000000000000000000000000000060020b8360020b8161269e57fe5b0760020b155b80156126e057507f000000000000000000000000000000000000000000000000000000000000000060020b8260020b816126da57fe5b0760020b155b61271b5760405162461bcd60e51b81526004018080602001828103825260248152602001806150c26024913960400191505060405180910390fd5b60095460009061274090600160a01b8104600290810b91600160b81b9004900b6138a1565b50909150506001600160801b03811615612812576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b1580156127e557600080fd5b505af11580156127f9573d6000803e3d6000fd5b505050506040513d604081101561280f57600080fd5b50505b60095460009061283790600160d01b8104600290810b91600160e81b9004900b6138a1565b50909150506001600160801b03811615612909576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b1580156128dc57600080fd5b505af11580156128f0573d6000803e3d6000fd5b505050506040513d604081101561290657600080fd5b50505b600954600090819061293090600160a01b8104600290810b91600160b81b9004900b6138a1565b6009546001600160801b0392831695509116925060009150819061296990600160d01b8104600290810b91600160e81b9004900b6138a1565b6001600160801b039182169450169150600090506129878584613409565b905060006129958584613409565b6009549091506129be90600160a01b8104600290810b91600160b81b9004900b8a30600161332b565b50506009546129e690600160d01b8104600290810b91600160e81b9004900b8930600161332b565b50506129f28282614361565b7fbc4c20ad04f161d631d9ce94d27659391196415aa3c42f6a71c62e905ece782d612a1b610c80565b604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b158015612a8157600080fd5b505afa158015612a95573d6000803e3d6000fd5b505050506040513d6020811015612aab57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b158015612b1357600080fd5b505afa158015612b27573d6000803e3d6000fd5b505050506040513d6020811015612b3d57600080fd5b50518585612b49610e67565b6040805160029790970b87526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190a18815612d10576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663128acb083060008c1380612bc8578c600003612bca565b8c5b60008e13612bec5773fffd8963efd1fc6a506488495d951d5263988d25612bf3565b6401000276a45b3060405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c94578181015183820152602001612c7c565b50505050905090810190601f168015612cc15780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050506040513d6040811015612d0d57600080fd5b50505b8c600960146101000a81548162ffffff021916908360020b62ffffff1602179055508b600960176101000a81548162ffffff021916908360020b62ffffff160217905550612ea7600960149054906101000a900460020b600960179054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612de457600080fd5b505afa158015612df8573d6000803e3d6000fd5b505050506040513d6020811015612e0e57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b158015612e7657600080fd5b505afa158015612e8a573d6000803e3d6000fd5b505050506040513d6020811015612ea057600080fd5b5051614815565b600954909850612ecd90600160a01b8104600290810b91600160b81b9004900b8a614a45565b50508a6009601a6101000a81548162ffffff021916908360020b62ffffff160217905550896009601d6101000a81548162ffffff021916908360020b62ffffff160217905550612fa36009601a9054906101000a900460020b6009601d9054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612de457600080fd5b600954909750612fc990600160d01b8104600290810b91600160e81b9004900b89614a45565b5050600160065550505050505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61305a61355f565b6001600160a01b031661306b6115a6565b6001600160a01b0316146130b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b6001600160a01b0381166130f95760405162461bcd60e51b8152600401808060200182810382526026815260200180614eec6026913960400191505060405180910390fd5b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600e5463ffffffff1681565b61316961355f565b6001600160a01b031661317a6115a6565b6001600160a01b0316146131c3576040805162461bcd60e51b8152602060048201819052602482015260008051602061500e833981519152604482015290519081900360640190fd5b60008163ffffffff161161321e576040805162461bcd60e51b815260206004820181905260248201527f49562e73657454776170506572696f643a206d697373696e6720706572696f64604482015290519081900360640190fd5b600e805463ffffffff191663ffffffff831690811790915560408051338152602081019290925280517fe4c60f4984caeb7f45b0cfe6d4233c115601ab11d141bc2cbf68b48346cdef389281900390910190a150565b600954600160a01b900460020b81565b60008082116132da576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816132e357fe5b049392505050565b6000806132f885856138a1565b5050905061332261331d61330a610e67565b610af86001600160801b03851687613359565b614ba9565b95945050505050565b6000806001600160801b0385161561334f5761334a8787878787614159565b915091505b9550959350505050565b60008261336857506000610e09565b8282028284828161337557fe5b04146110875760405162461bcd60e51b8152600401808060200182810382526021815260200180614fc56021913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052613404908490614bf7565b505050565b600082820183811015611087576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166134a85760405162461bcd60e51b815260040180806020018281038252602181526020018061502e6021913960400191505060405180910390fd5b6134b482600083613404565b6134f181604051806060016040528060228152602001614eca602291396001600160a01b038516600090815260208190526040902054919061380a565b6001600160a01b0383166000908152602081905260409020556002546135179082613c99565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b3390565b6001600160a01b0383166135a85760405162461bcd60e51b81526004018080602001828103825260248152602001806150746024913960400191505060405180910390fd5b6001600160a01b0382166135ed5760405162461bcd60e51b8152600401808060200182810382526022815260200180614f126022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526136a9908590614bf7565b50505050565b6001600160a01b0383166136f45760405162461bcd60e51b815260040180806020018281038252602581526020018061504f6025913960400191505060405180910390fd5b6001600160a01b0382166137395760405162461bcd60e51b8152600401808060200182810382526023815260200180614e876023913960400191505060405180910390fd5b613744838383613404565b61378181604051806060016040528060268152602001614f57602691396001600160a01b038616600090815260208190526040902054919061380a565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546137b09082613409565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156138995760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561385e578181015183820152602001613846565b50505050905090810190601f16801561388b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060008030868660405160200180846001600160a01b031660601b81526014018360020b60e81b81526003018260020b60e81b815260030193505050506040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf826040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b15801561395c57600080fd5b505afa158015613970573d6000803e3d6000fd5b505050506040513d60a081101561398657600080fd5b5080516060820151608090920151909891975095509350505050565b60007313f01f6a69a870bf79163fb02a65abd58ccb82306343c57a27847313f01f6a69a870bf79163fb02a65abd58ccb823063809fdd33866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613a0e57600080fd5b505af4158015613a22573d6000803e3d6000fd5b505050506040513d6020811015613a3857600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808a16604484015288166064830152516084808301926020929190829003018186803b158015613aa157600080fd5b505af4158015613ab5573d6000803e3d6000fd5b505050506040513d6020811015613acb57600080fd5b505195945050505050565b6000807313f01f6a69a870bf79163fb02a65abd58ccb8230638241348988866040518363ffffffff1660e01b815260040180836001600160a01b031681526020018263ffffffff1681526020019250505060206040518083038186803b158015613b3f57600080fd5b505af4158015613b53573d6000803e3d6000fd5b505050506040513d6020811015613b6957600080fd5b50516040805163809fdd3360e01b815260048101869052905160029290920b92507313f01f6a69a870bf79163fb02a65abd58ccb8230916343c57a27918491849163809fdd33916024808301926020929190829003018186803b158015613bcf57600080fd5b505af4158015613be3573d6000803e3d6000fd5b505050506040513d6020811015613bf957600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808b16604484015289166064830152516084808301926020929190829003018186803b158015613c6257600080fd5b505af4158015613c76573d6000803e3d6000fd5b505050506040513d6020811015613c8c57600080fd5b5051979650505050505050565b600082821115613cf0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613d5257600080fd5b505afa158015613d66573d6000803e3d6000fd5b505050506040513d60e0811015613d7c57600080fd5b50604090810151815163252c09d760e01b815261ffff8216600482015291519092506000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163252c09d791602480820192608092909190829003018186803b158015613df257600080fd5b505afa158015613e06573d6000803e3d6000fd5b505050506040513d6080811015613e1c57600080fd5b505163ffffffff164214159392505050565b6001600160a01b038216613e89576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613e9560008383613404565b600254613ea29082613409565b6002556001600160a01b038216600090815260208190526040902054613ec89082613409565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613f7c57600080fd5b505afa158015613f90573d6000803e3d6000fd5b505050506040513d60e0811015613fa657600080fd5b50516040805163986cfba360e01b8152600289900b600482015290519192507313f01f6a69a870bf79163fb02a65abd58ccb82309163c72e160b918491849163986cfba3916024808301926020929190829003018186803b15801561400a57600080fd5b505af415801561401e573d6000803e3d6000fd5b505050506040513d602081101561403457600080fd5b50516040805163986cfba360e01b815260028b900b600482015290517313f01f6a69a870bf79163fb02a65abd58ccb82309163986cfba3916024808301926020929190829003018186803b15801561408b57600080fd5b505af415801561409f573d6000803e3d6000fd5b505050506040513d60208110156140b557600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0388166064820152815160848083019392829003018186803b15801561411757600080fd5b505af415801561412b573d6000803e3d6000fd5b505050506040513d604081101561414157600080fd5b5080516020909101519093509150505b935093915050565b6040805163a34123a760e01b8152600287810b600483015286900b60248201526001600160801b038516604482015281516000928392839283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a7926064808301939282900301818787803b1580156141e057600080fd5b505af11580156141f4573d6000803e3d6000fd5b505050506040513d604081101561420a57600080fd5b508051602090910151909250905060008561422d5761422883614ba9565b614236565b6001600160801b035b905060008661424d5761424883614ba9565b614256565b6001600160801b035b90506000826001600160801b0316118061427957506000816001600160801b0316115b1561435357604080516309e3d67b60e31b81526001600160a01b038a8116600483015260028e810b60248401528d900b60448301526001600160801b0385811660648401528416608483015282517f000000000000000000000000000000000000000000000000000000000000000090911692634f1eb3d89260a480820193918290030181600087803b15801561430f57600080fd5b505af1158015614323573d6000803e3d6000fd5b505050506040513d604081101561433957600080fd5b5080516020909101516001600160801b0391821697501694505b505050509550959350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663665a17c56040518163ffffffff1660e01b815260040160206040518083038186803b1580156143bc57600080fd5b505afa1580156143d0573d6000803e3d6000fd5b505050506040513d60208110156143e657600080fd5b5051604080516337792e1d60e11b815290519192506000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636ef25c3a916004808301926020929190829003018186803b15801561444e57600080fd5b505afa158015614462573d6000803e3d6000fd5b505050506040513d602081101561447857600080fd5b50519050811580159061449557506008546001600160a01b031615155b156145545783156144f7576008546144f7906001600160a01b03166144c6670de0b6b3a7640000610af88887613359565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906133b2565b821561455457600854614554906001600160a01b0316614523670de0b6b3a7640000610af88787613359565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906133b2565b80156136a9576009546000906001600160a01b0316156145f8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663acc8247d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145c757600080fd5b505afa1580156145db573d6000803e3d6000fd5b505050506040513d60208110156145f157600080fd5b5051614602565b670de0b6b3a76400005b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b15801561465f57600080fd5b505afa158015614673573d6000803e3d6000fd5b505050506040513d602081101561468957600080fd5b50519050851561474d5760006146ab670de0b6b3a7640000610af88987613359565b905060006146c5670de0b6b3a7640000610af88487613359565b905060006146d38383613c99565b90506147096001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685846133b2565b801561474957600954614749906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116836133b2565b5050505b841561480d57600061476b670de0b6b3a7640000610af88887613359565b90506000614785670de0b6b3a7640000610af88487613359565b905060006147938383613c99565b90506147c96001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685846133b2565b801561480957600954614809906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116836133b2565b5050505b505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561487157600080fd5b505afa158015614885573d6000803e3d6000fd5b505050506040513d60e081101561489b57600080fd5b50516040805163986cfba360e01b8152600289900b600482015290519192507313f01f6a69a870bf79163fb02a65abd58ccb823091636098fd4a918491849163986cfba3916024808301926020929190829003018186803b1580156148ff57600080fd5b505af4158015614913573d6000803e3d6000fd5b505050506040513d602081101561492957600080fd5b50516040805163986cfba360e01b815260028b900b600482015290517313f01f6a69a870bf79163fb02a65abd58ccb82309163986cfba3916024808301926020929190829003018186803b15801561498057600080fd5b505af4158015614994573d6000803e3d6000fd5b505050506040513d60208110156149aa57600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810188905260848101879052905160a4808301926020929190829003018186803b158015614a0f57600080fd5b505af4158015614a23573d6000803e3d6000fd5b505050506040513d6020811015614a3957600080fd5b50519695505050505050565b6000806001600160801b03831615614151576040805130602080830182905283518084038201815283850194859052633c8a7d8d60e01b9094526044830182815260028a810b606486015289900b60848501526001600160801b03881660a485015260a060c48501908152855160e486015285516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001696633c8a7d8d968d958d958d959394909392610104019185019080838360005b83811015614b1b578181015183820152602001614b03565b50505050905090810190601f168015614b485780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b158015614b6a57600080fd5b505af1158015614b7e573d6000803e3d6000fd5b505050506040513d6040811015614b9457600080fd5b50805160209091015190969095509350505050565b60006001600160801b03821115614bf3576040805162461bcd60e51b815260206004820152600960248201526824ab1718991c2fa7a360b91b604482015290519081900360640190fd5b5090565b6000614c4c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614ca89092919063ffffffff16565b80519091501561340457808060200190516020811015614c6b57600080fd5b50516134045760405162461bcd60e51b815260040180806020018281038252602a815260200180615098602a913960400191505060405180910390fd5b6060614cb78484600085614cbf565b949350505050565b606082471015614d005760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7d6026913960400191505060405180910390fd5b614d0985614e1a565b614d5a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614d985780518252601f199092019160209182019101614d79565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614dfa576040519150601f19603f3d011682016040523d82523d6000602084013e614dff565b606091505b5091509150614e0f828286614e20565b979650505050505050565b3b151590565b60608315614e2f575081611087565b825115614e3f5782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561385e57818101518382015260200161384656fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735265656e7472616e637947756172643a207265656e7472616e742063616c6c0045524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737349562e726562616c616e63653a206261736520706f736974696f6e20696e76616c696445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c49562e63757272656e745469636b3a2074686520706f6f6c206973206c6f636b6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656449562e726562616c616e63653a206c696d697420706f736974696f6e20696e76616c696445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122018beb5aa1fdf2b7fa91262fefa44ffb2f093d37e8a5b7a87c90ab1d42652f61a64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e049562e636f6e7374727563746f723a206e6f20616c6c6f77656420746f6b656e730000000000000000000000006db0f81db2c3b2a85a802d511577d8522d0d8c1400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff7b5e167c9877f2b9f65d19d9c8c9aa651fe19f0000000000000000000000000000000000000000000000000000000000000e10