0 txs
0 calls
constructor
constructor(address _factory, address _WETH9)
functions
factory
viewfunction factory() view returns (address)
getAmountIn
viewfunction getAmountIn(address tokenIn, address tokenOut, uint256 amountOut) view returns (uint256 amountIn)
getAmountOut
viewfunction getAmountOut(address tokenIn, address tokenOut, uint256 amountIn) view returns (uint256 amountOut)
getAmountsIn
viewfunction getAmountsIn(address[] path, uint256 amountOut) view returns (uint256[] amountsIn)
getAmountsOut
viewfunction getAmountsOut(address[] path, uint256 amountIn) view returns (uint256[] amountsOut)
getMaxVirtualTradeAmountRtoN
viewfunction getMaxVirtualTradeAmountRtoN(address jkPair, address ikPair) view returns (uint256 maxAmountIn)
getVirtualAmountIn
viewfunction getVirtualAmountIn(address jkPair, address ikPair, uint256 amountOut) view returns (uint256 amountIn)
getVirtualAmountOut
viewfunction getVirtualAmountOut(address jkPair, address ikPair, uint256 amountIn) view returns (uint256 amountOut)
getVirtualPool
viewfunction getVirtualPool(address jkPair, address ikPair) view returns (tuple vPool)
getVirtualPools
viewfunction getVirtualPools(address token0, address token1) view returns (tuple[] vPools)
quote
viewfunction quote(address inputToken, address outputToken, uint256 amountIn) view returns (uint256 amountOut)
WETH9
viewfunction WETH9() view returns (address)
addLiquidity
nonpayablefunction addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB, address pairAddress, uint256 liquidity)
changeFactory
nonpayablefunction changeFactory(address _factory)
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
refundETH
payablefunction refundETH() payable
removeLiquidity
nonpayablefunction removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB)
swapETHForExactTokens
payablefunction swapETHForExactTokens(address[] path, uint256 amountOut, uint256 maxAmountIn, address to, uint256 deadline) payable
swapExactETHForTokens
payablefunction swapExactETHForTokens(address[] path, uint256 amountIn, uint256 minAmountOut, address to, uint256 deadline) payable
swapExactTokensForETH
nonpayablefunction swapExactTokensForETH(address[] path, uint256 amountIn, uint256 minAmountOut, address to, uint256 deadline)
swapExactTokensForTokens
nonpayablefunction swapExactTokensForTokens(address[] path, uint256 amountIn, uint256 minAmountOut, address to, uint256 deadline)
swapReserveETHForExactTokens
payablefunction swapReserveETHForExactTokens(address tokenOut, address commonToken, address ikPair, uint256 amountOut, uint256 maxAmountIn, address to, uint256 deadline) payable
swapReserveExactETHForTokens
payablefunction swapReserveExactETHForTokens(address tokenOut, address commonToken, address ikPair, uint256 amountIn, uint256 minAmountOut, address to, uint256 deadline) payable
swapReserveExactTokensForETH
nonpayablefunction swapReserveExactTokensForETH(address tokenOut, address commonToken, address ikPair, uint256 amountIn, uint256 minAmountOut, address to, uint256 deadline)
swapReserveExactTokensForTokens
nonpayablefunction swapReserveExactTokensForTokens(address tokenOut, address commonToken, address ikPair, uint256 amountIn, uint256 minAmountOut, address to, uint256 deadline)
swapReserveTokensForExactETH
nonpayablefunction swapReserveTokensForExactETH(address tokenOut, address commonToken, address ikPair, uint256 amountOut, uint256 maxAmountIn, address to, uint256 deadline)
swapReserveTokensForExactTokens
nonpayablefunction swapReserveTokensForExactTokens(address tokenOut, address commonToken, address ikPair, uint256 amountOut, uint256 maxAmountIn, address to, uint256 deadline)
swapTokensForExactETH
nonpayablefunction swapTokensForExactETH(address[] path, uint256 amountOut, uint256 maxAmountIn, address to, uint256 deadline)
swapTokensForExactTokens
nonpayablefunction swapTokensForExactTokens(address[] path, uint256 amountOut, uint256 maxAmountIn, address to, uint256 deadline)
events
RouterFactoryChanged
event RouterFactoryChanged(address newFactoryAddress)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60a0604052348015600e575f80fd5b50604051614bf7380380614bf7833981016040819052602b91606e565b6001600160a01b039081166080525f80546001600160a01b03191692909116919091179055609a565b80516001600160a01b03811681146069575f80fd5b919050565b5f8060408385031215607e575f80fd5b6085836054565b91506091602084016054565b90509250929050565b608051614af16101065f395f81816101cd015281816103a50152818161065e01528181610f0501528181611354015281816117f30152818161193601528181611b1701528181611db50152818161256f0152818161286101528181612a500152612ac30152614af15ff3fe6080604052600436106101bd575f3560e01c806358046362116100f2578063a8c6edc911610092578063bfe151a611610062578063bfe151a61461057d578063c45a01551461059c578063e8e33700146105ba578063f9db40a214610608575f80fd5b8063a8c6edc9146104de578063ac9650d81461050a578063b64663841461052a578063baa2abde14610549575f80fd5b80637950024d116100cd5780637950024d1461046e5780637d890be21461048d578063870822df146104a0578063a0b08685146104bf575f80fd5b8063580463621461041d5780635caf6ff01461043c578063739bcdbb1461045b575f80fd5b806336b606fa1161015d5780634aa06652116101385780634aa06652146103755780634aa4a4fc1461039457806353b609b5146103df5780635602a855146103fe575f80fd5b806336b606fa146103245780633d38ef3414610343578063420223cf14610362575f80fd5b806312210e8a1161019857806312210e8a146102a4578063122c8a4a146102ac5780632617cd0e146102cb5780632a8ed2bd146102f7575f80fd5b80630f9940c21461023157806311897c9a1461025057806311c6e74114610285575f80fd5b3661022d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461022b5760405162461bcd60e51b81526020600482015260096024820152684e6f7420574554483960b81b60448201526064015b60405180910390fd5b005b5f80fd5b34801561023c575f80fd5b5061022b61024b366004614195565b61061b565b34801561025b575f80fd5b5061026f61026a3660046141fb565b610840565b60405161027c919061423d565b60405180910390f35b348015610290575f80fd5b5061022b61029f36600461427f565b61094a565b61022b610aed565b3480156102b7575f80fd5b5061026f6102c63660046141fb565b610b85565b3480156102d6575f80fd5b506102ea6102e536600461429a565b610ca8565b60405161027c9190614364565b348015610302575f80fd5b506103166103113660046143a7565b610d8e565b60405190815260200161027c565b34801561032f575f80fd5b5061022b61033e366004614195565b610dc1565b34801561034e575f80fd5b5061031661035d3660046143a7565b610e98565b61022b610370366004614195565b610ec2565b348015610380575f80fd5b5061031661038f3660046143a7565b611065565b34801561039f575f80fd5b506103c77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161027c565b3480156103ea575f80fd5b506103166103f93660046143a7565b6111d6565b348015610409575f80fd5b5061022b6104183660046143e5565b611311565b348015610428575f80fd5b5061022b610437366004614195565b61150c565b348015610447575f80fd5b5061022b6104563660046143e5565b6115d0565b61022b6104693660046143e5565b611727565b348015610479575f80fd5b5061022b6104883660046143e5565b6118f3565b61022b61049b366004614195565b611ad4565b3480156104ab575f80fd5b5061022b6104ba3660046143e5565b611c32565b3480156104ca575f80fd5b5061022b6104d9366004614195565b611d72565b3480156104e9575f80fd5b506104fd6104f836600461429a565b611ee7565b60405161027c919061445c565b61051d61051836600461446b565b61200c565b60405161027c919061450a565b348015610535575f80fd5b506103166105443660046143a7565b61214c565b348015610554575f80fd5b5061056861056336600461456d565b612220565b6040805192835260208301919091520161027c565b348015610588575f80fd5b5061031661059736600461429a565b612397565b3480156105a7575f80fd5b505f546103c7906001600160a01b031681565b3480156105c5575f80fd5b506105d96105d43660046145c3565b6123b6565b60405161027c949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b61022b6106163660046143e5565b6124a3565b804281101561065c5760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168660018851610695919061464e565b815181106106a5576106a5614661565b60200260200101516001600160a01b03161461070d5760405162461bcd60e51b815260206004820152602160248201527f56535741503a204f555450555420544f4b454e204d55535420424520574554486044820152603960f81b6064820152608401610222565b5f6107188787610b85565b905084815f8151811061072d5761072d614661565b602002602001015111156107835760405162461bcd60e51b815260206004820152601e60248201527f56535741503a2052455155495245445f414d4f554e545f4558434545445300006044820152606401610222565b6107fc875f8151811061079857610798614661565b6020026020010151825f815181106107b2576107b2614661565b60200260200101516107f78a5f815181106107cf576107cf614661565b60200260200101518b6001815181106107ea576107ea614661565b602002602001015161266e565b61268b565b61080787823061269c565b61083784826001845161081a919061464e565b8151811061082a5761082a614661565b602002602001015161284b565b50505050505050565b6060825167ffffffffffffffff81111561085c5761085c61407c565b604051908082528060200260200182016040528015610885578160200160208202803683370190505b50905081815f8151811061089b5761089b614661565b602090810291909101015260015b81518110156109435761091e846108c160018461464e565b815181106108d1576108d1614661565b60200260200101518583815181106108eb576108eb614661565b602002602001015184600185610901919061464e565b8151811061091157610911614661565b6020026020010151611065565b82828151811061093057610930614661565b60209081029190910101526001016108a9565b5092915050565b5f8054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610998573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bc9190614685565b6001600160a01b0316336001600160a01b031614610a1c5760405162461bcd60e51b815260206004820152601060248201527f56535741503a4f4e4c595f41444d494e000000000000000000000000000000006044820152606401610222565b6001600160a01b03811615801590610a4157505f546001600160a01b03828116911614155b610a8d5760405162461bcd60e51b815260206004820152601560248201527f56535741503a494e56414c49445f464143544f525900000000000000000000006044820152606401610222565b5f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f6167d43c236d17aaa711f8498961fc09fb37c0f1de8cc3f39f1168ddf9a699319060200160405180910390a150565b6040515f90339047908381818185875af1925050503d805f8114610b2c576040519150601f19603f3d011682016040523d82523d5f602084013e610b31565b606091505b5050905080610b825760405162461bcd60e51b815260206004820152601660248201527f56535741503a205452414e53464552204641494c4544000000000000000000006044820152606401610222565b50565b6060825167ffffffffffffffff811115610ba157610ba161407c565b604051908082528060200260200182016040528015610bca578160200160208202803683370190505b509050818160018351610bdd919061464e565b81518110610bed57610bed614661565b6020026020010181815250505f60018451610c08919061464e565b90505b801561094357610c7184610c2060018461464e565b81518110610c3057610c30614661565b6020026020010151858381518110610c4a57610c4a614661565b6020026020010151848481518110610c6457610c64614661565b60200260200101516111d6565b82610c7d60018461464e565b81518110610c8d57610c8d614661565b6020908102919091010152610ca1816146a0565b9050610c0b565b5f54604080516337e0376b60e01b815290516060926001600160a01b0316916337e0376b9160048083019260209291908290030181865afa158015610cef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d139190614685565b60405163130be68760e11b81526001600160a01b03858116600483015284811660248301529190911690632617cd0e906044015f60405180830381865afa158015610d60573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d879190810190614753565b9392505050565b5f80610d9a8585611ee7565b9050610db88382606001518360800151845f015162ffffff1661295f565b95945050505050565b8042811015610e025760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b5f610e0d8787610b85565b905084815f81518110610e2257610e22614661565b60200260200101511115610e785760405162461bcd60e51b815260206004820152601e60248201527f56535741503a2052455155495245445f414d4f554e545f4558434545445300006044820152606401610222565b610e8d875f8151811061079857610798614661565b61083787828661269c565b5f80610ea48585611ee7565b9050610db88382606001518360800151845f015162ffffff166129aa565b8042811015610f035760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316865f81518110610f3f57610f3f614661565b60200260200101516001600160a01b031614610f9d5760405162461bcd60e51b815260206004820181905260248201527f56535741503a20494e50555420544f4b454e204d5553542042452057455448396044820152606401610222565b5f610fa88787610b85565b905084815f81518110610fbd57610fbd614661565b602002602001015111156110135760405162461bcd60e51b815260206004820152601e60248201527f56535741503a2052455155495245445f414d4f554e545f4558434545445300006044820152606401610222565b610e8d815f8151811061102857611028614661565b6020026020010151611060895f8151811061104557611045614661565b60200260200101518a6001815181106107ea576107ea614661565b6129f2565b5f806110718585612aed565b90505f80826001600160a01b031662113e086040518163ffffffff1660e01b81526004016040805180830381865afa1580156110af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d391906147fb565b6001600160701b031691506001600160701b0316915061115487846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611129573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114d9190614685565b8484612af8565b80925081935050506111cb858383866001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c2919061482c565b61ffff1661295f565b979650505050505050565b5f806111e28585612aed565b90505f80826001600160a01b031662113e086040518163ffffffff1660e01b81526004016040805180830381865afa158015611220573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124491906147fb565b6001600160701b031691506001600160701b0316915061129a87846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611129573d5f803e3d5ffd5b80925081935050506111cb858383866001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611308919061482c565b61ffff166129aa565b80428110156113525760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316146113dd5760405162461bcd60e51b815260206004820152602160248201527f56535741503a204f555450555420544f4b454e204d55535420424520574554486044820152603960f81b6064820152608401610222565b5f80876001600160a01b031663aa6ca8086040518163ffffffff1660e01b81526004016040805180830381865afa15801561141a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143e919061484d565b915091505f896001600160a01b0316836001600160a01b0316146114625782611464565b815b90505f6114718c8c61266e565b90505f61147f828c8c610d8e565b9050888110156114dc5760405162461bcd60e51b815260206004820152602260248201527f56535741503a20494e53554646494349454e545f564f55545055545f414d4f55604482015261139560f21b6064820152608401610222565b6114e7838b8461268b565b6114f381838d30612b2a565b6114fd888261284b565b50505050505050505050505050565b804281101561154d5760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b5f6115588787610840565b905084816001835161156a919061464e565b8151811061157a5761157a614661565b60200260200101511015610e785760405162461bcd60e51b815260206004820181905260248201527f56535741503a20494e53554646494349454e545f494e5055545f414d4f554e546044820152606401610222565b80428110156116115760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b5f80876001600160a01b031663aa6ca8086040518163ffffffff1660e01b81526004016040805180830381865afa15801561164e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611672919061484d565b915091505f896001600160a01b0316836001600160a01b0316146116965782611698565b815b90505f6116a58c8c61266e565b90505f6116b3828c8c610d8e565b9050888110156117105760405162461bcd60e51b815260206004820152602260248201527f56535741503a20494e53554646494349454e545f564f55545055545f414d4f55604482015261139560f21b6064820152608401610222565b61171b838b8461268b565b6114fd81838d8b612b2a565b80428110156117685760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b5f80876001600160a01b031663aa6ca8086040518163ffffffff1660e01b81526004016040805180830381865afa1580156117a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c9919061484d565b915091505f896001600160a01b0316836001600160a01b0316146117ed57826117ef565b815b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146118725760405162461bcd60e51b815260206004820181905260248201527f56535741503a20494e50555420544f4b454e204d5553542042452057455448396044820152606401610222565b5f61187d8c8c61266e565b90505f61188b828c8c610e98565b9050888111156118dd5760405162461bcd60e51b815260206004820152601d60248201527f56535741503a2052455155495245445f56494e5055545f4558434545440000006044820152606401610222565b6118e781836129f2565b6114fd8a838d8b612b2a565b80428110156119345760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316146119bf5760405162461bcd60e51b815260206004820152602160248201527f56535741503a204f555450555420544f4b454e204d55535420424520574554486044820152603960f81b6064820152608401610222565b5f80876001600160a01b031663aa6ca8086040518163ffffffff1660e01b81526004016040805180830381865afa1580156119fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a20919061484d565b915091505f896001600160a01b0316836001600160a01b031614611a445782611a46565b815b90505f611a538c8c61266e565b90505f611a61828c8c610e98565b905088811115611ab35760405162461bcd60e51b815260206004820152601d60248201527f56535741503a2052455155495245445f56494e5055545f4558434545440000006044820152606401610222565b611abe83828461268b565b611aca8a838d30612b2a565b6114fd888b61284b565b8042811015611b155760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316865f81518110611b5157611b51614661565b60200260200101516001600160a01b031614611baf5760405162461bcd60e51b815260206004820181905260248201527f56535741503a20494e50555420544f4b454e204d5553542042452057455448396044820152606401610222565b5f611bba8787610840565b9050848160018351611bcc919061464e565b81518110611bdc57611bdc614661565b602002602001015110156110135760405162461bcd60e51b815260206004820181905260248201527f56535741503a20494e53554646494349454e545f494e5055545f414d4f554e546044820152606401610222565b8042811015611c735760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b5f80876001600160a01b031663aa6ca8086040518163ffffffff1660e01b81526004016040805180830381865afa158015611cb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd4919061484d565b915091505f896001600160a01b0316836001600160a01b031614611cf85782611cfa565b815b90505f611d078c8c61266e565b90505f611d15828c8c610e98565b905088811115611d675760405162461bcd60e51b815260206004820152601d60248201527f56535741503a2052455155495245445f56494e5055545f4558434545440000006044820152606401610222565b6118e783828461268b565b8042811015611db35760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168660018851611dec919061464e565b81518110611dfc57611dfc614661565b60200260200101516001600160a01b031614611e645760405162461bcd60e51b815260206004820152602160248201527f56535741503a204f555450555420544f4b454e204d55535420424520574554486044820152603960f81b6064820152608401610222565b5f611e6f8787610840565b9050848160018351611e81919061464e565b81518110611e9157611e91614661565b602002602001015110156107835760405162461bcd60e51b815260206004820181905260248201527f56535741503a20494e53554646494349454e545f494e5055545f414d4f554e546044820152606401610222565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091525f8054906101000a90046001600160a01b03166001600160a01b03166337e0376b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f999190614685565b60405163a8c6edc960e01b81526001600160a01b0385811660048301528481166024830152919091169063a8c6edc99060440161010060405180830381865afa158015611fe8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d87919061487a565b60608167ffffffffffffffff8111156120275761202761407c565b60405190808252806020026020018201604052801561205a57816020015b60608152602001906001900390816120455790505b5090505f5b82811015610943575f803086868581811061207c5761207c614661565b905060200281019061208e9190614895565b60405161209c9291906148d8565b5f60405180830381855af49150503d805f81146120d4576040519150601f19603f3d011682016040523d82523d5f602084013e6120d9565b606091505b509150915081612124576044815110156120f1575f80fd5b6004810190508080602001905181019061210b91906148e7565b60405162461bcd60e51b8152600401610222919061497b565b8084848151811061213757612137614661565b6020908102919091010152505060010161205f565b5f806121588585612aed565b90505f80826001600160a01b031662113e086040518163ffffffff1660e01b81526004016040805180830381865afa158015612196573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ba91906147fb565b6001600160701b031691506001600160701b0316915061221087846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611129573d5f803e3d5ffd5b90925090506111cb858383612baf565b5f8082428110156122635760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b5f61226e8b8b61266e565b905061227c8133838c612c6e565b60405163226bf2d160e21b81526001600160a01b0387811660048301528216906389afcb449060240160408051808303815f875af11580156122c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e4919061498d565b9094509250878410156123395760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f415f414d4f554e54000000006044820152606401610222565b868310156123895760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f425f414d4f554e54000000006044820152606401610222565b505097509795505050505050565b5f806123a38484611ee7565b90506123ae81612cea565b949350505050565b5f805f8084428110156123fb5760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b6124098d8d8d8d8d8d6139a5565b9196509450925061241c8d338588612c6e565b6124288c338587612c6e565b6040516335313c2160e11b81526001600160a01b038881166004830152841690636a627842906024016020604051808303815f875af115801561246d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249191906149af565b91505098509850985098945050505050565b80428110156124e45760405162461bcd60e51b815260206004820152600d60248201526c1594d5d0540e91561412549151609a1b6044820152606401610222565b5f80876001600160a01b031663aa6ca8086040518163ffffffff1660e01b81526004016040805180830381865afa158015612521573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612545919061484d565b915091505f896001600160a01b0316836001600160a01b031614612569578261256b565b815b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146125ee5760405162461bcd60e51b815260206004820181905260248201527f56535741503a20494e50555420544f4b454e204d5553542042452057455448396044820152606401610222565b5f6125f98c8c61266e565b90505f612607828c8c610d8e565b9050888110156126645760405162461bcd60e51b815260206004820152602260248201527f56535741503a20494e53554646494349454e545f564f55545055545f414d4f55604482015261139560f21b6064820152608401610222565b61171b8a836129f2565b5f8054610d87906001600160a01b03168484613c99565b92915050565b61269783338385612c6e565b505050565b5f5b600184516126ac919061464e565b811015612845576126fb8482815181106126c8576126c8614661565b6020026020010151858360016126de91906149c6565b815181106126ee576126ee614661565b6020026020010151612aed565b6001600160a01b031663e9dcafaa846127158460016149c6565b8151811061272557612725614661565b60200260200101518684600161273b91906149c6565b8151811061274b5761274b614661565b602002602001015160028851612761919061464e565b85146127b1576127ac886127768760016149c6565b8151811061278657612786614661565b60200260200101518987600261279c91906149c6565b815181106107ea576107ea614661565b6127b3565b855b604080515f815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e087901b169091526127fc93929190602481016149d9565b6020604051808303815f875af1158015612818573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283c91906149af565b5060010161269e565b50505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b1580156128aa575f80fd5b505af11580156128bc573d5f803e3d5ffd5b505050505f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612909576040519150601f19603f3d011682016040523d82523d5f602084013e61290e565b606091505b50509050806126975760405162461bcd60e51b815260206004820152601660248201527f56535741503a205452414e53464552204641494c4544000000000000000000006044820152606401610222565b5f8061296b8387614a0f565b90505f6129788583614a0f565b90505f826129886103e889614a0f565b61299291906149c6565b905061299e8183614a3a565b98975050505050505050565b5f806103e86129b98787614a0f565b6129c39190614a0f565b90505f836129d1888761464e565b6129db9190614a0f565b90506129e78183614a3a565b6111cb9060016149c6565b81471015612a4e5760405162461bcd60e51b8152602060048201526024808201527f56535741503a20494e53554646494349454e545f4554485f494e5055545f414d60448201526313d5539560e21b6064820152608401610222565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015612aa7575f80fd5b505af1158015612ab9573d5f803e3d5ffd5b5050505050612ae97f00000000000000000000000000000000000000000000000000000000000000008284613d3b565b5050565b5f610d87838361266e565b5f80856001600160a01b0316856001600160a01b031614612b1a578284612b1d565b83835b9097909650945050505050565b604080515f815260208101918290526318064a3d60e11b9091526001600160a01b0384169063300c947a90612b6890879086908690602481016149d9565b6020604051808303815f875af1158015612b84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba891906149af565b5050505050565b5f808411612bff5760405162461bcd60e51b815260206004820152601a60248201527f56535741503a20494e53554646494349454e545f414d4f554e540000000000006044820152606401610222565b5f83118015612c0d57505f82115b612c595760405162461bcd60e51b815260206004820152601d60248201527f56535741503a20494e53554646494349454e545f4c49515549444954590000006044820152606401610222565b82612c648386614a0f565b6123ae9190614a3a565b6040516001600160a01b0384811660248301528381166044830152606482018390526128459186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613d6c565b5f612d376040518061014001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b825f015162ffffff16815f0181815250508260c001516001600160a01b031663da33b3df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dac9190614a59565b6001600160701b03168160200181815250508260c001516001600160a01b03166364be513f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e229190614a59565b6001600160701b0316816040018181525050826060015181606001818152505082608001518160800181815250508260c001516001600160a01b031663d5d7b44b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb491906149af565b8160a00181815250506103e862ffffff168160c00181815250508260c001516001600160a01b031663268c74e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f3291906149af565b60e082015260c0830151602084015160405163359af54960e21b81526001600160a01b03918216600482015291169063d66bd52490602401602060405180830381865afa158015612f85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fa991906149af565b61010082015260c083015160208401516040516377c6a71560e01b81526001600160a01b0391821660048201529116906377c6a71590602401602060405180830381865afa158015612ffd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302191906149af565b8360c001516001600160a01b0316639860691c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613061573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061308591906149af565b61308f919061464e565b6101208201526020810151158015906130ba57506d04ee2d6d415b85acef8100000000816020015111155b6131065760405162461bcd60e51b815260206004820152601060248201527f696e76616c69642062616c616e636530000000000000000000000000000000006044820152606401610222565b5f816040015111801561312b57506d04ee2d6d415b85acef8100000000816040015111155b6131775760405162461bcd60e51b815260206004820152601060248201527f696e76616c69642062616c616e636531000000000000000000000000000000006044820152606401610222565b5f816060015111801561319c57506d04ee2d6d415b85acef8100000000816060015111155b6131e85760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964207642616c616e6365300000000000000000000000000000006044820152606401610222565b5f816080015111801561320d57506d04ee2d6d415b85acef8100000000816080015111155b61324d5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207642616c616e63653160781b6044820152606401610222565b8060c001516103e8146132a25760405162461bcd60e51b815260206004820152601660248201527f696e76616c6964207072696365466565466163746f72000000000000000000006044820152606401610222565b8060a00151620186a0146132f85760405162461bcd60e51b815260206004820152601a60248201527f696e76616c69642072657365727665526174696f466163746f720000000000006044820152606401610222565b80511580159061330d575060c0810151815111155b6133475760405162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b6044820152606401610222565b5f8160e0015111801561336257508060a001518160e0015111155b6133ae5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206d617852657365727665526174696f0000000000000000006044820152606401610222565b60e081015160208201516133c3906002614a0f565b6133cd9190614a0f565b81610120015111156133e157505f92915050565b5f83604001516001600160a01b03168460c001516001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613430573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134549190614685565b6001600160a01b0316036138f5578160200151826080015111156134ae5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207642616c616e63653160781b6044820152606401610222565b60a08201516080830151610100840151610120850151855160c0870151848602955f95948102909402939283029202816134ea576134ea614a26565b048660e0015160020201866080015102018560e0015186602001510260011902018560600151020190505f845f015185606001518660c00151028161353157613531614a26565b0490505f856060015186610120015102866080015187610100015102018660a001510286606001518760e00151886020015102026002020390505f805f831261357c57600183613581565b5f835f035b60608a01519850909250905085870260020285015f808083126135a5575f836135ab565b6001835f035b91509150846135dd576135c76135c2888684613dcd565b613e8c565b6135d76135c28b8d8e0285613dcd565b036135fd565b6135eb6135c2888684613dcd565b6135fb6135c28b8d8e0285613dcd565b015b9950811561360b57895f0399505b878a8a600202020192505f8312613623575f83613629565b6001835f035b909250905084613657576136416135c2888684613dcd565b6136516135c28b8d8e0285613dcd565b03613677565b6136656135c2888684613dcd565b6136756135c28b8d8e0285613dcd565b015b9950811561368557895f0399505b878a8a600202020192505f831261369d575f836136a3565b6001835f035b9092509050846136d1576136bb6135c2888684613dcd565b6136cb6135c28b8d8e0285613dcd565b036136f1565b6136df6135c2888684613dcd565b6136ef6135c28b8d8e0285613dcd565b015b995081156136ff57895f0399505b878a8a600202020192505f8312613717575f8361371d565b6001835f035b90925090508461374b576137356135c2888684613dcd565b6137456135c28b8d8e0285613dcd565b0361376b565b6137596135c2888684613dcd565b6137696135c28b8d8e0285613dcd565b015b9950811561377957895f0399505b878a8a600202020192505f8312613791575f83613797565b6001835f035b9092509050846137c5576137af6135c2888684613dcd565b6137bf6135c28b8d8e0285613dcd565b036137e5565b6137d36135c2888684613dcd565b6137e36135c28b8d8e0285613dcd565b015b995081156137f357895f0399505b878a8a600202020192505f831261380b575f83613811565b6001835f035b90925090508461383f576138296135c2888684613dcd565b6138396135c28b8d8e0285613dcd565b0361385f565b61384d6135c2888684613dcd565b61385d6135c28b8d8e0285613dcd565b015b9950811561386d57895f0399505b878a8a600202020192505f8312613885575f8361388b565b6001835f035b9092509050846138b9576138a36135c2888684613dcd565b6138b36135c28b8d8e0285613dcd565b036138d9565b6138c76135c2888684613dcd565b6138d76135c28b8d8e0285613dcd565b015b995081156138e757895f0399505b505050505050505050613995565b8160400151826080015111156139415760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207642616c616e63653160781b6044820152606401610222565b61394f826101000151613e8c565b6139916135c284606001518560400151028561012001518660a00151028660e001518760200151600202020386608001518760a0015188602001510202613dcd565b0390505b5f811215610d8757610d87614a72565b5f80546040516334a2a5c360e11b81526001600160a01b0389811660048301528881166024830152839283929116906369454b8690604401602060405180830381865afa1580156139f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1c9190614685565b90506001600160a01b038116613aa3575f546040516364e329cb60e11b81526001600160a01b038b811660048301528a811660248301529091169063c9c65396906044016020604051808303815f875af1158015613a7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aa09190614685565b90505b5f80826001600160a01b031662113e086040518163ffffffff1660e01b81526004016040805180830381865afa158015613adf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b0391906147fb565b6001600160701b031691506001600160701b03169150613b84836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b7c9190614685565b8c8484612af8565b909250905081158015613b95575080155b15613ba557889450879350613c8b565b5f613bb18a8484612baf565b9050888111613c155786811015613c0a5760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f425f414d4f554e54000000006044820152606401610222565b899550935083613c89565b5f613c218a8486612baf565b90508a811115613c3357613c33614a72565b88811015613c835760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f415f414d4f554e54000000006044820152606401610222565b95508894505b505b505096509650969350505050565b5f80613ca58484613ed5565b6040517fff0000000000000000000000000000000000000000000000000000000000000060208201526bffffffffffffffffffffffff19606088901b166021820152603581018290527f637bc1e6555f050fef1c3804f2f03647a960ac0a39ac52c519c3c6d9da312ae0605582015290915060750160408051601f19818403018152919052805160209091012095945050505050565b6040516001600160a01b0383811660248301526044820183905261269791859182169063a9059cbb90606401612ca3565b5f613d806001600160a01b03841683613f20565b905080515f14158015613da4575080806020019051810190613da29190614a86565b155b1561269757604051635274afe760e01b81526001600160a01b0384166004820152602401610222565b5f838302815f1985870982811083820303915050805f03613e0157838281613df757613df7614a26565b0492505050610d87565b808411613e215760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115613ed15760405163123baf0360e11b815260048101839052602401610222565b5090565b5f805f613ee28585613f2d565b604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012095945050505050565b6060610d8783835f613f5e565b5f80826001600160a01b0316846001600160a01b031610613f4f578284613f52565b83835b915091505b9250929050565b606081471015613f835760405163cd78605960e01b8152306004820152602401610222565b5f80856001600160a01b03168486604051613f9e9190614aa5565b5f6040518083038185875af1925050503d805f8114613fd8576040519150601f19603f3d011682016040523d82523d5f602084013e613fdd565b606091505b5091509150613fed868383613ff7565b9695505050505050565b60608261400c5761400782614053565b610d87565b815115801561402357506001600160a01b0384163b155b1561404c57604051639996b31560e01b81526001600160a01b0385166004820152602401610222565b5080610d87565b8051156140635780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff811182821017156140b4576140b461407c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156140e3576140e361407c565b604052919050565b5f67ffffffffffffffff8211156141045761410461407c565b5060051b60200190565b6001600160a01b0381168114610b82575f80fd5b5f82601f830112614131575f80fd5b813561414461413f826140eb565b6140ba565b8082825260208201915060208360051b860101925085831115614165575f80fd5b602085015b8381101561418b57803561417d8161410e565b83526020928301920161416a565b5095945050505050565b5f805f805f60a086880312156141a9575f80fd5b853567ffffffffffffffff8111156141bf575f80fd5b6141cb88828901614122565b955050602086013593506040860135925060608601356141ea8161410e565b949793965091946080013592915050565b5f806040838503121561420c575f80fd5b823567ffffffffffffffff811115614222575f80fd5b61422e85828601614122565b95602094909401359450505050565b602080825282518282018190525f918401906040840190835b81811015614274578351835260209384019390920191600101614256565b509095945050505050565b5f6020828403121561428f575f80fd5b8135610d878161410e565b5f80604083850312156142ab575f80fd5b82356142b68161410e565b915060208301356142c68161410e565b809150509250929050565b62ffffff81511682526001600160a01b0360208201511660208301526001600160a01b036040820151166040830152606081015160608301526080810151608083015260a081015161432e60a08401826001600160a01b03169052565b5060c081015161434960c08401826001600160a01b03169052565b5060e081015161269760e08401826001600160a01b03169052565b602080825282518282018190525f918401906040840190835b81811015614274576143908385516142d1565b60209390930192610100929092019160010161437d565b5f805f606084860312156143b9575f80fd5b83356143c48161410e565b925060208401356143d48161410e565b929592945050506040919091013590565b5f805f805f805f60e0888a0312156143fb575f80fd5b87356144068161410e565b965060208801356144168161410e565b955060408801356144268161410e565b9450606088013593506080880135925060a08801356144448161410e565b96999598509396929591949193505060c09091013590565b610100810161268582846142d1565b5f806020838503121561447c575f80fd5b823567ffffffffffffffff811115614492575f80fd5b8301601f810185136144a2575f80fd5b803567ffffffffffffffff8111156144b8575f80fd5b8560208260051b84010111156144cc575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561456157603f1987860301845261454c8583516144dc565b94506020938401939190910190600101614530565b50929695505050505050565b5f805f805f805f60e0888a031215614583575f80fd5b873561458e8161410e565b9650602088013561459e8161410e565b955060408801359450606088013593506080880135925060a08801356144448161410e565b5f805f805f805f80610100898b0312156145db575f80fd5b88356145e68161410e565b975060208901356145f68161410e565b965060408901359550606089013594506080890135935060a0890135925060c08901356146228161410e565b979a969950949793969295919450919260e001359150565b634e487b7160e01b5f52601160045260245ffd5b818103818111156126855761268561463a565b634e487b7160e01b5f52603260045260245ffd5b80516146808161410e565b919050565b5f60208284031215614695575f80fd5b8151610d878161410e565b5f816146ae576146ae61463a565b505f190190565b5f61010082840312156146c6575f80fd5b6146ce614090565b9050815162ffffff811681146146e2575f80fd5b81526146f060208301614675565b602082015261470160408301614675565b6040820152606082810151908201526080808301519082015261472660a08301614675565b60a082015261473760c08301614675565b60c082015261474860e08301614675565b60e082015292915050565b5f60208284031215614763575f80fd5b815167ffffffffffffffff811115614779575f80fd5b8201601f81018413614789575f80fd5b805161479761413f826140eb565b8082825260208201915060208360081b8501019250868311156147b8575f80fd5b6020840193505b82841015613fed576147d187856146b5565b8252602082019150610100840193506147bf565b80516001600160701b0381168114614680575f80fd5b5f806040838503121561480c575f80fd5b614815836147e5565b9150614823602084016147e5565b90509250929050565b5f6020828403121561483c575f80fd5b815161ffff81168114610d87575f80fd5b5f806040838503121561485e575f80fd5b82516148698161410e565b60208401519092506142c68161410e565b5f610100828403121561488b575f80fd5b610d8783836146b5565b5f808335601e198436030181126148aa575f80fd5b83018035915067ffffffffffffffff8211156148c4575f80fd5b602001915036819003821315613f57575f80fd5b818382375f9101908152919050565b5f602082840312156148f7575f80fd5b815167ffffffffffffffff81111561490d575f80fd5b8201601f8101841361491d575f80fd5b805167ffffffffffffffff8111156149375761493761407c565b61494a601f8201601f19166020016140ba565b81815285602083850101111561495e575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f610d8760208301846144dc565b5f806040838503121561499e575f80fd5b505080516020909101519092909150565b5f602082840312156149bf575f80fd5b5051919050565b808201808211156126855761268561463a565b8481526001600160a01b03841660208201526001600160a01b0383166040820152608060608201525f613fed60808301846144dc565b80820281158282048414176126855761268561463a565b634e487b7160e01b5f52601260045260245ffd5b5f82614a5457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215614a69575f80fd5b610d87826147e5565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215614a96575f80fd5b81518015158114610d87575f80fd5b5f82518060208501845e5f92019182525091905056fea26469706673582212200eac82fa149f7b5054895ff06f7163b96be4cb849d582cb64378d8acebc2a92164736f6c634300081a0033000000000000000000000000389db0b69e74a816f1367ac081fdf24b5c7c243300000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1