4 txs
5 calls
constructor
constructor()
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)
liquidityPositions
viewfunction liquidityPositions(uint256) view returns (uint256)
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)
permit2
viewfunction permit2() view returns (address)
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)
v4PoolManager
viewfunction v4PoolManager() view returns (address)
v4PositionIdToBase
viewfunction v4PositionIdToBase(uint256) view returns (address)
v4PositionIdToQuote
viewfunction v4PositionIdToQuote(uint256) view returns (address)
v4PositionManager
viewfunction v4PositionManager() view returns (address)
validEmergencyTokens
viewfunction validEmergencyTokens(address) view returns (bool)
addEmergencyTokens
nonpayablefunction addEmergencyTokens(address[] tokens)
collectFees
nonpayablefunction collectFees(uint256 positionId)
createPosition
nonpayablefunction createPosition(tuple key, address quote, uint80 lowPrice12, uint80 highPrice12, uint256 toAdd) returns (uint256 positionId)
depositEth
payablefunction depositEth() payable
depositToken
nonpayablefunction depositToken(address token, uint256 amount)
destroyPosition
nonpayablefunction destroyPosition(uint256 positionId)
emergencyCircuitBreaker
nonpayablefunction emergencyCircuitBreaker(address storeOfValueToken)
lockEmergencyTokens
nonpayablefunction lockEmergencyTokens()
modifyLiquidity
nonpayablefunction modifyLiquidity(uint256 positionId, uint256 newBaseBal, uint256 newQuoteBal)
obtainTokens
nonpayablefunction obtainTokens(address token0, address token1, uint256 amount0, uint256 amount1)
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)
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
0x60e060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a0527388e6a0c2ddd26feeb64f039a2c41296fcb3f564060c052600e805460ff199081169091556018805482169055601d80549091169055348015610075575f80fd5b5061007f33610306565b6080516001600160a01b039081165f908152600160208190526040808320805460ff19908116841790915560a05190941680845281842080548616841790559280527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb498054909416909117909255905163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f19602482015263095ea7b3906044016020604051808303815f875af115801561013f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610163919061047b565b5060a05160405163095ea7b360e01b81526e22d473030f116ddee9f6b43ac78ba360048201525f1960248201526001600160a01b039091169063095ea7b3906044016020604051808303815f875af11580156101c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101e5919061047b565b5060805160405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b039091169063095ea7b3906044016020604051808303815f875af1158015610248573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026c919061047b565b5060805160405163095ea7b360e01b81526e22d473030f116ddee9f6b43ac78ba360048201525f1960248201526001600160a01b039091169063095ea7b3906044016020604051808303815f875af11580156102ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ee919061047b565b506102f833610355565b610301336103bc565b6104a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61035d61041c565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a91015b60405180910390a15050565b6103c461041c565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691016103b0565b5f546001600160a01b031633146104795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b5f6020828403121561048b575f80fd5b8151801515811461049a575f80fd5b9392505050565b60805160a05160c051615cf26105a15f395f50505f8181610d8701528181610e2401528181610e7301528181611012015281816113a30152818161185101528181611e0601528181611f39015281816122a30152818161234b0152818161271d01528181612d8f01528181612dcc015281816134d20152818161350101528181613bb901528181613c1501528181614c8e01528181614cc901528181614d3e0152614db801525f8181611371015281816118fb01528181611de401528181612668015281816127c201528181612a6b01528181612b130152818161352b015281816136110152818161399101528181613aa50152613b010152615cf25ff3fe6080604052600436106102f0575f3560e01c8063715018a61161018c578063bc329198116100df578063c53b77021161008e578063ed4ab0f81161006b578063ed4ab0f814610922578063f2fde38b14610956578063f60b36e314610975578063f77c47911461099457005b8063c53b7702146108ae578063df2a558b146108cd578063e2f4dd43146108fb57005b8063c31c9c07116100bc578063c31c9c0714610841578063c45a015514610868578063c4b19b541461088f57005b8063bc329198146107c4578063bf0e622b146107dd578063c0c8eca61461081f57005b80639ba692491161013b578063b17acdcd11610118578063b17acdcd14610767578063b1df47d814610786578063b3a57943146107a557005b80639ba69249146106f8578063a9e88b8f1461070c578063ac75886f1461073a57005b80638da5cb5b116101695780638da5cb5b1461069e57806392eefe9b146106ba5780639a7fe3a1146106d957005b8063715018a61461064e57806381720479146106625780638abb98451461068157005b8063338b5dea1161024457806349c69fd8116101f357806363011d1a116101d057806363011d1a146105e4578063677342ce14610610578063699535011461062f57005b806349c69fd8146105685780634a2539c3146105a65780635a29638d146105c557005b8063439370b111610221578063439370b114610522578063483e0cd71461052a578063495915d31461054957005b8063338b5dea146104aa57806339040ed1146104c957806342d9843e146104f457005b806312261ee7116102a05780631fba9eda1161027d5780631fba9eda1461044f5780633018205f1461046e57806332c4171d1461048b57005b806312261ee7146103fa57806319cc33571461041c5780631b9a91a41461043057005b8063041ae880116102ce578063041ae8801461038857806308092e9a146103a75780630acc8cd1146103db57005b8062ae3bf8146102f957806301e336671461031857806302c512ca1461033757005b366102f757005b005b348015610304575f80fd5b506102f7610313366004615357565b6109b3565b348015610323575f80fd5b506102f7610332366004615372565b610aff565b348015610342575f80fd5b5061036b6103513660046153b0565b601b6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610393575f80fd5b5060035461036b906001600160a01b031681565b3480156103b2575f80fd5b506103c66103c13660046153d7565b610c6d565b6040805192835260208301919091520161037f565b3480156103e6575f80fd5b506102f76103f5366004615357565b6110de565b348015610405575f80fd5b5061036b6e22d473030f116ddee9f6b43ac78ba381565b348015610427575f80fd5b506102f7611153565b34801561043b575f80fd5b506102f761044a366004615432565b61116a565b34801561045a575f80fd5b5061036b610469366004615473565b61121d565b348015610479575f80fd5b506002546001600160a01b031661036b565b348015610496575f80fd5b506102f76104a53660046154ae565b611276565b3480156104b5575f80fd5b506102f76104c4366004615432565b611444565b3480156104d4575f80fd5b50600e546104e29060ff1681565b60405160ff909116815260200161037f565b3480156104ff575f80fd5b506104e261050e3660046153b0565b60196020525f908152604090205460ff1681565b6102f76115ae565b348015610535575f80fd5b506102f76105443660046154f1565b6115e8565b348015610554575f80fd5b506102f761056336600461551a565b611767565b348015610573575f80fd5b50610596610582366004615357565b601a6020525f908152604090205460ff1681565b604051901515815260200161037f565b3480156105b1575f80fd5b506102f76105c03660046153b0565b61197d565b3480156105d0575f80fd5b5060045461036b906001600160a01b031681565b3480156105ef575f80fd5b506105f8611da6565b6040516001600160801b03909116815260200161037f565b34801561061b575f80fd5b506105f861062a3660046153b0565b6123e3565b34801561063a575f80fd5b506102f7610649366004615357565b612564565b348015610659575f80fd5b506102f761259b565b34801561066d575f80fd5b506103c661067c3660046154ae565b6125ae565b34801561068c575f80fd5b506003546001600160a01b031661036b565b3480156106a9575f80fd5b505f546001600160a01b031661036b565b3480156106c5575f80fd5b506102f76106d4366004615357565b6125cc565b3480156106e4575f80fd5b506105f86106f3366004615357565b612638565b348015610703575f80fd5b506105f86126e9565b348015610717575f80fd5b50610596610726366004615357565b60016020525f908152604090205460ff1681565b348015610745575f80fd5b506107596107543660046153b0565b612ba7565b60405190815260200161037f565b348015610772575f80fd5b506102f76107813660046153b0565b612bbd565b348015610791575f80fd5b506107596107a036600461558b565b612bca565b3480156107b0575f80fd5b5061036b6107bf3660046155f2565b6131be565b3480156107cf575f80fd5b506018546104e29060ff1681565b3480156107e8575f80fd5b5061080c6107f7366004615357565b60056020525f908152604090205461ffff1681565b60405161ffff909116815260200161037f565b34801561082a575f80fd5b5061036b6e04444c5dc75cb358380d2e3de08a9081565b34801561084c575f80fd5b5061036b73e592427a0aece92de3edee1f18e0157c0586156481565b348015610873575f80fd5b5061036b731f98431c8ad98523631ae4a59f267346ea31f98481565b34801561089a575f80fd5b5061036b6108a93660046153b0565b613214565b3480156108b9575f80fd5b506107596108c8366004615357565b613233565b3480156108d8575f80fd5b506104e26108e7366004615357565b600f6020525f908152604090205460ff1681565b348015610906575f80fd5b5061036b73bd216513d74c8cf14cf4747e6aaa6420ff64ee9e81565b34801561092d575f80fd5b5061036b61093c3660046153b0565b601c6020525f90815260409020546001600160a01b031681565b348015610961575f80fd5b506102f7610970366004615357565b6132b5565b348015610980575f80fd5b506102f761098f366004615357565b613342565b34801561099f575f80fd5b5060025461036b906001600160a01b031681565b6109bb6135b6565b6001600160a01b0381165f908152600f6020526040902054600e5460ff918216911681101580610a145750816001600160a01b031660068260ff1660088110610a0657610a0661563a565b01546001600160a01b031614155b610a655760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74202772657363756527206465706f73697473000000000000000060448201526064015b60405180910390fd5b816001600160a01b031663a9059cbb610a855f546001600160a01b031690565b610a8e85613233565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610ad6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afa919061564e565b505050565b6003546001600160a01b03163314610b485760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a5c565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd1919061564e565b610c1d5760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610a5c565b610c268361360f565b604080516001600160a01b0385168152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a1505050565b6002545f9081906001600160a01b0316331480610c8957503330145b610cc45760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a5c565b600480546040517f64aa79a30000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116938201939093528883166024820152604481018890526064810187905262ffffff861660848201525f92839216906364aa79a39060a401606060405180830381865afa158015610d4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6f919061566d565b90955090925090506001600160a01b038916610df6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015610dde575f80fd5b505af1158015610df0573d5f803e3d5ffd5b50505050505b5f6040518061010001604052805f6001600160a01b03168c6001600160a01b031614610e22578b610e44565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031681526020015f6001600160a01b03168b6001600160a01b031614610e71578a610e93565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03168152602001846001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0191906156a1565b62ffffff168152602001306001600160a01b031681526020014281526020018681526020018381526020015f6001600160a01b0316815250905073e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663414bf389826040518263ffffffff1660e01b8152600401610f7b91906156bc565b6020604051808303815f875af1158015610f97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbb919061574d565b93506001600160a01b038a1615610fd557610fd58a61360f565b6001600160a01b038916611076576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561105b575f80fd5b505af115801561106d573d5f803e3d5ffd5b5050505061107f565b61107f896137f1565b604080516001600160a01b03808d1682528b166020820152908101869052606081018590527f25f1d03755df23c30e25db2dbd3891e31ce084bdfbfc46f9fe5e446ee5f9b2d49060800160405180910390a15050509550959350505050565b6110e66135b6565b600380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691015b60405180910390a15050565b61115b6135b6565b601d805460ff19166001179055565b6003546001600160a01b031633146111b35760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a5c565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156111e6573d5f803e3d5ffd5b50604080515f8152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59101611147565b5f806112588369ffffffffffffffffffff16780100000000000000000000000000000000000000000000000086600c0160ff16600a0a613d2b565b9050611263816123e3565b6001600160801b03169150505b92915050565b5f61128085613233565b90505f61128c85613233565b905083821015801561129e5750828110155b156112aa57505061143e565b5f805f8487106112bc578487036112be565b5f5b91508386106112cf578386036112d1565b5f5b905086851080156112e157508584115b156113235785840392505f611306898b86620f4240620f7cd888025b04613a98610c6d565b915050808311156113195780830361131b565b5f5b92505061136a565b858410801561133157508685115b1561136a5786850392505f6113518a8a86620f4240620f7cd887026112fd565b9150508082111561136457808203611366565b5f5b9150505b61139789897f00000000000000000000000000000000000000000000000000000000000000008585613dd5565b90925090506113c989897f00000000000000000000000000000000000000000000000000000000000000008585613dd5565b90925090506113db89895f8585613dd5565b9092509050811580156113ec575080155b6114385760405162461bcd60e51b815260206004820152600b60248201527f556e64657266756e6465640000000000000000000000000000000000000000006044820152606401610a5c565b50505050505b50505050565b6003546001600160a01b0316331461148d5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a5c565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303815f875af11580156114f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151a919061564e565b6115665760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610a5c565b61156f826137f1565b604080516001600160a01b0384168152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c49101611147565b604080515f81523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b6002546001600160a01b031633146116315760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a5c565b5f838152601b6020908152604080832054601c9092528220546001600160a01b039182169291169061166283613233565b90505f61166e83613233565b600480546040517f080085220000000000000000000000000000000000000000000000000000000081529182018a90526001600160a01b0387811660248401528681166044840152606483018690526084830184905260a483018a905260c483018990529293505f9283928392919091169063080085229060e401606060405180830381865afa158015611704573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117289190615778565b9250925092505f83600f0b13156117455761174587878484611276565b61174f8a84613ed4565b61175b87878b8b611276565b50505050505050505050565b61176f6135b6565b601d5460ff16156117c25760405162461bcd60e51b815260206004820152600660248201527f6c6f636b656400000000000000000000000000000000000000000000000000006044820152606401610a5c565b5f6117cb6126e9565b600802662386f26fc100000190505f5b60ff811683111561143e575f84848360ff168181106117fc576117fc61563a565b90506020020160208101906118119190615357565b6001600160a01b038181165f81815260016020819052604091829020805460ff19169091179055600480549151633d7e854360e11b8152908101929092527f0000000000000000000000000000000000000000000000000000000000000000831660248301526001600160801b0387166044830152929350911690637afd0a86906064016020604051808303815f875af11580156118b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d5919061579a565b5060048054604051633d7e854360e11b81526001600160a01b03848116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201525f6044820152911690637afd0a86906064016020604051808303815f875af115801561194f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611973919061579a565b50506001016117db565b6002546001600160a01b031633146119c65760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a5c565b5f818152601b6020908152604080832054601c9092528220546001600160a01b03918216929116906119f783613233565b90505f611a0383613233565b90505f60036011604051602001611a24929190918252602082015260400190565b60408051808303601f1901815260028084526060840190925292505f9190816020015b6060815260200190600190039081611a475790505060408051602081018a90525f9181018290526060810182905260808082015260a081019190915290915060c001604051602081830303815290604052815f81518110611aaa57611aaa61563a565b602090810291909101810191909152604080516001600160a01b03808a16938201939093529187169082015230606082015260800160405160208183030381529060405281600181518110611b0157611b0161563a565b602002602001018190525073bd216513d74c8cf14cf4747e6aaa6420ff64ee9e6001600160a01b031663dd46508f8383604051602001611b429291906157e3565b60408051601f19818403018152919052611b5d42603c61586c565b6040518363ffffffff1660e01b8152600401611b7a92919061587f565b5f604051808303815f87803b158015611b91575f80fd5b505af1158015611ba3573d5f803e3d5ffd5b505050505f84611bb288613233565b611bbc91906158a0565b90505f84611bc988613233565b611bd391906158a0565b6001600160a01b0389165f908152600560205260408120805492935061ffff9092169190611c00836158b3565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b0389165f90815260056020526040812080549092169250611c42836158b3565b825461ffff9182166101009390930a9283029190920219909116179055506018805460ff16905f611c72836158cf565b82546101009290920a60ff81810219909316918316021790915560185416159050611d1e575f8981526019602052604090205460185460ff918216916010911660088110611cc257611cc261563a565b015460108260ff1660088110611cda57611cda61563a565b01558060195f601060ff841660088110611cf657611cf661563a565b015481526020019081526020015f205f6101000a81548160ff021916908360ff160217905550505b6103e8821015611d3157611d318861360f565b6103e8811015611d4457611d448761360f565b604080518a81526001600160a01b038a81166020830152891681830152606081018490526080810183905290517f5501b833962ceaf131361ff8d59683c382ab00f523035d0fc4c2ffc19bef3a459181900360a00190a1505050505050505050565b5f611db4620f4240476158e1565b600480546040516370a0823160e01b815230928101929092529192506001600160a01b03918216916365a5e8d2917f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091908316906370a0823190602401602060405180830381865afa158015611e4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e72919061574d565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa158015611ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee69190615900565b611ef09082615926565b90505f5b600e5460ff9081169082161015612057576004546001600160a01b03166365a5e8d2600660ff841660088110611f2c57611f2c61563a565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000600660ff861660088110611f6e57611f6e61563a565b01546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611fb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd7919061574d565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa158015612027573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204b9190615900565b90910190600101611ef4565b505f5b60185460ff90811690821610156123df575f73bd216513d74c8cf14cf4747e6aaa6420ff64ee9e631efeed33601060ff85166008811061209c5761209c61563a565b01546040518263ffffffff1660e01b81526004016120bc91815260200190565b602060405180830381865afa1580156120d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120fb9190615900565b90505f8073bd216513d74c8cf14cf4747e6aaa6420ff64ee9e637ba03aad601060ff87166008811061212f5761212f61563a565b01546040518263ffffffff1660e01b815260040161214f91815260200190565b60c060405180830381865afa15801561216a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218e9190615988565b915091505f6121b76121a18460a0902090565b6e04444c5dc75cb358380d2e3de08a90906142ff565b50506004549192505f918291506001600160a01b031663c72e160b846121e86121e38860081c60020b90565b6143ca565b6121f86121e38960201c60020b90565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b03891660648201526084016040805180830381865afa158015612258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227c9190615a19565b6004805488516040516332d2f46960e11b81526001600160a01b03918216938101939093527f000000000000000000000000000000000000000000000000000000000000000081166024840152604483018590529395509193509116906365a5e8d290606401602060405180830381865afa1580156122fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123219190615900565b6004805460208801516040516332d2f46960e11b81526001600160a01b03918216938101939093527f000000000000000000000000000000000000000000000000000000000000000081166024840152604483018590529a90920199909116906365a5e8d290606401602060405180830381865afa1580156123a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c99190615900565b9097019650506001909401935061205a92505050565b5090565b5f815f036123f257505f919050565b81600170010000000000000000000000000000000082106124185760809190911c9060401b5b6801000000000000000082106124335760409190911c9060201b5b640100000000821061244a5760209190911c9060101b5b62010000821061245f5760109190911c9060081b5b61010082106124735760089190911c9060041b5b601082106124865760049190911c9060021b5b600882106124925760011b5b60018185816124a3576124a3615764565b048201901c905060018185816124bb576124bb615764565b048201901c905060018185816124d3576124d3615764565b048201901c905060018185816124eb576124eb615764565b048201901c9050600181858161250357612503615764565b048201901c9050600181858161251b5761251b615764565b048201901c9050600181858161253357612533615764565b0491909101901c5f61254582866158e1565b90508082106125545780612556565b815b95945050505050565b919050565b61256c6135b6565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6125a36135b6565b6125ac5f6146a8565b565b5f806125bf86868686613a98610c6d565b9150915094509492505050565b6125d46135b6565b600280546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a9101611147565b5f8061264383613233565b600480546040516332d2f46960e11b81526001600160a01b03878116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810184905292935016906365a5e8d290606401602060405180830381865afa1580156126be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e29190615900565b9392505050565b600480546040517fea4bc51c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093525f92670de0b6b3a764000092169063ea4bc51c90602401602060405180830381865afa158015612777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279b9190615a3b565b6127b19069ffffffffffffffffffff1647615a56565b6127bb91906158e1565b90506127e67f0000000000000000000000000000000000000000000000000000000000000000612638565b6127f09082615926565b90505f5b600e5460ff908116908216101561283a5761282e60068260ff166008811061281e5761281e61563a565b01546001600160a01b0316612638565b909101906001016127f4565b505f5b60185460ff90811690821610156123df575f73bd216513d74c8cf14cf4747e6aaa6420ff64ee9e631efeed33601060ff85166008811061287f5761287f61563a565b01546040518263ffffffff1660e01b815260040161289f91815260200190565b602060405180830381865afa1580156128ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128de9190615900565b90505f8073bd216513d74c8cf14cf4747e6aaa6420ff64ee9e637ba03aad601060ff8716600881106129125761291261563a565b01546040518263ffffffff1660e01b815260040161293291815260200190565b60c060405180830381865afa15801561294d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129719190615988565b915091505f6129846121a18460a0902090565b50506004549192505f918291506001600160a01b031663c72e160b846129b06121e38860081c60020b90565b6129c06121e38960201c60020b90565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b03891660648201526084016040805180830381865afa158015612a20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a449190615a19565b6004805488516040516332d2f46960e11b81526001600160a01b03918216938101939093527f000000000000000000000000000000000000000000000000000000000000000081166024840152604483018590529395509193509116906365a5e8d290606401602060405180830381865afa158015612ac5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae99190615900565b6004805460208801516040516332d2f46960e11b81526001600160a01b03918216938101939093527f000000000000000000000000000000000000000000000000000000000000000081166024840152604483018590529a90920199909116906365a5e8d290606401602060405180830381865afa158015612b6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b919190615900565b9097019650506001909401935061283d92505050565b60108160088110612bb6575f80fd5b0154905081565b612bc7815f613ed4565b50565b6002545f906001600160a01b03163314612c155760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a5c565b601854600860ff90911610612c6c5760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f66206d656d6f7279000000000000000000000000000000000000006044820152606401610a5c565b73bd216513d74c8cf14cf4747e6aaa6420ff64ee9e6001600160a01b03166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ce0919061574d565b90505f6001600160a01b038616612cfa6020890189615357565b6001600160a01b031614612d1a57612d156020880188615357565b612d2a565b612d2a6040880160208901615357565b9050856001600160a01b0316816001600160a01b031603612d8d5760405162461bcd60e51b815260206004820152600a60248201527f53616d6520746f6b656e000000000000000000000000000000000000000000006044820152606401610a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015612e0157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b612e4d5760405162461bcd60e51b815260206004820152601060248201527f4e6f2057455448206f6e20556e695634000000000000000000000000000000006044820152606401610a5c565b5f6001600160a01b03821615612ec257816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ebd9190615a6d565b612ec5565b60125b90505f6001600160a01b03881615612f3c57876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f379190615a6d565b612f3f565b60125b90505f612f4c8284615a8d565b90505f612f5e858b6107bf858d61121d565b90505f612f70868c6107bf868d61121d565b90505f612f916121a18e803603810190612f8a9190615aad565b60a0902090565b5050509050816001600160a01b0316836001600160a01b03161115612fb4579091905b5f612fc084848c614704565b9050612fcf8e8386868561476e565b87601b5f8b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508c601c5f8b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060055f896001600160a01b03166001600160a01b031681526020019081526020015f205f81819054906101000a900461ffff168092919061307990615b27565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b038f165f908152600560205260408120805490921692506130bb83615b27565b825461ffff9182166101009390930a928302919092021990911617905550601854899060109060ff16600881106130f4576130f461563a565b0155601880545f8b8152601960205260408120805460ff191660ff9384161790558254909116919061312583615b47565b82546101009290920a60ff81810219909316919092169190910217905550604080518a81526001600160a01b038a811660208301528f168183015269ffffffffffffffffffff8e811660608301528d16608082015260a081018c905290517f29cd472535c058e9f744cc9cead6f8c38cbe5ea230674d825060f275884bdd729181900360c00190a1505050505050505095945050505050565b5f826001600160a01b0316846001600160a01b031610156131e05750806126e2565b61320c6001600160a01b03831678010000000000000000000000000000000000000000000000006158e1565b949350505050565b60068160088110613223575f80fd5b01546001600160a01b0316905081565b5f6001600160a01b038216156132ae576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613285573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132a9919061574d565b611270565b4792915050565b6132bd6135b6565b6001600160a01b0381166133395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a5c565b612bc7816146a8565b6002546001600160a01b031633148061336457505f546001600160a01b031633145b6133b05760405162461bcd60e51b815260206004820152600d60248201527f4163636573732064656e696564000000000000000000000000000000000000006044820152606401610a5c565b6001600160a01b0381165f9081526001602052604090205460ff166134175760405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610a5c565b60185460ff165b60ff811615613498575f190130634a2539c3601060ff8416600881106134465761344661563a565b01546040518263ffffffff1660e01b815260040161346691815260200190565b5f604051808303815f87803b15801561347d575f80fd5b505af115801561348f573d5f803e3d5ffd5b5050505061341e565b50600e5460ff165b60ff8116156134fb575f19016134f6600660ff8316600881106134c5576134c561563a565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000614c6e565b6134a0565b506135267f000000000000000000000000000000000000000000000000000000000000000082614c6e565b6135507f000000000000000000000000000000000000000000000000000000000000000082614c6e565b61355a5f82614c6e565b6002805473ffffffffffffffffffffffffffffffffffffffff191690556040516001600160a01b03821681527f2cc79b200fc7fdf7af6be005fc77813bfacedb82066816356eed5b7df46194709060200160405180910390a150565b5f546001600160a01b031633146125ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316148061365657506001600160a01b038116155b1561365e5750565b6001600160a01b0381165f908152600f6020526040902054600e5460ff9182169116811080156136b65750816001600160a01b031660068260ff16600881106136a9576136a961563a565b01546001600160a01b0316145b80156136ca575060646136c883613233565b105b80156136ef57506001600160a01b0382165f9081526005602052604090205461ffff16155b156137ed57600e805460ff16905f613706836158cf565b82546101009290920a60ff818102199093169183160217909155600e5416158015915061373b5750600e5460ff828116911614155b156137ed57600e5460069060ff16600881106137595761375961563a565b01546001600160a01b0316600660ff83166008811061377a5761377a61563a565b01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905580600f5f600660ff8416600881106137c0576137c061563a565b01546001600160a01b0316815260208101919091526040015f20805460ff191660ff929092169190911790555b5050565b6001600160a01b0381161580159061382157506001600160a01b0381165f908152601a602052604090205460ff16155b1561397c576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af115801561389d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138c1919061564e565b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081526e22d473030f116ddee9f6b43ac78ba360048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015613934573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613958919061564e565b506001600160a01b0381165f908152601a60205260409020805460ff191660011790555b6001600160a01b038116158015906139c657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15612bc7576001600160a01b0381165f818152600f602052604090205460069060ff16600881106139f9576139f961563a565b01546001600160a01b0316141580613a315750600e546001600160a01b0382165f908152600f602052604090205460ff918216911610155b15612bc757600e54600860ff90911610613a8d5760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f66206d656d6f7279000000000000000000000000000000000000006044820152606401610a5c565b5f613a966126e9565b613aa1906002615b5c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614613bb75760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af1925050508015613b7c575060408051601f3d908101601f19168201909252613b799181019061579a565b60015b613bb5573d808015613ba9576040519150601f19603f3d011682016040523d82523d5f602084013e613bae565b606091505b5050613bb7565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614613c985760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af1158015613c72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c96919061579a565b505b600e54829060069060ff1660088110613cb357613cb361563a565b0180546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff19909116179055600e80549184165f908152600f60205260408120805460ff191660ff948516179055815490921691613d0e83615b47565b91906101000a81548160ff021916908360ff160217905550505050565b5f80805f19858709858702925082811083820303915050805f03613d5f575f8411613d54575f80fd5b5082900490506126e2565b808411613d6a575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f80846001600160a01b0316876001600160a01b031614158015613e0b5750846001600160a01b0316866001600160a01b031614155b15613ec8575f613e1a86613233565b9050620f42408110158015613e2e57505f85115b15613e7e575f80613e5e888b85620f4240613e4c8c620f7cd8615a56565b613e5691906158e1565b613a98610c6d565b91509150818303925086811015613e7757808703613e79565b5f5b965050505b620f42408110158015613e9057505f84115b15613ec6575f613ead878984620f4240613e4c8a620f7cd8615a56565b91505084811015613ec057808503613ec2565b5f5b9450505b505b50919590945092505050565b5f828152601c60205260409020546001600160a01b031615613fa6575f828152601c60205260408082205490517f87517c450000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015273bd216513d74c8cf14cf4747e6aaa6420ff64ee9e6024820152604481019190915260648101919091526e22d473030f116ddee9f6b43ac78ba3906387517c45906084015f604051808303815f87803b158015613f8f575f80fd5b505af1158015613fa1573d5f803e3d5ffd5b505050505b5f828152601b60205260408082205490517f87517c450000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015273bd216513d74c8cf14cf4747e6aaa6420ff64ee9e6024820152604481019190915260648101919091526e22d473030f116ddee9f6b43ac78ba3906387517c45906084015f604051808303815f87803b158015614045575f80fd5b505af1158015614057573d5f803e3d5ffd5b505050505f8082600f0b131561406d575f614070565b60015b6040805160208101929092526012908201819052606082015260800160408051808303601f1901815260038084526080840190925292505f9190816020015b60608152602001906001900390816140af579050509050835f84600f0b126140d757836140e0565b6140e084615b7e565b6040805160208101939093526001600160801b03909116908201525f606082018190526080820181905260a08083015260c082015260e001604051602081830303815290604052815f815181106141395761413961563a565b6020908102919091018101919091525f858152601b82526040908190205481516001600160a01b0390911692810192909252016040516020818303038152906040528160018151811061418e5761418e61563a565b6020908102919091018101919091525f858152601c82526040908190205481516001600160a01b039091169281019290925201604051602081830303815290604052816002815181106141e3576141e361563a565b602002602001018190525073bd216513d74c8cf14cf4747e6aaa6420ff64ee9e6001600160a01b031663dd46508f83836040516020016142249291906157e3565b60408051601f1981840301815291905261423f42603c61586c565b6040518363ffffffff1660e01b815260040161425c92919061587f565b5f604051808303815f87803b158015614273575f80fd5b505af1158015614285573d5f803e3d5ffd5b5050505f858152601b6020908152604080832054601c8352928190205481518981526001600160a01b03948516938101939093529290921681830152600f86900b606082015290517f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c92509081900360800190a150505050565b5f805f805f61430d86614f06565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa15801561436e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614392919061574d565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b60020b5f60ff82901d80830118620d89e881111561440c5761440c7f8b86327a0000000000000000000000000000000000000000000000000000000084614f42565b7001fffcb933bd6fad37aa2d162d1a5940016001821602700100000000000000000000000000000000186002821615614455576ffff97272373d413259a46990580e213a0260801c5b6004821615614474576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614493576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156144b2576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156144d1576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156144f0576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561450f576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561452f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561454f576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561456f576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561458f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156145af576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156145cf576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156145ef576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561460f576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614630576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614650576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561466f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561468c576b048a170391f7dc42444e8fa20260801c5b5f841315614698575f19045b63ffffffff0160201c9392505050565b5f80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f826001600160a01b0316846001600160a01b03161115614723579192915b5f61474e856001600160a01b0316856001600160a01b03166c01000000000000000000000000614f51565b905061255661476984838888036001600160a01b0316614f51565b614f82565b600480546040517fc72e160b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811693820193909352858316602482015284831660448201526001600160801b03841660648201525f928392169063c72e160b906084016040805180830381865afa1580156147f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148169190615a19565b909250905061484261482b6020890189615357565b61483b60408a0160208b01615357565b8484611276565b5f6148506020890189615357565b6001600160a01b0316146148fd576e22d473030f116ddee9f6b43ac78ba36387517c4561488060208a018a615357565b6040516001600160e01b031960e084901b1681526001600160a01b03918216600482015273bd216513d74c8cf14cf4747e6aaa6420ff64ee9e602482015290851660448201525f60648201526084015f604051808303815f87803b1580156148e6575f80fd5b505af11580156148f8573d5f803e3d5ffd5b505050505b6e22d473030f116ddee9f6b43ac78ba36387517c4561492260408a0160208b01615357565b6040516001600160e01b031960e084901b1681526001600160a01b03918216600482015273bd216513d74c8cf14cf4747e6aaa6420ff64ee9e602482015290841660448201525f60648201526084015f604051808303815f87803b158015614988575f80fd5b505af115801561499a573d5f803e3d5ffd5b5050604080517f020000000000000000000000000000000000000000000000000000000000000060208201527f0d000000000000000000000000000000000000000000000000000000000000006021820152815160028183038101825260228301818152608284019094529094505f9350906042015b6060815260200190600190039081614a1057905050905088614a386080820160608301615bba565b614a4860808c0160608d01615bba565b60020b614a548a614fbc565b60020b81614a6457614a64615764565b0502614a7660808c0160608d01615bba565b614a8660808d0160608e01615bba565b60020b614a928a614fbc565b60020b81614aa257614aa2615764565b0502600a886103f7026001600160801b0316901c87873030604051602001614ad991906001600160a01b0391909116815260200190565b60408051601f1981840301815290829052614afd9897969594939291602001615bd5565b604051602081830303815290604052815f81518110614b1e57614b1e61563a565b6020026020010181905250885f016020810190614b3b9190615357565b614b4b60408b0160208c01615357565b604080516001600160a01b039384166020820152929091169082015260600160405160208183030381529060405281600181518110614b8c57614b8c61563a565b60200260200101819052505f42603c0190505f614bc18b5f016020810190614bb49190615357565b6001600160a01b03161590565b614bcb575f614bcd565b855b905073bd216513d74c8cf14cf4747e6aaa6420ff64ee9e6001600160a01b031663dd46508f828686604051602001614c069291906157e3565b604051602081830303815290604052856040518463ffffffff1660e01b8152600401614c3392919061587f565b5f604051808303818588803b158015614c4a575f80fd5b505af1158015614c5c573d5f803e3d5ffd5b50505050505050505050505050505050565b5f614c7883613233565b90506001600160a01b038316158015614cc257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15614d3c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015614d20575f80fd5b505af1158015614d32573d5f803e3d5ffd5b5050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015614d8457506001600160a01b038216155b15614e1c576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015614e01575f80fd5b505af1158015614e13573d5f803e3d5ffd5b50505050505050565b816001600160a01b0316836001600160a01b031614610afa576040517f08092e9a0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604481018290525f196064820152620124f8608482015230906308092e9a9060a40160408051808303815f875af1925050508015614ecd575060408051601f3d908101601f19168201909252614eca91810190615a19565b60015b614eff573d808015614efa576040519150601f19603f3d011682016040523d82523d5f602084013e614eff565b606091505b5050505050565b6040515f90614f25908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b815f528060020b60045260245ffd5b5f838302815f1985870982811083820303915050808411614f70575f80fd5b805f03613d6a575082900490506126e2565b806001600160801b038116811461255f5761255f7f93dafdf10000000000000000000000000000000000000000000000000000000061529b565b5f73fffd8963efd1fc6a506488495d951d51639616827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffd895d83016001600160a01b0316111561502e5761502e7f6148752400000000000000000000000000000000000000000000000000000000836152a3565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b16805f615058826152b8565b60ff1690506080811061507357607f810383901c915061507d565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc5568101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461528c57886001600160a01b0316615271826143ca565b6001600160a01b03161115615286578161528e565b8061528e565b815b9998505050505050505050565b805f5260045ffd5b815f526001600160a01b03811660045260245ffd5b5f8082116152c4575f80fd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b6001600160a01b0381168114612bc7575f80fd5b5f60208284031215615367575f80fd5b81356126e281615343565b5f805f60608486031215615384575f80fd5b833561538f81615343565b9250602084013561539f81615343565b929592945050506040919091013590565b5f602082840312156153c0575f80fd5b5035919050565b62ffffff81168114612bc7575f80fd5b5f805f805f60a086880312156153eb575f80fd5b85356153f681615343565b9450602086013561540681615343565b935060408601359250606086013591506080860135615424816153c7565b809150509295509295909350565b5f8060408385031215615443575f80fd5b823561544e81615343565b946020939093013593505050565b69ffffffffffffffffffff81168114612bc7575f80fd5b5f8060408385031215615484575f80fd5b8235805f0b8114615493575f80fd5b915060208301356154a38161545c565b809150509250929050565b5f805f80608085870312156154c1575f80fd5b84356154cc81615343565b935060208501356154dc81615343565b93969395505050506040820135916060013590565b5f805f60608486031215615503575f80fd5b505081359360208301359350604090920135919050565b5f806020838503121561552b575f80fd5b823567ffffffffffffffff811115615541575f80fd5b8301601f81018513615551575f80fd5b803567ffffffffffffffff811115615567575f80fd5b8560208260051b840101111561557b575f80fd5b6020919091019590945092505050565b5f805f805f8587036101208112156155a1575f80fd5b60a08112156155ae575f80fd5b5085945060a08601356155c081615343565b935060c08601356155d08161545c565b925060e08601356155e08161545c565b94979396509194610100013592915050565b5f805f60608486031215615604575f80fd5b833561560f81615343565b9250602084013561561f81615343565b9150604084013561562f81615343565b809150509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561565e575f80fd5b815180151581146126e2575f80fd5b5f805f6060848603121561567f575f80fd5b835161568a81615343565b602085015160409095015190969495509392505050565b5f602082840312156156b1575f80fd5b81516126e2816153c7565b5f610100820190506001600160a01b0383511682526001600160a01b03602084015116602083015262ffffff6040840151166040830152606083015161570d60608401826001600160a01b03169052565b506080830151608083015260a083015160a083015260c083015160c083015260e083015161574660e08401826001600160a01b03169052565b5092915050565b5f6020828403121561575d575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f805f6060848603121561578a575f80fd5b835180600f0b811461568a575f80fd5b5f602082840312156157aa575f80fd5b81516126e281615343565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b604081525f6157f560408301856157b5565b828103602084015280845180835260208301915060208160051b840101602087015f5b8381101561584a57601f198684030185526158348383516157b5565b6020958601959093509190910190600101615818565b509098975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561127057611270615858565b604081525f61589160408301856157b5565b90508260208301529392505050565b8181038181111561127057611270615858565b5f61ffff8216806158c6576158c6615858565b5f190192915050565b5f60ff8216806158c6576158c6615858565b5f826158fb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215615910575f80fd5b81516001600160801b03811681146126e2575f80fd5b6001600160801b03818116838216019081111561127057611270615858565b60405160a0810167ffffffffffffffff8111828210171561597457634e487b7160e01b5f52604160045260245ffd5b60405290565b8060020b8114612bc7575f80fd5b5f8082840360c081121561599a575f80fd5b60a08112156159a7575f80fd5b506159b0615945565b83516159bb81615343565b815260208401516159cb81615343565b602082015260408401516159de816153c7565b604082015260608401516159f18161597a565b60608201526080840151615a0481615343565b608082015260a0939093015192949293505050565b5f8060408385031215615a2a575f80fd5b505080516020909101519092909150565b5f60208284031215615a4b575f80fd5b81516126e28161545c565b808202811582820484141761127057611270615858565b5f60208284031215615a7d575f80fd5b815160ff811681146126e2575f80fd5b5f82810b9082900b03607f198112607f8213171561127057611270615858565b5f60a0828403128015615abe575f80fd5b50615ac7615945565b8235615ad281615343565b81526020830135615ae281615343565b60208201526040830135615af5816153c7565b60408201526060830135615b088161597a565b60608201526080830135615b1b81615343565b60808201529392505050565b5f61ffff821661ffff8103615b3e57615b3e615858565b60010192915050565b5f60ff821660ff8103615b3e57615b3e615858565b6001600160801b03818116838216029081169081811461574657615746615858565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103615bb257615bb2615858565b5f0392915050565b5f60208284031215615bca575f80fd5b81356126e28161597a565b5f8935615be181615343565b6001600160a01b0316825260208a0135615bfa81615343565b6001600160a01b0316602083015260408a0135615c16816153c7565b62ffffff16604083015260608a0135615c2e8161597a565b60020b606083015260808a0135615c4481615343565b6001600160a01b03166080830152600289810b60a084015288900b60c08301526001600160801b03871660e08301528561010083015284610120830152615c976101408301856001600160a01b03169052565b610180610160830152615cae6101808301846157b5565b9a995050505050505050505056fea26469706673582212208445fc5c428de2ae0f2ea66fd62c7186d4da315f8e76b800caeab5d227cf371364736f6c634300081a0033