[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "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": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "excessPandaTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "excessBaseTokens", "type": "uint256" } ], "name": "ExcessCollected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amountPanda", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountBase", "type": "uint256" } ], "name": "LiquidityMoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "pandaToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "baseToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "sqrtPa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sqrtPb", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vestingPeriod", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "deployer", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "PoolInitialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "pandaReserve", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "baseReserve", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sqrtPrice", "type": "uint256" } ], "name": "Sync", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokensClaimed", "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" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GRADUATION_THRESHOLD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "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": "baseReserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "buyAllTokens", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "buyTokens", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "buyTokens", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "buyTokensWithBera", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "canClaimIncentive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "claimTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "claimableTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collectExcessTokens", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "deployer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dexFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dexPair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "name": "getAmountInBuy", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "sqrtP_new", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAmountInBuyRemainingTokens", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "name": "getAmountInSell", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "sqrtP_new", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "name": "getAmountOutBuy", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "sqrtP_new", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "name": "getAmountOutSell", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "sqrtP_new", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCurrentPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sqrtPa", "type": "uint256" }, { "internalType": "uint256", "name": "_sqrtPb", "type": "uint256" }, { "internalType": "uint256", "name": "_totalTokens", "type": "uint256" }, { "internalType": "uint16", "name": "_graduationFee", "type": "uint16" } ], "name": "getTokensInPool", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sqrtPa", "type": "uint256" }, { "internalType": "uint256", "name": "_sqrtPb", "type": "uint256" }, { "internalType": "uint256", "name": "_tokensInPool", "type": "uint256" } ], "name": "getTotalRaise", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalRaise", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "graduated", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "graduationTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pandaToken", "type": "address" }, { "components": [ { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "uint256", "name": "sqrtPa", "type": "uint256" }, { "internalType": "uint256", "name": "sqrtPb", "type": "uint256" }, { "internalType": "uint256", "name": "vestingPeriod", "type": "uint256" } ], "internalType": "struct IPandaStructs.PandaPoolParams", "name": "pp", "type": "tuple" }, { "internalType": "uint256", "name": "_totalTokens", "type": "uint256" }, { "internalType": "address", "name": "_deployer", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "initializePool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isPandaToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minTradeSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "moveLiquidity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pandaFactory", "outputs": [ { "internalType": "contract IPandaFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pandaReserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pandaToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "poolFees", "outputs": [ { "internalType": "uint16", "name": "buyFee", "type": "uint16" }, { "internalType": "uint16", "name": "sellFee", "type": "uint16" }, { "internalType": "uint16", "name": "graduationFee", "type": "uint16" }, { "internalType": "uint16", "name": "deployerFeeShare", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "remainingTokensInPool", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellTokens", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellTokens", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellTokensForBera", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sqrtP", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sqrtPa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sqrtPb", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokensBoughtInPool", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokensClaimed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokensForLp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokensInPool", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "totalBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRaise", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "vestedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vestingPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "viewExcessTokens", "outputs": [ { "internalType": "uint256", "name": "excessPandaTokens", "type": "uint256" }, { "internalType": "uint256", "name": "excessBaseTokens", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "wbera", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6101606040526020805460ff191690553480156200001c57600080fd5b506040518060400160405280600a8152602001692830b73230aa37b5b2b760b11b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600a8152602001692830b73230aa37b5b2b760b11b81525060405180604001604052806002815260200161141560f21b8152508160039081620000aa9190620002a9565b506004620000b98282620002a9565b50620000cb915083905060056200017f565b61012052620000dc8160066200017f565b61014052815160208084019190912060e052815190820120610100524660a0526200016a60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600955620003ea565b60006020835110156200019f576200019783620001b8565b9050620001b2565b81620001ac8482620002a9565b5060ff90505b92915050565b600080829050601f81511115620001ef578260405163305a27a960e01b8152600401620001e6919062000375565b60405180910390fd5b8051620001fc82620003c5565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200022f57607f821691505b6020821081036200025057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002a457600081815260208120601f850160051c810160208610156200027f5750805b601f850160051c820191505b81811015620002a0578281556001016200028b565b5050505b505050565b81516001600160401b03811115620002c557620002c562000204565b620002dd81620002d684546200021a565b8462000256565b602080601f831160018114620003155760008415620002fc5750858301515b600019600386901b1c1916600185901b178555620002a0565b600085815260208120601f198616915b82811015620003465788860151825594840194600190910190840162000325565b5085821015620003655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003a45785810183015185820160400152820162000386565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002505760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051614db1620004456000396000611e0901526000611dde015260006135c101526000613599015260006134f40152600061351e015260006135480152614db16000f3fe6080604052600436106103fe5760003560e01c80637ecebe0011610213578063c55dae6311610123578063e7caf3ae116100ab578063f242ab411161007a578063f242ab4114610c40578063f2505c5214610c60578063f49bb02414610c76578063fcfc0c0914610c8b578063ffa1ad7414610ca057600080fd5b8063e7caf3ae14610bd5578063eb91d37e14610bf5578063ef569f9a14610c0a578063f232fe7314610c2a57600080fd5b8063d5f39488116100f2578063d5f3948814610b45578063dd62ed3e14610b65578063df8de3e714610b85578063dfdf2a7214610ba5578063e7c2b77214610bbb57600080fd5b8063c55dae6314610ada578063c8b8c2a614610afa578063d47ba4fd14610b10578063d505accf14610b2557600080fd5b8063a9059cbb116101a6578063b6785df311610175578063b6785df314610a45578063b8d8fbb414610a65578063b90a26ab14610a85578063bf8f8ce514610a9a578063c168787714610aba57600080fd5b8063a9059cbb146109d0578063a913f1c1146109f0578063adfee4c114610a10578063b46c69e214610a2557600080fd5b80638aab0a09116101e25780638aab0a091461094e57806395d89b411461096e5780639b6f705b14610983578063a457c2d7146109b057600080fd5b80637ecebe00146108d057806384b0196e146108f057806384d24226146109185780638a0c84e21461093857600080fd5b806333d5e5491161030e5780634f1ee2f3116102a157806361d027b31161027057806361d027b314610821578063624601b61461084157806370a082311461086e5780637313ee5a146108a45780637e1c0c09146108ba57600080fd5b80634f1ee2f3146107c057806357f3b5f4146107d55780636021c6ba146107eb5780636155be591461080b57600080fd5b806340e1e4c7116102dd57806340e1e4c71461075557806344badeca1461076b57806349717a72146107805780634b0ee02a146107a057600080fd5b806333d5e549146106f45780633644e5151461070a578063395093511461071f5780633996dc8f1461073f57600080fd5b806318160ddd1161039157806327773f6d1161036057806327773f6d14610600578063295d912714610620578063313ce5671461063857806331f41a3314610654578063335809591461068c57600080fd5b806318160ddd146105a15780631a686502146105b657806323b872dd146105cc578063251965c4146105ec57600080fd5b80630e2d1a2a116103cd5780630e2d1a2a146105135780630f373b5314610541578063133d66c01461056157806317e79db01461058157600080fd5b8063064cad2a1461045957806306fdde0314610486578063091be0ca146104a8578063095ea7b3146104e357600080fd5b3661045457600c546015546001600160a01b03908116911614801561042d57506015546001600160a01b031633145b6104525760405162461bcd60e51b8152600401610449906143d8565b60405180910390fd5b005b600080fd5b61046c610467366004614424565b610cd5565b604080519283526020830191909152015b60405180910390f35b34801561049257600080fd5b5061049b610d9c565b60405161047d91906144a4565b3480156104b457600080fd5b506104c86104c33660046144b7565b610e2e565b6040805193845260208401929092529082015260600161047d565b3480156104ef57600080fd5b506105036104fe3660046144d0565b610f75565b604051901515815260200161047d565b34801561051f57600080fd5b5061053361052e3660046144fc565b610f8f565b60405190815260200161047d565b34801561054d57600080fd5b5061045261055c366004614519565b611090565b34801561056d57600080fd5b5061046c61057c3660046145d7565b611762565b34801561058d57600080fd5b506104c861059c3660046144b7565b611829565b3480156105ad57600080fd5b50600254610533565b3480156105c257600080fd5b5061053360195481565b3480156105d857600080fd5b506105036105e7366004614610565b61193a565b3480156105f857600080fd5b506001610503565b34801561060c57600080fd5b5061046c61061b3660046144fc565b611960565b34801561062c57600080fd5b5060205460ff16610503565b34801561064457600080fd5b506040516012815260200161047d565b34801561066057600080fd5b50601554610674906001600160a01b031681565b6040516001600160a01b03909116815260200161047d565b34801561069857600080fd5b50600e546106c69061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161047d565b34801561070057600080fd5b50610533601a5481565b34801561071657600080fd5b506105336119b3565b34801561072b57600080fd5b5061050361073a3660046144d0565b6119c2565b34801561074b57600080fd5b5061053360185481565b34801561076157600080fd5b5061053360175481565b34801561077757600080fd5b50601b54610533565b34801561078c57600080fd5b506104c861079b3660046144b7565b6119e4565b3480156107ac57600080fd5b506105336107bb3660046144fc565b611b0e565b3480156107cc57600080fd5b50610452611bef565b3480156107e157600080fd5b5061053360215481565b3480156107f757600080fd5b506104c86108063660046144b7565b611c89565b34801561081757600080fd5b5061053360135481565b34801561082d57600080fd5b50600d54610674906001600160a01b031681565b34801561084d57600080fd5b5061053361085c3660046144fc565b601f6020526000908152604090205481565b34801561087a57600080fd5b506105336108893660046144fc565b6001600160a01b031660009081526020819052604090205490565b3480156108b057600080fd5b5061053360145481565b3480156108c657600080fd5b5061053360125481565b3480156108dc57600080fd5b506105336108eb3660046144fc565b611db2565b3480156108fc57600080fd5b50610905611dd0565b60405161047d9796959493929190614651565b34801561092457600080fd5b506105336109333660046144fc565b611e59565b34801561094457600080fd5b5061053360165481565b34801561095a57600080fd5b506105336109693660046146f7565b611f7b565b34801561097a57600080fd5b5061049b611f89565b34801561098f57600080fd5b5061053361099e3660046144fc565b601e6020526000908152604090205481565b3480156109bc57600080fd5b506105036109cb3660046144d0565b611f98565b3480156109dc57600080fd5b506105036109eb3660046144d0565b61201e565b3480156109fc57600080fd5b50610533610a0b366004614738565b61202c565b348015610a1c57600080fd5b50610533612041565b348015610a3157600080fd5b50600a54610674906001600160a01b031681565b348015610a5157600080fd5b5061046c610a60366004614764565b6120a7565b348015610a7157600080fd5b50602254610674906001600160a01b031681565b348015610a9157600080fd5b50610452612168565b348015610aa657600080fd5b5061046c610ab5366004614764565b612212565b348015610ac657600080fd5b5061046c610ad53660046145d7565b6122bc565b348015610ae657600080fd5b50600c54610674906001600160a01b031681565b348015610b0657600080fd5b5061053360115481565b348015610b1c57600080fd5b5061046c6122e1565b348015610b3157600080fd5b50610452610b403660046147a3565b6123f4565b348015610b5157600080fd5b50600f54610674906001600160a01b031681565b348015610b7157600080fd5b50610533610b8036600461481a565b612558565b348015610b9157600080fd5b50610533610ba03660046144fc565b6125a1565b348015610bb157600080fd5b50610533601c5481565b348015610bc757600080fd5b506020546105039060ff1681565b348015610be157600080fd5b50600b54610674906001600160a01b031681565b348015610c0157600080fd5b506105336126e6565b348015610c1657600080fd5b5061046c610c253660046145d7565b6126f6565b348015610c3657600080fd5b50610533601b5481565b348015610c4c57600080fd5b50602354610674906001600160a01b031681565b348015610c6c57600080fd5b5061053360105481565b348015610c8257600080fd5b5061053361270d565b348015610c9757600080fd5b50610533601981565b348015610cac57600080fd5b5060408051808201909152600c81526b50616e6461546f6b656e563160a01b602082015261049b565b600c5460155460009182916001600160a01b03908116911614610d0a5760405162461bcd60e51b8152600401610449906143d8565b610d1261274c565b600c60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6257600080fd5b505af1158015610d76573d6000803e3d6000fd5b5050505050610d87348530866127a5565b91509150610d956001600955565b9250929050565b606060248054610dab90614848565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd790614848565b8015610e245780601f10610df957610100808354040283529160200191610e24565b820191906000526020600020905b815481529060010190602001808311610e0757829003601f168201915b5050505050905090565b6020546000908190819060ff1615610e585760405162461bcd60e51b81526004016104499061487c565b601b54841115610e7a5760405162461bcd60e51b8152600401610449906148aa565b600084601b54610e8a9190614901565b601154601954919250610eb791610ea18285614914565b610eab919061492b565b6019549190600161297f565b9150601154821115610ec95760115491505b6000610ef760105484610edc9190614901565b601954906ec097ce7bc90715b34b9f1000000000600161297f565b90506000601c5482610f099190614901565b600e54909150610f2d9061ffff16610f2381612710614901565b839190600161297f565b9450610f39858261492b565b601354909650610f4d87633b9aca0061492b565b1015610f6b5760405162461bcd60e51b81526004016104499061493e565b5050509193909250565b600033610f838185856129da565b60019150505b92915050565b600060145460000361100a57600b546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a08231906024015b602060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190614975565b61101382611e59565b600b546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110819190614975565b610f89919061492b565b919050565b601d5460ff16156110e35760405162461bcd60e51b815260206004820152601e60248201527f50616e6461506f6f6c3a20414c52454144595f494e495449414c495a454400006044820152606401610449565b600a80546001600160a01b031916331790556110ff8282612afe565b600a60009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611152573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611176919061498e565b600d80546001600160a01b0319166001600160a01b03928316179055600a546040805163068ec68360e51b81529051600093929092169163d1d8d060916004808201926080929091908290030181865afa1580156111d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fc91906149c1565b90506103e8816000015161ffff161115801561122257506103e8816020015161ffff1611155b801561123857506103e8816040015161ffff1611155b801561124e57506103e8816060015161ffff1611155b61129a5760405162461bcd60e51b815260206004820152601d60248201527f50616e6461506f6f6c3a20464545535f4d4953434f4e464947555245440000006044820152606401610449565b8051600e80546020808501516040860151606087015161ffff908116600160301b0267ffff00000000000019928216640100000000029290921667ffffffff0000000019938216620100000263ffffffff19909616919097161793909317169390931717905561130c908701876144fc565b6001600160a01b0316876001600160a01b03160361136c5760405162461bcd60e51b815260206004820152601e60248201527f50616e6461506f6f6c3a204944454e544943414c5f41444452455353455300006044820152606401610449565b6001600160a01b0387161580159061139a5750600061138e60208801886144fc565b6001600160a01b031614155b6113e65760405162461bcd60e51b815260206004820152601760248201527f50616e6461506f6f6c3a205a45524f5f414444524553530000000000000000006044820152606401610449565b600b80546001600160a01b0319166001600160a01b03891617905561140e60208701876144fc565b600c80546001600160a01b0319166001600160a01b03928316179055600a54604080516331f41a3360e01b8152905191909216916331f41a339160048083019260209291908290030181865afa15801561146c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611490919061498e565b601580546001600160a01b0319166001600160a01b03929092169190911790556012859055602086013560408701351161150c5760405162461bcd60e51b815260206004820152601e60248201527f50616e6461506f6f6c3a2050524943455f4d4953434f4e4649475552454400006044820152606401610449565b60008660200135116115605760405162461bcd60e51b815260206004820152601e60248201527f50616e6461506f6f6c3a20494e56414c49445f53544152545f505249434500006044820152606401610449565b600061157a87602001358860400135888560400151611f7b565b905060125460175411156115d05760405162461bcd60e51b815260206004820152601f60248201527f50616e6461506f6f6c3a20494e56414c49445f544f4b454e53494e504f4f4c006044820152606401610449565b60178190556115df8187614901565b6016556020870135601081905560408801356011819055611622916116049190614914565b61161660208a013560408b0135614901565b6017549190600061297f565b6019556116386020880135604089013583612bae565b60188190555061164e6017546000601054612bd6565b600a54600c546040516348f7e4d160e01b81526001600160a01b0391821660048201529116906348f7e4d190602401602060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be9190614975565b601355600f80546001600160a01b0319166001600160a01b0387161790556060870135601455601d805460ff191660011790556116fb8484612d74565b7fafb9d9a8f3a9fe695e6e5b7b1213fbfc5f019706ebf598c49c10ccd23c9988d78861172a60208a018a6144fc565b89602001358a604001358b606001358a8a8a604051611750989796959493929190614a46565b60405180910390a15050505050505050565b600c5460155460009182916001600160a01b039081169116146117975760405162461bcd60e51b8152600401610449906143d8565b61179f61274c565b6117ab85853330612fbb565b600c54604051632e1a7d4d60e01b8152600481018490529294509092506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156117f557600080fd5b505af1158015611809573d6000803e3d6000fd5b5050505061181783836131d3565b6118216001600955565b935093915050565b6020546000908190819060ff16156118535760405162461bcd60e51b81526004016104499061487c565b600084601b54611863919061492b565b60115460195491925061187a91610ea18285614914565b915060105482101561188c5760105491505b600061189f60105484610edc9190614901565b905080601c5410156118c35760405162461bcd60e51b8152600401610449906148aa565b600081601c546118d39190614901565b6013549091506118e782633b9aca0061492b565b10156119055760405162461bcd60e51b81526004016104499061493e565b600e5461192290829062010000900461ffff16612710600161297f565b945061192e8582614901565b95505050509193909250565b6000336119488582856132be565b611953858585613338565b60019150505b9392505050565b60008061196b61274c565b6000612710601b546126ac6119809190614914565b61198a9190614ac9565b905061199f61199761270d565b8233876127a5565b92509250506119ae6001600955565b915091565b60006119bd6134e7565b905090565b600033610f838185856119d58383612558565b6119df919061492b565b6129da565b6020546000908190819060ff1615611a0e5760405162461bcd60e51b81526004016104499061487c565b601354611a1f85633b9aca0061492b565b1015611a3d5760405162461bcd60e51b81526004016104499061493e565b611a4561270d565b841115611a645760405162461bcd60e51b8152600401610449906148aa565b600e54611a7b90859061ffff16612710600161297f565b91506000611a898386614901565b9050600081601c54611a9b919061492b565b601954909150611abf9082906ec097ce7bc90715b34b9f100000000090600061297f565b601054611acc919061492b565b9250601154831115611ade5760115492505b6000611afe84601154611af19190614901565b601154610eab9087614914565b905080601b5461192e9190614901565b6000601454600003611b4c57600b546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401610fc9565b6001600160a01b038281166000818152601f6020908152604080832054601e9092529182902054600b5492516370a0823160e01b81526004810194909452909390929116906370a0823190602401602060405180830381865afa158015611bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdb9190614975565b611be5919061492b565b610f899190614901565b611bf761274c565b600080611c026122e1565b600b54600d54929450909250611c25916001600160a01b03918216911684613612565b600c54600d54611c42916001600160a01b03908116911683613612565b60408051838152602081018390527f0bc9de8618db7520d2390f3540611ed430618e118e80dcf5b5268e5c3e41d3f8910160405180910390a15050611c876001600955565b565b6020546000908190819060ff1615611cb35760405162461bcd60e51b81526004016104499061487c565b600e54611cda9062010000900461ffff16611cd081612710614901565b869190600161297f565b91506000611ce8838661492b565b601354909150611cfc82633b9aca0061492b565b1015611d1a5760405162461bcd60e51b81526004016104499061493e565b601c54811115611d3c5760405162461bcd60e51b8152600401610449906148aa565b600081601c54611d4c9190614901565b601954909150611d709082906ec097ce7bc90715b34b9f100000000090600061297f565b601054611d7d919061492b565b9250601054831015611d8f5760105492505b6000611da284601154611af19190614901565b9050601b548161192e9190614901565b6001600160a01b038116600090815260076020526040812054610f89565b600060608082808083611e047f00000000000000000000000000000000000000000000000000000000000000006005613749565b611e2f7f00000000000000000000000000000000000000000000000000000000000000006006613749565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000601454600003611ea65760405162461bcd60e51b81526020600482015260166024820152752830b73230a837b7b61d102b22a9aa24a723afa7a32360511b6044820152606401610449565b60205460ff16611ef85760405162461bcd60e51b815260206004820152601860248201527f50616e6461506f6f6c3a204e4f545f47524144554154454400000000000000006044820152606401610449565b6001600160a01b0382166000908152601e6020526040812054602154909190611f219042614901565b905060006014548210611f35575081611f4f565b601454611f428385614914565b611f4c9190614ac9565b90505b6001600160a01b0385166000908152601f6020526040902054611f729082614901565b95945050505050565b6000611f72858585856137ed565b606060258054610dab90614848565b60003381611fa68286612558565b9050838110156120065760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610449565b61201382868684036129da565b506001949350505050565b600033610f83818585613338565b6000612039848484612bae565b949350505050565b601d5460009060ff166120965760405162461bcd60e51b815260206004820152601a60248201527f50616e6461506f6f6c3a204e4f545f494e495449414c495a45440000000000006044820152606401610449565b6119bd601054601154601754612bae565b6000806120b261274c565b336001600160a01b03851614806120f95750336001600160a01b038516148015906120e557506001600160a01b03841632145b80156120f957506001600160a01b03831632145b6121455760405162461bcd60e51b815260206004820152601a60248201527f50616e6461506f6f6c3a20494e56414c49445f46524f4d5f544f0000000000006044820152606401610449565b61215186868686612fbb565b9150915061215f6001600955565b94509492505050565b61217061274c565b60205460ff16156121935760405162461bcd60e51b81526004016104499061487c565b61271060196017546121a59190614914565b6121af9190614ac9565b601b5411156122005760405162461bcd60e51b815260206004820152601960248201527f50616e6461506f6f6c3a20504f4f4c5f4e4f545f454d505459000000000000006044820152606401610449565b61220861382e565b611c876001600955565b60008061221d61274c565b336001600160a01b03851614806122645750336001600160a01b0385161480159061225057506001600160a01b03841632145b801561226457506001600160a01b03831632145b6122b05760405162461bcd60e51b815260206004820152601a60248201527f50616e6461506f6f6c3a20494e56414c49445f46524f4d5f544f0000000000006044820152606401610449565b612151868686866127a5565b6000806122c761274c565b6122d3858533866127a5565b915091506118216001600955565b601654601b54600b546040516370a0823160e01b81523060048201526000938493909290916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235c9190614975565b6123669190614901565b6123709190614901565b601c54600c546040516370a0823160e01b815230600482015292945090916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156123c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e49190614975565b6123ee9190614901565b90509091565b834211156124445760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610449565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886124738c613bd4565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006124ce82613bfc565b905060006124de82878787613c29565b9050896001600160a01b0316816001600160a01b0316146125415760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610449565b61254c8a8a8a6129da565b50505050505050505050565b6000306001600160a01b038316036125735750600019610f89565b6001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610f89565b60006125ab61274c565b6014546000036125f65760405162461bcd60e51b81526020600482015260166024820152752830b73230a837b7b61d102b22a9aa24a723afa7a32360511b6044820152606401610449565b600061260183611e59565b9050600081116126535760405162461bcd60e51b815260206004820152601760248201527f50616e6461506f6f6c3a204e4f5f434c41494d41424c450000000000000000006044820152606401610449565b6001600160a01b0383166000908152601f60205260408120805483929061267b90849061492b565b9091555050600b54612697906001600160a01b03168483613612565b826001600160a01b03167f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430826040516126d291815260200190565b60405180910390a2905061108b6001600955565b601a546000906119bd9080614914565b60008061270161274c565b6122d385853386612fbb565b600080601c546018546127209190614901565b600e549091506127469061273a9061ffff1661271061492b565b8290612710600161297f565b91505090565b60026009540361279e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610449565b6002600955565b6000806001600160a01b0383166127f65760405162461bcd60e51b815260206004820152601560248201527450616e6461506f6f6c3a20494e56414c49445f544f60581b6044820152606401610449565b6000612801876119e4565b91945092509050858310156128285760405162461bcd60e51b815260040161044990614aeb565b6001600160a01b038516301461285057600c54612850906001600160a01b031686308a613c51565b60145460000361287157600b54612871906001600160a01b03168585613612565b600c54600d5461288e916001600160a01b03908116911684613612565b60008288601c5461289f919061492b565b6128a99190614901565b9050600084601b546128bb9190614901565b90506128c8818385612bd6565b6001600160a01b0386166000908152601e6020526040812080548792906128f090849061492b565b9091555050604080516000808252602082018c9052818301889052606082015290516001600160a01b0388169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a3612710601960175461295b9190614914565b6129659190614ac9565b81116129735761297361382e565b50505094509492505050565b60008061298d868686613d95565b905060018360028111156129a3576129a3614b30565b1480156129c05750600084806129bb576129bb614ab3565b868809115b15611f72576129d060018261492b565b9695505050505050565b6001600160a01b038316612a3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610449565b6001600160a01b038216612a9d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610449565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b612b7e30600a60009054906101000a90046001600160a01b03166001600160a01b031663b152f6cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b799190614975565b613e7f565b612b8a81830183614bd3565b602460006025612b9a8482614c7d565b50612ba790508382614c7d565b5050505050565b6000612039612bbd8486614914565b83906ec097ce7bc90715b34b9f1000000000600161297f565b601a819055601b839055601c829055601654600b546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c549190614975565b612c5e9190614901565b601b5411158015612cdc5750600c546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd69190614975565b601c5411155b612d285760405162461bcd60e51b815260206004820152601b60248201527f50616e6461506f6f6c3a20524553455256455f4f564552464c4f5700000000006044820152606401610449565b601b54601c54601a5460408051938452602084019290925282820152517f9ea8a9dd7d3733c6dd274b7139f05a2bfce1a4bb22f0f7bdc1ccd49c267b858d9181900360600190a1505050565b60145415612dc45760405162461bcd60e51b815260206004820152601b60248201527f50616e6461546f6b656e3a2056455354494e475f4e4f4e5a45524f00000000006044820152606401610449565b600a60009054906101000a90046001600160a01b03166001600160a01b031663b152f6cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3b9190614975565b60125414612e8b5760405162461bcd60e51b815260206004820152601a60248201527f50616e6461546f6b656e3a20494e56414c49445f535550504c590000000000006044820152606401610449565b600a60009054906101000a90046001600160a01b03166001600160a01b031663b8d8fbb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f02919061498e565b602280546001600160a01b0319166001600160a01b03928316908117909155600c54600a5460408051636da62a2f60e11b81529051612f979530959481169493169163db4c545e9160048083019260209291908290030181865afa158015612f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f929190614975565b613f4a565b602380546001600160a01b0319166001600160a01b03929092169190911790555050565b6000806001600160a01b03831661300c5760405162461bcd60e51b815260206004820152601560248201527450616e6461506f6f6c3a20494e56414c49445f544f60581b6044820152606401610449565b6001600160a01b0384166000908152601e60205260409020548611156130745760405162461bcd60e51b815260206004820152601e60248201527f50616e6461506f6f6c3a20494e53554646494349454e545f425559494e4700006044820152606401610449565b600061307f87611829565b91945092509050858310156130a65760405162461bcd60e51b815260040161044990614aeb565b6014546000036130c857600b546130c8906001600160a01b031686308a613c51565b6001600160a01b03841630146130ef57600c546130ef906001600160a01b03168585613612565b600c54600d5461310c916001600160a01b03908116911684613612565b60008284601c5461311d9190614901565b6131279190614901565b9050600088601b54613139919061492b565b9050613146818385612bd6565b6001600160a01b0387166000908152601e6020526040812080548b929061316e908490614901565b9091555050604080518a8152600060208201819052818301526060810187905290516001600160a01b0388169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350505094509492505050565b806000036131df575050565b604080516000808252602082019092526001600160a01b0384169083906040516132099190614d3d565b60006040518083038185875af1925050503d8060008114613246576040519150601f19603f3d011682016040523d82523d6000602084013e61324b565b606091505b50509050806132b95760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610449565b505050565b60006132ca8484612558565b9050600019811461333257818110156133255760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610449565b61333284848484036129da565b50505050565b6001600160a01b03831661339c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610449565b6001600160a01b0382166133fe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610449565b6134098383836140f8565b6001600160a01b038316600090815260208190526040902054818110156134815760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610449565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3613332565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561354057507f000000000000000000000000000000000000000000000000000000000000000046145b1561356a57507f000000000000000000000000000000000000000000000000000000000000000090565b6119bd604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8060000361361f57505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161367b9190614d3d565b6000604051808303816000865af19150503d80600081146136b8576040519150601f19603f3d011682016040523d82523d6000602084013e6136bd565b606091505b50915091508180156136e75750805115806136e75750808060200190518101906136e79190614d59565b612ba75760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610449565b606060ff831461375c5761259a83614163565b81805461376890614848565b80601f016020809104026020016040519081016040528092919081815260200182805461379490614848565b80156137e15780601f106137b6576101008083540402835291602001916137e1565b820191906000526020600020905b8154815290600101906020018083116137c457829003601f168201915b50505050509050610f89565b60008061271061380161ffff851688614914565b61380b9190614ac9565b613815868861492b565b61381f9190614901565b90506129d0848683600161297f565b600b54600c54602254600e54601c546001600160a01b039485169493841693909216916000916127109161386e91640100000000900461ffff1690614914565b6138789190614ac9565b9050600081601c5461388a9190614901565b905060006138b36ec097ce7bc90715b34b9f10000000006138a96126e6565b849190600061297f565b9050601b546016546138c5919061492b565b8111156138df57601b546016546138dc919061492b565b90505b6016548110156138ee57506016545b60405163e6a4390560e01b81526001600160a01b03878116600483015286811660248301526000919086169063e6a4390590604401602060405180830381865afa158015613940573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613964919061498e565b90506001600160a01b0381166139eb576040516364e329cb60e11b81526001600160a01b038881166004830152878116602483015286169063c9c65396906044016020604051808303816000875af11580156139c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e8919061498e565b90505b6023546001600160a01b03828116911614613a485760405162461bcd60e51b815260206004820152601760248201527f50616e6461506f6f6c3a20494e56414c49445f504149520000000000000000006044820152606401610449565b6020805460ff1916600117905542602155613a64878284613612565b613a6f868285613612565b6040516335313c2160e11b815261dead60048201526001600160a01b03821690636a627842906024016020604051808303816000875af1158015613ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adb9190614975565b5060006016819055600e5461271090613aff90600160301b900461ffff1687614914565b613b099190614ac9565b600f54909150613b249088906001600160a01b031683613612565b600d546040516370a0823160e01b8152306004820152613b9e9189916001600160a01b03918216918316906370a0823190602401602060405180830381865afa158015613b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b999190614975565b613612565b60408051848152602081018690527f5280a0db66ccaf06018aded553c3eb913c2a3db70d0dfeeb0fb2042d68e4cef19101611750565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b6000610f89613c096134e7565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000613c3a878787876141a2565b91509150613c4781614263565b5095945050505050565b801561333257604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691613cbb9190614d3d565b6000604051808303816000865af19150503d8060008114613cf8576040519150601f19603f3d011682016040523d82523d6000602084013e613cfd565b606091505b5091509150818015613d27575080511580613d27575080806020019051810190613d279190614d59565b613d8d5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610449565b505050505050565b6000808060001985870985870292508281108382030391505080600003613dcf57838281613dc557613dc5614ab3565b0492505050611959565b808411613e165760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610449565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038216613ed55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610449565b613ee1600083836140f8565b8060026000828254613ef3919061492b565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000846001600160a01b0316846001600160a01b031603613fb75760405162461bcd60e51b815260206004820152602160248201527f50616e6461466163746f72793a204944454e544943414c5f41444452455353456044820152605360f81b6064820152608401610449565b6001600160a01b03841615801590613fd757506001600160a01b03851615155b6140235760405162461bcd60e51b815260206004820152601a60248201527f50616e6461466163746f72793a205a45524f5f414444524553530000000000006044820152606401610449565b600080866001600160a01b0316866001600160a01b031610614046578686614049565b85875b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150859060480160405160208183030381529060405280519060200120856040516020016140d5939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b60205460ff168061411757506023546001600160a01b03838116911614155b6132b95760405162461bcd60e51b815260206004820152601c60248201527f50616e6461546f6b656e3a20494e56414c49445f5452414e53464552000000006044820152606401610449565b60606000614170836143b0565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156141d9575060009050600361215f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561422d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166142565760006001925092505061215f565b9660009650945050505050565b600081600481111561427757614277614b30565b0361427f5750565b600181600481111561429357614293614b30565b036142e05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610449565b60028160048111156142f4576142f4614b30565b036143415760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610449565b600381600481111561435557614355614b30565b036143ad5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610449565b50565b600060ff8216601f811115610f8957604051632cd44ac360e21b815260040160405180910390fd5b60208082526018908201527f50616e6461506f6f6c3a204e4f545f424552415f504149520000000000000000604082015260600190565b6001600160a01b03811681146143ad57600080fd5b6000806040838503121561443757600080fd5b8235915060208301356144498161440f565b809150509250929050565b60005b8381101561446f578181015183820152602001614457565b50506000910152565b60008151808452614490816020860160208601614454565b601f01601f19169290920160200192915050565b6020815260006119596020830184614478565b6000602082840312156144c957600080fd5b5035919050565b600080604083850312156144e357600080fd5b82356144ee8161440f565b946020939093013593505050565b60006020828403121561450e57600080fd5b81356119598161440f565b60008060008060008086880361010081121561453457600080fd5b873561453f8161440f565b96506080601f198201121561455357600080fd5b5060208701945060a0870135935060c087013561456f8161440f565b925060e087013567ffffffffffffffff8082111561458c57600080fd5b818901915089601f8301126145a057600080fd5b8135818111156145af57600080fd5b8a60208285010111156145c157600080fd5b6020830194508093505050509295509295509295565b6000806000606084860312156145ec57600080fd5b833592506020840135915060408401356146058161440f565b809150509250925092565b60008060006060848603121561462557600080fd5b83356146308161440f565b925060208401356146408161440f565b929592945050506040919091013590565b60ff60f81b881681526000602060e08184015261467160e084018a614478565b8381036040850152614683818a614478565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156146d5578351835292840192918401916001016146b9565b50909c9b505050505050505050505050565b61ffff811681146143ad57600080fd5b6000806000806080858703121561470d57600080fd5b843593506020850135925060408501359150606085013561472d816146e7565b939692955090935050565b60008060006060848603121561474d57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561477a57600080fd5b843593506020850135925060408501356147938161440f565b9150606085013561472d8161440f565b600080600080600080600060e0888a0312156147be57600080fd5b87356147c98161440f565b965060208801356147d98161440f565b95506040880135945060608801359350608088013560ff811681146147fd57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561482d57600080fd5b82356148388161440f565b915060208301356144498161440f565b600181811c9082168061485c57607f821691505b602082108103613bf657634e487b7160e01b600052602260045260246000fd5b60208082526014908201527314185b9918541bdbdb0e8811d49051155055115160621b604082015260600190565b60208082526021908201527f50616e6461506f6f6c3a20494e53554646494349454e545f4c495155494449546040820152605960f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f8957610f896148eb565b8082028115828204841417610f8957610f896148eb565b80820180821115610f8957610f896148eb565b6020808252601a908201527f50616e6461506f6f6c3a2054524144455f42454c4f575f4d494e000000000000604082015260600190565b60006020828403121561498757600080fd5b5051919050565b6000602082840312156149a057600080fd5b81516119598161440f565b634e487b7160e01b600052604160045260246000fd5b6000608082840312156149d357600080fd5b6040516080810181811067ffffffffffffffff821117156149f6576149f66149ab565b6040528251614a04816146e7565b81526020830151614a14816146e7565b60208201526040830151614a27816146e7565b60408201526060830151614a3a816146e7565b60608201529392505050565b6001600160a01b0389811682528881166020830152604082018890526060820187905260808201869052841660a082015260e060c08201819052810182905260006101008385828501376000838501820152601f909301601f191690910190910198975050505050505050565b634e487b7160e01b600052601260045260246000fd5b600082614ae657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f50616e6461506f6f6c3a20494e53554646494349454e545f4f55545055545f416040820152641353d5539560da1b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b600082601f830112614b5757600080fd5b813567ffffffffffffffff80821115614b7257614b726149ab565b604051601f8301601f19908116603f01168101908282118183101715614b9a57614b9a6149ab565b81604052838152866020858801011115614bb357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215614be657600080fd5b823567ffffffffffffffff80821115614bfe57600080fd5b614c0a86838701614b46565b93506020850135915080821115614c2057600080fd5b50614c2d85828601614b46565b9150509250929050565b601f8211156132b957600081815260208120601f850160051c81016020861015614c5e5750805b601f850160051c820191505b81811015613d8d57828155600101614c6a565b815167ffffffffffffffff811115614c9757614c976149ab565b614cab81614ca58454614848565b84614c37565b602080601f831160018114614ce05760008415614cc85750858301515b600019600386901b1c1916600185901b178555613d8d565b600085815260208120601f198616915b82811015614d0f57888601518255948401946001909101908401614cf0565b5085821015614d2d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251614d4f818460208701614454565b9190910192915050565b600060208284031215614d6b57600080fd5b8151801515811461195957600080fdfea2646970667358221220122fafdb353969571b536c259193d089477c4879f7eae8bb557ba26764cd688e64736f6c63430008130033