10 txs
32 calls
constructor
constructor(address utilsAdr)
functions
contractBalance
viewfunction contractBalance(address token) view returns (uint256 balance)
controller
viewfunction controller() view returns (address)
correctPriceDirection
purefunction correctPriceDirection(address base, address quote, uint160 sqrtPriceX96) pure returns (uint160 sqrtPriceX96Corrected)
factory
viewfunction factory() view returns (address)
funder
viewfunction funder() view returns (address)
getController
viewfunction getController() view returns (address _controller)
getFunder
viewfunction getFunder() view returns (address _funder)
getSqrtPriceX96FromPrice
purefunction getSqrtPriceX96FromPrice(int8 decimalDiff, uint80 price_12Decimals) pure returns (uint160 sqrtPriceX96)
getTotalValueEth12
viewfunction getTotalValueEth12() view returns (uint128 valueEth12)
getTotalValueUsd12
viewfunction getTotalValueUsd12() view returns (uint128 valueUsd12)
getUsd12ValueIn
viewfunction getUsd12ValueIn(address token) view returns (uint128 valueUsd12)
indexFromPositionId
viewfunction indexFromPositionId(uint256) view returns (uint8)
indexFromTokenAddress
viewfunction indexFromTokenAddress(address) view returns (uint8)
isTokenApprovedForSwap
viewfunction isTokenApprovedForSwap(address) view returns (bool)
manager
viewfunction manager() view returns (address)
nLiquidityPositions
viewfunction nLiquidityPositions() view returns (uint8)
nTokensHeld
viewfunction nTokensHeld() view returns (uint8)
numLiquidityPositionsByToken
viewfunction numLiquidityPositionsByToken(address) view returns (uint16)
owner
viewfunction owner() view returns (address)
positions
viewfunction positions(uint256) view returns (address pool, uint256 lastFeeX128, uint256 tokenId, address base, address quote)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
swapRouter
viewfunction swapRouter() view returns (address)
tokensHeld
viewfunction tokensHeld(uint256) view returns (address)
utils
viewfunction utils() view returns (address)
validEmergencyTokens
viewfunction validEmergencyTokens(address) view returns (bool)
addEmergencyTokens
nonpayablefunction addEmergencyTokens(address[] tokens)
closeLiquidity
nonpayablefunction closeLiquidity(uint256 tokenId)
collectFees
nonpayablefunction collectFees(uint256 tokenId)
createV3Position
nonpayablefunction createV3Position(address pool, address base, address quote, uint80 lowPrice12, uint80 highPrice12, uint256 toAdd) returns (uint256 tokenId, uint8 idx)
depositEth
payablefunction depositEth() payable
depositToken
nonpayablefunction depositToken(address token, uint256 amount)
destroyPosition
nonpayablefunction destroyPosition(uint256 tokenId)
emergencyCircuitBreaker
nonpayablefunction emergencyCircuitBreaker(address storeOfValueToken)
fillLiquidity
nonpayablefunction fillLiquidity(uint256 positionId)
lockEmergencyTokens
nonpayablefunction lockEmergencyTokens()
obtainTokens
nonpayablefunction obtainTokens(address token0, address token1, uint256 amount0, uint256 amount1)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address token)
setController
nonpayablefunction setController(address newController)
setFunder
nonpayablefunction setFunder(address newFunder)
setUtils
nonpayablefunction setUtils(address utilsAdr)
swapTokens
nonpayablefunction swapTokens(address from, address to, uint256 maxIn, uint256 maxOut, uint24 slippageE6) returns (uint256 amountIn, uint256 amountOut)
swapTokensInto
nonpayablefunction swapTokensInto(address tokenFrom, address tokenTo, uint256 maxIn, uint256 maxOut) returns (uint256 tokensIn, uint256 tokensOut)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawEth
nonpayablefunction withdrawEth(address destination, uint256 amount)
withdrawLiquidity
nonpayablefunction withdrawLiquidity(uint256 tokenId)
withdrawToken
nonpayablefunction withdrawToken(address token, address destination, uint256 amount)
events
ControllerSet
event ControllerSet(address newController, address oldController)
Deposited
event Deposited(address token, uint256 amount)
EmergencyCircuitBreakerFlipped
event EmergencyCircuitBreakerFlipped(address storeOfValueToken)
FunderSet
event FunderSet(address newController, address oldController)
LiquidityFeesCollected
event LiquidityFeesCollected(uint256 poolPosition, address base, address quote, uint256 baseTaken, uint256 quoteTaken)
LiquidityModified
event LiquidityModified(uint256 poolPosition, address base, address quote, int128 liquidityChange)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PositionBurned
event PositionBurned(uint256 poolPosition, address base, address quote, uint256 baseTaken, uint256 quoteTaken)
PositionMinted
event PositionMinted(uint256 poolPosition, address base, address quote, uint80 minPrice, uint80 maxPrice, uint256 toAdd)
TokensSwapped
event TokensSwapped(address from, address to, uint256 fromAmt, uint256 toAmt)
Withdrawn
event Withdrawn(address token, uint256 amount)
errors
No errors.
creation bytecode
0x61010060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a0527388e6a0c2ddd26feeb64f039a2c41296fcb3f564060c05273c36442b4a4522e871399cd717abdd847ab11fe8860e052600e805460ff199081169091556038805482169055603b8054909116905534801561008e575f80fd5b506040516162573803806162578339810160408190526100ad916104d0565b6100b633610331565b6080516001600160a01b039081165f908152600160208190526040808320805460ff19908116841790915560a05190941680845281842080548616841790559280527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb498054909416909117909255905163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f19602482015263095ea7b3906044016020604051808303815f875af1158015610176573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019a91906104fd565b5060a05160e05160405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af11580156101ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021191906104fd565b5060805160405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b039091169063095ea7b3906044016020604051808303815f875af1158015610274573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029891906104fd565b5060805160e05160405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af11580156102eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f91906104fd565b5061031933610380565b610322336103e7565b61032b81610447565b5061051c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610388610471565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a91015b60405180910390a15050565b6103ef610471565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691016103db565b61044f610471565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146104ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b5f602082840312156104e0575f80fd5b81516001600160a01b03811681146104f6575f80fd5b9392505050565b5f6020828403121561050d575f80fd5b815180151581146104f6575f80fd5b60805160a05160c05160e051615c016106565f395f818161057b015281816112c901528181611613015281816118fa01528181611b3d01528181611c6901528181612354015281816128e30152818161354f01528181613de4015261505501525f50505f8181610cd501528181610d2101528181610d9a01528181610e0d01528181610f1f01528181610fbc0152818161100b0152818161119101528181611e670152818161218201528181612629015281816126de015281816127aa01528181612aff01528181612ba10152818161342b01528181613a1001528181613a3f0152818161409001526140f201525f8181611eab0152818161221601528181612669015281816126b40152818161338f01528181613a6901528181613b4201528181613e9601528181613f8f0152613ff10152615c015ff3fe6080604052600436106102e5575f3560e01c8063677342ce11610181578063b17acdcd116100d4578063c4b19b5411610083578063f2fde38b11610060578063f2fde38b1461097a578063f60b36e314610999578063f77c4791146109b857005b8063c4b19b5414610900578063c53b77021461091f578063df2a558b1461094c57005b8063bf0e622b116100b1578063bf0e622b14610870578063c31c9c07146108b2578063c45a0155146108d957005b8063b17acdcd14610819578063b3a5794314610838578063bc3291981461085757005b80638da5cb5b116101305780639a7fe3a11161010d5780639a7fe3a1146107b85780639ba69249146107d7578063a9e88b8f146107eb57005b80638da5cb5b1461072857806392eefe9b1461074457806399fbab881461076357005b8063715018a61161015e578063715018a6146106d857806381720479146106ec5780638abb98451461070b57005b8063677342ce1461066457806369953501146106835780636a0f27c2146106a257005b8063329aa41411610239578063481c6a75116101e85780634a2539c3116101c55780634a2539c3146105fa5780635a29638d1461061957806363011d1a1461063857005b8063481c6a751461056a578063495915d31461059d57806349c69fd8146105bc57005b806339040ed11161021657806339040ed11461050957806342d9843e14610534578063439370b11461056257005b8063329aa414146104ac57806332c4171d146104cb578063338b5dea146104ea57005b8063145a6ae0116102955780631b9a91a4116102725780631b9a91a4146104515780631fba9eda146104705780633018205f1461048f57005b8063145a6ae0146103da578063150b7a02146103f957806319cc33571461043d57005b806308092e9a116102c357806308092e9a146103685780630a861f2a1461039c5780630acc8cd1146103bb57005b8062ae3bf8146102ee57806301e336671461030d578063041ae8801461032c57005b366102ec57005b005b3480156102f9575f80fd5b506102ec610308366004615107565b6109d7565b348015610318575f80fd5b506102ec610327366004615122565b610b23565b348015610337575f80fd5b5060035461034b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610373575f80fd5b50610387610382366004615170565b610c6a565b6040805192835260208301919091520161035f565b3480156103a7575f80fd5b506102ec6103b63660046151cb565b61125e565b3480156103c6575f80fd5b506102ec6103d5366004615107565b611528565b3480156103e5575f80fd5b506102ec6103f43660046151cb565b611590565b348015610404575f80fd5b506104246104133660046151e2565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161035f565b348015610448575f80fd5b506102ec611a17565b34801561045c575f80fd5b506102ec61046b36600461527b565b611a2e565b34801561047b575f80fd5b5061034b61048a3660046152bc565b611ae1565b34801561049a575f80fd5b506002546001600160a01b031661034b565b3480156104b7575f80fd5b506102ec6104c63660046151cb565b611b25565b3480156104d6575f80fd5b506102ec6104e53660046152f7565b611d6c565b3480156104f5575f80fd5b506102ec61050436600461527b565b611f27565b348015610514575f80fd5b50600e546105229060ff1681565b60405160ff909116815260200161035f565b34801561053f575f80fd5b5061052261054e3660046151cb565b60396020525f908152604090205460ff1681565b6102ec61206a565b348015610575575f80fd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a8575f80fd5b506102ec6105b736600461533a565b6120a4565b3480156105c7575f80fd5b506105ea6105d6366004615107565b603a6020525f908152604090205460ff1681565b604051901515815260200161035f565b348015610605575f80fd5b506102ec6106143660046151cb565b612288565b348015610624575f80fd5b5060045461034b906001600160a01b031681565b348015610643575f80fd5b5061064c612610565b6040516001600160801b03909116815260200161035f565b34801561066f575f80fd5b5061064c61067e3660046151cb565b612c3a565b34801561068e575f80fd5b506102ec61069d366004615107565b612dae565b3480156106ad575f80fd5b506106c16106bc3660046153ab565b612dd8565b6040805192835260ff90911660208301520161035f565b3480156106e3575f80fd5b506102ec61328c565b3480156106f7575f80fd5b506103876107063660046152f7565b61329f565b348015610716575f80fd5b506003546001600160a01b031661034b565b348015610733575f80fd5b505f546001600160a01b031661034b565b34801561074f575f80fd5b506102ec61075e366004615107565b6132bd565b34801561076e575f80fd5b5061078261077d3660046151cb565b61331c565b604080516001600160a01b039687168152602081019590955284019290925283166060830152909116608082015260a00161035f565b3480156107c3575f80fd5b5061064c6107d2366004615107565b61335f565b3480156107e2575f80fd5b5061064c613410565b3480156107f6575f80fd5b506105ea610805366004615107565b60016020525f908152604090205460ff1681565b348015610824575f80fd5b506102ec6108333660046151cb565b6134d3565b348015610843575f80fd5b5061034b610852366004615420565b61375c565b348015610862575f80fd5b506038546105229060ff1681565b34801561087b575f80fd5b5061089f61088a366004615107565b60056020525f908152604090205461ffff1681565b60405161ffff909116815260200161035f565b3480156108bd575f80fd5b5061034b73e592427a0aece92de3edee1f18e0157c0586156481565b3480156108e4575f80fd5b5061034b731f98431c8ad98523631ae4a59f267346ea31f98481565b34801561090b575f80fd5b5061034b61091a3660046151cb565b61379d565b34801561092a575f80fd5b5061093e610939366004615107565b6137bc565b60405190815260200161035f565b348015610957575f80fd5b50610522610966366004615107565b600f6020525f908152604090205460ff1681565b348015610985575f80fd5b506102ec610994366004615107565b61383e565b3480156109a4575f80fd5b506102ec6109b3366004615107565b6138b7565b3480156109c3575f80fd5b5060025461034b906001600160a01b031681565b6109df613ae7565b6001600160a01b0381165f908152600f6020526040902054600e5460ff918216911681101580610a385750816001600160a01b031660068260ff1660088110610a2a57610a2a615468565b01546001600160a01b031614155b610a895760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74202772657363756527206465706f73697473000000000000000060448201526064015b60405180910390fd5b816001600160a01b031663a9059cbb610aa95f546001600160a01b031690565b610ab2856137bc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610afa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1e919061548b565b505050565b6003546001600160a01b03163314610b6c5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdc919061548b565b610c1a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610a80565b610c2383613b40565b604080516001600160a01b0385168152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a1505050565b6002545f9081906001600160a01b0316331480610c8657503330145b610cc15760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b6001600160a01b038716158015610d0957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b15610d9857838510610d1b5783610d1d565b845b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015610d78575f80fd5b505af1158015610d8a573d5f803e3d5ffd5b508594506112549350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316148015610de057506001600160a01b038616155b15610e7557838510610df25783610df4565b845b604051632e1a7d4d60e01b8152600481018290529092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015610e56575f80fd5b505af1158015610e68573d5f803e3d5ffd5b5084935061125492505050565b600480546040516364aa79a360e01b81526001600160a01b038a8116938201939093528883166024820152604481018890526064810187905262ffffff861660848201525f92839216906364aa79a39060a401606060405180830381865afa158015610ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0791906154a4565b90955090925090506001600160a01b038916610f8e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015610f76575f80fd5b505af1158015610f88573d5f803e3d5ffd5b50505050505b5f6040518061010001604052805f6001600160a01b03168c6001600160a01b031614610fba578b610fdc565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031681526020015f6001600160a01b03168b6001600160a01b031614611009578a61102b565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03168152602001846001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611075573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109991906154e3565b62ffffff168152602001306001600160a01b031681526020014281526020018681526020018381526020015f6001600160a01b0316815250905073e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663414bf389826040518263ffffffff1660e01b815260040161111391906154fe565b6020604051808303815f875af115801561112f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611153919061558f565b93506001600160a01b038a161561116d5761116d8a613b40565b6001600160a01b0389166111f557604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b1580156111da575f80fd5b505af11580156111ec573d5f803e3d5ffd5b505050506111fe565b6111fe89613d15565b604080516001600160a01b03808d1682528b166020820152908101869052606081018590527f25f1d03755df23c30e25db2dbd3891e31ce084bdfbfc46f9fe5e446ee5f9b2d49060800160405180910390a15050505b9550959350505050565b6003546001600160a01b031633146112a75760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b604051632142170760e11b8152306004820152336024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e906064015f604051808303815f87803b158015611312575f80fd5b505af1158015611324573d5f803e3d5ffd5b5050505f8281526039602052604081205460ff1691506010826008811061134d5761134d615468565b60385460059190910291909101915060ff9081169083161080156113745750828160020154145b15610b1e5760038101546001600160a01b03165f908152600560205260408120805461ffff16916113a4836155ba565b82546101009290920a61ffff81810219909316918316021790915560048301546001600160a01b03165f908152600560205260408120805490921692506113ea836155ba565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f61141a836155d6565b82546101009290920a60ff81810219909316918316021790915560385416159050610b1e5760385460109060ff166008811061145857611458615468565b6005020160108360ff166008811061147257611472615468565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558160395f601060ff8416600881106114f7576114f7615468565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff160217905550505050565b611530613ae7565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691015b60405180910390a15050565b6002546001600160a01b031633146115d95760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b6115e2816134d3565b5f8181526039602052604081205460ff16906010826008811061160757611607615468565b6005020190505f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88886040518263ffffffff1660e01b815260040161165f91815260200190565b61018060405180830381865afa15801561167b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169f919061561a565b505050505096509650509550955050505f855f015f9054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611701573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117259190615715565b50505050505090505f611737866137bc565b9050611762611745866137bc565b600160c01b61175d6001600160a01b03861680615798565b6141e2565b61176c90826157af565b90505f61178a61177b8661428c565b6117848661428c565b8461469f565b6004549091505f9081906001600160a01b031663c72e160b866117ac8a61428c565b6117b58a61428c565b60646117cb6001600160801b038a166062615798565b6117d591906157d6565b6040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0390911660648201526084016040805180830381865afa158015611835573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185991906157e9565b9150915061186989898484611d6c565b5f6040518060c001604052808e81526020016118848c6137bc565b81526020016118928b6137bc565b81525f6020808301829052604080840183905242606094850152805163219f5d1760e01b81528551600482015291850151602483015284015160448201529183015160648301526080830151608483015260a083015160a48301529192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063219f5d179060c4016060604051808303815f875af1158015611940573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611964919061580b565b8095508196508293505050507f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c8e8d6003015f9054906101000a90046001600160a01b03168e6004015f9054906101000a90046001600160a01b031688856119cc9190615826565b6040516119ff94939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a15050505050505050505050505050565b611a1f613ae7565b603b805460ff19166001179055565b6003546001600160a01b03163314611a775760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611aaa573d5f803e3d5ffd5b50604080515f8152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59101611584565b5f80611b078369ffffffffffffffffffff16600160c01b86600c0160ff16600a0a6141e2565b9050611b1281612c3a565b6001600160801b03169150505b92915050565b60405163133f757160e31b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611b8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611baf919061561a565b5050505f8b815260396020526040812054929a5060ff90921698509096506010955087945050600884109250611bea91505057611bea615468565b6005020190506001600160801b03831615611d66576040805160a0810182528581526001600160801b03858116602083019081525f8385018181526060850191825242608086019081529551630624e65f60e11b81528551600482015292519093166024830152915160448201529051606482015291516084830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630c49ccbe9060a40160408051808303815f875af1158015611cb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cda91906157e9565b5050600382015460048301547f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c9187916001600160a01b039182169116611d2088615845565b604051611d5394939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a1611d64856134d3565b505b50505050565b5f611d76856137bc565b90505f611d82856137bc565b9050838210158015611d945750828110155b15611da0575050611d66565b5f805f848710611db257848703611db4565b5f5b9150838610611dc557838603611dc7565b5f5b90508685108015611dd757508584115b15611e195785840392505f611dfc898b86620f4240620f7cd888025b04613a98610c6a565b91505080831115611e0f57808303611e11565b5f5b925050611e60565b8584108015611e2757508685115b15611e605786850392505f611e478a8a86620f4240620f7cd88702611df3565b91505080821115611e5a57808203611e5c565b5f5b9150505b611e8d89897f00000000000000000000000000000000000000000000000000000000000000008585614708565b9092509050611e9f89895f8585614708565b9092509050611ed189897f00000000000000000000000000000000000000000000000000000000000000008585614708565b909250905081158015611ee2575080155b611f1c5760405162461bcd60e51b815260206004820152600b60248201526a155b99195c999d5b99195960aa1b6044820152606401610a80565b505050505050505050565b6003546001600160a01b03163314611f705760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303815f875af1158015611fc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe4919061548b565b6120225760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610a80565b61202b82613d15565b604080516001600160a01b0384168152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c49101611584565b604080515f81523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b6120ac613ae7565b603b5460ff16156120e85760405162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b6044820152606401610a80565b5f6120f1613410565b600802662386f26fc100000190505f5b60ff8116831115611d66575f84848360ff1681811061212257612122615468565b90506020020160208101906121379190615107565b6001600160a01b038082165f90815260016020819052604091829020805460ff19169091179055600480549151633d7e854360e11b8152939450911691637afd0a86916121aa9185917f000000000000000000000000000000000000000000000000000000000000000091899101615872565b6020604051808303815f875af11580156121c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ea919061589e565b5060048054604051633d7e854360e11b81526001600160a01b0390911691637afd0a869161223e9185917f0000000000000000000000000000000000000000000000000000000000000000915f9101615872565b6020604051808303815f875af115801561225a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227e919061589e565b5050600101612101565b6002546001600160a01b031633146122d15760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b5f8181526039602052604081205460ff1690601082600881106122f6576122f6615468565b60050201600381015460048201549192506001600160a01b0390811691165f61231e836137bc565b90505f61232a836137bc565b905061233587611b25565b61233e876134d3565b604051630852cd8d60e31b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024015f604051808303815f87803b15801561239d575f80fd5b505af11580156123af573d5f803e3d5ffd5b505050505f826123be866137bc565b6123c891906158b9565b90505f826123d5866137bc565b6123df91906158b9565b6001600160a01b0387165f908152600560205260408120805492935061ffff909216919061240c836155ba565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b0387165f9081526005602052604081208054909216925061244e836155ba565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f61247e836155d6565b82546101009290920a60ff818102199093169183160217909155603854161590506125885760385460109060ff16600881106124bc576124bc615468565b6005020160108960ff16600881106124d6576124d6615468565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558760395f601060ff84166008811061255b5761255b615468565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505b6103e882101561259b5761259b86613b40565b6103e88110156125ae576125ae85613b40565b604080518a81526001600160a01b038881166020830152871681830152606081018490526080810183905290517f5501b833962ceaf131361ff8d59683c382ab00f523035d0fc4c2ffc19bef3a459181900360a00190a1505050505050505050565b5f61261e620f4240476157d6565b9050620f424061264d7f00000000000000000000000000000000000000000000000000000000000000006137bc565b61265791906157d6565b61266190826158cc565b90505f61268d7f00000000000000000000000000000000000000000000000000000000000000006137bc565b905061c35081111561276357600480546040516332d2f46960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093527f000000000000000000000000000000000000000000000000000000000000000083166024820152604481018490529116906365a5e8d290606401602060405180830381865afa158015612732573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061275691906158eb565b61276090836158cc565b91505b5f5b600e5460ff90811690821610156128c8576004546001600160a01b03166365a5e8d2600660ff84166008811061279d5761279d615468565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000600660ff8616600881106127df576127df615468565b01546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612824573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612848919061558f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa158015612898573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128bc91906158eb565b90920191600101612765565b505f5b60385460ff9081169082161015612c35575f805f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab8860108860ff166008811061292657612926615468565b60050201600201546040518263ffffffff1660e01b815260040161294c91815260200190565b61018060405180830381865afa158015612968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061298c919061561a565b50505050975097509750509650965050505f60108760ff16600881106129b4576129b4615468565b600502015460408051633850c7bd60e01b815290516001600160a01b0390921691633850c7bd9160048082019260e0929091908290030181865afa1580156129fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a229190615715565b50506004549495505f948594506001600160a01b0316925063c72e160b9150859050612a4d8961428c565b612a568961428c565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b03871660648201526084016040805180830381865afa158015612ab6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ada91906157e9565b600480546040516332d2f46960e11b81526001600160a01b038d8116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810185905293955091935016906365a5e8d290606401602060405180830381865afa158015612b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7c91906158eb565b600480546040516332d2f46960e11b81526001600160a01b038b8116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810185905292909d019c16906365a5e8d290606401602060405180830381865afa158015612bf9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c1d91906158eb565b909a01995050600190960195506128cb945050505050565b505090565b5f815f03612c4957505f919050565b816001600160801b8210612c625760809190911c9060401b5b680100000000000000008210612c7d5760409190911c9060201b5b6401000000008210612c945760209190911c9060101b5b620100008210612ca95760109190911c9060081b5b6101008210612cbd5760089190911c9060041b5b60108210612cd05760049190911c9060021b5b60088210612cdc5760011b5b6001818581612ced57612ced6157c2565b048201901c90506001818581612d0557612d056157c2565b048201901c90506001818581612d1d57612d1d6157c2565b048201901c90506001818581612d3557612d356157c2565b048201901c90506001818581612d4d57612d4d6157c2565b048201901c90506001818581612d6557612d656157c2565b048201901c90506001818581612d7d57612d7d6157c2565b0491909101901c5f612d8f82866157d6565b9050808210612d9e5780612da0565b815b95945050505050565b919050565b612db6613ae7565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002545f9081906001600160a01b03163314612e255760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a80565b603854600860ff90911610612e6c5760405162461bcd60e51b815260206004820152600d60248201526c4f7574206f66206d656d6f727960981b6044820152606401610a80565b856001600160a01b0316876001600160a01b031603612eba5760405162461bcd60e51b815260206004820152600a60248201526929b0b6b2903a37b5b2b760b11b6044820152606401610a80565b5f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1b9190615904565b886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f7b9190615904565b612f85919061591d565b90505f612f978989610852858b611ae1565b90505f612fa98a8a610852868b611ae1565b90505f8b6001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015612fe8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061300c9190615715565b5050505050509050816001600160a01b0316836001600160a01b03161115613032579091905b5f61303e84848a61469f565b90505f6130508e8e8e86898988614807565b6001600160a01b038f165f9081526005602052604081208054939b5091935061ffff9092169161307f8361593d565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b038e165f908152600560205260408120805490921692506130c18361593d565b91906101000a81548161ffff021916908361ffff160217905550506040518060a001604052808f6001600160a01b031681526020018281526020018981526020018e6001600160a01b031681526020018d6001600160a01b0316815250601060385f9054906101000a900460ff1660ff166008811061314257613142615468565b82516005919091029190910180546001600160a01b03199081166001600160a01b0393841617825560208085015160018401556040808601516002850155606086015160038501805485169187169190911790556080909501516004909301805490921692909316919091179055603880545f8c81526039909352928220805460ff94851660ff19909116179055805490921698508891906131e38361595d565b91906101000a81548160ff021916908360ff160217905550507f29cd472535c058e9f744cc9cead6f8c38cbe5ea230674d825060f275884bdd72888e8e8e8e8e604051613273969594939291909586526001600160a01b03948516602087015292909316604085015269ffffffffffffffffffff908116606085015291909116608083015260a082015260c00190565b60405180910390a1505050505050965096945050505050565b613294613ae7565b61329d5f614a3d565b565b5f806132b086868686613a98610c6a565b9150915094509492505050565b6132c5613ae7565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a9101611584565b6010816008811061332b575f80fd5b6005020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092908116911685565b5f8061336a836137bc565b600480546040516332d2f46960e11b81526001600160a01b03878116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810184905292935016906365a5e8d290606401602060405180830381865afa1580156133e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340991906158eb565b9392505050565b60048054604051633a92f14760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093525f9264e8d4a5100092169063ea4bc51c90602401602060405180830381865afa158015613482573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134a69190615972565b69ffffffffffffffffffff166134ba612610565b6134c4919061598d565b6134ce91906159af565b905090565b5f818152603960209081526040808320548151608081018352858152309381019384526001600160801b0381840181815260608301828152945163fc6f786560e01b81528351600482015295516001600160a01b039081166024880152905182166044870152935116606485015260ff909116939092909182917f00000000000000000000000000000000000000000000000000000000000000009091169063fc6f78659060840160408051808303815f875af1158015613596573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135ba91906157e9565b915091505f60108560ff16600881106135d5576135d5615468565b600502018054600482015460038301549293506001600160a01b03918216925f9291821691161061366557816001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa15801561363c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613660919061558f565b6136c5565b816001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c5919061558f565b60018401819055600484015460038501549192506001600160a01b03908116911611156136f0579293925b60038301546004840154604080518b81526001600160a01b03938416602082015292909116828201526060820187905260808201869052517ff75febe5036272e29c10c008070a13657798560aaa45a46b302b112d865ff1f29181900360a00190a15050505050505050565b5f826001600160a01b0316846001600160a01b0316101561377e575080613409565b6137956001600160a01b038316600160c01b6157d6565b949350505050565b600681600881106137ac575f80fd5b01546001600160a01b0316905081565b5f6001600160a01b03821615613837576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa15801561380e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613832919061558f565b611b1f565b4792915050565b613846613ae7565b6001600160a01b0381166138ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a80565b6138b481614a3d565b50565b6002546001600160a01b03163314806138d957505f546001600160a01b031633145b6139155760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610a80565b6001600160a01b0381165f9081526001602052604090205460ff1661396c5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610a80565b60385460ff165b60ff8116156139d657604051634a2539c360e01b815260ff5f199290920191821660048201523090634a2539c3906024015f604051808303815f87803b1580156139bb575f80fd5b505af11580156139cd573d5f803e3d5ffd5b50505050613973565b50600e5460ff165b60ff811615613a39575f1901613a34600660ff831660088110613a0357613a03615468565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000614a8c565b6139de565b50613a647f000000000000000000000000000000000000000000000000000000000000000082614a8c565b613a8e7f000000000000000000000000000000000000000000000000000000000000000082614a8c565b613a985f82614a8c565b600280546001600160a01b03191690556040516001600160a01b03821681527f2cc79b200fc7fdf7af6be005fc77813bfacedb82066816356eed5b7df46194709060200160405180910390a150565b5f546001600160a01b0316331461329d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a80565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161480613b8757506001600160a01b038116155b15613b8f5750565b6001600160a01b0381165f908152600f6020526040902054600e5460ff918216911681108015613be75750816001600160a01b031660068260ff1660088110613bda57613bda615468565b01546001600160a01b0316145b8015613bfb57506064613bf9836137bc565b105b8015613c2057506001600160a01b0382165f9081526005602052604090205461ffff16155b15613d1157600e805460ff16905f613c37836155d6565b82546101009290920a60ff818102199093169183160217909155600e54161580159150613c6c5750600e5460ff828116911614155b15613d1157600e5460069060ff1660088110613c8a57613c8a615468565b01546001600160a01b0316600660ff831660088110613cab57613cab615468565b0180546001600160a01b0319166001600160a01b039290921691909117905580600f5f600660ff841660088110613ce457613ce4615468565b01546001600160a01b0316815260208101919091526040015f20805460ff191660ff929092169190911790555b5050565b6001600160a01b03811615801590613d4557506001600160a01b0381165f908152603a602052604090205460ff16155b15613e815760405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015613da8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dcc919061548b565b5060405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f19602483015282169063095ea7b3906044016020604051808303815f875af1158015613e39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5d919061548b565b506001600160a01b0381165f908152603a60205260409020805460ff191660011790555b6001600160a01b03811615801590613ecb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b156138b4576001600160a01b0381165f818152600f602052604090205460069060ff1660088110613efe57613efe615468565b01546001600160a01b0316141580613f365750600e546001600160a01b0382165f908152600f602052604090205460ff918216911610155b156138b457600e54600860ff90911610613f825760405162461bcd60e51b815260206004820152600d60248201526c4f7574206f66206d656d6f727960981b6044820152606401610a80565b5f613f8b613410565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461408e5760048054604051633d7e854360e11b81526001600160a01b0390911691637afd0a86916140199186917f000000000000000000000000000000000000000000000000000000000000000091879101615872565b6020604051808303815f875af1925050508015614053575060408051601f3d908101601f191682019092526140509181019061589e565b60015b61408c573d808015614080576040519150601f19603f3d011682016040523d82523d5f602084013e614085565b606091505b505061408e565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461415c5760048054604051633d7e854360e11b81526001600160a01b0390911691637afd0a869161411a9186917f000000000000000000000000000000000000000000000000000000000000000091879101615872565b6020604051808303815f875af1158015614136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415a919061589e565b505b600e54829060069060ff166008811061417757614177615468565b0180546001600160a01b039283166001600160a01b0319909116179055600e80549184165f908152600f60205260408120805460ff191660ff9485161790558154909216916141c58361595d565b91906101000a81548160ff021916908360ff160217905550505050565b5f80805f19858709858702925082811083820303915050805f03614216575f841161420b575f80fd5b508290049050613409565b808411614221575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f805f8360020b126142a1578260020b6142ae565b8260020b6142ae906159dc565b90506142bd620d89e7196159f6565b62ffffff168111156142f55760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610a80565b5f816001165f0361430a57600160801b61431c565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561435b576080614356826ffff97272373d413259a46990580e213a615798565b901c90505b6004821615614385576080614380826ffff2e50f5f656932ef12357cf3c7fdcc615798565b901c90505b60088216156143af5760806143aa826fffe5caca7e10e4e61c3624eaa0941cd0615798565b901c90505b60108216156143d95760806143d4826fffcb9843d60f6159c9db58835c926644615798565b901c90505b60208216156144035760806143fe826fff973b41fa98c081472e6896dfb254c0615798565b901c90505b604082161561442d576080614428826fff2ea16466c96a3843ec78b326b52861615798565b901c90505b6080821615614457576080614452826ffe5dee046a99a2a811c461f1969c3053615798565b901c90505b61010082161561448257608061447d826ffcbe86c7900a88aedcffc83b479aa3a4615798565b901c90505b6102008216156144ad5760806144a8826ff987a7253ac413176f2b074cf7815e54615798565b901c90505b6104008216156144d85760806144d3826ff3392b0822b70005940c7a398e4b70f3615798565b901c90505b6108008216156145035760806144fe826fe7159475a2c29b7443b29c7fa6e889d9615798565b901c90505b61100082161561452e576080614529826fd097f3bdfd2022b8845ad8f792aa5825615798565b901c90505b612000821615614559576080614554826fa9f746462d870fdf8a65dc1f90e061e5615798565b901c90505b61400082161561458457608061457f826f70d869a156d2a1b890bb3df62baf32f7615798565b901c90505b6180008216156145af5760806145aa826f31be135f97d08fd981231505542fcfa6615798565b901c90505b620100008216156145db5760806145d6826f09aa508b5b7a84e1c677de54f3e99bc9615798565b901c90505b62020000821615614606576080614601826e5d6af8dedb81196699c329225ee604615798565b901c90505b6204000082161561463057608061462b826d2216e584f5fa1ea926041bedfe98615798565b901c90505b62080000821615614658576080614653826b048a170391f7dc42444e8fa2615798565b901c90505b5f8460020b13156146715761466e815f196157d6565b90505b61468064010000000082615a0e565b1561468c57600161468e565b5f5b6137959060ff16602083901c6157af565b5f826001600160a01b0316846001600160a01b031611156146be579192915b5f6146e9856001600160a01b0316856001600160a01b03166c010000000000000000000000006141e2565b9050612da083826146fa8888615a21565b6001600160a01b03166141e2565b5f80846001600160a01b0316876001600160a01b03161415801561473e5750846001600160a01b0316866001600160a01b031614155b156147fb575f61474d866137bc565b9050620f4240811015801561476157505f85115b156147b1575f80614791888b85620f424061477f8c620f7cd8615798565b61478991906157d6565b613a98610c6a565b915091508183039250868110156147aa578087036147ac565b5f5b965050505b620f424081101580156147c357505f84115b156147f9575f6147e0878984620f424061477f8a620f7cd8615798565b915050848110156147f3578085036147f5565b5f5b9450505b505b50919590945092505050565b5f805f896001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614846573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061486a9190615a40565b62ffffff1690506018818260020b61488189614b5d565b60020b81614891576148916157c2565b050262ffffff1668ffffffffffffffffff16901b811790506030818260020b6148b988614b5d565b60020b816148c9576148c96157c2565b050262ffffff1668ffffffffffffffffff16901b8117905061494e89898987858f6001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015614925573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061494991906154e3565b614e9f565b9250876001600160a01b0316896001600160a01b0316106149ce57896001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156149a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149c9919061558f565b614a2e565b896001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa158015614a0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a2e919061558f565b91505097509795505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f614a96836137bc565b9050816001600160a01b0316836001600160a01b031614610b1e57604051630404974d60e11b81526001600160a01b03808516600483015283166024820152604481018290525f196064820152620124f8608482015230906308092e9a9060a40160408051808303815f875af1925050508015614b30575060408051601f3d908101601f19168201909252614b2d918101906157e9565b60015b611d64573d808015611d64576040519150601f19603f3d011682016040523d82523d5f602084013e611d64565b5f6401000276a36001600160a01b03831610801590614b98575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b614bc85760405162461bcd60e51b81526020600482015260016024820152602960f91b6044820152606401610a80565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110614c7057614c66607f826158b9565b83901c9150614c81565b614c7b81607f6158b9565b83901b91505b5f6040614c8f608084615a59565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c85614e119190615a78565b90505f6080614e306f028f6481ab7f045a5af012a19d003aaa84615a59565b901d90505f6080614e51846fdb2df09e81959a81455e260799a0632f615aa7565b901d90508060020b8260020b14614e9057886001600160a01b0316614e758261428c565b6001600160a01b03161115614e8a5781614e92565b80614e92565b815b9998505050505050505050565b5f80866001600160a01b0316886001600160a01b031611614ec05787614ec2565b865b90505f876001600160a01b0316896001600160a01b031611614ee45787614ee6565b885b6004549091505f9081906001600160a01b031663c72e160b8a614f1465ffffffffffff60188c901c1661428c565b614f2c60308c68ffffffffffffffffff16901c61428c565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b038b1660648201526084016040805180830381865afa158015614f8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614fb091906157e9565b91509150614fc084848484611d6c565b5f604051806101600160405280866001600160a01b03168152602001856001600160a01b031681526020018862ffffff16815260200160188a68ffffffffffffffffff16901c60020b815260200160308a68ffffffffffffffffff16901c60020b81526020018481526020018381526020015f81526020015f8152602001306001600160a01b031681526020014281525090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166388316456826040518263ffffffff1660e01b815260040161509f9190615ace565b6080604051808303815f875af11580156150bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906150df9190615b92565b50919e9d5050505050505050505050505050565b6001600160a01b03811681146138b4575f80fd5b5f60208284031215615117575f80fd5b8135613409816150f3565b5f805f60608486031215615134575f80fd5b833561513f816150f3565b9250602084013561514f816150f3565b929592945050506040919091013590565b62ffffff811681146138b4575f80fd5b5f805f805f60a08688031215615184575f80fd5b853561518f816150f3565b9450602086013561519f816150f3565b9350604086013592506060860135915060808601356151bd81615160565b809150509295509295909350565b5f602082840312156151db575f80fd5b5035919050565b5f805f805f608086880312156151f6575f80fd5b8535615201816150f3565b94506020860135615211816150f3565b935060408601359250606086013567ffffffffffffffff811115615233575f80fd5b8601601f81018813615243575f80fd5b803567ffffffffffffffff811115615259575f80fd5b88602082840101111561526a575f80fd5b959894975092955050506020019190565b5f806040838503121561528c575f80fd5b8235615297816150f3565b946020939093013593505050565b69ffffffffffffffffffff811681146138b4575f80fd5b5f80604083850312156152cd575f80fd5b8235805f0b81146152dc575f80fd5b915060208301356152ec816152a5565b809150509250929050565b5f805f806080858703121561530a575f80fd5b8435615315816150f3565b93506020850135615325816150f3565b93969395505050506040820135916060013590565b5f806020838503121561534b575f80fd5b823567ffffffffffffffff811115615361575f80fd5b8301601f81018513615371575f80fd5b803567ffffffffffffffff811115615387575f80fd5b8560208260051b840101111561539b575f80fd5b6020919091019590945092505050565b5f805f805f8060c087890312156153c0575f80fd5b86356153cb816150f3565b955060208701356153db816150f3565b945060408701356153eb816150f3565b935060608701356153fb816152a5565b9250608087013561540b816152a5565b9598949750929591949360a090920135925050565b5f805f60608486031215615432575f80fd5b833561543d816150f3565b9250602084013561544d816150f3565b9150604084013561545d816150f3565b809150509250925092565b634e487b7160e01b5f52603260045260245ffd5b80518015158114612da9575f80fd5b5f6020828403121561549b575f80fd5b6134098261547c565b5f805f606084860312156154b6575f80fd5b83516154c1816150f3565b602085015160409095015190969495509392505050565b8051612da981615160565b5f602082840312156154f3575f80fd5b815161340981615160565b5f610100820190506001600160a01b0383511682526001600160a01b03602084015116602083015262ffffff6040840151166040830152606083015161554f60608401826001600160a01b03169052565b506080830151608083015260a083015160a083015260c083015160c083015260e083015161558860e08401826001600160a01b03169052565b5092915050565b5f6020828403121561559f575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f61ffff8216806155cd576155cd6155a6565b5f190192915050565b5f60ff8216806155cd576155cd6155a6565b8051612da9816150f3565b8051600281900b8114612da9575f80fd5b80516001600160801b0381168114612da9575f80fd5b5f805f805f805f805f805f806101808d8f031215615636575f80fd5b8c516bffffffffffffffffffffffff81168114615651575f80fd5b9b5061565f60208e016155e8565b9a5061566d60408e016155e8565b995061567b60608e016155e8565b985061568960808e016154d8565b975061569760a08e016155f3565b96506156a560c08e016155f3565b95506156b360e08e01615604565b6101008e01516101208f0151919650945092506156d36101408e01615604565b91506156e26101608e01615604565b90509295989b509295989b509295989b565b805161ffff81168114612da9575f80fd5b805160ff81168114612da9575f80fd5b5f805f805f805f60e0888a03121561572b575f80fd5b8751615736816150f3565b9650615744602089016155f3565b9550615752604089016156f4565b9450615760606089016156f4565b935061576e608089016156f4565b925061577c60a08901615705565b915061578a60c0890161547c565b905092959891949750929550565b8082028115828204841417611b1f57611b1f6155a6565b80820180821115611b1f57611b1f6155a6565b634e487b7160e01b5f52601260045260245ffd5b5f826157e4576157e46157c2565b500490565b5f80604083850312156157fa575f80fd5b505080516020909101519092909150565b5f805f6060848603121561581d575f80fd5b6154c184615604565b6001600160801b038281168282160390811115611b1f57611b1f6155a6565b5f81600f0b6f7fffffffffffffffffffffffffffffff19810361586a5761586a6155a6565b5f0392915050565b6001600160a01b0393841681529190921660208201526001600160801b03909116604082015260600190565b5f602082840312156158ae575f80fd5b8151613409816150f3565b81810381811115611b1f57611b1f6155a6565b6001600160801b038181168382160190811115611b1f57611b1f6155a6565b5f602082840312156158fb575f80fd5b61340982615604565b5f60208284031215615914575f80fd5b61340982615705565b5f82810b9082900b03607f198112607f82131715611b1f57611b1f6155a6565b5f61ffff821661ffff8103615954576159546155a6565b60010192915050565b5f60ff821660ff8103615954576159546155a6565b5f60208284031215615982575f80fd5b8151613409816152a5565b6001600160801b038181168382160290811690818114615588576155886155a6565b5f6001600160801b038316806159c7576159c76157c2565b806001600160801b0384160491505092915050565b5f600160ff1b82016159f0576159f06155a6565b505f0390565b5f8160020b627fffff19810361586a5761586a6155a6565b5f82615a1c57615a1c6157c2565b500690565b6001600160a01b038281168282160390811115611b1f57611b1f6155a6565b5f60208284031215615a50575f80fd5b613409826155f3565b8181035f831280158383131683831282161715615588576155886155a6565b8082025f8212600160ff1b84141615615a9357615a936155a6565b8181058314821517611b1f57611b1f6155a6565b8082018281125f831280158216821582161715615ac657615ac66155a6565b505092915050565b81516001600160a01b0316815261016081016020830151615afa60208401826001600160a01b03169052565b506040830151615b11604084018262ffffff169052565b506060830151615b26606084018260020b9052565b506080830151615b3b608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151615b826101208401826001600160a01b03169052565b5061014092830151919092015290565b5f805f8060808587031215615ba5575f80fd5b84519350615bb560208601615604565b604086015160609096015194979096509250505056fea2646970667358221220845ebe51cb2fba9a4543f5cd154975be1def1e2474c5b06e5ec903ed5f45924264736f6c634300081a0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d