[ { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" } ], "name": "DrainWrongToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "token0FeePercent", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "token1FeePercent", "type": "uint16" } ], "name": "FeePercentUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [], "name": "SetPairTypeImmutable", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "prevStableSwap", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "stableSwap", "type": "bool" } ], "name": "SetStableSwap", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Skim", "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": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" } ], "name": "Sync", "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" }, { "constant": true, "inputs": [], "name": "BLAST", "outputs": [ { "internalType": "contract IBlast", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "FEE_DENOMINATOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_FEE_PERCENT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "drainWrongToken", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenIn", "type": "address" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint16", "name": "_token0FeePercent", "type": "uint16" }, { "internalType": "uint16", "name": "_token1FeePercent", "type": "uint16" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" } ], "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "pairTypeImmutable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "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": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "precisionMultiplier0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "precisionMultiplier1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint16", "name": "newToken0FeePercent", "type": "uint16" }, { "internalType": "uint16", "name": "newToken1FeePercent", "type": "uint16" } ], "name": "setFeePercent", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "setPairTypeImmutable", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bool", "name": "stable", "type": "bool" }, { "internalType": "uint112", "name": "expectedReserve0", "type": "uint112" }, { "internalType": "uint112", "name": "expectedReserve1", "type": "uint112" } ], "name": "setStableSwap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "stableSwap", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "swap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "sync", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token0FeePercent", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1FeePercent", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" } ]
60806040526008805461ffff60e01b1916604b60e21b176001600160f01b0316604b60f21b1790556001600d553480156200003957600080fd5b50604051469080605262003e488239604080519182900360520182208282018252601b83527f506c616e6172204c697175696469747920506f6f6c20546f6b656e00000000006020938401528151808301835260018152603160f81b908401528151808401919091527f6ca921b590a4b6d618de34c41fa5ef17f8a25495949f52f94131ad7b0d430967818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c085018083528151919093012060035563784c3b3d60e11b909152517343000000000000000000000000000000000000029263f098767a925060c48082019260009290919082900301818387803b1580156200016557600080fd5b505af11580156200017a573d6000803e3d6000fd5b505050507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505060408051631d70c8d360e31b81523360048201529051734300000000000000000000000000000000000002935063eb8646989250602480830192600092919082900301818387803b1580156200023a57600080fd5b505af11580156200024f573d6000803e3d6000fd5b5050600580546001600160a01b031916331790555050613bd380620002756000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80636a62784211610146578063b6200b07116100c3578063d505accf11610087578063d505accf14610737578063d73792a914610788578063dd62ed3e14610790578063f140a35a146107be578063f39ac11f146107ea578063fff6cae91461081857610253565b8063b6200b07146106f1578063ba9a7a56146106f9578063bc25cf7714610701578063c45a015514610727578063d21220a71461072f57610253565b806389afcb441161010a57806389afcb441461066e57806395d89b41146106ad57806397d75776146106b55780639e548b7f146106bd578063a9059cbb146106c557610253565b80636a6278421461055f5780636e1fdd7f1461058557806370a082311461061a5780637464fc3d146106405780637ecebe001461064857610253565b80633029e5d4116101d45780633ba17077116101985780633ba17077146104f0578063485cc955146104f857806348e5d2601461052657806362ecec031461054f57806367d817401461055757610253565b80633029e5d41461048457806330adf81f146104ba578063313ce567146104c25780633644e515146104e05780633b9f1dc0146104e857610253565b8063158ef93e1161021b578063158ef93e1461040557806318160ddd1461040d57806323b872dd14610427578063288e5d021461045d5780632fcd16921461046557610253565b8063022c0d9f1461025857806306fdde03146102e65780630902f1ac14610363578063095ea7b3146103a15780630dfe1681146103e1575b600080fd5b6102e46004803603608081101561026e57600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156102a557600080fd5b8201836020820111156102b757600080fd5b803590602001918460018302840111640100000000831117156102d957600080fd5b509092509050610820565b005b6102ee6108c1565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61036b6108fa565b604080516001600160701b03958616815293909416602084015261ffff9182168385015216606082015290519081900360800190f35b6103cd600480360360408110156103b757600080fd5b506001600160a01b03813516906020013561092d565b604080519115158252519081900360200190f35b6103e9610944565b604080516001600160a01b039092168252519081900360200190f35b6103cd610953565b610415610963565b60408051918252519081900360200190f35b6103cd6004803603606081101561043d57600080fd5b506001600160a01b03813581169160208101359091169060400135610969565b610415610a40565b61046d610a46565b6040805161ffff9092168252519081900360200190f35b6102e46004803603606081101561049a57600080fd5b5080351515906001600160701b0360208201358116916040013516610a57565b610415610d53565b6104ca610d77565b6040805160ff9092168252519081900360200190f35b610415610d7c565b610415610d82565b6102e4610d88565b6102e46004803603604081101561050e57600080fd5b506001600160a01b0381358116916020013516610f0f565b6102e46004803603604081101561053c57600080fd5b5061ffff813581169160200135166110aa565b61046d6112cf565b6104156112e0565b6104156004803603602081101561057557600080fd5b50356001600160a01b03166112e6565b6102e4600480360360a081101561059b57600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156105d257600080fd5b8201836020820111156105e457600080fd5b8035906020019184600183028401116401000000008311171561060657600080fd5b9193509150356001600160a01b03166115e5565b6104156004803603602081101561063057600080fd5b50356001600160a01b0316611689565b61041561169b565b6104156004803603602081101561065e57600080fd5b50356001600160a01b03166116a1565b6106946004803603602081101561068457600080fd5b50356001600160a01b03166116b3565b6040805192835260208301919091528051918290030190f35b6102ee611a4c565b6103e9611a71565b6103cd611a7c565b6103cd600480360360408110156106db57600080fd5b506001600160a01b038135169060200135611a85565b6103cd611a92565b610415611aa0565b6102e46004803603602081101561071757600080fd5b50356001600160a01b0316611aa6565b6103e9611c34565b6103e9611c43565b6102e4600480360360e081101561074d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611c52565b610415611e54565b610415600480360360408110156107a657600080fd5b506001600160a01b0381358116916020013516611e5b565b610415600480360360408110156107d457600080fd5b50803590602001356001600160a01b0316611e78565b6102e46004803603604081101561080057600080fd5b506001600160a01b0381358116916020013516611ee8565b6102e4612126565b61082861389a565b5060408051610100810182526006546001600160a01b039081168252600754166020808301919091528183018890526060820187905260006080830181905260a0830181905260c0830181905260e08301528251601f850182900482028101820190935283835290916108b991839187918790879081908401838280828437600092018290525092506122c4915050565b505050505050565b6040518060400160405280601b81526020017f506c616e6172204c697175696469747920506f6f6c20546f6b656e000000000081525081565b6008546001600160701b0380821692600160701b83049091169161ffff600160e01b8204811692600160f01b9092041690565b600061093a338484612c85565b5060015b92915050565b6006546001600160a01b031681565b600754600160a01b900460ff1681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610a2a576001600160a01b03841660009081526002602090815260408083203384529091528120546109c9908463ffffffff612ce716565b6001600160a01b038616600081815260026020908152604080832033808552908352928190208590558051858152905194955091937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505b610a35848484612d37565b5060015b9392505050565b600a5481565b600854600160f01b900461ffff1681565b600d54600114610a9c576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d5560055460408051637e1c813560e11b815290516001600160a01b039092169163fc39026a91600480820192602092909190829003018186803b158015610ae657600080fd5b505afa158015610afa573d6000803e3d6000fd5b505050506040513d6020811015610b1057600080fd5b50516001600160a01b03163314610b585760405162461bcd60e51b81526004018080602001828103825260328152602001806138f26032913960400191505060405180910390fd5b600c54610100900460ff1615610bb5576040805162461bcd60e51b815260206004820152601e60248201527f506c616e61724c6971756964697479506f6f6c3a20696d6d757461626c650000604482015290519081900360640190fd5b600c5460ff1615158315151415610c13576040805162461bcd60e51b815260206004820152601e60248201527f506c616e61724c6971756964697479506f6f6c3a206e6f207570646174650000604482015290519081900360640190fd5b6008546001600160701b038381169116148015610c4457506008546001600160701b03828116600160701b90920416145b610c95576040805162461bcd60e51b815260206004820152601b60248201527f506c616e61724c6971756964697479506f6f6c3a206661696c65640000000000604482015290519081900360640190fd5b600854600090610cb8906001600160701b0380821691600160701b900416612df1565b600c546040805160ff90921615158252861515602083015280519293507fb6a86710bde53aa7fb1b3856279e2af5b476d53e2dd0902cf17a0911b5a43a8b92918290030190a1600c805460ff191685158015919091179091558490610d1a5750805b610d25576000610d45565b600854610d45906001600160701b0380821691600160701b900416612faa565b600b5550506001600d555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60095481565b600d54600114610dcd576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d5560055460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b158015610e1757600080fd5b505afa158015610e2b573d6000803e3d6000fd5b505050506040513d6020811015610e4157600080fd5b50516001600160a01b03163314610e895760405162461bcd60e51b815260040180806020018281038252602981526020018061395e6029913960400191505060405180910390fd5b600c54610100900460ff1615610ed05760405162461bcd60e51b8152600401808060200182810382526026815260200180613a726026913960400191505060405180910390fd5b600c805461ff0019166101001790556040517f09122c41ae733a4d7740324d50e35fbd6ee85be3c1312a45596d8045150ab2f290600090a16001600d55565b6005546001600160a01b031633148015610f335750600754600160a01b900460ff16155b610f84576040805162461bcd60e51b815260206004820152601e60248201527f506c616e61724c6971756964697479506f6f6c3a20464f5242494444454e0000604482015290519081900360640190fd5b600680546001600160a01b038085166001600160a01b0319928316811790935560078054918516919092161790556040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b158015610fe857600080fd5b505afa158015610ffc573d6000803e3d6000fd5b505050506040513d602081101561101257600080fd5b505160ff16600a0a6009556040805163313ce56760e01b815290516001600160a01b0383169163313ce567916004808301926020929190829003018186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d602081101561108757600080fd5b505160ff16600a90810a905550506007805460ff60a01b1916600160a01b179055565b600d546001146110ef576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d5560055460408051634c21771560e01b815290516001600160a01b0390921691634c21771591600480820192602092909190829003018186803b15801561113957600080fd5b505afa15801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b50516001600160a01b031633146111ab5760405162461bcd60e51b8152600401808060200182810382526032815260200180613a986032913960400191505060405180910390fd5b6107d08261ffff16111580156111c757506107d08161ffff1611155b6112025760405162461bcd60e51b815260040180806020018281038252603a815260200180613a38603a913960400191505060405180910390fd5b60008261ffff1611801561121a575060008161ffff16115b6112555760405162461bcd60e51b815260040180806020018281038252603a815260200180613924603a913960400191505060405180910390fd5b6008805461ffff60e01b1916600160e01b61ffff858116918202929092176001600160f01b0316600160f01b9285169283021790925560408051928352602083019190915280517fa4877b8ecb5a00ba277e4bceeeb187a669e7113649774dfbea05c259ce27f17b9281900390910190a150506001600d55565b600854600160e01b900461ffff1681565b6107d081565b6000600d5460011461132d576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d8190558061133d6108fa565b5050600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d60208110156113bc57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b505190506000611458836001600160701b03871663ffffffff612ce716565b90506000611475836001600160701b03871663ffffffff612ce716565b905060006114838787612df1565b600054909150806114cc576114b86103e86114ac6114a7878763ffffffff6130c016565b613123565b9063ffffffff612ce716565b98506114c760006103e8613175565b61151b565b6115186001600160701b0389166114e9868463ffffffff6130c016565b816114f057fe5b046001600160701b03891661150b868563ffffffff6130c016565b8161151257fe5b0461320b565b98505b6000891161155a5760405162461bcd60e51b81526004018080602001828103825260328152602001806139a96032913960400191505060405180910390fd5b6115648a8a613175565b61156e8686613221565b811561159857600854611594906001600160701b0380821691600160701b900416612faa565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b6115ed61389a565b5060408051610100810182526006546001600160a01b039081168252600754166020808301919091528183018990526060820188905260006080830181905260a0830181905260c0830181905260e08301528251601f86018290048202810182019093528483529091611680918391889188908890819084018382808284376000920191909152508892506122c4915050565b50505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146116fb576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d8190558061170b6108fa565b5050600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d602081101561180a57600080fd5b5051306000908152600160205260408120549192506118298888612df1565b60005490915080611840848763ffffffff6130c016565b8161184757fe5b049a508061185b848663ffffffff6130c016565b8161186257fe5b04995060008b118015611875575060008a115b6118b05760405162461bcd60e51b8152600401808060200182810382526032815260200180613a066032913960400191505060405180910390fd5b6118ba3084613316565b6118c5878d8d6133b4565b6118d0868d8c6133b4565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561191657600080fd5b505afa15801561192a573d6000803e3d6000fd5b505050506040513d602081101561194057600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561198c57600080fd5b505afa1580156119a0573d6000803e3d6000fd5b505050506040513d60208110156119b657600080fd5b505193506119c48585613221565b81156119ee576008546119ea906001600160701b0380821691600160701b900416612faa565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b604051806040016040528060098152602001680504c414e41522d4c560bc1b81525081565b6002604360981b0181565b600c5460ff1681565b600061093a338484612d37565b600c54610100900460ff1681565b6103e881565b600d54600114611aeb576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611b9a9285928792611b95926001600160701b03169185916370a0823191602480820192602092909190829003018186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d6020811015611b8757600080fd5b50519063ffffffff612ce716565b6133b4565b600854604080516370a0823160e01b81523060048201529051611c019284928792611b9592600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611b5d57600080fd5b6040517f21ad22495c9c75cd1c94756f91824e779c0c8a8e168b267c790df464fe056b7990600090a150506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611c9c576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611db7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611ded5750886001600160a01b0316816001600160a01b0316145b611e3e576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611e49898989612c85565b505050505050505050565b620186a081565b600260209081526000928352604080842090915290825290205481565b60065460009081906001600160a01b03848116911614611ea557600854600160f01b900461ffff16611eb4565b600854600160e01b900461ffff165b600854909150611ee090859085906001600160701b0380821691600160701b90041661ffff8616613538565b949350505050565b600d54600114611f2d576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d5560055460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b158015611f7757600080fd5b505afa158015611f8b573d6000803e3d6000fd5b505050506040513d6020811015611fa157600080fd5b50516001600160a01b03163314611fe95760405162461bcd60e51b815260040180806020018281038252602981526020018061395e6029913960400191505060405180910390fd5b6006546001600160a01b0383811691161480159061201557506007546001600160a01b03838116911614155b6120505760405162461bcd60e51b81526004018080602001828103825260228152602001806139876022913960400191505060405180910390fd5b6120dc8282846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d60208110156120d557600080fd5b50516133b4565b604080516001600160a01b0383811682529151918416917f368a9dc863ecb94b5ba32a682e26295b10d9c2666fad7d785ebdf262c3c524139181900360200190a250506001600d55565b600d5460011461216b576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d819055600654604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156121bd57600080fd5b505afa1580156121d1573d6000803e3d6000fd5b505050506040513d60208110156121e757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561223a57600080fd5b505afa15801561224e573d6000803e3d6000fd5b505050506040513d602081101561226457600080fd5b50519050811580159061227657508015155b6122b15760405162461bcd60e51b8152600401808060200182810382526034815260200180613b4b6034913960400191505060405180910390fd5b6122bb8282613221565b50506001600d55565b600d54600114612309576040805162461bcd60e51b815260206004820152601b6024820152600080516020613b7f833981519152604482015290519081900360640190fd5b6000600d556040840151151580612324575060008460600151115b61235f5760405162461bcd60e51b815260040180806020018281038252602f815260200180613af8602f913960400191505060405180910390fd5b60008060008061236d6108fa565b9350935093509350836001600160701b0316886040015110801561239d5750826001600160701b03168860600151105b6123d85760405162461bcd60e51b815260040180806020018281038252602b8152602001806139db602b913960400191505060405180910390fd5b87516001600160a01b0388811691161480159061240b575087602001516001600160a01b0316876001600160a01b031614155b61245c576040805162461bcd60e51b815260206004820152601f60248201527f506c616e61724c6971756964697479506f6f6c3a20494e56414c49445f544f00604482015290519081900360640190fd5b604088015115612479576124798860000151888a604001516133b4565b606088015115612496576124968860200151888a606001516133b4565b85511561259057866001600160a01b03166310d1e85c338a604001518b606001518a6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612528578181015183820152602001612510565b50505050905090810190601f1680156125555780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561257757600080fd5b505af115801561258b573d6000803e3d6000fd5b505050505b8751604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156125da57600080fd5b505afa1580156125ee573d6000803e3d6000fd5b505050506040513d602081101561260457600080fd5b50516080890152602088810151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561265357600080fd5b505afa158015612667573d6000803e3d6000fd5b505050506040513d602081101561267d57600080fd5b505160a0890152604088015160808901516000916001600160701b03871603106126a85760006126bf565b8860400151856001600160701b0316038960800151035b905060008960600151856001600160701b0316038a60a00151116126e45760006126fb565b8960600151856001600160701b0316038a60a00151035b9050600082118061270c5750600081115b6127475760405162461bcd60e51b815260040180806020018281038252602e815260200180613aca602e913960400191505060405180910390fd5b620186a061275f8361ffff871663ffffffff6130c016565b8161276657fe5b0460c08b0152620186a06127848261ffff861663ffffffff6130c016565b8161278b57fe5b0460e08b01526000806001600160a01b0389166127a9576000612823565b60055460408051631c60f51f60e21b81526001600160a01b038c8116600483015291519190921691637183d47c916024808301926020929190829003018186803b1580156127f657600080fd5b505afa15801561280a573d6000803e3d6000fd5b505050506040513d602081101561282057600080fd5b50515b905080156128e857831561288e576402540be40061285b61ffff881661284f878563ffffffff6130c016565b9063ffffffff6130c016565b8161286257fe5b04915061287c828d60c00151612ce790919063ffffffff16565b60c08d01528b5161288e908a846133b4565b82156128e8576402540be4006128b261ffff871661284f868563ffffffff6130c016565b816128b957fe5b0491506128d3828d60e00151612ce790919063ffffffff16565b60e08d015260208c01516128e8908a846133b4565b600c5460ff1615612a505760055460408051634cadad5760e11b8152815160009384936001600160a01b039091169263995b5aae9260048083019392829003018186803b15801561293857600080fd5b505afa15801561294c573d6000803e3d6000fd5b505050506040513d604081101561296257600080fd5b50805160209091015190925090506001600160a01b03811615612a4d576129968261284f620186a08663ffffffff612ce716565b915085156129f15766038d7ea4c680006129be61ffff8a1661284f898663ffffffff6130c016565b816129c557fe5b0493506129df848f60c00151612ce790919063ffffffff16565b60c08f01528d516129f19082866133b4565b8415612a4d5766038d7ea4c68000612a1761ffff891661284f888663ffffffff6130c016565b81612a1e57fe5b049350612a38848f60e00151612ce790919063ffffffff16565b60e08f015260208e0151612a4d9082866133b4565b50505b8315612ad2578b51604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612aa057600080fd5b505afa158015612ab4573d6000803e3d6000fd5b505050506040513d6020811015612aca57600080fd5b505160808d01525b8215612b52576020808d0151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612b2057600080fd5b505afa158015612b34573d6000803e3d6000fd5b505050506040513d6020811015612b4a57600080fd5b505160a08d01525b50506000612b718b60c001518c60800151612ce790919063ffffffff16565b90506000612b908c60e001518d60a00151612ce790919063ffffffff16565b9050612bae886001600160701b0316886001600160701b0316612faa565b612bb88383612faa565b1015612c04576040805162461bcd60e51b8152602060048201526016602482015275506c616e61724c6971756964697479506f6f6c3a204b60501b604482015290519081900360640190fd5b5050612c188a608001518b60a00151613221565b6040808b01516060808d0151835186815260208101869052808501939093529082015290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d555050505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561093e576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054612d60908263ffffffff612ce716565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612d95908263ffffffff61370616565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600c5460009060ff1615612e075750600061093e565b60055460408051634cadad5760e11b8152815160009384936001600160a01b039091169263995b5aae9260048083019392829003018186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506040513d6040811015612e7657600080fd5b508051602090910151600b546001600160a01b038216158015965092945090925090612f95578015612f90576000612ec36114a7886001600160701b0316886001600160701b0316612faa565b90506000612ed083613123565b905080821115612f8d576000612f09606487612ef5620186a08363ffffffff6130c016565b81612efc57fe5b049063ffffffff612ce716565b90506000612f34606461284f612f25878763ffffffff612ce716565b6000549063ffffffff6130c016565b90506000612f68612f4c85606463ffffffff6130c016565b612f5c878663ffffffff6130c016565b9063ffffffff61370616565b90506000818381612f7557fe5b0490508015612f8857612f888882613175565b505050505b50505b612fa1565b8015612fa1576000600b555b50505092915050565b600c5460009060ff16156130b057600954600090612fd685670de0b6b3a764000063ffffffff6130c016565b81612fdd57fe5b0490506000600a54613000670de0b6b3a7640000866130c090919063ffffffff16565b8161300757fe5b0490506000670de0b6b3a7640000613025848463ffffffff6130c016565b8161302c57fe5b0490506000613082670de0b6b3a764000061304d858063ffffffff6130c016565b8161305457fe5b04670de0b6b3a764000061306e878063ffffffff6130c016565b8161307557fe5b049063ffffffff61370616565b9050670de0b6b3a764000061309d838363ffffffff6130c016565b816130a457fe5b0494505050505061093e565b610a39838363ffffffff6130c016565b60008115806130db575050808202828282816130d857fe5b04145b61093e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b60006003821115613166575080600160028204015b818110156131605780915060028182858161314f57fe5b04018161315857fe5b049050613138565b50613170565b8115613170575060015b919050565b600054613188908263ffffffff61370616565b60009081556001600160a01b0383168152600160205260409020546131b3908263ffffffff61370616565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061321a5781610a39565b5090919050565b6001600160701b03821180159061323f57506001600160701b038111155b613290576040805162461bcd60e51b815260206004820152601d60248201527f506c616e61724c6971756964697479506f6f6c3a204f564552464c4f57000000604482015290519081900360640190fd5b600880546dffffffffffffffffffffffffffff19166001600160701b038481169182176dffffffffffffffffffffffffffff60701b1916600160701b9185169182021790925560408051918252602082019290925281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a15050565b6001600160a01b03821660009081526001602052604090205461333f908263ffffffff612ce716565b6001600160a01b0383166000908152600160205260408120919091555461336c908263ffffffff612ce716565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106134615780518252601f199092019160209182019101613442565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146134c3576040519150601f19603f3d011682016040523d82523d6000602084013e6134c8565b606091505b50915091508180156134f65750805115806134f657508080602001905160208110156134f357600080fd5b50515b6135315760405162461bcd60e51b8152600401808060200182810382526024815260200180613b276024913960400191505060405180910390fd5b5050505050565b600c5460009060ff161561367b57613573620186a061355d888563ffffffff6130c016565b8161356457fe5b8891900463ffffffff612ce716565b955060006135818585612faa565b905060095485670de0b6b3a7640000028161359857fe5b049450600a5484670de0b6b3a764000002816135b057fe5b600654919004945060009081906001600160a01b038981169116146135d65785876135d9565b86865b60065491935091506001600160a01b0389811691161461360e57600a5489670de0b6b3a7640000028161360857fe5b04613625565b60095489670de0b6b3a7640000028161362357fe5b045b98506000613636838b018584613755565b6006549083039150670de0b6b3a7640000906001600160a01b038b811691161461366257600954613666565b600a545b82028161366f57fe5b049450505050506136fd565b60065460009081906001600160a01b0388811691161461369c57848661369f565b85855b90925090506136c76136ba620186a08663ffffffff612ce716565b899063ffffffff6130c016565b97506136e088612f5c84620186a063ffffffff6130c016565b6136f0898363ffffffff6130c016565b816136f757fe5b04925050505b95945050505050565b8082018281101561093e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000805b60ff81101561380d5782600061376f8783613816565b9050858110156137a55760006137858887613866565b828803670de0b6b3a7640000028161379957fe5b049590950194506137cc565b60006137b18887613866565b878303670de0b6b3a764000002816137c557fe5b0490950394505b818511156137ee576001828603116137e957849350505050610a39565b613803565b60018583031161380357849350505050610a39565b5050600101613759565b50909392505050565b6000670de0b6b3a76400008281858181800204028161383157fe5b04028161383a57fe5b04670de0b6b3a764000080848181800204028161385357fe5b0485028161385d57fe5b04019392505050565b6000670de0b6b3a7640000838181800204028161387f57fe5b04670de0b6b3a7640000808480020485600302028161385d57fe5b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe506c616e61724c6971756964697479506f6f6c3a206f6e6c7920666163746f7279277320736574537461626c654f776e6572506c616e61724c6971756964697479506f6f6c3a2066656550657263656e74206d7573746e27742065786365656420746865206d696e696d756d506c616e61724c6971756964697479506f6f6c3a206f6e6c7920666163746f72792773206f776e6572506c616e61724c6971756964697479506f6f6c3a20696e76616c696420746f6b656e506c616e61724c6971756964697479506f6f6c3a20494e53554646494349454e545f4c49515549444954595f4d494e544544506c616e61724c6971756964697479506f6f6c3a20494e53554646494349454e545f4c4951554944495459506c616e61724c6971756964697479506f6f6c3a20494e53554646494349454e545f4c49515549444954595f4255524e4544506c616e61724c6971756964697479506f6f6c3a2066656550657263656e74206d7573746e27742065786365656420746865206d6178696d756d506c616e61724c6971756964697479506f6f6c3a20616c726561647920696d6d757461626c65506c616e61724c6971756964697479506f6f6c3a206f6e6c7920666163746f7279277320666565416d6f756e744f776e6572506c616e61724c6971756964697479506f6f6c3a20494e53554646494349454e545f494e5055545f414d4f554e54506c616e61724c6971756964697479506f6f6c3a20494e53554646494349454e545f4f55545055545f414d4f554e54506c616e61724c6971756964697479506f6f6c3a205452414e534645525f4641494c4544506c616e61724c6971756964697479506f6f6c3a206c697175696469747920726174696f206e6f7420696e697469616c697a6564506c616e61724c6971756964697479506f6f6c3a204c4f434b45440000000000a265627a7a72315820fa9e6d8989b739383ab13b62e1e5018985a0fed14c528b4e8271e565f866c89164736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429