0 txs
2 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, uint256 _totalAmount0, uint256 _totalAmount1)
FindOptimalSwapAmount
event FindOptimalSwapAmount(uint256 _newUserRatio, uint256 _newTargetRatio, uint256 _targetRatio)
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)
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
0x608060405234801561001057600080fd5b50614f3c806100206000396000f3fe608060405234801561001057600080fd5b50600436106101d85760003560e01c806301e65db3146101dd5780630337236a1461022657806304fe3fcb1461025157806306fdde031461026657806309924a401461027b57806311a2f0cb1461028e5780631580b5e5146102ae578063176f832e146102b657806317fcb39b146102c95780631cb85818146102dc57806326829bf9146102ef5780632a279b28146103025780633566967d146103235780633c5fd9821461034d578063463fd1af146103605780635760f2e3146103735780636145f87614610386578063671c6a2314610399578063715018a6146103ac57806378c31684146103b4578063791b98bc146103d55780638147b13b146103e8578063838b7ccb146103fb5780638779e3d61461040e57806389883074146104305780638b1937cd1461044a5780638da5cb5b1461045d5780639b4bca2414610465578063aaf5eb6814610488578063b0bbcd881461049f578063b18a313f146104c0578063b23e4fc6146104d3578063b52d5b1e146104db578063b9dc6bfa146104e4578063cd9d91f3146104ed578063dd0081c7146104f6578063df71d7f314610430578063e75d75d5146104ff578063f2fde38b14610512578063f912c64b14610525575b600080fd5b61020d6101eb3660046140cf565b609c60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b6102396102343660046143fa565b610538565b6040516001600160801b03909116815260200161021d565b61026461025f366004614107565b610563565b005b61026e6105c6565b60405161021d9190614a4b565b6102646102893660046144ea565b610654565b609b546102a1906001600160a01b031681565b60405161021d9190614978565b610264610661565b6102646102c43660046144ea565b610711565b6098546102a1906001600160a01b031681565b6099546102a1906001600160a01b031681565b6102646102fd3660046144ea565b61071e565b61031561031036600461439f565b61072b565b60405161021d929190614a80565b610336610331366004614183565b610758565b60408051921515835260208301919091520161021d565b61026461035b3660046144ea565b610817565b61026461036e3660046141fd565b610824565b610264610381366004614097565b610aa6565b61026e610394366004614151565b610ad0565b6102a16103a7366004614107565b610bfa565b610264610d71565b6103c76103c2366004614151565b610d7b565b60405161021d929190614a0b565b609d546102a1906001600160a01b031681565b6102a16103f63660046141e1565b61118f565b610264610409366004614097565b6111a0565b61042161041c3660046142ad565b61127f565b60405161021d93929190614c8f565b61033661043e36600461451a565b60016000935093915050565b610336610458366004614183565b612079565b6102a16120b1565b610478610473366004614151565b6120c0565b604051901515815260200161021d565b61049160a05481565b60405190815260200161021d565b6104b26104ad3660046146aa565b6122b7565b60405161021d929190614a30565b61026e6104ce366004614151565b612659565b610264612797565b610491609f5481565b610491609e5481565b61049160a15481565b61049161271081565b609a546102a1906001600160a01b031681565b610264610520366004614097565b612847565b610264610533366004614097565b6128c0565b600061055786610547876128ea565b610550876128ea565b8686612ba5565b90505b95945050505050565b61056b612c5d565b6001600160a01b039283166000818152609c60208181526040808420969097168352948552858220805462ffffff90951662ffffff199586168117909155908552858220928252919093529290912080549091169091179055565b609780546105d390614dd2565b80601f01602080910402602001604051908101604052809291908181526020018280546105ff90614dd2565b801561064c5780601f106106215761010080835404028352916020019161064c565b820191906000526020600020905b81548152906001019060200180831161062f57829003601f168201915b505050505081565b61065c612c5d565b60a155565b610669612c5d565b609960009054906101000a90046001600160a01b03166001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106b757600080fd5b505afa1580156106cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef91906140b3565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b610719612c5d565b60a055565b610726612c5d565b609e55565b60008061074a8661073b876128ea565b610744876128ea565b86612cbc565b915091505b94509492505050565b600080610764846120c0565b61077357506000905080610810565b609b546000906001600160a01b0316632f80bb1d61079087612659565b866040518363ffffffff1660e01b81526004016107ae929190614a5e565b600060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108049190810190614550565b50600195509193505050505b9250929050565b61081f612c5d565b609f55565b600054610100900460ff16158080156108445750600054600160ff909116105b8061085e5750303b15801561085e575060005460ff166001145b6108c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156108e9576000805461ff0019166101001790555b6108f1612d57565b6108f9612d86565b835161090c906097906020870190613eaf565b50609980546001600160a01b0319166001600160a01b0385169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099991906140b3565b609a80546001600160a01b03199081166001600160a01b0393841617909155609b8054909116848316179055609954604080516312a9293f60e21b815290519190921691634aa4a4fc916004808301926020929190829003018186803b158015610a0257600080fd5b505afa158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a91906140b3565b609880546001600160a01b0319166001600160a01b03929092169190911790558015610aa0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610aae612c5d565b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b606081600081518110610af357634e487b7160e01b600052603260045260246000fd5b6020026020010151604051602001610b0b91906148fd565b60408051601f19818403018152919052905060015b8251811015610bf457600083610b37600184614d78565b81518110610b5557634e487b7160e01b600052603260045260246000fd5b602002602001015190506000848381518110610b8157634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b038085166000908152609c84526040808220928416825291845281902054905191935062ffffff1691610bcd9187918491869101614931565b60405160208183030381529060405294505050508080610bec90614e07565b915050610b20565b50919050565b609a54604051630b4c774160e11b815260009182916001600160a01b0390911690631698ee8290610c339088908890889060040161498c565b60206040518083038186803b158015610c4b57600080fd5b505afa158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8391906140b3565b60408051600481526024810182526020810180516001600160e01b0316633850c7bd60e01b179052905191925060009182916001600160a01b03851691610cca9190614915565b600060405180830381855afa9150503d8060008114610d05576040519150601f19603f3d011682016040523d82523d6000602084013e610d0a565b606091505b509150915081610d525760405162461bcd60e51b815260206004820152601360248201527204661696c656420746f2067657420736c6f743606c1b60448201526064016108bd565b80806020019051810190610d6691906140b3565b979650505050505050565b610d79612c5d565b565b60608060008060005b60018651610d929190614d78565b81101561118757609a5486516001600160a01b0390911690631698ee8290889084908110610dd057634e487b7160e01b600052603260045260246000fd5b602002602001015188846001610de69190614d21565b81518110610e0457634e487b7160e01b600052603260045260246000fd5b6020026020010151609c60008b8781518110610e3057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008b876001610e689190614d21565b81518110610e8657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900462ffffff166040518463ffffffff1660e01b8152600401610edc9392919061498c565b60206040518083038186803b158015610ef457600080fd5b505afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c91906140b3565b9250826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610f6757600080fd5b505afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614454565b505089516001600160a01b03909516965086948a945086935083109150610fd8905057634e487b7160e01b600052603260045260246000fd5b60200260200101818152505085818151811061100457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108691906140b3565b6001600160a01b03161415611102578581815181106110b557634e487b7160e01b600052603260045260246000fd5b60200260200101518482815181106110dd57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050611175565b8561110e826001614d21565b8151811061112c57634e487b7160e01b600052603260045260246000fd5b602002602001015184828151811061115457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505b8061117f81614e07565b915050610d84565b505050915091565b600061119a826128ea565b92915050565b806001600160a01b0381166111c75760405162461bcd60e51b81526004016108bd90614a8e565b6111cf612c5d565b609980546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561122357600080fd5b505afa158015611237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125b91906140b3565b609a80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080600061128c612db5565b60a1545a10156112dc5760405162461bcd60e51b815260206004820152601b60248201527a556e69737761705633436f6e6e6563746f723a206c6f772067617360281b60448201526064016108bd565b609a54602085015160408087015160608801519151630b4c774160e11b81526000946001600160a01b031693631698ee829361131c93919260040161498c565b60206040518083038186803b15801561133457600080fd5b505afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c91906140b3565b905084602001516001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156113b557600080fd5b505afa1580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed91906140b3565b6001600160a01b03161461142b5760c0850180516020870180516040890180516001600160a01b039081169093529116905260e08701805190925290525b84511561160757609d54855160405163133f757160e31b81526004810191909152600091829182916001600160a01b0316906399fbab88906024016101806040518083038186803b15801561147f57600080fd5b505afa158015611493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b79190614727565b505050505096509650965050505050876060015162ffffff168362ffffff16146115315760405162461bcd60e51b815260206004820152602560248201527f556e69737761705633436f6e6e6563746f723a204665652074696572206d69736044820152640dac2e8c6d60db1b60648201526084016108bd565b876080015160020b8260020b1461159a5760405162461bcd60e51b815260206004820152602760248201527f556e69737761705633436f6e6e6563746f723a205469636b206c6f776572206d6044820152660d2e6dac2e8c6d60cb1b60648201526084016108bd565b8760a0015160020b8160020b146116035760405162461bcd60e51b815260206004820152602760248201527f556e69737761705633436f6e6e6563746f723a205469636b207570706572206d6044820152660d2e6dac2e8c6d60cb1b60648201526084016108bd565b5050505b61162f33308760c0015188602001516001600160a01b0316612e0f909392919063ffffffff16565b61165733308760e0015188604001516001600160a01b0316612e0f909392919063ffffffff16565b602085015160995460c087015160405163095ea7b360e01b81526001600160a01b039384169363095ea7b393611692939116916004016149b4565b602060405180830381600087803b1580156116ac57600080fd5b505af11580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e491906141c5565b5060408086015160995460e0880151925163095ea7b360e01b81526001600160a01b039283169363095ea7b39361171f9316916004016149b4565b602060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177191906141c5565b506020850151609d5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117ac92911690600019906004016149b4565b602060405180830381600087803b1580156117c657600080fd5b505af11580156117da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fe91906141c5565b50604080860151609d54915163095ea7b360e01b81526001600160a01b039182169263095ea7b39261183992911690600019906004016149b4565b602060405180830381600087803b15801561185357600080fd5b505af1158015611867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188b91906141c5565b5060006118a5866020015187604001518860600151610bfa565b905060006118d6826118ba89608001516128ea565b6118c78a60a001516128ea565b8a60c001518b60e00151612ba5565b90506000806118f9846118ec8b608001516128ea565b6107448c60a001516128ea565b915091506000808211801561191c575060a05461191890600019614d39565b8311155b15611941578160a054846119309190614d59565b61193a9190614d39565b9050611946565b506000195b6000808b60e0015111801561196d575060a05461196590600019614d39565b8b60c0015111155b1561199a578a60e0015160a0548c60c001516119899190614d59565b6119939190614d39565b905061199f565b506000195b600080516020614ec783398151915281836040516119be929190614a80565b60405180910390a16000828210611a1057600080516020614ec78339815191526000806040516119ef929190614a80565b60405180910390a1611a098860018e60c001518f87612e7a565b9050611aa3565b8282108015611a1f5750600083115b15611aa357600080516020614ec7833981519152600180604051611a44929190614a80565b60405180910390a1611aa08860008e60e001518f60008a118015611a76575060a054611a7290600019614d39565b8911155b611a8257600019612e7a565b8960a0548a611a919190614d59565b611a9b9190614d39565b612e7a565b90505b60018115151415611ee1578b51611cdd57609d60009054906101000a90046001600160a01b03166001600160a01b031663883164566040518061016001604052808f602001516001600160a01b031681526020018f604001516001600160a01b031681526020018f6060015162ffffff1681526020018f6080015160020b81526020018f60a0015160020b81526020018f602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611b639190614978565b60206040518083038186803b158015611b7b57600080fd5b505afa158015611b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb39190614502565b81526020018f604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611be89190614978565b60206040518083038186803b158015611c0057600080fd5b505afa158015611c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c389190614502565b815260200160008152602001600081526020018f61010001516001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401611c7f9190614bd9565b608060405180830381600087803b158015611c9957600080fd5b505af1158015611cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd19190614628565b50919c50611ee1915050565b8b600001519a50609d60009054906101000a90046001600160a01b03166001600160a01b031663219f5d176040518060c001604052808f6000015181526020018f602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611d4d9190614978565b60206040518083038186803b158015611d6557600080fd5b505afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d9190614502565b81526020018f604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611dd29190614978565b60206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190614502565b8152600060208083018290526040808401929092524260609384015281516001600160e01b031960e087901b168152845160048201529084015160248201529083015160448201529082015160648201526080820151608482015260a09091015160a482015260c401606060405180830381600087803b158015611ea557600080fd5b505af1158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd9190614369565b5050505b8b602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f119190614978565b60206040518083038186803b158015611f2957600080fd5b505afa158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190614502565b99508b604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f939190614978565b60206040518083038186803b158015611fab57600080fd5b505afa158015611fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe39190614502565b985089156120045760208c0151612004906001600160a01b0316338c6132af565b88156120235760408c0151612023906001600160a01b0316338b6132af565b7f1f515950ae0671cc6356d5014eac559a4c7093757efea02e83e7c21398fdb5d78c8b8b8e6040516120589493929190614b0e565b60405180910390a150505050505050506120726001606555565b9193909250565b600080612085846120c0565b61209457506000905080610810565b609b546000906001600160a01b031663cdca175361079087610ad0565b6033546001600160a01b031690565b6000806002835110156120d65750600092915050565b60005b600184516120e79190614d78565b8110156122ad57609a5484516001600160a01b0390911690631698ee829086908490811061212557634e487b7160e01b600052603260045260246000fd5b60200260200101518684600161213b9190614d21565b8151811061215957634e487b7160e01b600052603260045260246000fd5b6020026020010151609c600089878151811061218557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000898760016121bd9190614d21565b815181106121db57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900462ffffff166040518463ffffffff1660e01b81526004016122319392919061498c565b60206040518083038186803b15801561224957600080fd5b505afa15801561225d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228191906140b3565b91506001600160a01b03821661229b575060009392505050565b806122a581614e07565b9150506120d9565b5060019392505050565b600060606122c3612db5565b846001600160a01b0381166122ea5760405162461bcd60e51b81526004016108bd90614a8e565b60006122f98a8a8a89896132da565b909450905083156126425760408051600280825260608201835260009260208301908036833701905050935061236d3330848c60008151811061234c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316612e0f909392919063ffffffff16565b8860008151811061238e57634e487b7160e01b600052603260045260246000fd5b602090810291909101015160995460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926123cc9291169086906004016149b4565b602060405180830381600087803b1580156123e657600080fd5b505af11580156123fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241e91906141c5565b5060018615151415612515576099546001600160a01b031663c04b8d59612448848d8d8d8d613396565b6040518263ffffffff1660e01b81526004016124649190614bc6565b602060405180830381600087803b15801561247e57600080fd5b505af1158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190614502565b905081846000815181106124da57634e487b7160e01b600052603260045260246000fd5b602002602001018181525050808460018151811061250857634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b85612605576099546001600160a01b031663f28c0498612538848d8d8d8d613413565b6040518263ffffffff1660e01b81526004016125549190614bc6565b602060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a69190614502565b905080846000815181106125ca57634e487b7160e01b600052603260045260246000fd5b60200260200101818152505089846001815181106125f857634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b7fe1010d0ab476908054981d12fbb96915efcceb8d57a09ae8ca62f4bda731837389858a604051612638939291906149cd565b60405180910390a1505b505061264e6001606555565b965096945050505050565b6060816001835161266a9190614d78565b8151811061268857634e487b7160e01b600052603260045260246000fd5b60200260200101516040516020016126a091906148fd565b60405160208183030381529060405290506000600183516126c19190614d78565b90505b8015610bf45760008382815181106126ec57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000846001846127069190614d78565b8151811061272457634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b038085166000908152609c84526040808220928416825291845281902054905191935062ffffff16916127709187918491869101614931565b6040516020818303038152906040529450505050808061278f90614dbb565b9150506126c4565b61279f612c5d565b609960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ed57600080fd5b505afa158015612801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282591906140b3565b609a80546001600160a01b0319166001600160a01b0392909216919091179055565b61284f612c5d565b6001600160a01b0381166128b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108bd565b6128bd81613491565b50565b6128c8612c5d565b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b60020b600060ff82901d80830118620d89e8811115612914576129146345c3193d60e11b846134e3565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612950576ffff97272373d413259a46990580e213a0260801c5b600482161561296f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561298e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156129ad576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156129cc576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156129eb576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612a0a576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612a2a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612a4a576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612a6a576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612a8a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612aaa576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612aca576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612aea576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612b0a576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612b2b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612b4b576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612b6a576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612b87576b048a170391f7dc42444e8fa20260801c5b6000841315612b9557600019045b63ffffffff0160201c9392505050565b6000836001600160a01b0316856001600160a01b03161115612bc5579293925b846001600160a01b0316866001600160a01b031611612bf057612be98585856134f4565b905061055a565b836001600160a01b0316866001600160a01b03161015612c52576000612c178786866134f4565b90506000612c26878986613562565b9050806001600160801b0316826001600160801b031610612c475780612c49565b815b9250505061055a565b610557858584613562565b33612c666120b1565b6001600160a01b031614610d795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108bd565b600080836001600160a01b0316856001600160a01b03161115612cdd579293925b846001600160a01b0316866001600160a01b031611612d0857612d018585856135a7565b915061074f565b836001600160a01b0316866001600160a01b03161015612d4157612d2d8685856135a7565b9150612d3a858785613624565b905061074f565b612d4c858585613624565b905094509492505050565b600054610100900460ff16612d7e5760405162461bcd60e51b81526004016108bd90614ac3565b610d79613667565b600054610100900460ff16612dad5760405162461bcd60e51b81526004016108bd90614ac3565b610d79613697565b60026065541415612e085760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108bd565b6002606555565b6040516001600160a01b0380851660248301528316604482015260648101829052610aa09085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526136be565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052819081906000612ed7876020015188604001518960600151610bfa565b9050600080612f7083612eed8b608001516128ea565b612efa8c60a001516128ea565b8f6001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b158015612f3357600080fd5b505afa158015612f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6b919061434d565b612cbc565b915091508a1561302a57600080516020614ec783398151915260006001604051612f9b929190614a80565b60405180910390a1612fb08a8a8a8585613790565b95506040518061010001604052808a602001516001600160a01b031681526020018a604001516001600160a01b031681526020018a6060015162ffffff168152602001306001600160a01b031681526020014281526020018781526020016000815260200160006001600160a01b0316815250935061315e565b600080516020614ec78339815191526001600060405161304b929190614a80565b60405180910390a16000604051806101200160405280600081526020018b604001516001600160a01b031681526020018b602001516001600160a01b031681526020018b6060015162ffffff1681526020018b6080015160020b81526020018b60a0015160020b81526020018b60e0015181526020018b60c001518152602001306001600160a01b031681525090506130e78b828b8587613790565b96506040518061010001604052808b604001516001600160a01b031681526020018b602001516001600160a01b031681526020018b6060015162ffffff168152602001306001600160a01b031681526020014281526020018881526020016000815260200160006001600160a01b03168152509450505b8515613242576099546040805163414bf38960e01b815286516001600160a01b0390811660048301526020880151811660248301529187015162ffffff1660448201526060870151821660648201526080870151608482015260a087015160a482015260c087015160c482015260e0870151821660e482015291169063414bf3899061010401602060405180830381600087803b1580156131fe57600080fd5b505af192505050801561322e575060408051601f3d908101601f1916820190925261322b91810190614502565b60015b61323b5760009650613242565b6001975094505b600187151514156132a057604080518c151581526020810188905290810186905260608101839052608081018290527f930522e019723ff432e1a8923b25ab0a8a9fe4dcc26f41b33762778f1b45bc989060a0015b60405180910390a15b50505050505095945050505050565b6132ce8363a9059cbb60e01b8484604051602401612e439291906149b4565b505050565b6001606555565b600080428410156132f05750600090508061338c565b6001831515141561334457600080613308878a612079565b9092509050816133205760008093509350505061338c565b808811156133365760008093509350505061338c565b60018993509350505061338c565b6000806133518789610758565b9092509050816133695760008093509350505061338c565b8089101561337f5760008093509350505061338c565b60019350915061338c9050565b9550959350505050565b6133d16040518060a001604052806060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6040518060a001604052806133e586610ad0565b81526001600160a01b0390941660208501526040840192909252506060820194909452608001919091525090565b61344e6040518060a001604052806060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6040518060a0016040528061346286612659565b8152602001846001600160a01b0316815260200183815260200186815260200187815250905095945050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816000528060020b60045260246000fd5b6000826001600160a01b0316846001600160a01b03161115613514579192915b6000613537856001600160a01b0316856001600160a01b0316600160601b613b38565b905061355761355284838888036001600160a01b0316613b38565b613bd7565b9150505b9392505050565b6000826001600160a01b0316846001600160a01b03161115613582579192915b61359f61355283600160601b8787036001600160a01b0316613b38565b949350505050565b6000826001600160a01b0316846001600160a01b031611156135c7579192915b836001600160a01b0316613600606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613b38565b8161361b57634e487b7160e01b600052601260045260246000fd5b04949350505050565b6000826001600160a01b0316846001600160a01b03161115613644579192915b61359f826001600160801b03168585036001600160a01b0316600160601b613b38565b600054610100900460ff1661368e5760405162461bcd60e51b81526004016108bd90614ac3565b610d7933613491565b600054610100900460ff166132d35760405162461bcd60e51b81526004016108bd90614ac3565b6000613713826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bfd9092919063ffffffff16565b8051909150156132ce578080602001905181019061373191906141c5565b6132ce5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108bd565b60008060008660e001511180156137b9575060a0546137b190600019614d39565b8660c0015111155b6137c5576000196137e6565b8560e0015160a0548760c001516137dc9190614d59565b6137e69190614d39565b60c0870151909150600019906000908180805b609e548160ff1610801561380d5750838511155b15613b1657600060016138208688614d21565b901c905080613832576000925061384d565b61384a8d602001518e604001518f6060015184613c0c565b92505b60008d60e001516000196138619190614d78565b84111561387057600019613880565b838e60e001516138809190614d21565b1180156138bd575060a05461389790600019614d39565b818e60c0015110156138aa5760006138ba565b818e60c001516138ba9190614d78565b11155b6138c957600019613933565b60e08d01516138da90600019614d78565b8311156138e9576000196138f9565b828d60e001516138f99190614d21565b60a054828f60c00151101561390f57600061391f565b828f60c0015161391f9190614d78565b6139299190614d59565b6139339190614d39565b97506000838b1161394557600061394f565b61394f848c614d78565b118015613967575061396381600019614d78565b8b11155b801561398a575060a05461397d90600019614d39565b613987828d614d21565b11155b613996576000196139cf565b828a116139a45760006139ae565b6139ae838b614d78565b60a0546139bb838e614d21565b6139c59190614d59565b6139cf9190614d39565b935060008085116139e257600019613a7e565b848911613a36576139f7612710600019614d39565b613a018a87614d78565b1115613a0f57600019613a7e565b84612710613a1d8b83614d78565b613a279190614d59565b613a319190614d39565b613a7e565b613a44612710600019614d39565b613a4e868b614d78565b1115613a5c57600019613a7e565b84612710613a6a828c614d78565b613a749190614d59565b613a7e9190614d39565b905087811015613a8f578097508199505b609f548111613acf57600080516020614ee783398151915289868f604051613ab993929190614c8f565b60405180910390a150505050505050505061055a565b84891115613ae957613ae2826001614d21565b9650613b03565b81613af5575050613b16565b613b00600183614d78565b95505b505080613b0f90614e22565b90506137f9565b50600080516020614ee783398151915286838c60405161329793929190614c8f565b60008383028160001985870982811083820303915050808411613b5a57600080fd5b80613b6a5750829004905061355b565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b0381168114613bf857613bf86393dafdf160e01b613d54565b919050565b606061359f8484600085613d5e565b609b546040805160a0810182526001600160a01b0387811682528681166020830190815282840186815262ffffff888116606086019081526000608087018181529751636352813560e11b81529651861660048801529351851660248701529151604486015290511660648401529251811660848301529192919091169063c6a5026a9060a401608060405180830381600087803b158015613cad57600080fd5b505af1925050508015613cdd575060408051601f3d908101601f19168201909252613cda91810190614665565b60015b613ce957506000613cf0565b5091925050505b604080516001600160a01b0387811682528616602082015262ffffff851681830152606081018490526080810183905290517f81b09b5692a89d67c3335a9f1bc50937627e1853e978e56ad6964b65756289ee9181900360a00190a1949350505050565b8060005260046000fd5b606082471015613dbf5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108bd565b843b613e0d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108bd565b600080866001600160a01b03168587604051613e299190614915565b60006040518083038185875af1925050503d8060008114613e66576040519150601f19603f3d011682016040523d82523d6000602084013e613e6b565b606091505b5091509150610d6682828660608315613e8557508161355b565b825115613e955782518084602001fd5b8160405162461bcd60e51b81526004016108bd9190614a4b565b828054613ebb90614dd2565b90600052602060002090601f016020900481019282613edd5760008555613f23565b82601f10613ef657805160ff1916838001178555613f23565b82800160010185558215613f23579182015b82811115613f23578251825591602001919060010190613f08565b50613f2f929150613f33565b5090565b5b80821115613f2f5760008155600101613f34565b8035613bf881614e6e565b8051613bf881614e6e565b600082601f830112613f6e578081fd5b81356020613f83613f7e83614cfe565b614cce565b80838252828201915082860187848660051b8901011115613fa2578586fd5b855b85811015613fc9578135613fb781614e6e565b84529284019290840190600101613fa4565b5090979650505050505050565b600082601f830112613fe6578081fd5b81516020613ff6613f7e83614cfe565b80838252828201915082860187848660051b8901011115614015578586fd5b855b85811015613fc95761402882614083565b84529284019290840190600101614017565b8035613bf881614e91565b8051613bf881614e91565b8051613bf881614ea0565b805161ffff81168114613bf857600080fd5b8035613bf881614eb5565b8051613bf881614eb5565b805163ffffffff81168114613bf857600080fd5b6000602082840312156140a8578081fd5b813561355b81614e6e565b6000602082840312156140c4578081fd5b815161355b81614e6e565b600080604083850312156140e1578081fd5b82356140ec81614e6e565b915060208301356140fc81614e6e565b809150509250929050565b60008060006060848603121561411b578081fd5b833561412681614e6e565b9250602084013561413681614e6e565b9150604084013561414681614eb5565b809150509250925092565b600060208284031215614162578081fd5b81356001600160401b03811115614177578182fd5b61359f84828501613f5e565b60008060408385031215614195578182fd5b82356001600160401b038111156141aa578283fd5b6141b685828601613f5e565b95602094909401359450505050565b6000602082840312156141d6578081fd5b815161355b81614e83565b6000602082840312156141f2578081fd5b813561355b81614e91565b600080600060608486031215614211578081fd5b83356001600160401b0380821115614227578283fd5b818601915086601f83011261423a578283fd5b813560208282111561424e5761424e614e58565b614260601f8301601f19168201614cce565b92508183528881838601011115614275578485fd5b818185018285013784818385010152829650614292818901613f48565b9550505050506142a460408501613f48565b90509250925092565b600061012082840312156142bf578081fd5b6142c7614ca5565b823581526142d760208401613f48565b60208201526142e860408401613f48565b60408201526142f96060840161406d565b606082015261430a6080840161403a565b608082015261431b60a0840161403a565b60a082015260c083013560c082015260e083013560e0820152610100614342818501613f48565b908201529392505050565b60006020828403121561435e578081fd5b815161355b81614ea0565b60008060006060848603121561437d578081fd5b835161438881614ea0565b602085015160409095015190969495509392505050565b600080600080608085870312156143b4578182fd5b84356143bf81614e6e565b935060208501356143cf81614e91565b925060408501356143df81614e91565b915060608501356143ef81614ea0565b939692955090935050565b600080600080600060a08688031215614411578283fd5b853561441c81614e6e565b9450602086013561442c81614e91565b9350604086013561443c81614e91565b94979396509394606081013594506080013592915050565b600080600080600080600060e0888a03121561446e578485fd5b875161447981614e6e565b602089015190975061448a81614e91565b95506144986040890161405b565b94506144a66060890161405b565b93506144b46080890161405b565b925060a088015160ff811681146144c9578283fd5b60c08901519092506144da81614e83565b8091505092959891949750929550565b6000602082840312156144fb578081fd5b5035919050565b600060208284031215614513578081fd5b5051919050565b60008060006060848603121561452e578081fd5b83359250602084013561454081614e6e565b9150604084013561414681614e6e565b60008060008060808587031215614565578182fd5b8451602080870151919550906001600160401b0380821115614585578485fd5b818801915088601f830112614598578485fd5b81516145a6613f7e82614cfe565b8082825285820191508585018c878560051b88010111156145c5578889fd5b8895505b838610156145f05780516145dc81614e6e565b8352600195909501949186019186016145c9565b5060408b01519098509450505080831115614609578485fd5b505061461787828801613fd6565b606096909601519497939650505050565b6000806000806080858703121561463d578182fd5b84519350602085015161464f81614ea0565b6040860151606090960151949790965092505050565b6000806000806080858703121561467a578182fd5b84519350602085015161468c81614e6e565b925061469a60408601614083565b6060959095015193969295505050565b60008060008060008060c087890312156146c2578384fd5b863595506020870135945060408701356001600160401b038111156146e5578485fd5b6146f189828a01613f5e565b945050606087013561470281614e6e565b92506080870135915060a087013561471981614e83565b809150509295509295509295565b6000806000806000806000806000806000806101808d8f031215614749578586fd5b8c516001600160601b038116811461475f578687fd5b9b5061476d60208e01613f53565b9a5061477b60408e01613f53565b995061478960608e01613f53565b985061479760808e01614078565b97506147a560a08e01614045565b96506147b360c08e01614045565b95506147c160e08e01614050565b94506101008d015193506101208d015192506147e06101408e01614050565b91506147ef6101608e01614050565b90509295989b509295989b509295989b565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156148465781516001600160a01b031687529582019590820190600101614821565b509495945050505050565b6000815180845260208085019450808401835b8381101561484657815187529582019590820190600101614864565b60008151808452614898816020860160208601614d8f565b601f01601f19169290920160200192915050565b6000815160a084526148c160a0850182614880565b6020848101516001600160a01b031690860152604080850151908601526060808501519086015260809384015193909401929092525090919050565b60609190911b6001600160601b031916815260140190565b60008251614927818460208701614d8f565b9190910192915050565b60008451614943818460208901614d8f565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b6060815260006149e0606083018661480e565b82810360208401526149f28186614851565b91505060018060a01b0383166040830152949350505050565b604081526000614a1e6040830185614851565b8281036020840152613557818561480e565b821515815260406020820152600061359f6040830184614851565b60208152600061355b6020830184614880565b604081526000614a716040830185614880565b90508260208301529392505050565b918252602082015260400190565b6020808252818101527f556e69737761705633436f6e6e6563746f723a207a65726f2061646472657373604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b845181526020808601516001600160a01b031690820152604080860151610180830191614b3d90840182614801565b506060860151614b54606084018262ffffff169052565b506080860151614b69608084018260020b9052565b5060a0860151614b7e60a084018260020b9052565b5060c086015160c083015260e086015160e083015261010080870151614ba682850182614801565b505084610120830152836101408301528261016083015295945050505050565b60208152600061355b60208301846148ac565b600061016082019050614bed828451614801565b6020830151614bff6020840182614801565b506040830151614c16604084018262ffffff169052565b506060830151614c2b606084018260020b9052565b506080830151614c40608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614c7e82850182614801565b505061014092830151919092015290565b9283526020830191909152604082015260600190565b60405161012081016001600160401b0381118282101715614cc857614cc8614e58565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614cf657614cf6614e58565b604052919050565b60006001600160401b03821115614d1757614d17614e58565b5060051b60200190565b60008219821115614d3457614d34614e42565b500190565b600082614d5457634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614d7357614d73614e42565b500290565b600082821015614d8a57614d8a614e42565b500390565b60005b83811015614daa578181015183820152602001614d92565b83811115610aa05750506000910152565b600081614dca57614dca614e42565b506000190190565b600181811c90821680614de657607f821691505b60208210811415610bf457634e487b7160e01b600052602260045260246000fd5b6000600019821415614e1b57614e1b614e42565b5060010190565b600060ff821660ff811415614e3957614e39614e42565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146128bd57600080fd5b80151581146128bd57600080fd5b8060020b81146128bd57600080fd5b6001600160801b03811681146128bd57600080fd5b62ffffff811681146128bd57600080fdfea8f0cd61c43580e486a405385f53216ce45d7544a1e6a9187d479fe0ae24ed22a7a3c462ea5cf8a25c56064b25f60dc8dc6f9c22fe713da4044e8131ac28d483a2646970667358221220c0bf6c7bd0937e65bea5ae581304072c7dd1606cb40799f3290569ef02c3fb7d64736f6c63430008040033