0 txs
2.2k calls
constructor
constructor(address _feeRecipient, uint256 _flashLoanFee)
functions
allLBPairs
viewfunction allLBPairs(uint256) view returns (address)
creationUnlocked
viewfunction creationUnlocked() view returns (bool)
feeRecipient
viewfunction feeRecipient() view returns (address)
flashLoanFee
viewfunction flashLoanFee() view returns (uint256)
getAllBinSteps
viewfunction getAllBinSteps() view returns (uint256[] presetsBinStep)
getAllLBPairs
viewfunction getAllLBPairs(address _tokenX, address _tokenY) view returns (tuple[] LBPairsAvailable)
getLBPairInformation
viewfunction getLBPairInformation(address _tokenA, address _tokenB, uint256 _binStep) view returns (tuple)
getNumberOfLBPairs
viewfunction getNumberOfLBPairs() view returns (uint256)
getNumberOfQuoteAssets
viewfunction getNumberOfQuoteAssets() view returns (uint256)
getPreset
viewfunction getPreset(uint16 _binStep) view returns (uint256 baseFactor, uint256 filterPeriod, uint256 decayPeriod, uint256 reductionFactor, uint256 variableFeeControl, uint256 protocolShare, uint256 maxVolatilityAccumulated, uint256 sampleLifetime)
getQuoteAsset
viewfunction getQuoteAsset(uint256 _index) view returns (address)
isQuoteAsset
viewfunction isQuoteAsset(address _token) view returns (bool)
LBPairImplementation
viewfunction LBPairImplementation() view returns (address)
MAX_BIN_STEP
viewfunction MAX_BIN_STEP() view returns (uint256)
MAX_FEE
viewfunction MAX_FEE() view returns (uint256)
MAX_PROTOCOL_SHARE
viewfunction MAX_PROTOCOL_SHARE() view returns (uint256)
MIN_BIN_STEP
viewfunction MIN_BIN_STEP() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
addQuoteAsset
nonpayablefunction addQuoteAsset(address _quoteAsset)
becomeOwner
nonpayablefunction becomeOwner()
createLBPair
nonpayablefunction createLBPair(address _tokenX, address _tokenY, uint24 _activeId, uint16 _binStep) returns (address _LBPair)
forceDecay
nonpayablefunction forceDecay(address _LBPair)
removePreset
nonpayablefunction removePreset(uint16 _binStep)
removeQuoteAsset
nonpayablefunction removeQuoteAsset(address _quoteAsset)
renounceOwnership
nonpayablefunction renounceOwnership()
revokePendingOwner
nonpayablefunction revokePendingOwner()
setFactoryLockedState
nonpayablefunction setFactoryLockedState(bool _locked)
setFeeRecipient
nonpayablefunction setFeeRecipient(address _feeRecipient)
setFeesParametersOnPair
nonpayablefunction setFeesParametersOnPair(address _tokenX, address _tokenY, uint16 _binStep, uint16 _baseFactor, uint16 _filterPeriod, uint16 _decayPeriod, uint16 _reductionFactor, uint24 _variableFeeControl, uint16 _protocolShare, uint24 _maxVolatilityAccumulated)
setFlashLoanFee
nonpayablefunction setFlashLoanFee(uint256 _flashLoanFee)
setLBPairIgnored
nonpayablefunction setLBPairIgnored(address _tokenX, address _tokenY, uint256 _binStep, bool _ignored)
setLBPairImplementation
nonpayablefunction setLBPairImplementation(address _LBPairImplementation)
setPendingOwner
nonpayablefunction setPendingOwner(address pendingOwner_)
setPreset
nonpayablefunction setPreset(uint16 _binStep, uint16 _baseFactor, uint16 _filterPeriod, uint16 _decayPeriod, uint16 _reductionFactor, uint24 _variableFeeControl, uint16 _protocolShare, uint24 _maxVolatilityAccumulated, uint16 _sampleLifetime)
events
FactoryLockedStatusUpdated
event FactoryLockedStatusUpdated(bool unlocked)
FeeParametersSet
event FeeParametersSet(address indexed sender, address indexed LBPair, uint256 binStep, uint256 baseFactor, uint256 filterPeriod, uint256 decayPeriod, uint256 reductionFactor, uint256 variableFeeControl, uint256 protocolShare, uint256 maxVolatilityAccumulated)
FeeRecipientSet
event FeeRecipientSet(address oldRecipient, address newRecipient)
FlashLoanFeeSet
event FlashLoanFeeSet(uint256 oldFlashLoanFee, uint256 newFlashLoanFee)
LBPairCreated
event LBPairCreated(address indexed tokenX, address indexed tokenY, uint256 indexed binStep, address LBPair, uint256 pid)
LBPairIgnoredStateChanged
event LBPairIgnoredStateChanged(address indexed LBPair, bool ignored)
LBPairImplementationSet
event LBPairImplementationSet(address oldLBPairImplementation, address LBPairImplementation)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PendingOwnerSet
event PendingOwnerSet(address indexed pendingOwner)
PresetRemoved
event PresetRemoved(uint256 indexed binStep)
PresetSet
event PresetSet(uint256 indexed binStep, uint256 baseFactor, uint256 filterPeriod, uint256 decayPeriod, uint256 reductionFactor, uint256 variableFeeControl, uint256 protocolShare, uint256 maxVolatilityAccumulated, uint256 sampleLifetime)
QuoteAssetAdded
event QuoteAssetAdded(address indexed quoteAsset)
QuoteAssetRemoved
event QuoteAssetRemoved(address indexed quoteAsset)
errors
BinHelper__BinStepOverflows
error BinHelper__BinStepOverflows(uint256 bp)
BinHelper__IdOverflows
error BinHelper__IdOverflows()
LBFactory__AddressZero
error LBFactory__AddressZero()
LBFactory__BinStepHasNoPreset
error LBFactory__BinStepHasNoPreset(uint256 binStep)
LBFactory__BinStepRequirementsBreached
error LBFactory__BinStepRequirementsBreached(uint256 lowerBound, uint16 binStep, uint256 higherBound)
LBFactory__DecreasingPeriods
error LBFactory__DecreasingPeriods(uint16 filterPeriod, uint16 decayPeriod)
LBFactory__FactoryLockIsAlreadyInTheSameState
error LBFactory__FactoryLockIsAlreadyInTheSameState()
LBFactory__FeesAboveMax
error LBFactory__FeesAboveMax(uint256 fees, uint256 maxFees)
LBFactory__FlashLoanFeeAboveMax
error LBFactory__FlashLoanFeeAboveMax(uint256 fees, uint256 maxFees)
LBFactory__FunctionIsLockedForUsers
error LBFactory__FunctionIsLockedForUsers(address user)
LBFactory__IdenticalAddresses
error LBFactory__IdenticalAddresses(address token)
LBFactory__ImplementationNotSet
error LBFactory__ImplementationNotSet()
LBFactory__LBPairAlreadyExists
error LBFactory__LBPairAlreadyExists(address tokenX, address tokenY, uint256 _binStep)
LBFactory__LBPairIgnoredIsAlreadyInTheSameState
error LBFactory__LBPairIgnoredIsAlreadyInTheSameState()
LBFactory__LBPairNotCreated
error LBFactory__LBPairNotCreated(address tokenX, address tokenY, uint256 binStep)
LBFactory__LBPairSafetyCheckFailed
error LBFactory__LBPairSafetyCheckFailed(address LBPairImplementation)
LBFactory__ProtocolShareOverflows
error LBFactory__ProtocolShareOverflows(uint16 protocolShare, uint256 max)
LBFactory__QuoteAssetAlreadyWhitelisted
error LBFactory__QuoteAssetAlreadyWhitelisted(address quoteAsset)
LBFactory__QuoteAssetNotWhitelisted
error LBFactory__QuoteAssetNotWhitelisted(address quoteAsset)
LBFactory__ReductionFactorOverflows
error LBFactory__ReductionFactorOverflows(uint16 reductionFactor, uint256 max)
LBFactory__SameFeeRecipient
error LBFactory__SameFeeRecipient(address feeRecipient)
LBFactory__SameFlashLoanFee
error LBFactory__SameFlashLoanFee(uint256 flashLoanFee)
LBFactory__SameImplementation
error LBFactory__SameImplementation(address LBPairImplementation)
Math128x128__PowerUnderflow
error Math128x128__PowerUnderflow(uint256 x, int256 y)
PendingOwnable__AddressZero
error PendingOwnable__AddressZero()
PendingOwnable__NoPendingOwner
error PendingOwnable__NoPendingOwner()
PendingOwnable__NotOwner
error PendingOwnable__NotOwner()
PendingOwnable__NotPendingOwner
error PendingOwnable__NotPendingOwner()
PendingOwnable__PendingOwnerAlreadySet
error PendingOwnable__PendingOwnerAlreadySet()
SafeCast__Exceeds16Bits
error SafeCast__Exceeds16Bits(uint256 x)
creation bytecode
0x60806040523480156200001157600080fd5b5060405162002c9038038062002c908339810160408190526200003491620001f0565b6200003f33620000d1565b67016345785d8a00008111156200007f57604051635e8988c160e01b81526004810182905267016345785d8a000060248201526044015b60405180910390fd5b6200008a826200012b565b60048190556040805160008152602081018390527f5c34e91c94c78b662a45d0bd4a25a4e32c584c54a45a76e4a4d43be27ba40e50910160405180910390a150506200022c565b600080546001600160a01b038381166001600160a01b031980841682178555600180549091169055604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166200015357604051632573cfb960e21b815260040160405180910390fd5b6003546001600160a01b039081169082168114156200019157604051634fcea97160e01b81526001600160a01b038316600482015260240162000076565b600380546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa70840152721910160405180910390a15050565b600080604083850312156200020457600080fd5b82516001600160a01b03811681146200021c57600080fd5b6020939093015192949293505050565b612a54806200023c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063704037bd11610145578063bc063e1a116100bd578063e30c39781161008c578063e92d0d5d11610071578063e92d0d5d146104dd578063f89a4cd5146104f0578063f9dca9891461050357600080fd5b8063e30c3978146104b9578063e74b981b146104ca57600080fd5b8063bc063e1a14610471578063c42069ec14610480578063ddbfd94114610493578063e203a31f146104a657600080fd5b806380c5061e11610114578063935ea51b116100f9578063935ea51b14610407578063a931208f14610455578063b03847811461045e57600080fd5b806380c5061e146103ee5780638da5cb5b146103f657600080fd5b8063704037bd146103ab578063715018a6146103cb57806372e47b8c146103d35780637df880e3146103e657600080fd5b80634847cdc8116101d85780635b35875c116101a7578063659ac74b1161018c578063659ac74b146103705780636622e0d71461038357806367ab8a4e146103a357600080fd5b80635b35875c146103475780635c779d6d1461035c57600080fd5b80634847cdc8146103105780634e937c3a14610319578063509ceb90146103215780635a4409231461033457600080fd5b806322f3fe141161021457806322f3fe141461029c57806327721842146102af5780633c78a941146102d257806346904840146102e557600080fd5b8063093ff769146102465780630af97c9a1461025b57806310e9ec4a1461026e578063200aa7e314610289575b600080fd5b610259610254366004612524565b61050b565b005b6102596102693660046125e2565b610693565b610276606481565b6040519081526020015b60405180910390f35b61025961029736600461269a565b6107da565b6102596102aa3660046126eb565b61097e565b6102c26102bd366004612706565b610a4c565b6040519015158152602001610280565b6102596102e0366004612706565b610a5f565b6003546102f8906001600160a01b031681565b6040516001600160a01b039091168152602001610280565b61027660045481565b600554610276565b6002546102f8906001600160a01b031681565b610259610342366004612706565b610ae0565b61034f610b75565b6040516102809190612723565b6003546102c290600160a01b900460ff1681565b6102f861037e366004612767565b610c28565b6103966103913660046127b4565b61122e565b60405161028091906127ed565b6102596113fd565b6103be6103b9366004612861565b61145d565b60405161028091906128a2565b610259611494565b6102f86103e13660046128de565b6114c9565b610276600181565b6102766114f3565b6000546001600160a01b03166102f8565b61041a6104153660046128f7565b611504565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610280565b6102766109c481565b61025961046c366004612706565b611604565b61027667016345785d8a000081565b61025961048e366004612706565b611769565b6102596104a1366004612706565b6117f1565b6102596104b43660046128f7565b611886565b6001546001600160a01b03166102f8565b6102596104d8366004612706565b611957565b6102596104eb3660046128de565b61198b565b6102f86104fe3660046128de565b611a52565b610259611a5f565b6000546001600160a01b0316331461053657604051639f216c1360e01b815260040160405180910390fd5b60006105478b8b8b61ffff16611a9e565b6020015190506001600160a01b0381166105965760405163b65ee95360e01b81526001600160a01b03808d1660048301528b16602482015261ffff8a1660448201526064015b60405180910390fd5b60006105a88a8a8a8a8a8a8a8a611b48565b6040516354b5fc8760e01b8152600481018290529091506001600160a01b038316906354b5fc8790602401600060405180830381600087803b1580156105ed57600080fd5b505af1158015610601573d6000803e3d6000fd5b50506040805161ffff8e811682528d811660208301528c8116828401528b811660608301528a8116608083015262ffffff8a811660a084015290891660c0830152871660e082015290516001600160a01b03861693503392507f63a7af39b7b68b9c3f2dfe93e5f32d9faecb4c6c98733bb608f757e62f816c0d918190036101000190a3505050505050505050505050565b6000546001600160a01b031633146106be57604051639f216c1360e01b815260040160405180910390fd5b60006106d08a8a8a8a8a8a8a8a611b48565b61ffff8b16600081815260086020526040902060f085901b7fffff0000000000000000000000000000000000000000000000000000000000001671ffffffffffffffffffffffffffffffffffff84161790819055600754929350919081901c60011661075557600161ffff8d161b1761074d81600160f81b612928565b600781905590505b6040805161ffff8d811682528c811660208301528b8116828401528a8116606083015262ffffff8a8116608084015289821660a0840152881660c083015286811660e08301529151918e16917f2f6cfdcc0e02e7355350f527dd3b5a957787b96f231165e48a3fdf90332a40cb918190036101000190a2505050505050505050505050565b6000546001600160a01b0316331461080557604051639f216c1360e01b815260040160405180910390fd5b6000806108128686611dbc565b6001600160a01b038083166000908152600660209081526040808320848616845282528083208a84528252918290208251608081018452905461ffff8116825262010000810490941691810182905260ff600160b01b85048116151593820193909352600160b81b90930490911615156060830152929450909250906108ab57604051632573cfb960e21b815260040160405180910390fd5b8315158160600151151514156108d357604051626ee66560e11b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320868516845282528083208984528252918290208054881515600160b81b027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff90911617905583015190519116907f44cf35361c9ff3c8c1397ec6410d5495cc481feaef35c9af11da1a637107de4f9061096d90871515815260200190565b60405180910390a250505050505050565b6000546001600160a01b031633146109a957604051639f216c1360e01b815260040160405180910390fd5b60035460ff600160a01b909104161515811515146109da576040516302dbbca560e21b815260040160405180910390fd5b60038054600160a01b8315027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517fcdee7bf87b7a743b4cbe1d2d534c5248621b76f58460337e7fda92d5d23f412490610a4190831515815260200190565b60405180910390a150565b6000610a59600983611de5565b92915050565b6000546001600160a01b03163314610a8a57604051639f216c1360e01b815260040160405180910390fd5b806001600160a01b031663d3b9fbe46040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610b0b57604051639f216c1360e01b815260040160405180910390fd5b610b16600982611e0a565b610b3e576040516303ce0ad960e01b81526001600160a01b038216600482015260240161058d565b6040516001600160a01b038216907f84cc2115995684dcb0cd3d3a9565e3d32f075de81db70c8dc3a719b2a47af67e90600090a250565b60075460609060f881901c8015610c23578067ffffffffffffffff811115610b9f57610b9f612940565b604051908082528060200260200182016040528015610bc8578160200160208202803683370190505b509250600060015b60648111610c205783811c60011660011415610c185780858381518110610bf957610bf9612956565b60200260200101818152505082826001019250821415610c1857610c20565b600101610bd0565b50505b505090565b600080610c3d6000546001600160a01b031690565b600354909150600160a01b900460ff16158015610c635750336001600160a01b03821614155b15610c8257604051627487d360e71b815233600482015260240161058d565b6002546001600160a01b031680610cac576040516328b4fcf960e21b815260040160405180910390fd5b610cb7600987611de5565b610cdf57604051638e888ef360e01b81526001600160a01b038716600482015260240161058d565b856001600160a01b0316876001600160a01b03161415610d1d57604051632f9b185360e01b81526001600160a01b038816600482015260240161058d565b610d308562ffffff168561ffff16611e1f565b50600080610d3e8989611dbc565b90925090506001600160a01b038216610d6a57604051632573cfb960e21b815260040160405180910390fd5b6001600160a01b0382811660009081526006602090815260408083208585168452825280832061ffff8b1684529091529020546201000090041615610ddf5760405163cb27a43560e01b81526001600160a01b03808b1660048301528916602482015261ffff8716604482015260640161058d565b61ffff861660009081526008602052604090205480610e1757604051637d9160bf60e11b815261ffff8816600482015260240161058d565b604080516001600160a01b038581166020808401919091529085168284015261ffff8a16606080840191909152835180840390910181526080909201909252805191012071ffffffffffffffffffffffffffffffffffff82169160f01c90610e7f8682611e5f565b60405163d32db43760e01b81526001600160a01b038e811660048301528d8116602483015262ffffff8d16604483015261ffff85166064830152608482018690529199509089169063d32db4379060a401600060405180830381600087803b158015610eea57600080fd5b505af1158015610efe573d6000803e3d6000fd5b5050505060405180608001604052808a61ffff168152602001896001600160a01b03168152602001886001600160a01b0316336001600160a01b031614151581526020016000151581525060066000876001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff16815260200190815260200160002060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160000160166101000a81548160ff02191690831515021790555060608201518160000160176101000a81548160ff0219169083151502179055509050506005889080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055506000600b6000876001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000205490508961ffff166001901b8160001c1760001b90508060001c600160f81b6110f59190612928565b6001600160a01b038088166000908152600b602090815260408083208a8516845290915290209190915560055461ffff8c1692508d8216918f16907f2c8d104b27c6b7f4492017a6f5cf3803043688934ebcaa6a03540beeaf976aff908c906111609060019061296c565b604080516001600160a01b03909316835260208301919091520160405180910390a46040805161ffff808c168252601086901c811660208381019190915286901c811682840152603086901c8116606083015285831c8116608083015262ffffff605087901c811660a0840152606887901c90911660c0830152607886901c1660e082015290516001600160a01b038a169133917f63a7af39b7b68b9c3f2dfe93e5f32d9faecb4c6c98733bb608f757e62f816c0d918190036101000190a350505050505050949350505050565b606060008061123d8585611dbc565b6001600160a01b038281166000908152600b6020908152604080832093851683529290522054919350915060f881901c80156113f3578067ffffffffffffffff81111561128c5761128c612940565b6040519080825280602002602001820160405280156112de57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816112aa5790505b509450600060015b606481116113f05783811c600116600114156113e8576001600160a01b03808716600090815260066020908152604080832089851684528252808320858452825291829020825160808082018552915461ffff811682526201000081049095169281019290925260ff600160b01b85048116151583850152600160b81b909404909316151560608201528151928301909152908061138384611f16565b61ffff16815260200182602001516001600160a01b03168152602001826040015115158152602001826060015115158152508884815181106113c7576113c7612956565b6020026020010181905250838360010193508314156113e657506113f0565b505b6001016112e6565b50505b5050505092915050565b6000546001600160a01b0316331461142857604051639f216c1360e01b815260040160405180910390fd5b6001546001600160a01b03166114515760405163ecfad6bf60e01b815260040160405180910390fd5b61145b6000611f43565b565b60408051608081018252600080825260208201819052918101829052606081019190915261148c848484611a9e565b949350505050565b6000546001600160a01b031633146114bf57604051639f216c1360e01b815260040160405180910390fd5b61145b6000611f8d565b600581815481106114d957600080fd5b6000918252602090912001546001600160a01b0316905081565b60006114ff6009611fe7565b905090565b61ffff811660009081526008602052604081205481908190819081908190819081908061154a57604051637d9160bf60e11b815261ffff8b16600482015260240161058d565b600061ffff82168b61ffff161461156057600080fd5b61157a61ffff611571601084612928565b925083831c1690565b995061158d61ffff611571601084612928565b98506115a061ffff611571601084612928565b97506115b361ffff611571601084612928565b96506115c762ffffff611571601084612928565b95506115da61ffff611571601884612928565b94506115ee62ffffff611571601084612928565b935060f082901c92505050919395975091939597565b6000546001600160a01b0316331461162f57604051639f216c1360e01b815260040160405180910390fd5b306001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190612983565b6001600160a01b0316146116cd57604051630a3e70af60e11b81526001600160a01b038216600482015260240161058d565b6002546001600160a01b0390811690821681141561170957604051630ded3b9560e31b81526001600160a01b038316600482015260240161058d565b600280546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f900d0e3d359f50e4f923ecdc06b401e07dbb9f485e17b07bcfc91a13000b277e91015b60405180910390a15050565b6000546001600160a01b0316331461179457604051639f216c1360e01b815260040160405180910390fd5b6001600160a01b0381166117bb576040516391f3851560e01b815260040160405180910390fd5b6001546001600160a01b0316156117e55760405163716b1fbf60e01b815260040160405180910390fd5b6117ee81611f43565b50565b6000546001600160a01b0316331461181c57604051639f216c1360e01b815260040160405180910390fd5b611827600982611ff1565b61184f57604051638e888ef360e01b81526001600160a01b038216600482015260240161058d565b6040516001600160a01b038216907f0b767739217755d8af5a2ba75b181a19fa1750f8bb701f09311cb19a90140cb390600090a250565b6000546001600160a01b031633146118b157604051639f216c1360e01b815260040160405180910390fd5b61ffff81166000908152600860205260409020546118e857604051637d9160bf60e11b815261ffff8216600482015260240161058d565b6007546118fe600161ffff84161b60001961296c565b1661190d600160f81b8261296c565b600781905561ffff83166000818152600860205260408082208290555192935090917fdd86b848bb56ff540caa68683fa467d0e7eb5f8b2d44e4ee435742eeeae9be139190a25050565b6000546001600160a01b0316331461198257604051639f216c1360e01b815260040160405180910390fd5b6117ee81612006565b6000546001600160a01b031633146119b657604051639f216c1360e01b815260040160405180910390fd5b600454818114156119dd57604051631baa31e960e21b81526004810183905260240161058d565b67016345785d8a0000821115611a1757604051635e8988c160e01b81526004810183905267016345785d8a0000602482015260440161058d565b600482905560408051828152602081018490527f5c34e91c94c78b662a45d0bd4a25a4e32c584c54a45a76e4a4d43be27ba40e50910161175d565b6000610a596009836120c1565b6001546001600160a01b031633141580611a77575033155b15611a9557604051633982680960e11b815260040160405180910390fd5b61145b33611f8d565b604080516080810182526000808252602082018190529181018290526060810191909152611acc8484611dbc565b6001600160a01b03918216600090815260066020908152604080832093851683529281528282209582529485528190208151608081018352905461ffff811682526201000081049093169481019490945260ff600160b01b83048116151591850191909152600160b81b90910416151560608301525092915050565b600060018961ffff161080611b61575060648961ffff16115b15611b9357604051634f95635f60e11b81526001600482015261ffff8a1660248201526064604482018190520161058d565b8561ffff168761ffff1610611bc95760405163744d432160e11b815261ffff80891660048301528716602482015260440161058d565b6127108561ffff161115611bfe5760405163632afa6960e11b815261ffff86166004820152612710602482015260440161058d565b6109c48361ffff161115611c3357604051630d0ada2960e41b815261ffff841660048201526109c4602482015260440161058d565b6000611c4661ffff808c16908b166129a0565b611c55906402540be4006129a0565b90506000611c6c61ffff8c1662ffffff86166129a0565b90506000606462ffffff8816611c8284806129a0565b611c8c91906129a0565b611c9691906129bf565b905067016345785d8a0000611cab8285612928565b1115611ce657611cbb8184612928565b604051633fb210a760e21b8152600481019190915267016345785d8a0000602482015260440161058d565b50506040805171ffffff000000000000000000000000000000607886901b1660208201527fffff00000000000000000000000000000000000000000000000000000000000060f087811b821660318401527fffffff000000000000000000000000000000000000000000000000000000000060e88a901b16603384015289811b821660368401528a811b821660388401528b811b8216603a8401528c811b8216603c8401528d901b16603e820152019050604051602081830303815290604052611daf906129e1565b9998505050505050505050565b600080826001600160a01b0316846001600160a01b03161115611ddd579192915b509192909150565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000611e03836001600160a01b0384166120cd565b600062ffffff831115611e455760405163163d8bab60e21b815260040160405180910390fd5b627fffff19830161148c81611e598561211c565b90612162565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f59150506001600160a01b038116610a595760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161058d565b8061ffff81168114611f3e5760405163506fbff560e01b81526004810183905260240161058d565b919050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f68f49b346b94582a8b5f9d10e3fe3365318fe8f191ff8dce7c59c6cad06b02f590600090a250565b600080546001600160a01b038381166001600160a01b031980841682178555600180549091169055604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a59825490565b6000611e03836001600160a01b0384166123cd565b6001600160a01b03811661202d57604051632573cfb960e21b815260040160405180910390fd5b6003546001600160a01b0390811690821681141561206957604051634fcea97160e01b81526001600160a01b038316600482015260240161058d565b600380546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa70840152721910161175d565b6000611e0383836124c0565b600081815260018301602052604081205461211457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a59565b506000610a59565b600081158061212c575061271082115b1561214d576040516374da1e1160e11b81526004810183905260240161058d565b612710608083901b04600160801b0192915050565b600080808361217a5750600160801b9150610a599050565b5082600081121561218c579015906000035b6210000081101561238557600160801b9250846fffffffffffffffffffffffffffffffff8111156121bf57911591600019045b60018216156121d05792830260801c925b800260801c60028216156121e65792830260801c925b800260801c60048216156121fc5792830260801c925b800260801c60088216156122125792830260801c925b800260801c60108216156122285792830260801c925b800260801c602082161561223e5792830260801c925b800260801c60408216156122545792830260801c925b8002608090811c9082161561226b5792830260801c925b800260801c6101008216156122825792830260801c925b800260801c6102008216156122995792830260801c925b800260801c6104008216156122b05792830260801c925b800260801c6108008216156122c75792830260801c925b800260801c6110008216156122de5792830260801c925b800260801c6120008216156122f55792830260801c925b800260801c61400082161561230c5792830260801c925b800260801c6180008216156123235792830260801c925b800260801c6201000082161561233b5792830260801c925b800260801c620200008216156123535792830260801c925b800260801c6204000082161561236b5792830260801c925b800260801c620800008216156123835792830260801c925b505b826123ad57604051630e9c7d6160e31b8152600481018690526024810185905260440161058d565b816123b857826123c4565b6123c4836000196129bf565b95945050505050565b600081815260018301602052604081205480156124b65760006123f160018361296c565b85549091506000906124059060019061296c565b905081811461246a57600086600001828154811061242557612425612956565b906000526020600020015490508087600001848154811061244857612448612956565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061247b5761247b612a08565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a59565b6000915050610a59565b60008260000182815481106124d7576124d7612956565b9060005260206000200154905092915050565b6001600160a01b03811681146117ee57600080fd5b803561ffff81168114611f3e57600080fd5b803562ffffff81168114611f3e57600080fd5b6000806000806000806000806000806101408b8d03121561254457600080fd5b8a3561254f816124ea565b995060208b013561255f816124ea565b985061256d60408c016124ff565b975061257b60608c016124ff565b965061258960808c016124ff565b955061259760a08c016124ff565b94506125a560c08c016124ff565b93506125b360e08c01612511565b92506125c26101008c016124ff565b91506125d16101208c01612511565b90509295989b9194979a5092959850565b60008060008060008060008060006101208a8c03121561260157600080fd5b61260a8a6124ff565b985061261860208b016124ff565b975061262660408b016124ff565b965061263460608b016124ff565b955061264260808b016124ff565b945061265060a08b01612511565b935061265e60c08b016124ff565b925061266c60e08b01612511565b915061267b6101008b016124ff565b90509295985092959850929598565b80358015158114611f3e57600080fd5b600080600080608085870312156126b057600080fd5b84356126bb816124ea565b935060208501356126cb816124ea565b9250604085013591506126e06060860161268a565b905092959194509250565b6000602082840312156126fd57600080fd5b611e038261268a565b60006020828403121561271857600080fd5b8135611e03816124ea565b6020808252825182820181905260009190848201906040850190845b8181101561275b5783518352928401929184019160010161273f565b50909695505050505050565b6000806000806080858703121561277d57600080fd5b8435612788816124ea565b93506020850135612798816124ea565b92506127a660408601612511565b91506126e0606086016124ff565b600080604083850312156127c757600080fd5b82356127d2816124ea565b915060208301356127e2816124ea565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561275b5761284e83855161ffff81511682526001600160a01b0360208201511660208301526040810151151560408301526060810151151560608301525050565b9284019260809290920191600101612809565b60008060006060848603121561287657600080fd5b8335612881816124ea565b92506020840135612891816124ea565b929592945050506040919091013590565b815161ffff1681526020808301516001600160a01b03169082015260408083015115159082015260608083015115159082015260808101610a59565b6000602082840312156128f057600080fd5b5035919050565b60006020828403121561290957600080fd5b611e03826124ff565b634e487b7160e01b600052601160045260246000fd5b6000821982111561293b5761293b612912565b500190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008282101561297e5761297e612912565b500390565b60006020828403121561299557600080fd5b8151611e03816124ea565b60008160001904831182151516156129ba576129ba612912565b500290565b6000826129dc57634e487b7160e01b600052601260045260246000fd5b500490565b80516020808301519190811015612a02576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203b9f852cba9b69a7ead4adbbe5d3e43b7890dce2e48797cee6fa9fbfe22e2e6f64736f6c634300080a00330000000000000000000000001119fbb02f38764cd90f2d9fb35fedcd8378ac2a0000000000000000000000000000000000000000000000000000048c27395000