0 txs
6 calls
constructor
No constructor.
functions
convertedPath
viewfunction convertedPath(address[] _path) view returns (bytes packedData)
convertedPathReversed
viewfunction convertedPathReversed(address[] _path) view returns (bytes packedData)
exchangeRouter
viewfunction exchangeRouter() view returns (address)
feeTier
viewfunction feeTier(address, address) view returns (uint24)
getAmountsForLiquidity
purefunction getAmountsForLiquidity(uint160 _sqrtPrice, int24 _tickLower, int24 _tickUpper, uint128 _liquidity) pure returns (uint256, uint256)
getInputAmount
purefunction getInputAmount(uint256, address, address) pure returns (bool, uint256)
getLiquidityForAmounts
purefunction getLiquidityForAmounts(uint160 _sqrtPrice, int24 _tickLower, int24 _tickUpper, uint256 _amount0Desired, uint256 _amount1Desired) pure returns (uint128)
getOutputAmount
purefunction getOutputAmount(uint256, address, address) pure returns (bool, uint256)
getSqrtPrice
viewfunction getSqrtPrice(address _token0, address _token1, uint24 _feeTier) view returns (uint160 _sqrtPrice)
getSqrtPriceAtTick
purefunction getSqrtPriceAtTick(int24 _tick) pure returns (uint160)
getSqrtPriceX96
viewfunction getSqrtPriceX96(address[] _path) view returns (uint256[] _sqrtPriceX96, address[] _firstToken)
isPathValid
viewfunction isPathValid(address[] _path) view returns (bool _result)
liquidityPoolFactory
viewfunction liquidityPoolFactory() view returns (address)
MAX_ITERS
viewfunction MAX_ITERS() view returns (uint256)
MIN_GAS_RESERVE
viewfunction MIN_GAS_RESERVE() view returns (uint256)
name
viewfunction name() view returns (string)
ONE_HUNDRED_PERCENT
viewfunction ONE_HUNDRED_PERCENT() view returns (uint256)
owner
viewfunction owner() view returns (address)
positionManager
viewfunction positionManager() view returns (address)
PRECISION
viewfunction PRECISION() view returns (uint256)
quoterAddress
viewfunction quoterAddress() view returns (address)
TOLERANCE
viewfunction TOLERANCE() view returns (uint256)
wrappedNativeToken
viewfunction wrappedNativeToken() view returns (address)
getExactInput
nonpayablefunction getExactInput(address[] _path, uint256 _amountIn) returns (bool, uint256)
getExactOutput
nonpayablefunction getExactOutput(address[] _path, uint256 _amountOut) returns (bool, uint256)
initialize
nonpayablefunction initialize(string _name, address _exchangeRouter, address _quoterAddress)
renounceOwnership
nonpayablefunction renounceOwnership()
setExchangeRouter
nonpayablefunction setExchangeRouter(address _exchangeRouter)
setFeeTier
nonpayablefunction setFeeTier(address _firstToken, address _secondToken, uint24 _feeTier)
setLiquidityPoolFactory
nonpayablefunction setLiquidityPoolFactory()
setMaxIters
nonpayablefunction setMaxIters(uint256 _maxIters)
setMinGasReserve
nonpayablefunction setMinGasReserve(uint256 _minGasReserve)
setPositionManager
nonpayablefunction setPositionManager(address _positionManager)
setPrecision
nonpayablefunction setPrecision(uint256 _precision)
setQuoter
nonpayablefunction setQuoter(address _quoterAddress)
setTolerance
nonpayablefunction setTolerance(uint256 _tolerance)
setWrappedNativeToken
nonpayablefunction setWrappedNativeToken()
swap
nonpayablefunction swap(uint256 _inputAmount, uint256 _outputAmount, address[] _path, address _to, uint256 _deadline, bool _isFixedToken) returns (bool _result, uint256[] _amounts)
swapAndAddLiquidity
nonpayablefunction swapAndAddLiquidity(tuple params) returns (uint256 _tokenId, uint256 _remaining0, uint256 _remaining1)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
ExecuteSwap
event ExecuteSwap(bool _swapToken0ToToken1, uint256 _neededSwapAmount, uint256 _receivedAmount)
FindOptimalSwapAmount
event FindOptimalSwapAmount(uint256 _newUserRatio, uint256 _newTargetRatio)
GetQuoteResult
event GetQuoteResult(address tokenIn, address tokenOut, uint24 fee, uint256 amountIn, uint256 amountOut)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Ratios
event Ratios(uint256 _userRatio, uint256 _rangeRatio, uint256 _totalAmount0, uint256 _totalAmount1)
Swap
event Swap(address[] path, uint256[] amounts, address receiver)
SwapAndAddLiquidity
event SwapAndAddLiquidity((uint256 tokenId, address token0, address token1, uint24 feeTier, int24 tickLower, int24 tickUpper, uint256 amount0Desired, uint256 amount1Desired, address user) _params, uint256 _remaining0, uint256 _remaining1, uint256 _tokenId)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b50614e98806100206000396000f3fe608060405234801561001057600080fd5b50600436106101d85760003560e01c806301e65db3146101dd5780630337236a1461022657806304fe3fcb1461025157806306fdde031461026657806309924a401461027b57806311a2f0cb1461028e5780631580b5e5146102ae578063176f832e146102b657806317fcb39b146102c95780631cb85818146102dc57806326829bf9146102ef5780632a279b28146103025780633566967d1461032a5780633c5fd98214610354578063463fd1af146103675780635760f2e31461037a5780636145f8761461038d578063671c6a23146103a0578063715018a6146103b357806378c31684146103bb578063791b98bc146103dc5780638147b13b146103ef578063838b7ccb146104025780638779e3d61461041557806389883074146104435780638b1937cd1461045d5780638da5cb5b146104705780639b4bca2414610478578063aaf5eb681461049b578063b0bbcd88146104b2578063b18a313f146104d3578063b23e4fc6146104e6578063b52d5b1e146104ee578063b9dc6bfa146104f7578063cd9d91f314610500578063dd0081c714610509578063df71d7f314610443578063e75d75d514610512578063f2fde38b14610525578063f912c64b14610538575b600080fd5b61020d6101eb36600461406f565b609c60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b61023961023436600461439a565b61054b565b6040516001600160801b03909116815260200161021d565b61026461025f3660046140a7565b610576565b005b61026e6105d9565b60405161021d91906149eb565b61026461028936600461448a565b610667565b609b546102a1906001600160a01b031681565b60405161021d9190614918565b610264610674565b6102646102c436600461448a565b610724565b6098546102a1906001600160a01b031681565b6099546102a1906001600160a01b031681565b6102646102fd36600461448a565b610731565b61031561031036600461433f565b61073e565b6040805192835260208301919091520161021d565b61033d610338366004614123565b61076b565b60408051921515835260208301919091520161021d565b61026461036236600461448a565b61082a565b61026461037536600461419d565b610837565b610264610388366004614037565b610ab9565b61026e61039b3660046140f1565b610ae3565b6102a16103ae3660046140a7565b610c0d565b610264610d84565b6103ce6103c93660046140f1565b610d8e565b60405161021d9291906149ab565b609d546102a1906001600160a01b031681565b6102a16103fd366004614181565b6111a2565b610264610410366004614037565b6111b3565b61042861042336600461424d565b611292565b6040805193845260208401929092529082015260600161021d565b61033d6104513660046144ba565b60016000935093915050565b61033d61046b366004614123565b612057565b6102a161208f565b61048b6104863660046140f1565b61209e565b604051901515815260200161021d565b6104a460a05481565b60405190815260200161021d565b6104c56104c036600461464a565b612295565b60405161021d9291906149d0565b61026e6104e13660046140f1565b612637565b610264612775565b6104a4609f5481565b6104a4609e5481565b6104a460a15481565b6104a461271081565b609a546102a1906001600160a01b031681565b610264610533366004614037565b612825565b610264610546366004614037565b61289e565b600061056a8661055a876128c8565b610563876128c8565b8686612b83565b90505b95945050505050565b61057e612c3b565b6001600160a01b039283166000818152609c60208181526040808420969097168352948552858220805462ffffff90951662ffffff199586168117909155908552858220928252919093529290912080549091169091179055565b609780546105e690614d4e565b80601f016020809104026020016040519081016040528092919081815260200182805461061290614d4e565b801561065f5780601f106106345761010080835404028352916020019161065f565b820191906000526020600020905b81548152906001019060200180831161064257829003601f168201915b505050505081565b61066f612c3b565b60a155565b61067c612c3b565b609960009054906101000a90046001600160a01b03166001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ca57600080fd5b505afa1580156106de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107029190614053565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b61072c612c3b565b60a055565b610739612c3b565b609e55565b60008061075d8661074e876128c8565b610757876128c8565b86612c9a565b915091505b94509492505050565b6000806107778461209e565b61078657506000905080610823565b609b546000906001600160a01b0316632f80bb1d6107a387612637565b866040518363ffffffff1660e01b81526004016107c19291906149fe565b600060405180830381600087803b1580156107db57600080fd5b505af11580156107ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261081791908101906144f0565b50600195509193505050505b9250929050565b610832612c3b565b609f55565b600054610100900460ff16158080156108575750600054600160ff909116105b806108715750303b158015610871575060005460ff166001145b6108d95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156108fc576000805461ff0019166101001790555b610904612d35565b61090c612d64565b835161091f906097906020870190613e4f565b50609980546001600160a01b0319166001600160a01b0385169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561097457600080fd5b505afa158015610988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ac9190614053565b609a80546001600160a01b03199081166001600160a01b0393841617909155609b8054909116848316179055609954604080516312a9293f60e21b815290519190921691634aa4a4fc916004808301926020929190829003018186803b158015610a1557600080fd5b505afa158015610a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4d9190614053565b609880546001600160a01b0319166001600160a01b03929092169190911790558015610ab3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610ac1612c3b565b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b606081600081518110610b0657634e487b7160e01b600052603260045260246000fd5b6020026020010151604051602001610b1e919061489d565b60408051601f19818403018152919052905060015b8251811015610c0757600083610b4a600184614cf4565b81518110610b6857634e487b7160e01b600052603260045260246000fd5b602002602001015190506000848381518110610b9457634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b038085166000908152609c84526040808220928416825291845281902054905191935062ffffff1691610be091879184918691016148d1565b60405160208183030381529060405294505050508080610bff90614d83565b915050610b33565b50919050565b609a54604051630b4c774160e11b815260009182916001600160a01b0390911690631698ee8290610c469088908890889060040161492c565b60206040518083038186803b158015610c5e57600080fd5b505afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c969190614053565b60408051600481526024810182526020810180516001600160e01b0316633850c7bd60e01b179052905191925060009182916001600160a01b03851691610cdd91906148b5565b600060405180830381855afa9150503d8060008114610d18576040519150601f19603f3d011682016040523d82523d6000602084013e610d1d565b606091505b509150915081610d655760405162461bcd60e51b815260206004820152601360248201527204661696c656420746f2067657420736c6f743606c1b60448201526064016108d0565b80806020019051810190610d799190614053565b979650505050505050565b610d8c612c3b565b565b60608060008060005b60018651610da59190614cf4565b81101561119a57609a5486516001600160a01b0390911690631698ee8290889084908110610de357634e487b7160e01b600052603260045260246000fd5b602002602001015188846001610df99190614c9d565b81518110610e1757634e487b7160e01b600052603260045260246000fd5b6020026020010151609c60008b8781518110610e4357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008b876001610e7b9190614c9d565b81518110610e9957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900462ffffff166040518463ffffffff1660e01b8152600401610eef9392919061492c565b60206040518083038186803b158015610f0757600080fd5b505afa158015610f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3f9190614053565b9250826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610f7a57600080fd5b505afa158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb291906143f4565b505089516001600160a01b03909516965086948a945086935083109150610feb905057634e487b7160e01b600052603260045260246000fd5b60200260200101818152505085818151811061101757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561106157600080fd5b505afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190614053565b6001600160a01b03161415611115578581815181106110c857634e487b7160e01b600052603260045260246000fd5b60200260200101518482815181106110f057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050611188565b85611121826001614c9d565b8151811061113f57634e487b7160e01b600052603260045260246000fd5b602002602001015184828151811061116757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505b8061119281614d83565b915050610d97565b505050915091565b60006111ad826128c8565b92915050565b806001600160a01b0381166111da5760405162461bcd60e51b81526004016108d090614a20565b6111e2612c3b565b609980546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561123657600080fd5b505afa15801561124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126e9190614053565b609a80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080600061129f612d93565b60a1545a10156112ef5760405162461bcd60e51b815260206004820152601b60248201527a556e69737761705633436f6e6e6563746f723a206c6f772067617360281b60448201526064016108d0565b609a54602085015160408087015160608801519151630b4c774160e11b81526000946001600160a01b031693631698ee829361132f93919260040161492c565b60206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f9190614053565b905060008560c001511180611398575060008560e00151115b6113f65760405162461bcd60e51b815260206004820152602960248201527f556e69737761705633436f6e6e6563746f723a20626f746820616d6f756e747360448201526820617265207a65726f60b81b60648201526084016108d0565b84602001516001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561143d57600080fd5b505afa158015611451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114759190614053565b6001600160a01b0316146114b35760c0850180516020870180516040890180516001600160a01b039081169093529116905260e08701805190925290525b84511561168f57609d54855160405163133f757160e31b81526004810191909152600091829182916001600160a01b0316906399fbab88906024016101806040518083038186803b15801561150757600080fd5b505afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f91906146c7565b505050505096509650965050505050876060015162ffffff168362ffffff16146115b95760405162461bcd60e51b815260206004820152602560248201527f556e69737761705633436f6e6e6563746f723a204665652074696572206d69736044820152640dac2e8c6d60db1b60648201526084016108d0565b876080015160020b8260020b146116225760405162461bcd60e51b815260206004820152602760248201527f556e69737761705633436f6e6e6563746f723a205469636b206c6f776572206d6044820152660d2e6dac2e8c6d60cb1b60648201526084016108d0565b8760a0015160020b8160020b1461168b5760405162461bcd60e51b815260206004820152602760248201527f556e69737761705633436f6e6e6563746f723a205469636b207570706572206d6044820152660d2e6dac2e8c6d60cb1b60648201526084016108d0565b5050505b6116b733308760c0015188602001516001600160a01b0316612ded909392919063ffffffff16565b6116df33308760e0015188604001516001600160a01b0316612ded909392919063ffffffff16565b60008061178c6116fc886020015189604001518a60600151610c0d565b61170989608001516128c8565b6117168a60a001516128c8565b866001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561174f57600080fd5b505afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178791906142ed565b612c9a565b91509150600080821180156117af575060a0546117ab90600019614cb5565b8311155b6117bb576000196117d4565b8160a054846117ca9190614cd5565b6117d49190614cb5565b90506000808960e001511180156117fd575060a0546117f590600019614cb5565b8960c0015111155b1561182a578860e0015160a0548a60c001516118199190614cd5565b6118239190614cb5565b905061182f565b506000195b6040805182815260208101849052908101859052606081018490527f06e833a0d47998471576cfa45817b4c25bbf8d55e754c42f5d74f8d3dee8a2509060800160405180910390a1818111156118925761188c60018a8686612e58565b506118a9565b818110156118a9576118a760008a8587612e58565b505b6020890151609d546040516370a0823160e01b81526001600160a01b039283169263095ea7b392169083906370a08231906118e8903090600401614918565b60206040518083038186803b15801561190057600080fd5b505afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193891906144a2565b6040518363ffffffff1660e01b8152600401611955929190614954565b602060405180830381600087803b15801561196f57600080fd5b505af1158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a79190614165565b506040808a0151609d5491516370a0823160e01b81526001600160a01b039182169263095ea7b392169083906370a08231906119e7903090600401614918565b60206040518083038186803b1580156119ff57600080fd5b505afa158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3791906144a2565b6040518363ffffffff1660e01b8152600401611a54929190614954565b602060405180830381600087803b158015611a6e57600080fd5b505af1158015611a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa69190614165565b508851611cd657609d60009054906101000a90046001600160a01b03166001600160a01b031663883164566040518061016001604052808c602001516001600160a01b031681526020018c604001516001600160a01b031681526020018c6060015162ffffff1681526020018c6080015160020b81526020018c60a0015160020b81526020018c602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611b5c9190614918565b60206040518083038186803b158015611b7457600080fd5b505afa158015611b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bac91906144a2565b81526020018c604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611be19190614918565b60206040518083038186803b158015611bf957600080fd5b505afa158015611c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3191906144a2565b815260200160008152602001600081526020018c61010001516001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401611c789190614b6b565b608060405180830381600087803b158015611c9257600080fd5b505af1158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cca91906145c8565b50919950611ec2915050565b8851609d546040805160c0810182528c5181526020808e015192516370a0823160e01b8152949c506001600160a01b039384169463219f5d1794929391840192909116906370a0823190611d2e903090600401614918565b60206040518083038186803b158015611d4657600080fd5b505afa158015611d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7e91906144a2565b81526020018c604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611db39190614918565b60206040518083038186803b158015611dcb57600080fd5b505afa158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0391906144a2565b8152600060208083018290526040808401929092524260609384015281516001600160e01b031960e087901b168152845160048201529084015160248201529083015160448201529082015160648201526080820151608482015260a09091015160a482015260c401606060405180830381600087803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614309565b5050505b88602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611ef29190614918565b60206040518083038186803b158015611f0a57600080fd5b505afa158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4291906144a2565b965088604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f749190614918565b60206040518083038186803b158015611f8c57600080fd5b505afa158015611fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc491906144a2565b95508615611fe5576020890151611fe5906001600160a01b0316338961323e565b8515612004576040890151612004906001600160a01b0316338861323e565b7f1f515950ae0671cc6356d5014eac559a4c7093757efea02e83e7c21398fdb5d78988888b6040516120399493929190614aa0565b60405180910390a150505050506120506001606555565b9193909250565b6000806120638461209e565b61207257506000905080610823565b609b546000906001600160a01b031663cdca17536107a387610ae3565b6033546001600160a01b031690565b6000806002835110156120b45750600092915050565b60005b600184516120c59190614cf4565b81101561228b57609a5484516001600160a01b0390911690631698ee829086908490811061210357634e487b7160e01b600052603260045260246000fd5b6020026020010151868460016121199190614c9d565b8151811061213757634e487b7160e01b600052603260045260246000fd5b6020026020010151609c600089878151811061216357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008987600161219b9190614c9d565b815181106121b957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900462ffffff166040518463ffffffff1660e01b815260040161220f9392919061492c565b60206040518083038186803b15801561222757600080fd5b505afa15801561223b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225f9190614053565b91506001600160a01b038216612279575060009392505050565b8061228381614d83565b9150506120b7565b5060019392505050565b600060606122a1612d93565b846001600160a01b0381166122c85760405162461bcd60e51b81526004016108d090614a20565b60006122d78a8a8a8989613269565b909450905083156126205760408051600280825260608201835260009260208301908036833701905050935061234b3330848c60008151811061232a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316612ded909392919063ffffffff16565b8860008151811061236c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015160995460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926123aa929116908690600401614954565b602060405180830381600087803b1580156123c457600080fd5b505af11580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc9190614165565b50600186151514156124f3576099546001600160a01b031663c04b8d59612426848d8d8d8d613325565b6040518263ffffffff1660e01b81526004016124429190614b58565b602060405180830381600087803b15801561245c57600080fd5b505af1158015612470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249491906144a2565b905081846000815181106124b857634e487b7160e01b600052603260045260246000fd5b60200260200101818152505080846001815181106124e657634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b856125e3576099546001600160a01b031663f28c0498612516848d8d8d8d6133a2565b6040518263ffffffff1660e01b81526004016125329190614b58565b602060405180830381600087803b15801561254c57600080fd5b505af1158015612560573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258491906144a2565b905080846000815181106125a857634e487b7160e01b600052603260045260246000fd5b60200260200101818152505089846001815181106125d657634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b7fe1010d0ab476908054981d12fbb96915efcceb8d57a09ae8ca62f4bda731837389858a6040516126169392919061496d565b60405180910390a1505b505061262c6001606555565b965096945050505050565b606081600183516126489190614cf4565b8151811061266657634e487b7160e01b600052603260045260246000fd5b602002602001015160405160200161267e919061489d565b604051602081830303815290604052905060006001835161269f9190614cf4565b90505b8015610c075760008382815181106126ca57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000846001846126e49190614cf4565b8151811061270257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b038085166000908152609c84526040808220928416825291845281902054905191935062ffffff169161274e91879184918691016148d1565b6040516020818303038152906040529450505050808061276d90614d37565b9150506126a2565b61277d612c3b565b609960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156127cb57600080fd5b505afa1580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190614053565b609a80546001600160a01b0319166001600160a01b0392909216919091179055565b61282d612c3b565b6001600160a01b0381166128925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d0565b61289b81613420565b50565b6128a6612c3b565b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b60020b600060ff82901d80830118620d89e88111156128f2576128f26345c3193d60e11b84613472565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b18600282161561292e576ffff97272373d413259a46990580e213a0260801c5b600482161561294d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561296c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561298b576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156129aa576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156129c9576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156129e8576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612a08576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612a28576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612a48576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612a68576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612a88576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612aa8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612ac8576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612ae8576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612b09576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612b29576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612b48576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612b65576b048a170391f7dc42444e8fa20260801c5b6000841315612b7357600019045b63ffffffff0160201c9392505050565b6000836001600160a01b0316856001600160a01b03161115612ba3579293925b846001600160a01b0316866001600160a01b031611612bce57612bc7858585613483565b905061056d565b836001600160a01b0316866001600160a01b03161015612c30576000612bf5878686613483565b90506000612c048789866134f1565b9050806001600160801b0316826001600160801b031610612c255780612c27565b815b9250505061056d565b61056a8585846134f1565b33612c4461208f565b6001600160a01b031614610d8c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b600080836001600160a01b0316856001600160a01b03161115612cbb579293925b846001600160a01b0316866001600160a01b031611612ce657612cdf858585613536565b9150610762565b836001600160a01b0316866001600160a01b03161015612d1f57612d0b868585613536565b9150612d188587856135b3565b9050610762565b612d2a8585856135b3565b905094509492505050565b600054610100900460ff16612d5c5760405162461bcd60e51b81526004016108d090614a55565b610d8c6135f6565b600054610100900460ff16612d8b5760405162461bcd60e51b81526004016108d090614a55565b610d8c613626565b60026065541415612de65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108d0565b6002606555565b6040516001600160a01b0380851660248301528316604482015260648101829052610ab39085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261364d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052819081908715612f9057612ead87878761371f565b60408051610100810182526020808b0180516001600160a01b0390811684528c8501518116928401929092526060808d015162ffffff1684860152309084015242608084015260a08301859052600060c0840181905260e084015251609954935163095ea7b360e01b81529497509194509081169263095ea7b392612f389216908790600401614954565b602060405180830381600087803b158015612f5257600080fd5b505af1158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a9190614165565b50613100565b60006040518061012001604052806000815260200189604001516001600160a01b0316815260200189602001516001600160a01b03168152602001896060015162ffffff168152602001896080015160020b81526020018960a0015160020b81526020018960e0015181526020018960c001518152602001306001600160a01b0316815250905061302281878961371f565b60408051610100810182528a820180516001600160a01b0390811683526020808e01518216908401526060808e015162ffffff1684860152309084015242608084015260a08301859052600060c0840181905260e08401529051609954935163095ea7b360e01b81529498509195509081169263095ea7b3926130ab9216908890600401614954565b602060405180830381600087803b1580156130c557600080fd5b505af11580156130d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fd9190614165565b50505b82156131e4576099546040805163414bf38960e01b815283516001600160a01b0390811660048301526020850151811660248301529184015162ffffff1660448201526060840151821660648201526080840151608482015260a084015160a482015260c084015160c482015260e0840151821660e482015291169063414bf3899061010401602060405180830381600087803b1580156131a057600080fd5b505af19250505080156131d0575060408051601f3d908101601f191682019092526131cd918101906144a2565b60015b6131dd57600093506131e4565b6001945091505b6001841515141561323357604080518915158152602081018590529081018390527fbd7d0ba0f6056d1fda2ad263d60aaaab11302931676aa271936610da049e92289060600160405180910390a15b505050949350505050565b61325d8363a9059cbb60e01b8484604051602401612e21929190614954565b505050565b6001606555565b6000804284101561327f5750600090508061331b565b600183151514156132d357600080613297878a612057565b9092509050816132af5760008093509350505061331b565b808811156132c55760008093509350505061331b565b60018993509350505061331b565b6000806132e0878961076b565b9092509050816132f85760008093509350505061331b565b8089101561330e5760008093509350505061331b565b60019350915061331b9050565b9550959350505050565b6133606040518060a001604052806060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6040518060a0016040528061337486610ae3565b81526001600160a01b0390941660208501526040840192909252506060820194909452608001919091525090565b6133dd6040518060a001604052806060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6040518060a001604052806133f186612637565b8152602001846001600160a01b0316815260200183815260200186815260200187815250905095945050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816000528060020b60045260246000fd5b6000826001600160a01b0316846001600160a01b031611156134a3579192915b60006134c6856001600160a01b0316856001600160a01b0316600160601b613ad8565b90506134e66134e184838888036001600160a01b0316613ad8565b613b77565b9150505b9392505050565b6000826001600160a01b0316846001600160a01b03161115613511579192915b61352e6134e183600160601b8787036001600160a01b0316613ad8565b949350505050565b6000826001600160a01b0316846001600160a01b03161115613556579192915b836001600160a01b031661358f606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613ad8565b816135aa57634e487b7160e01b600052601260045260246000fd5b04949350505050565b6000826001600160a01b0316846001600160a01b031611156135d3579192915b61352e826001600160801b03168585036001600160a01b0316600160601b613ad8565b600054610100900460ff1661361d5760405162461bcd60e51b81526004016108d090614a55565b610d8c33613420565b600054610100900460ff166132625760405162461bcd60e51b81526004016108d090614a55565b60006136a2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b9d9092919063ffffffff16565b80519091501561325d57808060200190518101906136c09190614165565b61325d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108d0565b60008060008560e00151118015613748575060a05461374090600019614cb5565b8560c0015111155b61375457600019613775565b8460e0015160a0548660c0015161376b9190614cd5565b6137759190614cb5565b60c0860151909150600019906000908180805b609e548160ff1610801561379c5750838511155b15613aa357600060016137af8688614c9d565b901c9050806137c157600092506137dc565b6137d98c602001518d604001518e6060015184613bac565b92505b60008c60e001516000196137f09190614cf4565b8411156137ff5760001961380f565b838d60e0015161380f9190614c9d565b11801561384c575060a05461382690600019614cb5565b818d60c001511015613839576000613849565b818d60c001516138499190614cf4565b11155b613858576000196138c2565b60e08c015161386990600019614cf4565b83111561387857600019613888565b828c60e001516138889190614c9d565b60a054828e60c00151101561389e5760006138ae565b828e60c001516138ae9190614cf4565b6138b89190614cd5565b6138c29190614cb5565b97506000838b116138d45760006138de565b6138de848c614cf4565b1180156138f657506138f281600019614cf4565b8b11155b8015613919575060a05461390c90600019614cb5565b613916828d614c9d565b11155b6139255760001961395e565b828a1161393357600061393d565b61393d838b614cf4565b60a05461394a838e614c9d565b6139549190614cd5565b61395e9190614cb5565b9350600080851161397157600019613a0d565b8489116139c557613986612710600019614cb5565b6139908a87614cf4565b111561399e57600019613a0d565b846127106139ac8b83614cf4565b6139b69190614cd5565b6139c09190614cb5565b613a0d565b6139d3612710600019614cb5565b6139dd868b614cf4565b11156139eb57600019613a0d565b846127106139f9828c614cf4565b613a039190614cd5565b613a0d9190614cb5565b905087811015613a1e578097508199505b609f548111613a5c57604080518a815260208101879052600080516020614e43833981519152910160405180910390a15050505050505050506134ea565b84891115613a7657613a6f826001614c9d565b9650613a90565b81613a82575050613aa3565b613a8d600183614cf4565b95505b505080613a9c90614d9e565b9050613788565b506040805187815260208101849052600080516020614e43833981519152910160405180910390a15050505050509392505050565b60008383028160001985870982811083820303915050808411613afa57600080fd5b80613b0a575082900490506134ea565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b0381168114613b9857613b986393dafdf160e01b613cf4565b919050565b606061352e8484600085613cfe565b609b546040805160a0810182526001600160a01b0387811682528681166020830190815282840186815262ffffff888116606086019081526000608087018181529751636352813560e11b81529651861660048801529351851660248701529151604486015290511660648401529251811660848301529192919091169063c6a5026a9060a401608060405180830381600087803b158015613c4d57600080fd5b505af1925050508015613c7d575060408051601f3d908101601f19168201909252613c7a91810190614605565b60015b613c8957506000613c90565b5091925050505b604080516001600160a01b0387811682528616602082015262ffffff851681830152606081018490526080810183905290517f81b09b5692a89d67c3335a9f1bc50937627e1853e978e56ad6964b65756289ee9181900360a00190a1949350505050565b8060005260046000fd5b606082471015613d5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108d0565b843b613dad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b600080866001600160a01b03168587604051613dc991906148b5565b60006040518083038185875af1925050503d8060008114613e06576040519150601f19603f3d011682016040523d82523d6000602084013e613e0b565b606091505b5091509150610d7982828660608315613e255750816134ea565b825115613e355782518084602001fd5b8160405162461bcd60e51b81526004016108d091906149eb565b828054613e5b90614d4e565b90600052602060002090601f016020900481019282613e7d5760008555613ec3565b82601f10613e9657805160ff1916838001178555613ec3565b82800160010185558215613ec3579182015b82811115613ec3578251825591602001919060010190613ea8565b50613ecf929150613ed3565b5090565b5b80821115613ecf5760008155600101613ed4565b8035613b9881614dea565b8051613b9881614dea565b600082601f830112613f0e578081fd5b81356020613f23613f1e83614c7a565b614c4a565b80838252828201915082860187848660051b8901011115613f42578586fd5b855b85811015613f69578135613f5781614dea565b84529284019290840190600101613f44565b5090979650505050505050565b600082601f830112613f86578081fd5b81516020613f96613f1e83614c7a565b80838252828201915082860187848660051b8901011115613fb5578586fd5b855b85811015613f6957613fc882614023565b84529284019290840190600101613fb7565b8035613b9881614e0d565b8051613b9881614e0d565b8051613b9881614e1c565b805161ffff81168114613b9857600080fd5b8035613b9881614e31565b8051613b9881614e31565b805163ffffffff81168114613b9857600080fd5b600060208284031215614048578081fd5b81356134ea81614dea565b600060208284031215614064578081fd5b81516134ea81614dea565b60008060408385031215614081578081fd5b823561408c81614dea565b9150602083013561409c81614dea565b809150509250929050565b6000806000606084860312156140bb578081fd5b83356140c681614dea565b925060208401356140d681614dea565b915060408401356140e681614e31565b809150509250925092565b600060208284031215614102578081fd5b81356001600160401b03811115614117578182fd5b61352e84828501613efe565b60008060408385031215614135578182fd5b82356001600160401b0381111561414a578283fd5b61415685828601613efe565b95602094909401359450505050565b600060208284031215614176578081fd5b81516134ea81614dff565b600060208284031215614192578081fd5b81356134ea81614e0d565b6000806000606084860312156141b1578081fd5b83356001600160401b03808211156141c7578283fd5b818601915086601f8301126141da578283fd5b81356020828211156141ee576141ee614dd4565b614200601f8301601f19168201614c4a565b92508183528881838601011115614215578485fd5b818185018285013784818385010152829650614232818901613ee8565b95505050505061424460408501613ee8565b90509250925092565b6000610120828403121561425f578081fd5b614267614c21565b8235815261427760208401613ee8565b602082015261428860408401613ee8565b60408201526142996060840161400d565b60608201526142aa60808401613fda565b60808201526142bb60a08401613fda565b60a082015260c083013560c082015260e083013560e08201526101006142e2818501613ee8565b908201529392505050565b6000602082840312156142fe578081fd5b81516134ea81614e1c565b60008060006060848603121561431d578081fd5b835161432881614e1c565b602085015160409095015190969495509392505050565b60008060008060808587031215614354578182fd5b843561435f81614dea565b9350602085013561436f81614e0d565b9250604085013561437f81614e0d565b9150606085013561438f81614e1c565b939692955090935050565b600080600080600060a086880312156143b1578283fd5b85356143bc81614dea565b945060208601356143cc81614e0d565b935060408601356143dc81614e0d565b94979396509394606081013594506080013592915050565b600080600080600080600060e0888a03121561440e578485fd5b875161441981614dea565b602089015190975061442a81614e0d565b955061443860408901613ffb565b945061444660608901613ffb565b935061445460808901613ffb565b925060a088015160ff81168114614469578283fd5b60c089015190925061447a81614dff565b8091505092959891949750929550565b60006020828403121561449b578081fd5b5035919050565b6000602082840312156144b3578081fd5b5051919050565b6000806000606084860312156144ce578081fd5b8335925060208401356144e081614dea565b915060408401356140e681614dea565b60008060008060808587031215614505578182fd5b8451602080870151919550906001600160401b0380821115614525578485fd5b818801915088601f830112614538578485fd5b8151614546613f1e82614c7a565b8082825285820191508585018c878560051b8801011115614565578889fd5b8895505b8386101561459057805161457c81614dea565b835260019590950194918601918601614569565b5060408b015190985094505050808311156145a9578485fd5b50506145b787828801613f76565b606096909601519497939650505050565b600080600080608085870312156145dd578182fd5b8451935060208501516145ef81614e1c565b6040860151606090960151949790965092505050565b6000806000806080858703121561461a578182fd5b84519350602085015161462c81614dea565b925061463a60408601614023565b6060959095015193969295505050565b60008060008060008060c08789031215614662578384fd5b863595506020870135945060408701356001600160401b03811115614685578485fd5b61469189828a01613efe565b94505060608701356146a281614dea565b92506080870135915060a08701356146b981614dff565b809150509295509295509295565b6000806000806000806000806000806000806101808d8f0312156146e9578586fd5b8c516001600160601b03811681146146ff578687fd5b9b5061470d60208e01613ef3565b9a5061471b60408e01613ef3565b995061472960608e01613ef3565b985061473760808e01614018565b975061474560a08e01613fe5565b965061475360c08e01613fe5565b955061476160e08e01613ff0565b94506101008d015193506101208d015192506147806101408e01613ff0565b915061478f6101608e01613ff0565b90509295989b509295989b509295989b565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156147e65781516001600160a01b0316875295820195908201906001016147c1565b509495945050505050565b6000815180845260208085019450808401835b838110156147e657815187529582019590820190600101614804565b60008151808452614838816020860160208601614d0b565b601f01601f19169290920160200192915050565b6000815160a0845261486160a0850182614820565b6020848101516001600160a01b031690860152604080850151908601526060808501519086015260809384015193909401929092525090919050565b60609190911b6001600160601b031916815260140190565b600082516148c7818460208701614d0b565b9190910192915050565b600084516148e3818460208901614d0b565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b60608152600061498060608301866147ae565b828103602084015261499281866147f1565b91505060018060a01b0383166040830152949350505050565b6040815260006149be60408301856147f1565b82810360208401526134e681856147ae565b821515815260406020820152600061352e60408301846147f1565b6020815260006134ea6020830184614820565b604081526000614a116040830185614820565b90508260208301529392505050565b6020808252818101527f556e69737761705633436f6e6e6563746f723a207a65726f2061646472657373604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b845181526020808601516001600160a01b031690820152604080860151610180830191614acf908401826147a1565b506060860151614ae6606084018262ffffff169052565b506080860151614afb608084018260020b9052565b5060a0860151614b1060a084018260020b9052565b5060c086015160c083015260e086015160e083015261010080870151614b38828501826147a1565b505084610120830152836101408301528261016083015295945050505050565b6020815260006134ea602083018461484c565b600061016082019050614b7f8284516147a1565b6020830151614b9160208401826147a1565b506040830151614ba8604084018262ffffff169052565b506060830151614bbd606084018260020b9052565b506080830151614bd2608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614c10828501826147a1565b505061014092830151919092015290565b60405161012081016001600160401b0381118282101715614c4457614c44614dd4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614c7257614c72614dd4565b604052919050565b60006001600160401b03821115614c9357614c93614dd4565b5060051b60200190565b60008219821115614cb057614cb0614dbe565b500190565b600082614cd057634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614cef57614cef614dbe565b500290565b600082821015614d0657614d06614dbe565b500390565b60005b83811015614d26578181015183820152602001614d0e565b83811115610ab35750506000910152565b600081614d4657614d46614dbe565b506000190190565b600181811c90821680614d6257607f821691505b60208210811415610c0757634e487b7160e01b600052602260045260246000fd5b6000600019821415614d9757614d97614dbe565b5060010190565b600060ff821660ff811415614db557614db5614dbe565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461289b57600080fd5b801515811461289b57600080fd5b8060020b811461289b57600080fd5b6001600160801b038116811461289b57600080fd5b62ffffff8116811461289b57600080fdfe2bbdfc203244bd3f26a78f33517d7bb3d7428d0752037f468114b606ea2d21c6a26469706673582212201299624d58f00a61f60872149fa1549ba4eb2d726bf1364ebea3a80aec25075664736f6c63430008040033