[ { "inputs": [], "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": "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": [ { "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": 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": false, "internalType": "uint256", "name": "feeTaken0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeTaken1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "SwapWithFee", "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" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FEE_DIVISOR", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "feeRebate", "type": "uint64" } ], "name": "calculateFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeCache0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeCache1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFeeDivisor", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" }, { "internalType": "uint64", "name": "_fee", "type": "uint64" }, { "internalType": "uint64", "name": "_oasisFeeProportion", "type": "uint64" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oasisFeeProportion", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "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": "price0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "_fee", "type": "uint64" }, { "internalType": "uint64", "name": "_oasisFeeProportion", "type": "uint64" } ], "name": "setFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "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": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "feeController", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swapCalculatingRebate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint64", "name": "feeRebate", "type": "uint64" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swapWithRebate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bool", "name": "_send0", "type": "bool" }, { "internalType": "bool", "name": "_send1", "type": "bool" } ], "name": "withdrawFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405260006009556000600a556001600f5534801561001f57600080fd5b50604080518082018252601281527127b0b9b4b9a9bbb0b8102628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f890d8bf4e5daf6ad756bc94501e2953384f5cf47b80cf79171c594b144901f11818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556136c18061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c80637ecebe0011610160578063c4a2e833116100d8578063dd62ed3e1161008c578063dfeff50c11610071578063dfeff50c1461061c578063e0d248b61461062f578063fff6cae91461064257600080fd5b8063dd62ed3e146105dd578063ddca3f431461060857600080fd5b8063d21220a7116100bd578063d21220a7146105ae578063d505accf146105c1578063d6cbca85146105d457600080fd5b8063c4a2e83314610588578063ca42e86c1461059b57600080fd5b80639e93ad8e1161012f578063ba9a7a5611610114578063ba9a7a5614610559578063bc25cf7714610562578063c45a01551461057557600080fd5b80639e93ad8e1461053d578063a9059cbb1461054657600080fd5b80637ecebe00146104a657806389afcb44146104c657806395d89b41146104ee5780639b4400dd1461052a57600080fd5b806330adf81f1161020e5780635a3d5493116101c25780636a627842116101a75780636a6278421461046a57806370a082311461047d5780637464fc3d1461049d57600080fd5b80635a3d549314610458578063650877a31461046157600080fd5b8063331d19a9116101f3578063331d19a91461043e5780633644e515146104465780635909c0d51461044f57600080fd5b806330adf81f146103fd578063313ce5671461042457600080fd5b8063096a9d6a1161026557806315a8b14f1161024a57806315a8b14f146103c057806318160ddd146103d357806323b872dd146103ea57600080fd5b8063096a9d6a1461035c5780630dfe16811461039557600080fd5b8063022c0d9f1461029757806306fdde03146102ac5780630902f1ac146102fe578063095ea7b314610339575b600080fd5b6102aa6102a5366004612f52565b61064a565b005b6102e86040518060400160405280601281526020017f4f6173697353776170204c5020546f6b656e000000000000000000000000000081525081565b6040516102f59190612fe0565b60405180910390f35b600854604080516001600160701b038084168252600160701b8404166020820152600160e01b90920463ffffffff16908201526060016102f5565b61034c610347366004613013565b61083b565b60405190151581526020016102f5565b600b5461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f5565b6006546103a8906001600160a01b031681565b6040516001600160a01b0390911681526020016102f5565b6102aa6103ce36600461303f565b610852565b6103dc60005481565b6040519081526020016102f5565b61034c6103f83660046130bb565b610b88565b6103dc7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61042c601281565b60405160ff90911681526020016102f5565b61271061037c565b6103dc60035481565b6103dc600c5481565b6103dc600d5481565b6103dc600a5481565b6103dc6104783660046130fc565b610c1c565b6103dc61048b3660046130fc565b60016020526000908152604090205481565b6103dc600e5481565b6103dc6104b43660046130fc565b60046020526000908152604090205481565b6104d96104d43660046130fc565b6110b6565b604080519283526020830191909152016102f5565b6102e86040518060400160405280600381526020017f4f4c50000000000000000000000000000000000000000000000000000000000081525081565b6102aa61053836600461312f565b61138b565b61037c61271081565b61034c610554366004613013565b61143d565b6103dc6103e881565b6102aa6105703660046130fc565b61144a565b6005546103a8906001600160a01b031681565b6102aa61059636600461318b565b611550565b6102aa6105a93660046131c4565b611728565b6007546103a8906001600160a01b031681565b6102aa6105cf366004613206565b611a07565b6103dc60095481565b6103dc6105eb36600461327d565b600260209081526000928352604080842090915290825290205481565b600b5461037c9067ffffffffffffffff1681565b6102aa61062a3660046132b9565b611c41565b6103dc61063d366004613304565b611df3565b6102aa611dfe565b600f546001146106955760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b60448201526064015b60405180910390fd5b6000600f55600554604051630bb197c560e01b81523360048201526001600160a01b0390911690630bb197c590602401600060405180830381600087803b1580156106df57600080fd5b505af11580156106f3573d6000803e3d6000fd5b5050505060008060008061070c89898960008a8a611edf565b60408051858152602081018590529081018e9052606081018d9052939750919550935091506001600160a01b0388169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a360408051858152602081018590529081018a9052606081018990526080810183905260a081018290526001600160a01b0388169033907fe13d29a8ba9d1669d66fa00d417b1da0b6c41c03e2d0d84e4f815f23d49b29979060c00160405180910390a35050600554604051636334461f60e11b81523360048201526001600160a01b03909116925063c6688c3e9150602401600060405180830381600087803b15801561081757600080fd5b505af115801561082b573d6000803e3d6000fd5b50506001600f5550505050505050565b60006108483384846125ca565b5060015b92915050565b600f546001146108985760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b604482015260640161068c565b6000600f55600554604051630bb197c560e01b81523360048201526001600160a01b0390911690630bb197c590602401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050506001600160a01b03831633148061091957506001600160a01b03831632145b806109355750836001600160a01b0316836001600160a01b0316145b6109a75760405162461bcd60e51b815260206004820152602160248201527f4f61736973537761703a20494e56414c49445f4645455f434f4e54524f4c4c4560448201527f5200000000000000000000000000000000000000000000000000000000000000606482015260840161068c565b6005546040517f8646a83b0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526000921690638646a83b90602401602060405180830381865afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f9190613321565b9050600080600080610a458b8b8b888b8b611edf565b9350935093509350886001600160a01b0316336001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82286868f8f604051610aac949392919093845260208401929092526040830152606082015260800190565b60405180910390a360408051858152602081018590529081018c9052606081018b90526080810183905260a081018290526001600160a01b038a169033907fe13d29a8ba9d1669d66fa00d417b1da0b6c41c03e2d0d84e4f815f23d49b29979060c00160405180910390a35050600554604051636334461f60e11b81523360048201526001600160a01b03909116935063c6688c3e925060240190505b600060405180830381600087803b158015610b6357600080fd5b505af1158015610b77573d6000803e3d6000fd5b50506001600f555050505050505050565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c07576001600160a01b0384166000908152600260209081526040808320338452909152902054610be2908361262c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c1284848461263f565b5060019392505050565b6000600f54600114610c645760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b604482015260640161068c565b6000600f8190556008546009546006546040516370a0823160e01b81523060048201526001600160701b0380851695600160701b909504169392610d019290916001600160a01b03909116906370a08231906024015b602060405180830381865afa158015610cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb919061333e565b9061262c565b600a546007546040516370a0823160e01b8152306004820152929350600092610d3d92916001600160a01b0316906370a0823190602401610cba565b90506000610d54836001600160701b03871661262c565b90506000610d6b836001600160701b03871661262c565b90506000610d7987876126e5565b60008054919250819003610f6b57600554604080517f7cd07e4700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691637cd07e479160048083019260209291908290030181865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e9190613357565b90506001600160a01b0381163303610ee757806001600160a01b03166340dc0e376040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e82919061333e565b995060008a118015610e9657506000198a14155b610ee25760405162461bcd60e51b815260206004820152601560248201527f4261642064657369726564206c69717569646974790000000000000000000000604482015260640161068c565b610f65565b6001600160a01b03811615610f3e5760405162461bcd60e51b815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015260640161068c565b610f566103e8610cfb610f518888612822565b61282e565b9950610f6560006103e8612916565b50610fb2565b610faf6001600160701b038916610f828684612822565b610f8c91906133a0565b6001600160701b038916610fa08685612822565b610faa91906133a0565b6129a5565b98505b600089116110285760405162461bcd60e51b815260206004820152602860248201527f4f61736973537761703a20494e53554646494349454e545f4c4951554944495460448201527f595f4d494e544544000000000000000000000000000000000000000000000000606482015260840161068c565b6110328a8a612916565b61103e86868a8a6129bb565b811561106857600854611064906001600160701b0380821691600160701b900416612822565b600e555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600f5550949695505050505050565b600080600f546001146110ff5760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b604482015260640161068c565b6000600f8190556008546006546007546009546040516370a0823160e01b81523060048201526001600160701b0380861696600160701b90960416946001600160a01b039485169490931692916111609185906370a0823190602401610cba565b600a546040516370a0823160e01b815230600482015291925060009161119a91906001600160a01b038616906370a0823190602401610cba565b306000908152600160205260408120549192506111b788886126e5565b600054909150806111c88487612822565b6111d291906133a0565b9a50806111df8486612822565b6111e991906133a0565b995060008b1180156111fb575060008a115b61126d5760405162461bcd60e51b815260206004820152602860248201527f4f61736973537761703a20494e53554646494349454e545f4c4951554944495460448201527f595f4255524e4544000000000000000000000000000000000000000000000000606482015260840161068c565b6112773084612bc9565b611282878d8d612c53565b61128d868d8c612c53565b6009546040516370a0823160e01b81523060048201526112c191906001600160a01b038a16906370a0823190602401610cba565b600a546040516370a0823160e01b81523060048201529196506112f7916001600160a01b038916906370a0823190602401610cba565b935061130585858b8b6129bb565b811561132f5760085461132b906001600160701b0380821691600160701b900416612822565b600e555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600f81905550915091565b6005546001600160a01b031633146113e55760405162461bcd60e51b815260206004820152601460248201527f4f61736973537761703a20464f5242494444454e000000000000000000000000604482015260640161068c565b600680546001600160a01b038087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560078054928616929091169190911790556114378282611550565b50505050565b600061084833848461263f565b600f546001146114905760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b604482015260640161068c565b6000600f556006546007546008546009546040516370a0823160e01b81523060048201526001600160a01b0394851694909316926114f392859287926114ee926001600160701b031691610cfb9186906370a0823190602401610cba565b612c53565b600854600a546040516370a0823160e01b815230600482015261154692849287926114ee92600160701b90046001600160701b031691610cfb916001600160a01b038716906370a0823190602401610cba565b50506001600f5550565b6005546001600160a01b03163314806115d05750600554604051633fcbaa7d60e01b81523360048201526001600160a01b0390911690633fcbaa7d90602401602060405180830381865afa1580156115ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d091906133b4565b61161c5760405162461bcd60e51b815260206004820152601460248201527f4f61736973537761703a20464f5242494444454e000000000000000000000000604482015260640161068c565b611629600a6127106133d1565b67ffffffffffffffff168267ffffffffffffffff16111561168c5760405162461bcd60e51b815260206004820152601760248201527f4f61736973537761703a204645455f544f4f5f48494748000000000000000000604482015260640161068c565b61271067ffffffffffffffff821611156116e85760405162461bcd60e51b815260206004820152601e60248201527f4f61736973537761703a2050524f504f5254494f4e5f544f4f5f484947480000604482015260640161068c565b600b805467ffffffffffffffff92831668010000000000000000026fffffffffffffffffffffffffffffffff199091169290931691909117919091179055565b600f5460011461176e5760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b604482015260640161068c565b6000600f55600554604051630bb197c560e01b81523360048201526001600160a01b0390911690630bb197c590602401600060405180830381600087803b1580156117b857600080fd5b505af11580156117cc573d6000803e3d6000fd5b50506005546040517fa98887000000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116925063a98887009150602401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185591906133b4565b6118a15760405162461bcd60e51b815260206004820181905260248201527f4f61736973537761703a20494e56414c49445f5245424154455f4f524947494e604482015260640161068c565b61271067ffffffffffffffff841611156118fd5760405162461bcd60e51b815260206004820152601960248201527f4f61736973537761703a20494e56414c49445f52454241544500000000000000604482015260640161068c565b6000806000806119118a8a8a8a8a8a611edf565b60408051858152602081018590529081018f9052606081018e9052939750919550935091506001600160a01b0389169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a360408051858152602081018590529081018b9052606081018a90526080810183905260a081018290526001600160a01b0389169033907fe13d29a8ba9d1669d66fa00d417b1da0b6c41c03e2d0d84e4f815f23d49b29979060c00160405180910390a35050600554604051636334461f60e11b81523360048201526001600160a01b03909116925063c6688c3e9150602401610b49565b42841015611a575760405162461bcd60e51b815260206004820152601260248201527f4f61736973537761703a20455850495245440000000000000000000000000000604482015260640161068c565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b919087611aaa836133f8565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001611b3e9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611ba9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611bdf5750886001600160a01b0316816001600160a01b0316145b611c2b5760405162461bcd60e51b815260206004820152601c60248201527f4f61736973537761703a20494e56414c49445f5349474e415455524500000000604482015260640161068c565b611c368989896125ca565b505050505050505050565b600f54600114611c875760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b604482015260640161068c565b6000600f556001600160a01b038316611ce25760405162461bcd60e51b815260206004820152601960248201527f4f61736973537761703a205a45524f5f524543495049454e5400000000000000604482015260640161068c565b600554604051633fcbaa7d60e01b81523360048201526001600160a01b0390911690633fcbaa7d90602401602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e91906133b4565b611d9a5760405162461bcd60e51b815260206004820152601460248201527f4f61736973537761703a20464f5242494444454e000000000000000000000000604482015260640161068c565b8115611dc257600980546000909155600654611dc0906001600160a01b03168583612c53565b505b801561154657600a80546000909155600754611de8906001600160a01b03168583612c53565b5050506001600f5550565b600061084c82612db7565b600f54600114611e445760405162461bcd60e51b815260206004820152601160248201527013d85cda5cd4ddd85c0e881313d0d2d151607a1b604482015260640161068c565b6000600f556009546006546040516370a0823160e01b8152306004820152611ed892611e869290916001600160a01b03909116906370a0823190602401610cba565b600a546007546040516370a0823160e01b8152306004820152611ebc92916001600160a01b0316906370a0823190602401610cba565b6008546001600160701b0380821691600160701b9004166129bb565b6001600f55565b60008060008060008a1180611ef45750600089115b611f665760405162461bcd60e51b815260206004820152602560248201527f4f61736973537761703a20494e53554646494349454e545f4f55545055545f4160448201527f4d4f554e54000000000000000000000000000000000000000000000000000000606482015260840161068c565b604080516002808252606082018352600092602083019080368337505060085482519293506001600160701b0380821693600160701b9092041691508390600090611fb357611fb3613411565b6020026020010183600181518110611fcd57611fcd613411565b6001600160701b0393841660209182029290920101529116905280518190600090611ffa57611ffa613411565b60200260200101516001600160701b03168b10801561203b57508060018151811061202757612027613411565b60200260200101516001600160701b03168a105b6120ad5760405162461bcd60e51b815260206004820152602160248201527f4f61736973537761703a20494e53554646494349454e545f4c4951554944495460448201527f5900000000000000000000000000000000000000000000000000000000000000606482015260840161068c565b60065460009081906001600160a01b038c81169116148015906120de57506007546001600160a01b038c8116911614155b61212a5760405162461bcd60e51b815260206004820152601560248201527f4f61736973537761703a20494e56414c49445f544f0000000000000000000000604482015260640161068c565b8c1561214757600654612147906001600160a01b03168c8f612c53565b8b1561216457600754612164906001600160a01b03168c8e612c53565b87156121d1578a6001600160a01b03166310d1e85c338f8f8d8d6040518663ffffffff1660e01b815260040161219e959493929190613427565b600060405180830381600087803b1580156121b857600080fd5b505af11580156121cc573d6000803e3d6000fd5b505050505b6009546006546040516370a0823160e01b815230600482015261220792916001600160a01b0316906370a0823190602401610cba565b600a546007546040516370a0823160e01b8152306004820152929450612241926001600160a01b03909116906370a0823190602401610cba565b905060008d8460008151811061225957612259613411565b60200260200101516001600160701b03166122749190613474565b83116122815760006122ba565b8d8460008151811061229557612295613411565b60200260200101516001600160701b03166122b09190613474565b6122ba9084613474565b905060008d856001815181106122d2576122d2613411565b60200260200101516001600160701b03166122ed9190613474565b83116122fa576000612333565b8d8560018151811061230e5761230e613411565b60200260200101516001600160701b03166123299190613474565b6123339084613474565b905060008211806123445750600081115b6123b55760405162461bcd60e51b8152602060048201526024808201527f4f61736973537761703a20494e53554646494349454e545f494e5055545f414d60448201527f4f554e5400000000000000000000000000000000000000000000000000000000606482015260840161068c565b60008060006123c38f612db7565b90506123cf8582612822565b92506123db8482612822565b9150600090506123f183610cfb89612710612822565b9050600061240583610cfb89612710612822565b905061248061241760026127106135a8565b67ffffffffffffffff1661247a8b60018151811061243757612437613411565b60200260200101516001600160701b03168c60008151811061245b5761245b613411565b60200260200101516001600160701b031661282290919063ffffffff16565b90612822565b61248a8383612822565b10156124d85760405162461bcd60e51b815260206004820152600c60248201527f4f61736973537761703a204b0000000000000000000000000000000000000000604482015260640161068c565b5050600b54600090819068010000000000000000900467ffffffffffffffff1661251061271061250a81818986612822565b90612e17565b925061252e61271061250a81818867ffffffffffffffff8716612822565b915061253c9050888361262c565b9750612548878261262c565b6009549097506125589083612e23565b600955600a546125689082612e23565b600a8190555050506125b086868960008151811061258857612588613411565b60200260200101518a6001815181106125a3576125a3613411565b60200260200101516129bb565b929950909750955093505050509650965096509692505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006126388284613474565b9392505050565b6001600160a01b038316600090815260016020526040902054612662908261262c565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546126919082612e23565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061261f9085815260200190565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275f9190613357565b600e546001600160a01b03821615801594509192509061280e57801561280957600061279a610f516001600160701b03888116908816612822565b905060006127a78361282e565b9050808211156128065760006127c96127c0848461262c565b60005490612822565b905060006127e2836127dc866005612822565b90612e23565b905060006127f082846133a0565b90508015612802576128028782612916565b5050505b50505b61281a565b801561281a576000600e555b505092915050565b600061263882846135c1565b60008160000361284057506000919050565b6000600161284d84612e2f565b901c6001901b9050600181848161286657612866613374565b048201901c9050600181848161287e5761287e613374565b048201901c9050600181848161289657612896613374565b048201901c905060018184816128ae576128ae613374565b048201901c905060018184816128c6576128c6613374565b048201901c905060018184816128de576128de613374565b048201901c905060018184816128f6576128f6613374565b048201901c90506126388182858161291057612910613374565b046129a5565b6000546129239082612e23565b60009081556001600160a01b0383168152600160205260409020546129489082612e23565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129999085815260200190565b60405180910390a35050565b60008183106129b45781612638565b5090919050565b6001600160701b0384118015906129d957506001600160701b038311155b612a255760405162461bcd60e51b815260206004820152601360248201527f4f61736973537761703a204f564552464c4f5700000000000000000000000000604482015260640161068c565b6000612a36640100000000426135d8565b600854909150600090612a5690600160e01b900463ffffffff16836135ec565b905060008163ffffffff16118015612a7657506001600160701b03841615155b8015612a8a57506001600160701b03831615155b15612b19578063ffffffff16612ab285612aa386612ec3565b6001600160e01b031690612edc565b6001600160e01b0316612ac591906135c1565b600c6000828254612ad69190613610565b909155505063ffffffff8116612aef84612aa387612ec3565b6001600160e01b0316612b0291906135c1565b600d6000828254612b139190613610565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081027fffffffff000000000000000000000000000000000000000000000000000000009095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b038216600090815260016020526040902054612bec908261262c565b6001600160a01b03831660009081526001602052604081209190915554612c13908261262c565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612999565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392871691612cf89190613623565b6000604051808303816000865af19150503d8060008114612d35576040519150601f19603f3d011682016040523d82523d6000602084013e612d3a565b606091505b5091509150818015612d64575080511580612d64575080806020019051810190612d6491906133b4565b612db05760405162461bcd60e51b815260206004820152601a60248201527f4f61736973537761703a205452414e534645525f4641494c4544000000000000604482015260640161068c565b5050505050565b60008167ffffffffffffffff16600003612ddd575050600b5467ffffffffffffffff1690565b6000612df561271067ffffffffffffffff851661262c565b600b54909150612638906127109061250a9067ffffffffffffffff1684612822565b600061263882846133a0565b60006126388284613610565b600080608083901c15612e4457608092831c92015b604083901c15612e5657604092831c92015b602083901c15612e6857602092831c92015b601083901c15612e7a57601092831c92015b600883901c15612e8c57600892831c92015b600483901c15612e9e57600492831c92015b600283901c15612eb057600292831c92015b600183901c1561084c5760010192915050565b600061084c600160701b6001600160701b03841661363f565b60006126386001600160701b03831684613671565b6001600160a01b0381168114612f0657600080fd5b50565b60008083601f840112612f1b57600080fd5b50813567ffffffffffffffff811115612f3357600080fd5b602083019150836020828501011115612f4b57600080fd5b9250929050565b600080600080600060808688031215612f6a57600080fd5b85359450602086013593506040860135612f8381612ef1565b9250606086013567ffffffffffffffff811115612f9f57600080fd5b612fab88828901612f09565b969995985093965092949392505050565b60005b83811015612fd7578181015183820152602001612fbf565b50506000910152565b6020815260008251806020840152612fff816040850160208701612fbc565b601f01601f19169190910160400192915050565b6000806040838503121561302657600080fd5b823561303181612ef1565b946020939093013593505050565b60008060008060008060a0878903121561305857600080fd5b8635955060208701359450604087013561307181612ef1565b9350606087013561308181612ef1565b9250608087013567ffffffffffffffff81111561309d57600080fd5b6130a989828a01612f09565b979a9699509497509295939492505050565b6000806000606084860312156130d057600080fd5b83356130db81612ef1565b925060208401356130eb81612ef1565b929592945050506040919091013590565b60006020828403121561310e57600080fd5b813561263881612ef1565b67ffffffffffffffff81168114612f0657600080fd5b6000806000806080858703121561314557600080fd5b843561315081612ef1565b9350602085013561316081612ef1565b9250604085013561317081613119565b9150606085013561318081613119565b939692955090935050565b6000806040838503121561319e57600080fd5b82356131a981613119565b915060208301356131b981613119565b809150509250929050565b60008060008060008060a087890312156131dd57600080fd5b863595506020870135945060408701356131f681612ef1565b9350606087013561308181613119565b600080600080600080600060e0888a03121561322157600080fd5b873561322c81612ef1565b9650602088013561323c81612ef1565b95506040880135945060608801359350608088013560ff8116811461326057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561329057600080fd5b823561329b81612ef1565b915060208301356131b981612ef1565b8015158114612f0657600080fd5b6000806000606084860312156132ce57600080fd5b83356132d981612ef1565b925060208401356132e9816132ab565b915060408401356132f9816132ab565b809150509250925092565b60006020828403121561331657600080fd5b813561263881613119565b60006020828403121561333357600080fd5b815161263881613119565b60006020828403121561335057600080fd5b5051919050565b60006020828403121561336957600080fd5b815161263881612ef1565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826133af576133af613374565b500490565b6000602082840312156133c657600080fd5b8151612638816132ab565b600067ffffffffffffffff808416806133ec576133ec613374565b92169190910492915050565b60006001820161340a5761340a61338a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b8181038181111561084c5761084c61338a565b600181815b808511156134c8578167ffffffffffffffff048211156134ae576134ae61338a565b808516156134bb57918102915b93841c939080029061348c565b509250929050565b6000826134df5750600161084c565b816134ec5750600061084c565b8160018114613502576002811461350c57613541565b600191505061084c565b60ff84111561351d5761351d61338a565b6001841b915067ffffffffffffffff82111561353b5761353b61338a565b5061084c565b5060208310610133831016604e8410600b841016171561357c575081810a67ffffffffffffffff8111156135775761357761338a565b61084c565b6135868383613487565b8067ffffffffffffffff048211156135a0576135a061338a565b029392505050565b600061263860ff841667ffffffffffffffff84166134d0565b808202811582820484141761084c5761084c61338a565b6000826135e7576135e7613374565b500690565b63ffffffff8281168282160390808211156136095761360961338a565b5092915050565b8082018082111561084c5761084c61338a565b60008251613635818460208701612fbc565b9190910192915050565b6001600160e01b038281168282168181028316929181158285048214176136685761366861338a565b50505092915050565b60006001600160e01b03808416806133ec576133ec61337456fea2646970667358221220290c02f959b262b5b4bbbbfbb39cecb392b2719cd640533de14afb8f2bf89e5564736f6c63430008130033