5 txs
10 calls
constructor
constructor(address _feeProcessor, address _pm, address _posManagerAdapter, address _hook, address _bmx, address _incentiveGauge)
functions
BMX
viewfunction BMX() view returns (address)
dayBuckets
viewfunction dayBuckets(bytes32, uint32) view returns (uint256)
feeProcessor
viewfunction feeProcessor() view returns (address)
getPoolData
viewfunction getPoolData(bytes32 pid) view returns (uint256 currentStreamRate, uint256 rewardsPerLiquidityX128, uint128 activeLiquidity)
getPoolDataBatch
viewfunction getPoolDataBatch(bytes32[] pids) view returns (uint256[] currentStreamRates, uint256[] rewardsPerLiquidityX128s, uint128[] activeLiquidities)
incentiveGauge
viewfunction incentiveGauge() view returns (address)
isHook
viewfunction isHook(address) view returns (bool)
nextEpochEndsIn
viewfunction nextEpochEndsIn() view returns (uint256 secondsLeft)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingRewardsByTokenId
viewfunction pendingRewardsByTokenId(uint256 tokenId) view returns (uint256 amount)
pendingRewardsOwner
viewfunction pendingRewardsOwner(bytes32 pid, address owner) view returns (uint256 amount)
pendingRewardsOwnerBatch
viewfunction pendingRewardsOwnerBatch(bytes32[] pids, address owner) view returns (uint256[] amounts)
POOL_MANAGER
viewfunction POOL_MANAGER() view returns (address)
poolRewards
viewfunction poolRewards(bytes32) view returns (uint128 liquidity, int24 tick, uint64 lastUpdated)
positionManagerAdapter
viewfunction positionManagerAdapter() view returns (address)
positionRewards
viewfunction positionRewards(bytes32) view returns (uint256 rewardsPerLiquidityLastX128, uint256 rewardsAccrued)
streamRate
viewfunction streamRate(bytes32 pid) view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addRewards
nonpayablefunction addRewards(bytes32 poolId, uint256 amount)
addRewardsTest
nonpayablefunction addRewardsTest(bytes32 poolId, uint256 amount)
adminForceUnsubscribe
nonpayablefunction adminForceUnsubscribe(bytes32 posKey)
claim
nonpayablefunction claim(uint256 tokenId, address to) returns (uint256 amount)
claimAllForOwner
nonpayablefunction claimAllForOwner(bytes32[] pids, address owner) returns (uint256 totalBmx)
initPool
nonpayablefunction initPool(tuple key, int24 initialTick)
notifyBurnWithContext
nonpayablefunction notifyBurnWithContext(bytes32 posKey, bytes32 poolIdRaw, address ownerAddr, int24 currentTick, int24 tickLower, int24 tickUpper, uint128 liquidity)
notifyModifyLiquidityWithContext
nonpayablefunction notifyModifyLiquidityWithContext(bytes32 posKey, bytes32 poolIdRaw, int24 currentTick, int24 tickLower, int24 tickUpper, int256 liquidityChange, uint128 liquidityAfter)
notifySubscribeWithContext
nonpayablefunction notifySubscribeWithContext(uint256 tokenId, bytes32 posKey, bytes32 poolIdRaw, int24 currentTick, int24 tickLower, int24 tickUpper, uint128 liquidity, address owner)
notifyUnsubscribeWithContext
nonpayablefunction notifyUnsubscribeWithContext(bytes32 posKey, bytes32 poolIdRaw, int24 currentTick, address ownerAddr, int24 tickLower, int24 tickUpper, uint128 liquidity)
pokePool
nonpayablefunction pokePool(tuple key)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeProcessor
nonpayablefunction setFeeProcessor(address _fp)
setHook
nonpayablefunction setHook(address hook, bool enabled)
setPositionManagerAdapter
nonpayablefunction setPositionManagerAdapter(address _adapter)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Claimed
event Claimed(address indexed user, uint256 amount)
EpochRolled
event EpochRolled(bytes32 indexed poolId, uint256 streamRate, uint256 timestamp)
FeeProcessorUpdated
event FeeProcessorUpdated(address newFeeProcessor)
ForceUnsubscribed
event ForceUnsubscribed(address indexed owner, bytes32 indexed pid, bytes32 posKey)
HookAuthorised
event HookAuthorised(address hook, bool enabled)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PositionManagerAdapterUpdated
event PositionManagerAdapterUpdated(address newAdapter)
RewardsAdded
event RewardsAdded(bytes32 indexed poolId, uint256 amount)
errors
NotAuthorized
error NotAuthorized()
NotFeeProcessor
error NotFeeProcessor()
NotHook
error NotHook()
NotSubscriber
error NotSubscriber()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60c060405234801561000f575f80fd5b506040516144d93803806144d983398101604081905261002e91610183565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c81610104565b50600380546001600160a01b03199081166001600160a01b038981169190911790925586821660805260028054821687841617905583821660a0526004805490911683831617905583165f818152600f6020908152604091829020805460ff191660019081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a1505050505050610206565b600180546001600160a01b031916905561011d81610120565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461011d575f80fd5b5f805f805f8060c08789031215610198575f80fd5b86516101a38161016f565b60208801519096506101b48161016f565b60408801519095506101c58161016f565b60608801519094506101d68161016f565b60808801519093506101e78161016f565b60a08801519092506101f88161016f565b809150509295509295509295565b60805160a0516142426102975f395f818161023e0152818161093e01528181610be501528181610ea70152818161120301528181611383015281816113e90152818161170d0152818161183f0152818161190001528181611af701528181611d6101528181611e7601528181611f87015281816123eb015261256001525f81816103130152611de201526142425ff3fe608060405234801561000f575f80fd5b5060043610610235575f3560e01c806394f0d0bf1161013d578063ddd5e1b2116100b8578063ebbf741b11610088578063f6f575571161006e578063f6f57557146105b7578063f7590c35146105ca578063ff0747b8146105dd575f80fd5b8063ebbf741b1461059c578063f2fde38b146105a4575f80fd5b8063ddd5e1b214610552578063e30c397814610565578063e32cc1c714610576578063e419190814610589575f80fd5b8063c0e8d3841161010d578063c9a807de116100f3578063c9a807de146104fa578063d26765291461050d578063dccab5911461053f575f80fd5b8063c0e8d38414610448578063c657d6c6146104c3575f80fd5b806394f0d0bf146103ef5780639665795514610402578063a88848d414610415578063aa17cc6c14610435575f80fd5b80636cef460b116101cd5780637e9a68141161019d57806385e84a101161018357806385e84a10146103915780638da5cb5b146103a457806393327e07146103b4575f80fd5b80637e9a68141461036b578063833e8db11461037e575f80fd5b80636cef460b14610335578063713f6a0a14610348578063715018a61461035b57806379ba509714610363575f80fd5b806348f60dfd1161020857806348f60dfd146102c657806354c366a4146102d95780635b92a5f0146102fb57806362308e851461030e575f80fd5b80631a669779146102395780631f19ab501461027d5780632048e384146102905780633756bca6146102a5575b5f80fd5b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b600454610260906001600160a01b031681565b6102a361029e36600461393d565b610607565b005b6102b86102b33660046139b2565b61066e565b604051908152602001610274565b6102a36102d4366004613a05565b6109f5565b6102ec6102e7366004613a25565b610ac3565b60405161027493929190613a9e565b6102a3610309366004613b10565b610cd3565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b600254610260906001600160a01b031681565b6102a3610356366004613b10565b610d57565b6102a3610dd4565b6102a3610de7565b6102a3610379366004613b4f565b610e30565b6102a361038c366004613bd7565b610f88565b6102a361039f366004613ce0565b611019565b5f546001600160a01b0316610260565b6103da6103c2366004613d0b565b60076020525f90815260409020805460019091015482565b60408051928352602083019190915201610274565b600354610260906001600160a01b031681565b6102b8610410366004613d22565b6110df565b6104286104233660046139b2565b6110f1565b6040516102749190613d45565b6102b8610443366004613d0b565b611193565b610491610456366004613d0b565b60066020525f90815260409020600101546001600160801b03811690600160801b810460020b90600160981b900467ffffffffffffffff1683565b604080516001600160801b03909416845260029290920b602084015267ffffffffffffffff1690820152606001610274565b6104d66104d1366004613d0b565b6111e1565b6040805193845260208401929092526001600160801b031690820152606001610274565b6102a3610508366004613a05565b61124c565b61052f61051b366004613b10565b600f6020525f908152604090205460ff1681565b6040519015158152602001610274565b6102a361054d366004613d57565b6112cf565b6102b8610560366004613d22565b61153a565b6001546001600160a01b0316610260565b6102a3610584366004613dbb565b61169f565b6102a3610597366004613e42565b611889565b6102b8611972565b6102a36105b2366004613b10565b61199c565b6102a36105c5366004613d0b565b611a0c565b6102b86105d8366004613d0b565b611c0c565b6102b86105eb366004613e81565b600560209081525f928352604080842090915290825290205481565b335f908152600f602052604090205460ff16610636576040516318e59f8760e31b815260040160405180910390fd5b5f61065061064936849003840184613eac565b60a0902090565b905061066a61066436849003840184613eac565b82611ddc565b5050565b5f82815b81811015610886575f86868381811061068d5761068d613ec6565b602090810292909201355f8181526008845260408082206001600160a01b038b1683529094529283208054919450920390506106ca57505061087e565b6002546040517f29b482fe000000000000000000000000000000000000000000000000000000008152600481018490525f916001600160a01b0316906329b482fe9060240160a060405180830381865afa15801561072a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074e9190613f48565b90505f5b8254811015610879575f83828154811061076e5761076e613ec6565b5f918252602080832090910154808352600d90915260408220549092509081900361079d575050600101610752565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e90602401602060405180830381865afa925050508015610802575060408051601f3d908101601f191682019092526107ff91810190613f62565b60015b610810575050600101610752565b8a6001600160a01b0316816001600160a01b03161461083757836001019350505050610752565b50610843848784611e2d565b5f8281526007602052604081206001018054919055801561086b57610868818b613f91565b99505b836001019350505050610752565b505050505b600101610672565b506004546001600160a01b03161561091257600480546040517f3756bca60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691633756bca6916108e49189918991899101613fa4565b5f604051808303815f87803b1580156108fb575f80fd5b505af115801561090d573d5f803e3d5ffd5b505050505b81156109ed5760405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015610984573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a89190613ff1565b50826001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a836040516109e491815260200190565b60405180910390a25b509392505050565b6003546001600160a01b03163314610a39576040517fa806153400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610a42611ec6565b90505f610a5082600261400c565b5f85815260056020908152604080832063ffffffff85168452909152812080549293508592909190610a83908490613f91565b909155505060405183815284907ffacfe21a3f9bcedcbf7b0629b67bd4f0ecac1a3367e1386b261ccaa24c3975329060200160405180910390a250505050565b60608080838067ffffffffffffffff811115610ae157610ae1613c0e565b604051908082528060200260200182016040528015610b0a578160200160208202803683370190505b5093508067ffffffffffffffff811115610b2657610b26613c0e565b604051908082528060200260200182016040528015610b4f578160200160208202803683370190505b5092508067ffffffffffffffff811115610b6b57610b6b613c0e565b604051908082528060200260200182016040528015610b94578160200160208202803683370190505b5091505f5b81811015610cca57610bc2878783818110610bb657610bb6613ec6565b90506020020135611193565b858281518110610bd457610bd4613ec6565b602002602001018181525050610c3b7f000000000000000000000000000000000000000000000000000000000000000060065f8a8a86818110610c1957610c19613ec6565b9050602002013581526020019081526020015f20611ed990919063ffffffff16565b848281518110610c4d57610c4d613ec6565b60200260200101818152505060065f888884818110610c6e57610c6e613ec6565b9050602002013581526020019081526020015f206001015f9054906101000a90046001600160801b0316838281518110610caa57610caa613ec6565b6001600160801b0390921660209283029190910190910152600101610b99565b50509250925092565b610cdb611ef8565b6001600160a01b038116610d025760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f582ec7d55fe2da1a8f783baf37c5a38008a41c8cf5eaf7b8a448ee7ed9770cbf906020015b60405180910390a150565b610d5f611ef8565b6001600160a01b038116610d865760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff1361b3dae4eebc0313ce3e5a9298704f8b58f9108bc0a094a41fc06f2908dd490602001610d4c565b610ddc611ef8565b610de55f611f24565b565b60015433906001600160a01b03168114610e245760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610e2d81611f24565b50565b6002546001600160a01b03163314610e5b5760405163251cb70160e11b815260040160405180910390fd5b5f878152600d602052604090205415610f7f575f868152600e60205260409020548690610e8e908290879060020b611f3d565b5f818152600660205260409020610ee1908390610ecd907f00000000000000000000000000000000000000000000000000000000000000008888612057565b5f8b81526007602052604090209190612192565b506001600160801b03821615610f6857610f6860405180608001604052808660020b81526020018560020b8152602001610f23856001600160801b03166121c5565b610f2c90614028565b600f0b81525f848152600e602090815260408083205460020b9382019390935282518281528082018452868352600690915291902091906121f1565b610f7288876123aa565b50610f7d818961249f565b505b50505050505050565b610f90611ef8565b6001600160a01b038216610fb75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a15050565b335f908152600f602052604090205460ff16611048576040516318e59f8760e31b815260040160405180910390fd5b60a082205f8181526006602052604090206001810180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff86160267ffffffffffffffff60981b191617600160981b4267ffffffffffffffff160217905550606092909201515f928352600e6020526040909220805462ffffff191662ffffff9093169290921790915550565b5f6110ea83836124e9565b9392505050565b6060828067ffffffffffffffff81111561110d5761110d613c0e565b604051908082528060200260200182016040528015611136578160200160208202803683370190505b5091505f5b8181101561118a5761116586868381811061115857611158613ec6565b90506020020135856124e9565b83828151811061117757611177613ec6565b602090810291909101015260010161113b565b50509392505050565b5f8061119d611ec6565b5f84815260056020908152604080832063ffffffff8516845290915290205490915080156111d7576111d26201518082614069565b6111d9565b5f5b949350505050565b5f805f6111ed84611193565b5f858152600660205260409020909350611227907f0000000000000000000000000000000000000000000000000000000000000000611ed9565b5f948552600660205260409094206001015492946001600160801b0390931692915050565b611254611ef8565b5f61125d611ec6565b5f84815260056020908152604080832063ffffffff85168452909152812080549293508492909190611290908490613f91565b909155505060405182815283907ffacfe21a3f9bcedcbf7b0629b67bd4f0ecac1a3367e1386b261ccaa24c3975329060200160405180910390a2505050565b6002546001600160a01b031633146112fa5760405163251cb70160e11b815260040160405180910390fd5b5f878152600d602052604090205415610f7f575f868152600e6020526040902054869061132d908290889060020b611f3d565b5f611337846125f8565b90505f8082600f0b121561135d5761134e82614028565b611358908561407c565b611367565b611367828561409b565b5f8481526006602052604090209091506113bd9082906113a9907f00000000000000000000000000000000000000000000000000000000000000008b8b612057565b5f8d81526007602052604090209190612192565b505f851315611498576040805160018082528183019092525f91602080830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f8151811061141a5761141a613ec6565b60200260200101906001600160a01b031690816001600160a01b03168152505061149260405180608001604052808a60020b81526020018960020b8152602001611463896125f8565b600f0b81525f878152600e602090815260408083205460020b93820193909352888252600690522090836121f1565b506114fd565b6114fd60405180608001604052808960020b81526020018860020b81526020016114c1886125f8565b600f0b81525f868152600e602090815260408083205460020b9382019390935282518281528082018452888352600690915291902091906121f1565b5050505f878152600b6020526040902080546001600160801b0383166fffffffffffffffffffffffffffffffff1990911617905550505050505050565b6002546040516331a9108f60e11b8152600481018490525f9182916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611585573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a99190613f62565b9050336001600160a01b038216146115ed576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254604051637ba03aad60e01b8152600481018690525f916001600160a01b031690637ba03aad9060240160c060405180830381865afa158015611634573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165891906140ba565b5090505f6116678260a0902090565b90505f61167d87835f9182526020526040902090565b905061168a838383611e2d565b61169481876123aa565b979650505050505050565b6002546001600160a01b031633146116ca5760405163251cb70160e11b815260040160405180910390fd5b5f868152600e602052604090205486906116ea908290889060020b611f3d565b6040805160018082528183019092525f91602080830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f8151811061173e5761173e613ec6565b60200260200101906001600160a01b031690816001600160a01b0316815250506117bf60405180608001604052808860020b81526020018760020b8152602001611790876001600160801b03166121c5565b600f0b81525f858152600e602090815260408083205460020b93820193909352868252600690522090836121f1565b6117d36008600b6009600a86888f8b612614565b5f898152600d602090815260408083208d90558051808201825260028a810b825289900b8184019081528d8552600c845282852091518254915162ffffff90811663010000000265ffffffffffff199093169116171790558483526006909152902061187d90611865907f00000000000000000000000000000000000000000000000000000000000000008989612057565b5f8b8152600760205260408120918255600190910155565b50505050505050505050565b6002546001600160a01b031633146118b45760405163251cb70160e11b815260040160405180910390fd5b5f878152600d602052604090205415610f7f575f868152600e602052604090205486906118e7908290889060020b611f3d565b5f818152600660205260409020611926908390610ecd907f00000000000000000000000000000000000000000000000000000000000000008888612057565b506001600160801b038216156119685761196860405180608001604052808660020b81526020018560020b8152602001610f23856001600160801b03166121c5565b610f7288866123aa565b5f8061197d426126c5565b905042811161198c575f611996565b61199642826140e5565b91505090565b6119a4611ef8565b600180546001600160a01b0383166001600160a01b031990911681179091556119d45f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b611a14611ef8565b5f818152600d602052604081205490819003611a2e575050565b600254604051637ba03aad60e01b8152600481018390525f916001600160a01b031690637ba03aad9060240160c060405180830381865afa158015611a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a9991906140ba565b5090505f611aa88260a0902090565b9050611ab48282611ddc565b5f848152600c60209081526040808320600b909252909120546001600160801b03168015611b415781545f848152600660205260409020611b3f918391611b2b917f000000000000000000000000000000000000000000000000000000000000000090600281810b9163010000009004900b612057565b5f8981526007602052604090209190612192565b505b6001600160801b03811615611b9357604080516080810182528354600281810b83526301000000909104900b6020820152611b93918101611b8a6001600160801b0385166121c5565b6114c190614028565b5f868152600960205260409020546001600160a01b0316611bb487826123aa565b50611bbf848861249f565b83816001600160a01b03167ff23cbea3553dfb61d7f8cb5d115d502c3c510358866551f11fd9383b3f9e53ea89604051611bfb91815260200190565b60405180910390a350505050505050565b6002546040516331a9108f60e11b8152600481018390525f916001600160a01b031690636352211e90602401602060405180830381865afa925050508015611c71575060408051601f3d908101601f19168201909252611c6e91810190613f62565b60015b611c7c57505f919050565b600254604051637ba03aad60e01b8152600481018590525f916001600160a01b031690637ba03aad9060240160c060405180830381865afa158015611cc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce791906140ba565b5090505f611cf68260a0902090565b90505f611d0c86835f9182526020526040902090565b5f818152600760209081526040808320600b90925290912054919250906001600160801b03168015611dc8575f838152600c60209081526040808320855481548986526006909452918420909392611d9591907f000000000000000000000000000000000000000000000000000000000000000090600281810b9163010000009004900b612057565b039050611db081846001600160801b0316600160801b6126e8565b8460010154611dbf9190613f91565b98505050611dd0565b816001015496505b5050505050505b919050565b5f611e077f000000000000000000000000000000000000000000000000000000000000000083612784565b50505090505f611e168261284f565b9050611e2783828660600151611f3d565b50505050565b611e378383611ddc565b5f818152600c60209081526040808320600b83528184205481548786526006909452919093206001600160801b0390911691611ebe918391611eaa91907f000000000000000000000000000000000000000000000000000000000000000090600281810b9163010000009004900b612057565b5f8681526007602052604090209190612192565b505050505050565b5f611ed46201518042614069565b905090565b6001600160a01b0381165f908152602083905260409020545b92915050565b5f546001600160a01b03163314610de55760405163118cdaa760e01b8152336004820152602401610e1b565b600180546001600160a01b0319169055610e2d81612b14565b5f83815260066020908152604080832060018082015483518281528085019094529194600160981b90920467ffffffffffffffff16934293919082810190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611fb857611fb8613ec6565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f918160200160208202803683370190505090508383111561202a57612007888585612b63565b815f8151811061201957612019613ec6565b60200260200101818152505061204a565b5f815f8151811061203d5761203d613ec6565b6020026020010181815250505b610f7d858383898b612d86565b5f8160020b8360020b1261206c57505f6111d9565b6001850154600284810b600160801b909204900b12156120d35750600281810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549689900b8652938352818520938552929092019052902054036111d9565b6001850154600283810b600160801b909204900b126121395750600282810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549688900b8652938352818520938552929092019052902054036111d9565b50600282810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549688900b865293835281852093855292909201815281832054908890529120540303949350505050565b82545f9082036121b0816001600160801b038616600160801b6126e8565b60018601805482019055929094555092915050565b5f6f8000000000000000000000000000000082106121ed576121ed6393dafdf160e01b612ebc565b5090565b604080830151835160208086015184516080810186525f8082529281018390529485018290526060850191909152919290919083600f0b5f146122d55761223a8784865f612ec4565b6001600160801b03166020830152151581526122598783866001612ec4565b6001600160801b03166060830152151560408201528051156122a057606086015161228a9060038901908590612f50565b5f84600f0b13156122a0576122a0878487612fa2565b8060400151156122d55760608601516122bf9060038901908490612f50565b5f84600f0b13156122d5576122d5878387612fa2565b5f84600f0b121561231b578051156122fc57600283810b5f90815290880160205260408120555b80604001511561231b57600282810b5f90815290880160205260408120555b60018701548651600160801b909104600290810b91900b13801590612357575060208601516001880154600291820b600160801b90910490910b125b15610f7f576001870154612374906001600160801b03168561302a565b6001880180546001600160801b03929092166fffffffffffffffffffffffffffffffff1990921691909117905550505050505050565b5f82815260076020526040812060010180549190558015611ef25760405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612431573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124559190613ff1565b50816001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a8260405161249191815260200190565b60405180910390a292915050565b6124b16008600b6009600a8686613051565b5f908152600c60209081526040808320805465ffffffffffff1916905560078252808320838155600101839055600d90915281205550565b5f828152600660209081526040808320600883528184206001600160a01b038616855290925282208054835b818110156125ee575f83828154811061253057612530613ec6565b5f918252602080832090910154808352600c825260408084206007909352832082549194509192906125949089907f000000000000000000000000000000000000000000000000000000000000000090600281810b9163010000009004900b612057565b82545f868152600b60205260409020549192508203906001600160801b03166125c28282600160801b6126e8565b84600101546125d19190613f91565b6125db908c613f91565b9a50866001019650505050505050612515565b5050505092915050565b80600f81900b8114611dd757611dd76393dafdf160e01b612ebc565b5f828152602088905260408120546001600160801b03169003612689575f848152602089815260408083206001600160a01b0387168085529083528184208054600181018255818652848620018790558685528a845282852080546001600160a01b0319169092179091555491889052909120555b5f9182526020969096526040902080546fffffffffffffffffffffffffffffffff19166001600160801b03909616959095179094555050505050565b5f620151806126d481846140f8565b6126de90846140e5565b611ef29190613f91565b5f838302815f1985870982811083820303915050808411612707575f80fd5b805f03612719575082900490506110ea565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f805f805f6127928661317a565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa1580156127f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612817919061410b565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b031611156128a7576128a77f6148752400000000000000000000000000000000000000000000000000000000836131b6565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b16805f6128d1826131cb565b60ff169050608081106128ec57607f810383901c91506128f6565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc5568101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14612b0557886001600160a01b0316612aea82613256565b6001600160a01b03161115612aff5781612b07565b80612b07565b815b9998505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828211612b7257505f6110ea565b5f612b81620151806003614122565b612b8b9085613f91565b905080831115612b99578092505b5f612ba385613527565b90505f612baf85613527565b9050808203612c21575f87815260056020526040812081612bcf8561353f565b63ffffffff16815260208101919091526040015f205490508015612c145762015180612bfb88886140e5565b612c059083614122565b612c0f9190614069565b612c16565b5f5b9450505050506110ea565b5f612c2b8361353f565b90505f612c378361353f565b90505f84891115612cac575f8a815260056020908152604080832063ffffffff871684529091529020548015612ca157620151808a612c768289613f91565b612c8091906140e5565b612c8a9083614122565b612c949190614069565b612c9e9089613f91565b97505b505060018201612caf565b50815b5f612cbb600184614139565b90508063ffffffff168263ffffffff1611612d1a57815b8163ffffffff168163ffffffff1611612d18575f8c815260056020908152604080832063ffffffff85168452909152902054612d0e908a613f91565b9850600101612cd2565b505b84891115612d78575f8b815260056020908152604080832063ffffffff871684529091529020548015612d765762015180612d55878c6140e5565b612d5f9083614122565b612d699190614069565b612d73908a613f91565b98505b505b505050505050509392505050565b6001850154600160981b900467ffffffffffffffff165f03612dfe576001850180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff84160267ffffffffffffffff60981b191617600160981b4267ffffffffffffffff1602179055612eb5565b60018501805467ffffffffffffffff4216600160981b0267ffffffffffffffff60981b19821681179092556001600160801b0391821691161715612e905783515f5b81811015612e8d57612e8587878381518110612e5e57612e5e613ec6565b6020026020010151878481518110612e7857612e78613ec6565b602002602001015161354d565b600101612e40565b50505b6001850154600282810b600160801b909204900b14612eb557612eb5858383876135bb565b5050505050565b805f5260045ffd5b600283810b5f9081529085016020526040812080548291906001600160801b03811690600160801b9004600f0b612efb828861302a565b6001600160801b0380821615908416151415955093505f86612f2657612f218883614155565b612f30565b612f308883614194565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612f7d5760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b6001830154600160801b9004600290810b9083900b1361302557600282810b5f90815290840160205260408120905b8251811015612eb5575f838281518110612fed57612fed613ec6565b6020908102919091018101516001600160a01b03165f9081528782526040808220546001808801909452912055919091019050612fd1565b505050565b6001600160801b038216600f82900b01608081901c15611ef2576393dafdf15f526004601cfd5b5f8181526020868152604080832080546fffffffffffffffffffffffffffffffff19169055868252808320548584528983528184206001600160a01b0390911680855290835281842085855292879052908320549092906130b4906001906140e5565b82549091505f906130c7906001906140e5565b9050808214613127575f8382815481106130e3576130e3613ec6565b905f5260205f20015490508084848154811061310157613101613ec6565b5f91825260209091200155613117836001613f91565b5f91825260208990526040909120555b82805480613137576131376141d3565b5f828152602080822083015f1990810183905590920190925595815296855250506040808620869055959092525050502080546001600160a01b03191690555050565b6040515f90613199908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b815f526001600160a01b03811660045260245ffd5b5f8082116131d7575f80fd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b60020b5f60ff82901d80830118620d89e8811115613298576132987f8b86327a0000000000000000000000000000000000000000000000000000000084613703565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b1860028216156132d4576ffff97272373d413259a46990580e213a0260801c5b60048216156132f3576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613312576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613331576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613350576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561336f576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561338e576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156133ae576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156133ce576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156133ee576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561340e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561342e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561344e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561346e576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561348e576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156134af576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156134cf576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156134ee576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561350b576b048a170391f7dc42444e8fa20260801c5b5f841315613517575f19045b63ffffffff0160201c9392505050565b5f61353562015180836140f8565b611ef290836140e5565b5f611ef26201518083614069565b805f0361355957505050565b60018301546001600160801b03165f0361357257505050565b60018301546001600160801b0316608082901b8161359257613592614055565b6001600160a01b039093165f908152602094909452604090932080549390920492909201905550565b6001840154600160801b9004600290810b905f9084900b821280159061364f575b8260020b8560020b121561364a575f806135fc60038a01868a6001613712565b915091508660020b8260020b136136145750506136b1565b8015613636575f6136268a84896137ff565b90506136328186614194565b9450505b6136416001836141e7565b945050506135dc565b6136b1565b8460020b8360020b12156136b1575f8061366e60038a01868a84613712565b915091508660020b8260020b13156136875750506136b1565b80156136a9575f6136998a84896137ff565b90506136a58186614155565b9450505b50925061364f565b60018701805462ffffff8716600160801b027fffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffff82168117909255612374916001600160801b039081169116178361302a565b815f528060020b60045260245ffd5b5f80600284810b9086900b818107831391900503831561379157600281900b60081d600181900b5f908152602089905260409020545f1960ff808516908190039190911c91821680151595509091908561377357888360ff16860302613786565b8861377d826131cb565b840360ff168603025b9650505050506137f5565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b0119908116801515955092939192856137db57888360ff0360ff168601026137ee565b88836137e6836138a3565b0360ff168601025b9650505050505b5094509492505050565b600282810b5f9081529084016020526040812080546001600160801b0316820361382c575f9150506110ea565b5f5b835181101561388f575f84828151811061384a5761384a613ec6565b6020908102919091018101516001600160a01b03165f9081526001808601808452604080842080548d875291909420549190945292909203905591909101905061382e565b5054600160801b9004600f0b949350505050565b5f8082116138af575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f60a082840312801561394e575f80fd5b509092915050565b5f8083601f840112613966575f80fd5b50813567ffffffffffffffff81111561397d575f80fd5b6020830191508360208260051b8501011115613997575f80fd5b9250929050565b6001600160a01b0381168114610e2d575f80fd5b5f805f604084860312156139c4575f80fd5b833567ffffffffffffffff8111156139da575f80fd5b6139e686828701613956565b90945092505060208401356139fa8161399e565b809150509250925092565b5f8060408385031215613a16575f80fd5b50508035926020909101359150565b5f8060208385031215613a36575f80fd5b823567ffffffffffffffff811115613a4c575f80fd5b613a5885828601613956565b90969095509350505050565b5f8151808452602084019350602083015f5b82811015613a94578151865260209586019590910190600101613a76565b5093949350505050565b606081525f613ab06060830186613a64565b8281036020840152613ac28186613a64565b8381036040850152845180825260208087019350909101905f5b81811015613b035783516001600160801b0316835260209384019390920191600101613adc565b5090979650505050505050565b5f60208284031215613b20575f80fd5b81356110ea8161399e565b8060020b8114610e2d575f80fd5b80356001600160801b0381168114611dd7575f80fd5b5f805f805f805f60e0888a031215613b65575f80fd5b87359650602088013595506040880135613b7e8161399e565b94506060880135613b8e81613b2b565b93506080880135613b9e81613b2b565b925060a0880135613bae81613b2b565b9150613bbc60c08901613b39565b905092959891949750929550565b8015158114610e2d575f80fd5b5f8060408385031215613be8575f80fd5b8235613bf38161399e565b91506020830135613c0381613bca565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715613c5157634e487b7160e01b5f52604160045260245ffd5b60405290565b62ffffff81168114610e2d575f80fd5b5f60a08284031215613c77575f80fd5b613c7f613c22565b90508135613c8c8161399e565b81526020820135613c9c8161399e565b60208201526040820135613caf81613c57565b60408201526060820135613cc281613b2b565b60608201526080820135613cd58161399e565b608082015292915050565b5f8060c08385031215613cf1575f80fd5b613cfb8484613c67565b915060a0830135613c0381613b2b565b5f60208284031215613d1b575f80fd5b5035919050565b5f8060408385031215613d33575f80fd5b823591506020830135613c038161399e565b602081525f6110ea6020830184613a64565b5f805f805f805f60e0888a031215613d6d575f80fd5b87359650602088013595506040880135613d8681613b2b565b94506060880135613d9681613b2b565b93506080880135613da681613b2b565b925060a08801359150613bbc60c08901613b39565b5f805f805f805f80610100898b031215613dd3575f80fd5b8835975060208901359650604089013595506060890135613df381613b2b565b94506080890135613e0381613b2b565b935060a0890135613e1381613b2b565b9250613e2160c08a01613b39565b915060e0890135613e318161399e565b809150509295985092959890939650565b5f805f805f805f60e0888a031215613e58575f80fd5b87359650602088013595506040880135613e7181613b2b565b94506060880135613b8e8161399e565b5f8060408385031215613e92575f80fd5b82359150602083013563ffffffff81168114613c03575f80fd5b5f60a08284031215613ebc575f80fd5b6110ea8383613c67565b634e487b7160e01b5f52603260045260245ffd5b5f60a08284031215613eea575f80fd5b613ef2613c22565b90508151613eff8161399e565b81526020820151613f0f8161399e565b60208201526040820151613f2281613c57565b60408201526060820151613f3581613b2b565b60608201526080820151613cd58161399e565b5f60a08284031215613f58575f80fd5b6110ea8383613eda565b5f60208284031215613f72575f80fd5b81516110ea8161399e565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611ef257611ef2613f7d565b604080825281018390525f8460608301825b86811015613fd4578235825260209283019290910190600101613fb6565b5080925050506001600160a01b0383166020830152949350505050565b5f60208284031215614001575f80fd5b81516110ea81613bca565b63ffffffff8181168382160190811115611ef257611ef2613f7d565b5f81600f0b6f7fffffffffffffffffffffffffffffff19810361404d5761404d613f7d565b5f0392915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261407757614077614055565b500490565b6001600160801b038181168382160190811115611ef257611ef2613f7d565b6001600160801b038281168282160390811115611ef257611ef2613f7d565b5f8060c083850312156140cb575f80fd5b6140d58484613eda565b915060a083015190509250929050565b81810381811115611ef257611ef2613f7d565b5f8261410657614106614055565b500690565b5f6020828403121561411b575f80fd5b5051919050565b8082028115828204841417611ef257611ef2613f7d565b63ffffffff8281168282160390811115611ef257611ef2613f7d565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff1982121715611ef257611ef2613f7d565b600f82810b9082900b036f7fffffffffffffffffffffffffffffff1981126f7fffffffffffffffffffffffffffffff82131715611ef257611ef2613f7d565b634e487b7160e01b5f52603160045260245ffd5b600282810b9082900b03627fffff198112627fffff82131715611ef257611ef2613f7d56fea264697066735822122090851bd6d02de0381817e747a7c536a54b6a8b5ae1504fc9158cebce79a2dab364736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7c98b80aa86acd128f4851175322aa6e751b0cc000000000000000000000000548f93779fbc992010c07467cbaf329dd5f059b700000000000000000000000084016670ed45026bad16ac64c548a61ec2b5404a