[ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_WETH", "type": "address" }, { "internalType": "address", "name": "_descriptor", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "additionalRTokenOwed", "type": "uint256" } ], "name": "AddLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "BurnPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "uint80", "name": "poolId", "type": "uint80" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "MintPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "additionalRTokenOwed", "type": "uint256" } ], "name": "RemoveLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WETH", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct IBasePositionManager.IncreaseLiquidityParams", "name": "params", "type": "tuple" } ], "name": "addLiquidity", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "uint256", "name": "additionalRTokenOwed", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "addressToPoolId", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "antiSnipAttackData", "outputs": [ { "internalType": "uint32", "name": "lastActionTime", "type": "uint32" }, { "internalType": "uint32", "name": "lockTime", "type": "uint32" }, { "internalType": "uint32", "name": "unlockTime", "type": "uint32" }, { "internalType": "uint256", "name": "feesLocked", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct IBasePositionManager.BurnRTokenParams", "name": "params", "type": "tuple" } ], "name": "burnRTokens", "outputs": [ { "internalType": "uint256", "name": "rTokenQty", "type": "uint256" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "uint160", "name": "currentSqrtP", "type": "uint160" } ], "name": "createAndUnlockPoolIfNecessary", "outputs": [ { "internalType": "address", "name": "pool", "type": "address" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isRToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "int24[2]", "name": "ticksPrevious", "type": "int24[2]" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct IBasePositionManager.MintParams", "name": "params", "type": "tuple" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "deltaQty0", "type": "uint256" }, { "internalType": "uint256", "name": "deltaQty1", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextPoolId", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "positions", "outputs": [ { "components": [ { "internalType": "uint96", "name": "nonce", "type": "uint96" }, { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint80", "name": "poolId", "type": "uint80" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "rTokenOwed", "type": "uint256" }, { "internalType": "uint256", "name": "feeGrowthInsideLast", "type": "uint256" } ], "internalType": "struct IBasePositionManager.Position", "name": "pos", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "token1", "type": "address" } ], "internalType": "struct IBasePositionManager.PoolInfo", "name": "info", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refundEth", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct IBasePositionManager.RemoveLiquidityParams", "name": "params", "type": "tuple" } ], "name": "removeLiquidity", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "uint256", "name": "additionalRTokenOwed", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "transferAllTokens", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unwrapWeth", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
610160604052600a80546001600160501b0319166001908117909155600b553480156200002b57600080fd5b50604051620062dc380380620062dc8339810160408190526200004e91620002c9565b828282828281818181604051806060016040528060228152602001620062ba60229139604051806040016040528060078152602001664b53322d4e504d60c81b815250604051806040016040528060018152602001603160f81b81525082828160009080519060200190620000c592919062000206565b508051620000db90600190602084019062000206565b50508351602094850120825192850192909220608083815260a0828152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a0152808201969096526060860193909352469185019190915230848201528151808503909101815260c080850180845282519288019290922090526001600160a01b0388811660e081905290881661010052630d04b86b60e41b9091529051909463d04b86b0945060c48085019491935090829003018186803b158015620001a657600080fd5b505afa158015620001bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e1919062000313565b610120525050506001600160a01b0390931661014052506200036a9650505050505050565b82805462000214906200032d565b90600052602060002090601f01602090048101928262000238576000855562000283565b82601f106200025357805160ff191683800117855562000283565b8280016001018555821562000283579182015b828111156200028357825182559160200191906001019062000266565b506200029192915062000295565b5090565b5b8082111562000291576000815560010162000296565b80516001600160a01b0381168114620002c457600080fd5b919050565b600080600060608486031215620002df57600080fd5b620002ea84620002ac565b9250620002fa60208501620002ac565b91506200030a60408501620002ac565b90509250925092565b6000602082840312156200032657600080fd5b5051919050565b600181811c908216806200034257607f821691505b602082108114156200036457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051615eae6200040c600039600061285b01526000613bf001526000818161029901528181610890015281816125d4015281816126dd01528181612d7701528181612dbd0152612e6b01526000818161099501528181610dcf01528181610ea4015281816112e60152613bcc01526000818161052c015261189301526000505060005050615eae6000f3fe6080604052600436106102895760003560e01c806370a0823111610153578063ad5c4648116100cb578063c45a01551161007f578063e985e9c511610064578063e985e9c5146109d7578063ea54063214610a20578063ed0d8dd214610a5b57600080fd5b8063c45a015514610983578063c87b56dd146109b757600080fd5b8063b88d4fde116100b0578063b88d4fde1461093d578063bac37ef71461095d578063bf1316c11461097057600080fd5b8063ad5c46481461087e578063b44a6ac9146108b257600080fd5b806398e04d77116101225780639f382e9b116101075780639f382e9b1461081e578063a22cb4651461083e578063ac9650d81461085e57600080fd5b806398e04d771461066557806399fbab88146106a057600080fd5b806370a08231146105fa57806375794a3c1461061a5780637ac2ff7b1461063057806395d89b411461065057600080fd5b806323b872dd1161020157806342842e0e116101b55780634bfe33981161019a5780634bfe3398146105815780634f6ccce7146105ba5780636352211e146105da57600080fd5b806342842e0e1461054e57806342966c681461056e57600080fd5b80632f745c59116101e65780632f745c59146104c657806330adf81f146104e65780633644e5151461051a57600080fd5b806323b872dd146104695780632f45d9b11461048957600080fd5b8063095ea7b31161025857806318e561311161023d57806318e56131146104105780631c49584a1461044e5780631faa41331461046157600080fd5b8063095ea7b3146103d157806318160ddd146103f157600080fd5b806301ffc9a71461031257806303a6dab31461034757806306fdde0314610377578063081812fc1461039957600080fd5b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b5760405162461bcd60e51b815260206004820152600860248201527f4e6f74205745544800000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d366004615230565b610a7b565b60405190151581526020015b60405180910390f35b34801561035357600080fd5b50610332610362366004615262565b600e6020526000908152604090205460ff1681565b34801561038357600080fd5b5061038c610af3565b60405161033e91906152d7565b3480156103a557600080fd5b506103b96103b43660046152ea565b610b85565b6040516001600160a01b03909116815260200161033e565b3480156103dd57600080fd5b5061030b6103ec366004615303565b610c32565b3480156103fd57600080fd5b506008545b60405190815260200161033e565b34801561041c57600080fd5b50600a546104339069ffffffffffffffffffff1681565b60405169ffffffffffffffffffff909116815260200161033e565b6103b961045c366004615342565b610d64565b61030b611076565b34801561047557600080fd5b5061030b61048436600461539c565b611088565b61049c6104973660046153dd565b61110f565b604080516001600160801b039095168552602085019390935291830152606082015260800161033e565b3480156104d257600080fd5b506104026104e1366004615303565b611448565b3480156104f257600080fd5b506104027f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b34801561052657600080fd5b506104027f000000000000000000000000000000000000000000000000000000000000000081565b34801561055a57600080fd5b5061030b61056936600461539c565b6114f0565b61030b61057c3660046152ea565b61150b565b34801561058d57600080fd5b5061043361059c366004615262565b600f6020526000908152604090205469ffffffffffffffffffff1681565b3480156105c657600080fd5b506104026105d53660046152ea565b61168b565b3480156105e657600080fd5b506103b96105f53660046152ea565b61172f565b34801561060657600080fd5b50610402610615366004615262565b6117ba565b34801561062657600080fd5b50610402600b5481565b34801561063c57600080fd5b5061030b61064b3660046153f5565b611854565b34801561065c57600080fd5b5061038c611ca6565b34801561067157600080fd5b50610685610680366004615457565b611cb5565b6040805193845260208401929092529082015260600161033e565b3480156106ac57600080fd5b506108106106bb3660046152ea565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152604080516060810182526000808252602082018190529181019190915250506000908152600d6020908152604080832081516101008101835281546bffffffffffffffffffffffff81168252600160601b90046001600160a01b039081168286015260018084015469ffffffffffffffffffff81168487018190526a01000000000000000000008204600290810b6060808801919091526d01000000000000000000000000008404820b6080880152600160801b9093046001600160801b031660a087015286015460c086015260039095015460e0850152938752600c8652958490208451938401855280548083168552600160a01b900462ffffff16958401959095529390940154909216908201529091565b60405161033e929190615469565b34801561082a57600080fd5b5061030b61083936600461553a565b612184565b34801561084a57600080fd5b5061030b6108593660046155c8565b6122f8565b61087161086c366004615601565b6123bd565b60405161033e9190615676565b34801561088a57600080fd5b506103b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156108be57600080fd5b5061090b6108cd3660046152ea565b6010602052600090815260409020805460019091015463ffffffff808316926401000000008104821692680100000000000000009091049091169084565b60405161033e949392919063ffffffff9485168152928416602084015292166040820152606081019190915260800190565b34801561094957600080fd5b5061030b610958366004615765565b612515565b61030b61096b366004615814565b6125a3565b61030b61097e366004615839565b61274b565b34801561098f57600080fd5b506103b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156109c357600080fd5b5061038c6109d23660046152ea565b6127bf565b3480156109e357600080fd5b506103326109f236600461587b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610a33610a2e3660046158a9565b6128e1565b604080519485526001600160801b03909316602085015291830152606082015260800161033e565b348015610a6757600080fd5b50610685610a763660046158bc565b6129c3565b60006001600160e01b031982167f7dd42bd6000000000000000000000000000000000000000000000000000000001480610ade57506001600160e01b031982167f53e38b0d00000000000000000000000000000000000000000000000000000000145b80610aed5750610aed82612c46565b92915050565b606060008054610b02906158ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e906158ce565b8015610b7b5780601f10610b5057610100808354040283529160200191610b7b565b820191906000526020600020905b815481529060010190602001808311610b5e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c0f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610302565b506000908152600d6020526040902054600160601b90046001600160a01b031690565b6000610c3d8261172f565b9050806001600160a01b0316836001600160a01b03161415610cc75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610302565b336001600160a01b0382161480610ce35750610ce381336109f2565b610d555760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610302565b610d5f8383612cb8565b505050565b6000836001600160a01b0316856001600160a01b031610610d8457600080fd5b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f00000000000000000000000000000000000000000000000000000000000000001690631698ee829060640160206040518083038186803b158015610e1157600080fd5b505afa158015610e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e499190615903565b90506001600160a01b038116610f23576040517fa16712950000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f0000000000000000000000000000000000000000000000000000000000000000169063a167129590606401602060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f209190615903565b90505b6000816001600160a01b031663217ac2376040518163ffffffff1660e01b815260040160806040518083038186803b158015610f5e57600080fd5b505afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f96919061592f565b5050509050806001600160a01b03166000141561106d57600080610fb985612d33565b91509150610fc988338685612d75565b610fd587338684612d75565b6040517f7caae8700000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152851690637caae870906024016040805180830381600087803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190615983565b505050505b50949350505050565b4715611086576110863347612efd565b565b6110923382612fb5565b6111045760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610302565b610d5f8383836130bd565b600080808060a0850135804211156111535760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610302565b85356000908152600d6020908152604080832060018082015469ffffffffffffffffffff168552600c8452828520835160608101855281546001600160a01b038082168352600160a01b90910462ffffff16968201969096529101549093169183019190915291806111c36151f9565b604080516101608101825285516001600160a01b03908116825286830151166020808301919091528087015162ffffff16828401523060608084019190915260018901546a01000000000000000000008104600290810b6080808701919091526d0100000000000000000000000000909204900b60a085015260c08401869052918f013560e0840152928e0135610100830152918d0135610120820152908c0135610140820152611273906132a2565b60018a015460038b0154959f50939d50919b509095509350600160801b90046001600160801b03169083146113a75760038601548c3560009081526010602052604090209084039061138090838e6112ca426135bf565b60016112e4886001600160801b031688600160601b6135d7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637313ee5a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561133d57600080fd5b505afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137591906159a7565b63ffffffff1661371c565b50809950508887600201600082825461139991906159e3565b909155505050600386018390555b8a8660010160108282829054906101000a90046001600160801b03166113cd91906159fb565b82546101009290920a6001600160801b0381810219909316918316021790915560408051918e168252602082018d905281018b9052606081018a90528d3591507fc8e69b000c15ddb3ea50af40fe8183b454b2c93ed4150db536b1abf997eb55739060800160405180910390a2505050505050509193509193565b6000611453836117ba565b82106114c75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610d5f83838360405180602001604052806000815250612515565b806115163382612fb5565b6115625760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b6000828152600d6020526040902060010154600160801b90046001600160801b0316156115d15760405162461bcd60e51b815260206004820152601d60248201527f53686f756c642072656d6f7665206c69717569646974792066697273740000006044820152606401610302565b6000828152600d6020526040902060020154156116305760405162461bcd60e51b815260206004820152601860248201527f53686f756c64206275726e2072546f6b656e20666972737400000000000000006044820152606401610302565b6000828152600d6020526040812081815560018101829055600281018290556003015561165c82613aa5565b60405182907f8b4991357e151e871deb7e4c435dd6a4d1fc226761c9444f11befe1357fd021490600090a25050565b600061169660085490565b821061170a5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610302565b6008828154811061171d5761171d615a26565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b031680610aed5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610302565b60006001600160a01b0382166118385760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b031660009081526003602052604090205490565b838042111561188f5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610302565b60007f00000000000000000000000000000000000000000000000000000000000000007f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad89896118de81613b59565b6040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810188905260c001604051602081830303815290604052805190602001206040516020016119689291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050600061198b8861172f565b9050806001600160a01b0316896001600160a01b03161415611a155760405162461bcd60e51b815260206004820152602760248201527f4552433732315065726d69743a20617070726f76616c20746f2063757272656e60448201527f74206f776e6572000000000000000000000000000000000000000000000000006064820152608401610302565b803b15611b7757604080516020810187905280820186905260f888901b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260618201928390527f1626ba7e000000000000000000000000000000000000000000000000000000009092526001600160a01b03831691631626ba7e91611aae918691606501615a3c565b60206040518083038186803b158015611ac657600080fd5b505afa158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190615a55565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b14611b725760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b611c91565b6040805160008082526020820180845285905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611bcb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c2e5760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610302565b816001600160a01b0316816001600160a01b031614611c8f5760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b505b611c9b8989612cb8565b505050505050505050565b606060018054610b02906158ce565b600080808335611cc53382612fb5565b611d115760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b608085013580421115611d505760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610302565b85356000908152600d602090815260409182902060018101549092600160801b9091046001600160801b031691611d8b918a01908a01615a72565b6001600160801b0316816001600160801b03161015611dec5760405162461bcd60e51b815260206004820152601660248201527f496e73756666696369656e74206c6971756964697479000000000000000000006044820152606401610302565b60018281015469ffffffffffffffffffff166000908152600c60209081526040808320815160608101835281546001600160a01b03808216808452600160a01b90920462ffffff16958301869052929096015490911691810182905293611e5592909190613bc5565b90506000816001600160a01b031663a34123a786600101600a9054906101000a900460020b87600101600d9054906101000a900460020b8e6020016020810190611e9f9190615a72565b6040516001600160e01b031960e086901b168152600293840b60048201529190920b60248201526001600160801b039091166044820152606401606060405180830381600087803b158015611ef357600080fd5b505af1158015611f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2b9190615a9b565b919b509950905060408b01358a10801590611f4a57508a606001358910155b611f965760405162461bcd60e51b815260206004820152601260248201527f4c6f772072657475726e20616d6f756e747300000000000000000000000000006044820152606401610302565b600080866003015483039050611ff3601060008f600001358152602001908152602001600020878f6020016020810190611fd09190615a72565b611fd9426135bf565b60006112e48c6001600160801b031688600160601b6135d7565b809350819b5050508987600201600082825461200f91906159e3565b90915550506003870183905581156120bd576040517fc20830d700000000000000000000000000000000000000000000000000000000815260048101839052600160248201526001600160a01b0385169063c20830d7906044016040805180830381600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ba9190615983565b50505b6120cd60408e0160208f01615a72565b6120d79087615ac9565b8760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508c600001357f69cee805c1d44cd9de89762e23b7854dd7143ed210df80cf67af64a142088c1e8e60200160208101906121389190615a72565b8e8e8e60405161216c94939291906001600160801b0394909416845260208401929092526040830152606082015260800190565b60405180910390a25050505050505050509193909250565b600061219282840184615af1565b905080602001516001600160a01b031681600001516001600160a01b0316106122235760405162461bcd60e51b815260206004820152602260248201527f4c697175696469747948656c7065723a2077726f6e6720746f6b656e206f726460448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610302565b600061223c826000015183602001518460400151613bc5565b9050336001600160a01b038216146122bc5760405162461bcd60e51b815260206004820152602860248201527f4c697175696469747948656c7065723a20696e76616c69642063616c6c62616360448201527f6b2073656e6465720000000000000000000000000000000000000000000000006064820152608401610302565b85156122d6576122d6826000015183606001513389612d75565b84156122f0576122f0826020015183606001513388612d75565b505050505050565b6001600160a01b0382163314156123515760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610302565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60608167ffffffffffffffff8111156123d8576123d86156f6565b60405190808252806020026020018201604052801561240b57816020015b60608152602001906001900390816123f65790505b50905060005b8281101561250e576000803086868581811061242f5761242f615a26565b90506020028101906124419190615b74565b60405161244f929190615be0565b600060405180830381855af49150503d806000811461248a576040519150601f19603f3d011682016040523d82523d6000602084013e61248f565b606091505b5091509150816124db576044815110156124a857600080fd5b600481019050808060200190518101906124c29190615bf0565b60405162461bcd60e51b815260040161030291906152d7565b808484815181106124ee576124ee615a26565b60200260200101819052505050808061250690615c5e565b915050612411565b5092915050565b61251f3383612fb5565b6125915760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610302565b61259d84848484613c14565b50505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561261e57600080fd5b505afa158015612632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126569190615c79565b9050828110156126a85760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e7420574554480000000000000000000000000000006044820152606401610302565b8015610d5f576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561272957600080fd5b505af115801561273d573d6000803e3d6000fd5b50505050610d5f8282612efd565b6001600160a01b0383166000908152600e602052604090205460ff16156127b45760405162461bcd60e51b815260206004820152601760248201527f43616e206e6f74207472616e736665722072546f6b656e0000000000000000006044820152606401610302565b610d5f838383613c9d565b6000818152600260205260409020546060906001600160a01b03166128265760405162461bcd60e51b815260206004820152601160248201527f4e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006044820152606401610302565b6040517fe9dc6375000000000000000000000000000000000000000000000000000000008152306004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e9dc63759060440160006040518083038186803b1580156128a557600080fd5b505afa1580156128b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aed9190810190615bf0565b6000806000806128f085613d94565b92965090945092509050612931612906426135bf565b604080516080810182526000606082015263ffffffff92909216808352602083018190529082015290565b60008581526010602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000026bffffffff000000000000000019958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179290921617815560609091015160019091015592949193509190565b6000808083356129d33382612fb5565b612a1f5760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b606085013580421115612a5e5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610302565b85356000908152600d602052604090206002810154955085612ac25760405162461bcd60e51b815260206004820152601160248201527f4e6f2072546f6b656e20746f206275726e0000000000000000000000000000006044820152606401610302565b60018181015469ffffffffffffffffffff166000908152600c60209081526040808320815160608101835281546001600160a01b03808216808452600160a01b90920462ffffff16958301869052929096015490911691810182905293612b2b92909190613bc5565b6000600285018190556040517fc20830d7000000000000000000000000000000000000000000000000000000008152600481018b905260248101919091529091506001600160a01b0382169063c20830d7906044016040805180830381600087803b158015612b9957600080fd5b505af1158015612bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd19190615983565b909750955060208901358710801590612bee575088604001358610155b612c3a5760405162461bcd60e51b815260206004820152601260248201527f4c6f772072657475726e20616d6f756e747300000000000000000000000000006044820152606401610302565b50505050509193909250565b60006001600160e01b031982167f79f154c4000000000000000000000000000000000000000000000000000000001480612ca957506001600160e01b031982167f7dd42bd600000000000000000000000000000000000000000000000000000000145b80610aed5750610aed82614125565b6000818152600d6020526040902080546bffffffffffffffffffffffff16600160601b6001600160a01b038516908102919091179091558190612cfa8261172f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612d51620186a0600160601b6001600160a01b038616614163565b9150612d6e620186a06001600160a01b038516600160601b614163565b9050915091565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015612db65750804710155b15612ef1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e1657600080fd5b505af1158015612e2a573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015612eb357600080fd5b505af1158015612ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eeb9190615c92565b5061259d565b61259d8482858561419e565b6001600160a01b038216301415612f12575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612f5f576040519150601f19603f3d011682016040523d82523d6000602084013e612f64565b606091505b5050905080610d5f5760405162461bcd60e51b815260206004820152601360248201527f7472616e7366657220657468206661696c6564000000000000000000000000006044820152606401610302565b6000818152600260205260408120546001600160a01b031661303f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610302565b600061304a8361172f565b9050806001600160a01b0316846001600160a01b031614806130855750836001600160a01b031661307a84610b85565b6001600160a01b0316145b806130b557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166130d08261172f565b6001600160a01b03161461314c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610302565b6001600160a01b0382166131c75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610302565b6131d28383836141dd565b6131dd600082612cb8565b6001600160a01b0383166000908152600360205260408120805460019290613206908490615caf565b90915550506001600160a01b03821660009081526003602052604081208054600192906132349084906159e3565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080600080600085602001516001600160a01b031686600001516001600160a01b0316106133385760405162461bcd60e51b8152602060048201526024808201527f4c697175696469747948656c7065723a20696e76616c696420746f6b656e206f60448201527f72646572000000000000000000000000000000000000000000000000000000006064820152608401610302565b61334f866000015187602001518860400151613bc5565b90506000816001600160a01b031663217ac2376040518163ffffffff1660e01b815260040160806040518083038186803b15801561338c57600080fd5b505afa1580156133a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c4919061592f565b505050905060006133d88860800151614295565b905060006133e98960a00151614295565b90506134018383838c60e001518d61010001516145e4565b9750505050806001600160a01b0316630c1225b7876060015188608001518960a001518a60c001518a6134af8d600001518e602001518f6040015160408051608080820183526001600160a01b03958616808352948616602080840191825262ffffff95861684860190815233606095860190815286519283019890985291518816818601529051909416918401919091529251909316818301528251808203909201825260a00190915290565b6040518763ffffffff1660e01b81526004016134d096959493929190615cc6565b606060405180830381600087803b1580156134ea57600080fd5b505af11580156134fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135229190615a9b565b6101208901519296509094509250841080159061354457508561014001518310155b6135b65760405162461bcd60e51b815260206004820152602560248201527f4c697175696469747948656c7065723a20707269636520736c6970706167652060448201527f636865636b0000000000000000000000000000000000000000000000000000006064820152608401610302565b91939590929450565b8063ffffffff811681146135d257600080fd5b919050565b60008080600019858709858702925082811083820303915050806000141561365457600084116136495760405162461bcd60e51b815260206004820152600760248201527f302064656e6f6d000000000000000000000000000000000000000000000000006044820152606401610302565b508290049050613715565b8084116136a35760405162461bcd60e51b815260206004820152600e60248201527f64656e6f6d203c3d2070726f64310000000000000000000000000000000000006044820152606401610302565b60008486880980840393811190920391905060006136c3861960016159e3565b8616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030260008290038290046001019490940294049390931791909102925050505b9392505050565b60408051608081018252885463ffffffff8082168352640100000000820481166020840152680100000000000000009091041691810191909152600188015460608201526000908190836137a3576060810151613780578460009250925050613a99565b600060018b015560608101516137979086906159e3565b60009250925050613a99565b60006137ea620186a062ffffff1686620186a062ffffff1685602001518c6137cb9190615d35565b63ffffffff166137db9190615d52565b6137e59190615d87565b614680565b90506000826000015163ffffffff16836040015163ffffffff161115613848578251604084015161384391620186a0916138249190615d35565b63ffffffff16620186a062ffffff1686600001518d6137cb9190615d35565b61384d565b620186a05b606084015190915061386181898486614696565b606086018290529650156139095760608401516139049061388690620186a090615d52565b61389384620186a0615caf565b83876040015163ffffffff166138a99190615d52565b6138b39190615d52565b6138c086620186a0615caf565b8b8b896020015163ffffffff166138d791906159e3565b6138e19190615d52565b6138eb9190615d52565b6138f591906159e3565b6138ff9190615d87565b6135bf565b61390b565b895b8d5463ffffffff9190911668010000000000000000026bffffffff000000000000000019909116178d5550600091508790506139505761394b898b615ac9565b61395a565b61395a898b6159fb565b6001600160801b031690508615613a11576139d36138ff61398a63ffffffff8b166001600160801b038d16615d52565b8c6001600160801b03166139b9866020015163ffffffff168a8e63ffffffff166139b49190615caf565b6146ea565b6139c39190615d52565b6139cd91906159e3565b836146fa565b8b5463ffffffff91909116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909116178b55613a60565b606082015115613a6057896001600160801b0316896001600160801b03168360600151613a3e9190615d52565b613a489190615d87565b92508282606001818151613a5c9190615caf565b9052505b506060015160018a015588547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff87161789555b97509795505050505050565b6000613ab08261172f565b9050613abe816000846141dd565b613ac9600083612cb8565b6001600160a01b0381166000908152600360205260408120805460019290613af2908490615caf565b9091555050600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000818152600d6020526040812080546bffffffffffffffffffffffff169082613b8283615d9b565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff169050919050565b60006130b57f00000000000000000000000000000000000000000000000000000000000000008585857f000000000000000000000000000000000000000000000000000000000000000061472c565b613c1f8484846130bd565b613c2b84848484614830565b61259d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610302565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015613cf857600080fd5b505afa158015613d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d309190615c79565b905082811015613d825760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e00000000000000000000000000006044820152606401610302565b801561259d5761259d8482308561419e565b600080808061018085013580421115613dd95760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610302565b600080613edc6040518061016001604052808a6000016020810190613dfe9190615262565b6001600160a01b031681526020018a6020016020810190613e1f9190615262565b6001600160a01b03168152602001613e3d60608c0160408d01615dc7565b62ffffff168152306020820152604001613e5d60808c0160608d01615de2565b60020b8152602001613e7560a08c0160808d01615de2565b60020b81526020018a60a00160028060200260405190810160405280929190826002602002808284376000920191909152505050815260e08b013560208201526101008b013560408201526101208b013560608201526101408b01356080909101526132a2565b600b8054959b5093995091975090945092506000613ef983615c5e565b909155509650613f1a613f146101808a016101608b01615262565b886149c5565b6000613f5283613f2d60208c018c615262565b613f3d60408d0160208e01615262565b613f4d60608e0160408f01615dc7565b614b20565b905060405180610100016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018a6060016020810190613faa9190615de2565b60020b8152602001613fc260a08c0160808d01615de2565b600290810b82526001600160801b038a811660208085018290526000604080870182905260609687018a90528f8252600d8352908190208751888401516001600160a01b0316600160601b026bffffffffffffffffffffffff909116178155878201516001820180548a8a015160808c015160a08d01518a16600160801b0262ffffff9182166d010000000000000000000000000002909a166cffffffffffffffffffffffffff919092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffff0000000000000000000000000090931669ffffffffffffffffffff958616179290921791909116179690961790955560c08801519581019590955560e09096015160039094019390935584519081529182018a9052928101889052918316918a917f2aa61af31176eaad0779e2bd456bd28a44d1a68b677072b5ada024becc1b6d30910160405180910390a3505050509193509193565b60006001600160e01b031982167f780e9d63000000000000000000000000000000000000000000000000000000001480610aed5750610aed82614c83565b60006141708484846135d7565b90506000828061418257614182615d71565b8486091115613715578061419581615c5e565b95945050505050565b6001600160a01b0382163014156141c8576141c36001600160a01b0385168285614d1e565b61259d565b61259d6001600160a01b038516838386614daf565b6001600160a01b0383166142385761423381600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61425b565b816001600160a01b0316836001600160a01b03161461425b5761425b8382614e00565b6001600160a01b03821661427257610d5f81614e9d565b826001600160a01b0316826001600160a01b031614610d5f57610d5f8282614f4c565b60008060008360020b126142ac578260020b6142b4565b8260020b6000035b9050620d89e88111156143095760405162461bcd60e51b815260206004820152600160248201527f54000000000000000000000000000000000000000000000000000000000000006044820152606401610302565b60006001821661431d57600160801b61432f565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615614363576ffff97272373d413259a46990580e213a0260801c5b6004821615614382576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156143a1576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156143c0576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156143df576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156143fe576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561441d576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561443d576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561445d576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561447d576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561449d576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156144bd576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156144dd576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156144fd576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561451d576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561453e576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561455e576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561457d576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561459a576b048a170391f7dc42444e8fa20260801c5b60008460020b13156145bb5780600019816145b7576145b7615d71565b0490505b6401000000008106156145cf5760016145d2565b60005b60ff16602082901c0192505050919050565b6000846001600160a01b0316866001600160a01b0316116146115761460a858585614f90565b9050614195565b836001600160a01b0316866001600160a01b0316106146355761460a858584614fd4565b6000614642878686614f90565b90506000614651878986614fd4565b9050806001600160801b0316826001600160801b0316106146725780614674565b815b98975050505050505050565b600081831061468f5781613715565b5090919050565b600080806146a486886159e3565b9050620186a06146b48786615d52565b6146be8988615d52565b6146c891906159e3565b6146d29190615d87565b91506146de8282615caf565b92505094509492505050565b60008183101561468f5781613715565b60006147068284615dff565b15614712576001614715565b60005b60ff166147228385615d87565b61371591906159e3565b6000836001600160a01b0316856001600160a01b03161061474e578385614751565b84845b604080516001600160a01b03808516602083015283169181019190915262ffffff8616606082015291965094506000908790608001604051602081830303815290604052805190602001208460405160200161480d939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b60006001600160a01b0384163b156149ba576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a029061488d903390899088908890600401615e13565b602060405180830381600087803b1580156148a757600080fd5b505af19250505080156148d7575060408051601f3d908101601f191682019092526148d491810190615a55565b60015b614987573d808015614905576040519150601f19603f3d011682016040523d82523d6000602084013e61490a565b606091505b50805161497f5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610302565b805181602001fd5b6001600160e01b0319167f150b7a02000000000000000000000000000000000000000000000000000000001490506130b5565b506001949350505050565b6001600160a01b038216614a1b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610302565b6000818152600260205260409020546001600160a01b031615614a805760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610302565b614a8c600083836141dd565b6001600160a01b0382166000908152600360205260408120805460019290614ab59084906159e3565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0384166000908152600f602052604090205469ffffffffffffffffffff16806130b557600a805469ffffffffffffffffffff16906000614b6683615e4f565b82546101009290920a69ffffffffffffffffffff8181021990931691831602179091556001600160a01b039687166000818152600f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001695871695861790558051606081018252998b168a5262ffffff9788168a8301908152988b168a8201908152948352600c825280832099518a549951908c167fffffffffffffffffff0000000000000000000000000000000000000000000000909a1699909917600160a01b999098169890980296909617885591516001978801805473ffffffffffffffffffffffffffffffffffffffff19169190991617909755958652600e909252509220805460ff1916909117905590565b60006001600160e01b031982167f80ac58cd000000000000000000000000000000000000000000000000000000001480614ce657506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610aed57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610aed565b6040516001600160a01b038316602482015260448101829052610d5f9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152614ff3565b6040516001600160a01b038085166024830152831660448201526064810182905261259d9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401614d63565b60006001614e0d846117ba565b614e179190615caf565b600083815260076020526040902054909150808214614e6a576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090614eaf90600190615caf565b60008381526009602052604081205460088054939450909284908110614ed757614ed7615a26565b906000526020600020015490508060088381548110614ef857614ef8615a26565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480614f3057614f30615e6f565b6001900381819060005260206000200160009055905550505050565b6000614f57836117ba565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600080614fb4856001600160a01b0316856001600160a01b0316600160601b6135d7565b9050614195614fcf82858888036001600160a01b03166135d7565b6150d8565b60006130b5614fcf83600160601b8787036001600160a01b03166135d7565b6000615048826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166150ee9092919063ffffffff16565b805190915015610d5f57808060200190518101906150669190615c92565b610d5f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610302565b806001600160801b03811681146135d257600080fd5b60606130b5848460008585843b6151475760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610302565b600080866001600160a01b031685876040516151639190615e85565b60006040518083038185875af1925050503d80600081146151a0576040519150601f19603f3d011682016040523d82523d6000602084013e6151a5565b606091505b50915091506151b58282866151c0565b979650505050505050565b606083156151cf575081613715565b8251156151df5782518084602001fd5b8160405162461bcd60e51b815260040161030291906152d7565b60405180604001604052806002906020820280368337509192915050565b6001600160e01b03198116811461522d57600080fd5b50565b60006020828403121561524257600080fd5b813561371581615217565b6001600160a01b038116811461522d57600080fd5b60006020828403121561527457600080fd5b81356137158161524d565b60005b8381101561529a578181015183820152602001615282565b8381111561259d5750506000910152565b600081518084526152c381602086016020860161527f565b601f01601f19169290920160200192915050565b60208152600061371560208301846152ab565b6000602082840312156152fc57600080fd5b5035919050565b6000806040838503121561531657600080fd5b82356153218161524d565b946020939093013593505050565b803562ffffff811681146135d257600080fd5b6000806000806080858703121561535857600080fd5b84356153638161524d565b935060208501356153738161524d565b92506153816040860161532f565b915060608501356153918161524d565b939692955090935050565b6000806000606084860312156153b157600080fd5b83356153bc8161524d565b925060208401356153cc8161524d565b929592945050506040919091013590565b600060c082840312156153ef57600080fd5b50919050565b60008060008060008060c0878903121561540e57600080fd5b86356154198161524d565b95506020870135945060408701359350606087013560ff8116811461543d57600080fd5b9598949750929560808101359460a0909101359350915050565b600060a082840312156153ef57600080fd5b6000610160820190506bffffffffffffffffffffffff84511682526001600160a01b03602085015116602083015269ffffffffffffffffffff604085015116604083015260608401516154c1606084018260020b9052565b5060808401516154d6608084018260020b9052565b5060a08401516154f160a08401826001600160801b03169052565b5060c0848101519083015260e0808501519083015282516001600160a01b03908116610100840152602084015162ffffff16610120840152604084015116610140830152613715565b6000806000806060858703121561555057600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561557657600080fd5b818701915087601f83011261558a57600080fd5b81358181111561559957600080fd5b8860208285010111156155ab57600080fd5b95989497505060200194505050565b801515811461522d57600080fd5b600080604083850312156155db57600080fd5b82356155e68161524d565b915060208301356155f6816155ba565b809150509250929050565b6000806020838503121561561457600080fd5b823567ffffffffffffffff8082111561562c57600080fd5b818501915085601f83011261564057600080fd5b81358181111561564f57600080fd5b8660208260051b850101111561566457600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156156e9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526156d78583516152ab565b9450928501929085019060010161569d565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615735576157356156f6565b604052919050565b600067ffffffffffffffff821115615757576157576156f6565b50601f01601f191660200190565b6000806000806080858703121561577b57600080fd5b84356157868161524d565b935060208501356157968161524d565b925060408501359150606085013567ffffffffffffffff8111156157b957600080fd5b8501601f810187136157ca57600080fd5b80356157dd6157d88261573d565b61570c565b8181528860208385010111156157f257600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561582757600080fd5b8235915060208301356155f68161524d565b60008060006060848603121561584e57600080fd5b83356158598161524d565b92506020840135915060408401356158708161524d565b809150509250925092565b6000806040838503121561588e57600080fd5b82356158998161524d565b915060208301356155f68161524d565b60006101a082840312156153ef57600080fd5b6000608082840312156153ef57600080fd5b600181811c908216806158e257607f821691505b602082108114156153ef57634e487b7160e01b600052602260045260246000fd5b60006020828403121561591557600080fd5b81516137158161524d565b8060020b811461522d57600080fd5b6000806000806080858703121561594557600080fd5b84516159508161524d565b602086015190945061596181615920565b604086015190935061597281615920565b6060860151909250615391816155ba565b6000806040838503121561599657600080fd5b505080516020909101519092909150565b6000602082840312156159b957600080fd5b815163ffffffff8116811461371557600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156159f6576159f66159cd565b500190565b60006001600160801b03808316818516808303821115615a1d57615a1d6159cd565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006130b560408301846152ab565b600060208284031215615a6757600080fd5b815161371581615217565b600060208284031215615a8457600080fd5b81356001600160801b038116811461371557600080fd5b600080600060608486031215615ab057600080fd5b8351925060208401519150604084015190509250925092565b60006001600160801b0383811690831681811015615ae957615ae96159cd565b039392505050565b600060808284031215615b0357600080fd5b6040516080810181811067ffffffffffffffff82111715615b2657615b266156f6565b6040528235615b348161524d565b81526020830135615b448161524d565b6020820152615b556040840161532f565b60408201526060830135615b688161524d565b60608201529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615ba957600080fd5b83018035915067ffffffffffffffff821115615bc457600080fd5b602001915036819003821315615bd957600080fd5b9250929050565b8183823760009101908152919050565b600060208284031215615c0257600080fd5b815167ffffffffffffffff811115615c1957600080fd5b8201601f81018413615c2a57600080fd5b8051615c386157d88261573d565b818152856020838501011115615c4d57600080fd5b61419582602083016020860161527f565b6000600019821415615c7257615c726159cd565b5060010190565b600060208284031215615c8b57600080fd5b5051919050565b600060208284031215615ca457600080fd5b8151613715816155ba565b600082821015615cc157615cc16159cd565b500390565b6001600160a01b038716815260006020600288810b8285015287810b6040850152606084018760005b83811015615d0d578151840b83529184019190840190600101615cef565b50505050506001600160801b03841660a083015260e060c083015261467460e08301846152ab565b600063ffffffff83811690831681811015615ae957615ae96159cd565b6000816000190483118215151615615d6c57615d6c6159cd565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615d9657615d96615d71565b500490565b60006bffffffffffffffffffffffff80831681811415615dbd57615dbd6159cd565b6001019392505050565b600060208284031215615dd957600080fd5b6137158261532f565b600060208284031215615df457600080fd5b813561371581615920565b600082615e0e57615e0e615d71565b500690565b60006001600160a01b03808716835280861660208401525083604083015260806060830152615e4560808301846152ab565b9695505050505050565b600069ffffffffffffffffffff80831681811415615dbd57615dbd6159cd565b634e487b7160e01b600052603160045260246000fd5b60008251615e9781846020870161527f565b919091019291505056fea164736f6c6343000809000a4b7962657253776170207632204e465420506f736974696f6e73204d616e616765720000000000000000000000005f1dddbf348ac2fbe22a163e30f99f9ece3dd50a000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c70000000000000000000000008abd8c92f1901cf204590c16b5ef690a35b3741e