0 txs
408 calls
constructor
No constructor.
functions
allocateToWithdraw
viewfunction allocateToWithdraw(address) view returns (uint256)
currentEpoch
viewfunction currentEpoch() view returns (uint256)
currentEpochChanger
viewfunction currentEpochChanger() view returns (address)
currentForceEpochChanger
viewfunction currentForceEpochChanger() view returns (address)
currentJailer
viewfunction currentJailer() view returns (address)
epochToMpc
viewfunction epochToMpc(uint256) view returns (address)
eventLogger
viewfunction eventLogger() view returns (address)
getActiveSignersTotalStake
viewfunction getActiveSignersTotalStake() view returns (uint256)
getMpcGroupByEpoch
viewfunction getMpcGroupByEpoch(uint256 epoch) view returns (address[])
getRelayersLength
viewfunction getRelayersLength() view returns (uint256)
getSignatureBaseForChangeEpoch
viewfunction getSignatureBaseForChangeEpoch(address mpcAddress, address[] mpcGroup) view returns (bytes32)
getVetoGroupThreshold
viewfunction getVetoGroupThreshold() view returns (uint256)
indexCounter
viewfunction indexCounter() view returns (uint256)
isJailed
viewfunction isJailed(address) view returns (bool)
isVeto
viewfunction isVeto(address) view returns (bool)
mpcToLeader
viewfunction mpcToLeader(address) view returns (address)
mpcToMpcGroup
viewfunction mpcToMpcGroup(address, uint256) view returns (address)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
prepareEpochNonce
viewfunction prepareEpochNonce() view returns (uint256)
previousChangeEpochTimestamp
viewfunction previousChangeEpochTimestamp() view returns (uint256)
relayers
viewfunction relayers(uint256) view returns (address)
relayerToIndex
viewfunction relayerToIndex(address) view returns (uint256)
rewardCounter
viewfunction rewardCounter() view returns (address)
stake
viewfunction stake(uint256) view returns (uint256 amount, address relayer, address validator, uint256 toExit, uint256 toEnter)
stakedNumber
viewfunction stakedNumber() view returns (uint256)
stakeNumberThreshold
viewfunction stakeNumberThreshold() view returns (uint256)
stakerToValidator
viewfunction stakerToValidator(address) view returns (address)
stakeThreshold
viewfunction stakeThreshold() view returns (uint256)
token
viewfunction token() view returns (address)
totalStaked
viewfunction totalStaked() view returns (uint256)
validatorBeacon
viewfunction validatorBeacon() view returns (address)
validatorToIndex
viewfunction validatorToIndex(address) view returns (uint256)
vetoCount
viewfunction vetoCount() view returns (uint256)
wasEpochChanger
viewfunction wasEpochChanger(address) view returns (bool)
wasForceEpochChanger
viewfunction wasForceEpochChanger(address) view returns (bool)
wasJailer
viewfunction wasJailer(address) view returns (bool)
withdrawDelay
viewfunction withdrawDelay() view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
changeEpoch
nonpayablefunction changeEpoch(address mpcAddress, address[] mpcGroup, bytes[] sigs)
changeRelayer
nonpayablefunction changeRelayer(uint256 index, address newRelayer)
enter
nonpayablefunction enter(address _user, uint256 _amount, address _relayer)
exit
nonpayablefunction exit(uint256 index, uint256 amount)
initialize
nonpayablefunction initialize(address _token, address _rewardCounter, address _validatorBeacon, address _eventLogger, uint256 _stakeThreshold)
prepareEpochChange
nonpayablefunction prepareEpochChange()
renounceOwnership
nonpayablefunction renounceOwnership()
restake
nonpayablefunction restake(uint256 index, uint256 amount)
setEpochChanger
nonpayablefunction setEpochChanger(address _epochChanger)
setEventLogger
nonpayablefunction setEventLogger(address _eventLogger)
setForceEpochChanger
nonpayablefunction setForceEpochChanger(address _forceEpochChanger)
setJailedStatus
nonpayablefunction setJailedStatus(address _validator, bool _status)
setJailer
nonpayablefunction setJailer(address _jailer)
setStakeNumberThreshold
nonpayablefunction setStakeNumberThreshold(uint256 _newThreshold)
setStakeThreshold
nonpayablefunction setStakeThreshold(uint256 _newThreshold)
setValidatorBeacon
nonpayablefunction setValidatorBeacon(address newValidatorBeacon)
setVeto
nonpayablefunction setVeto(address validator, bool status)
setWithdrawDelay
nonpayablefunction setWithdrawDelay(uint256 _withdrawDelay)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw() returns (uint256)
events
Entered
event Entered(uint256 index, address indexed staker, uint256 amount, address relayer, uint256 epoch)
EpochChanged
event EpochChanged(uint256 currentEpoch, address[] mpcGroup, address mpcAddress, address leader, address[] signedRelayers, uint256[] signedStake)
EpochChangerSet
event EpochChangerSet(address epochChanger)
EpochSet
event EpochSet(uint256 epoch)
EventLoggerSet
event EventLoggerSet(address eventLogger)
Exited
event Exited(uint256 index, address indexed validator, uint256 amount, address relayer, uint256 epoch)
ForceEpochSenderSet
event ForceEpochSenderSet(address forceEpochChanger)
Initialized
event Initialized(uint64 version)
JailedStatusSet
event JailedStatusSet(address validator, bool status)
JailerSet
event JailerSet(address jailer)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PrepareEpochChange
event PrepareEpochChange(bytes32 hash, uint256 nextEpoch)
RelayerChanged
event RelayerChanged(uint256 index, address validator, address newRelayer)
Restaked
event Restaked(uint256 index, uint256 amount)
StakeNumberThresholdSet
event StakeNumberThresholdSet(uint256 newThreshold)
StakeThresholdSet
event StakeThresholdSet(uint256 newThreshold)
ValidatorBeaconSet
event ValidatorBeaconSet(address validatorBeacon)
VetoSet
event VetoSet(address validator, bool status)
WithdrawDelaySet
event WithdrawDelaySet(uint256 withdrawDelay)
Withdrawn
event Withdrawn(address validator, uint256 amount)
errors
AlreadyInStake
error AlreadyInStake(address user)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
IncorrectIndex
error IncorrectIndex()
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature(uint256 index)
KeyAlreadyUsed
error KeyAlreadyUsed(address key)
MpcAddressUsed
error MpcAddressUsed(address mpcAddress)
NewRelayerInUse
error NewRelayerInUse(address newRelayer)
NodeAddressIsStaker
error NodeAddressIsStaker(address relayer, address user)
NoMoreSlots
error NoMoreSlots()
NonMajority
error NonMajority()
NotEnoughTokens
error NotEnoughTokens(uint256 available, uint256 requested)
NotEnoughVetoSignatures
error NotEnoughVetoSignatures(uint256 threshold, uint256 signed)
NotInitializing
error NotInitializing()
NoTokensToWithdraw
error NoTokensToWithdraw()
NotStaker
error NotStaker()
NotStakerValidator
error NotStakerValidator(address validator)
NotVetoGroup
error NotVetoGroup()
NotWholeMpcGroupSigned
error NotWholeMpcGroupSigned(uint256 groupLength, uint256 signed)
NotYourIndex
error NotYourIndex(address sender, uint256 index)
NotYourStake
error NotYourStake(address sender, uint256 index)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
RelayerAlreadyInStake
error RelayerAlreadyInStake(address relayer)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SignerCannotSign
error SignerCannotSign(uint256 index)
SortingError
error SortingError(uint256 index)
UnderThreshold
error UnderThreshold(uint256 amount, uint256 threshold)
ZeroIndex
error ZeroIndex()
creation bytecode
0x608060405234801561001057600080fd5b506141c0806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620002e65760003560e01c80630288a39c14620002eb57806304d6e850146200030857806308d3ee0d146200032157806314bfb527146200033857806317987586146200036f5780631a78c1a914620003865780631e49ca4514620003905780631ec9c7b114620003b65780632026be4d14620003cd57806324ff3a1014620003e45780632779663c146200040a57806329991184146200041e5780632af9cc4114620004325780632d32f9ec1462000449578063390be9fc14620004535780633ccfd60b146200046a578063417c3f7114620004745780634c6423e1146200048b5780635f011eaa146200049f578063715018a614620004b357806372bef5fe14620004bd57806372cdef3f14620004d457806372f0cb3014620004de57806373b99a0314620004f557806375618cc314620004ff57806376671808146200051657806379ba509714620005205780637a78c70b146200052a5780637d8c53a8146200053e578063817b1cd21462000548578063871d179414620005525780638da5cb5b146200055c578063920eb42614620005665780639834d1fa146200059257806398fba8a014620005a95780639a48e7f914620005cf578063a1ee9b1e14620005e6578063a694fc3a146200060c578063aab3a2de146200068d578063ac952f511462000697578063af6c455614620006ba578063b6a9a33414620006c4578063b8e7023d14620006db578063bb0e22ea14620006f2578063bba733e0146200071e578063bbfba2d21462000735578063c50e215a1462000749578063cbb91b0d146200076f578063cd308550146200079b578063cdbd19e014620007a5578063e30c397814620007c8578063ef7678d614620007d2578063f11f77f914620007f8578063f22b4e0b1462000802578063f2fde38b1462000819578063f7013ef61462000830578063f95e2cfe1462000847578063fa9344991462000850578063fc0c546a1462000873575b600080fd5b620002f5601c5481565b6040519081526020015b60405180910390f35b6200031f6200031936600462003425565b62000887565b005b6200031f6200033236600462003425565b620008e9565b6200035e6200034936600462003425565b600d6020526000908152604090205460ff1681565b6040519015158152602001620002ff565b6200031f620003803660046200344c565b62000a42565b620002f560115481565b6200035e620003a136600462003425565b60166020526000908152604090205460ff1681565b620002f5620003c73660046200352c565b62000a82565b6200031f620003de36600462003581565b62000af0565b620003fb620003f5366004620035c3565b62000c0a565b604051620002ff9190620035f2565b600754620003fb906001600160a01b031681565b601d54620003fb906001600160a01b031681565b6200031f6200044336600462003606565b62000c43565b620002f562000e5d565b6200031f6200046436600462003629565b62000f26565b620002f562001338565b6200031f6200048536600462003581565b620013aa565b601b54620003fb906001600160a01b031681565b600954620003fb906001600160a01b031681565b6200031f6200149b565b6200031f620004ce36600462003425565b620014b3565b620002f560135481565b6200031f620004ef3660046200344c565b620015ec565b620002f560045481565b6200031f6200051036600462003425565b62001672565b620002f5600b5481565b6200031f620016c9565b600554620003fb906001600160a01b031681565b6200031f6200170f565b620002f5600e5481565b620002f560105481565b620003fb62001854565b620003fb6200057736600462003425565b6019602052600090815260409020546001600160a01b031681565b6200031f620005a336600462003670565b62001871565b6200035e620005ba36600462003425565b60066020526000908152604090205460ff1681565b620003fb620005e03660046200344c565b62001a23565b6200035e620005f736600462003425565b60086020526000908152604090205460ff1681565b620006586200061d3660046200344c565b6000602081905290815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001620002ff565b620002f5600f5481565b620002f5620006a836600462003425565b60146020526000908152604090205481565b620002f560125481565b6200031f620006d53660046200344c565b62001a4e565b6200031f620006ec36600462003606565b62001a8e565b620003fb6200070336600462003425565b6017602052600090815260409020546001600160a01b031681565b6200031f6200072f36600462003720565b62001b63565b601e54620003fb906001600160a01b031681565b6200035e6200075a36600462003425565b600a6020526000908152604090205460ff1681565b620003fb620007803660046200344c565b601a602052600090815260409020546001600160a01b031681565b620002f562001cbd565b620002f5620007b636600462003425565b600c6020526000908152604090205481565b620003fb62001cf3565b620007e9620007e33660046200344c565b62001d00565b604051620002ff91906200378f565b620002f560035481565b6200031f6200081336600462003425565b62001d81565b6200031f6200082a36600462003425565b62001ec6565b6200031f62000841366004620037a4565b62001f3d565b600154620002f5565b620002f56200086136600462003425565b60156020526000908152604090205481565b600254620003fb906001600160a01b031681565b620008916200209d565b601e80546001600160a01b0319166001600160a01b0383161790556040517fefd12c231e076810cd3ecd2cac4ec4ca3065586e3363ecb096943d64d1c1d75090620008de908390620035f2565b60405180910390a150565b6009546001600160a01b0316331480620009145750336200090962001854565b6001600160a01b0316145b6200099b5760405162461bcd60e51b815260206004820152604660248201527f6f6e6c794f776e65724f72466f72636545706f63684368616e6765723a204f6e60448201527f6c79206f776e6572206f7220666f72636545706f63684368616e6765722063616064820152651b8818d85b1b60d21b608482015260a4015b60405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff1615620009d95780604051620d0aed60e01b8152600401620009929190620035f2565b600980546001600160a01b0319166001600160a01b0383169081179091556000908152600a602052604090819020805460ff19166001179055517f39a3d679b2a86f0c3969df749c798c588c48725e6858938e11f8be97c4d3bf8190620008de908390620035f2565b62000a4c6200209d565b60048190556040518181527fc66afb57e4610380d5fdda59bac6eab7ab0294134864556ffa3507ddb628222d90602001620008de565b60008260601b8260405160200162000a9b91906200378f565b604051602081830303815290604052600b54600162000abb919062003827565b60405162000ad193929190469060200162003863565b6040516020818303038152906040528051906020012090505b92915050565b62000afa6200209d565b80151560010362000b49576001600160a01b03821660009081526016602052604090205460ff16151560011462000b43576011805490600062000b3d83620038b6565b91905055505b62000ba6565b6001600160a01b03821660009081526016602052604090205460ff161562000ba6576011805490600062000b7d83620038d2565b919050555060115460000362000ba6576040516314d9f74d60e11b815260040160405180910390fd5b6001600160a01b03821660009081526016602052604090819020805460ff1916831515179055517f3cf6b0d2bc5732b5f99c74a0bd71d8ffdd270f220ec4081f118cf43996d033339062000bfe9084908490620038ec565b60405180910390a15050565b6018602052816000526040600020818154811062000c2757600080fd5b6000918252602090912001546001600160a01b03169150829050565b8160000362000c655760405163a48dcc3d60e01b815260040160405180910390fd5b33600090815260146020526040902054821462000c9b5733826040516323597ba760e01b81526004016200099292919062003907565b8060000362000d49576000828152602081905260409020600381015460048201549154909162000ccb9162003827565b62000cd7919062003920565b6000838152602081905260408120600481015481549394509290919062000d0090849062003827565b9091555050600082815260208190526040812060040154600e80549192909162000d2c90849062003827565b909155505060008281526020819052604081206004015562000db1565b600082815260208190526040902060038101549054829162000d6b9162003920565b101562000db15760008281526020819052604090206003810154905462000d93919062003920565b81604051636584853f60e01b81526004016200099292919062003936565b8060000362000dd357604051637dd28aa760e11b815260040160405180910390fd5b6000828152602081905260408120600301805483929062000df690849062003827565b90915550506000828152602081905260409081902060010154600b54915133927fcea7c9ff4e23c7da407791a56b5dfe131e42876ee7ff56df79c38ba346552c699262000e5192879287926001600160a01b03169162003944565b60405180910390a25050565b600080805b60015481101562000f20576000601560006001848154811062000e895762000e8962003968565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822054808352828252838320600201549094168252600d9052205490915060ff1615801562000ef2575060008181526020819052604090208054600390910154105b1562000f165760008181526020819052604090205462000f13908462003827565b92505b5060010162000e62565b50919050565b6010546001600160a01b03848116600090815260176020526040902054339291161562000f6a5784604051637588a8fd60e01b8152600401620009929190620035f2565b600454600f541062000f8f5760405163235e065f60e21b815260040160405180910390fd5b6001600160a01b0383166000908152601560205260409020541562000fcb57826040516369910d7360e01b8152600401620009929190620035f2565b60035484101562000ff657600354604051636e78c49160e11b81526200099291869160040162003936565b846001600160a01b0316836001600160a01b0316036200103d57604051631d833b4960e21b81526001600160a01b0380851660048301528616602482015260440162000992565b601e54600254601d546040516001600160a01b03898116602483015260448201869052306064830152928316608482015260a4810188905290821660c4820152600092919091169060e40160408051601f198184030181529181526020820180516001600160e01b0316621a23d560e01b17905251620010bd906200336e565b620010ca9291906200397e565b604051809103906000f080158015620010e7573d6000803e3d6000fd5b50601d54604051632691c64760e11b81529192506001600160a01b031690634d238c8e906200111b908490600401620035f2565b600060405180830381600087803b1580156200113657600080fd5b505af11580156200114b573d6000803e3d6000fd5b5050601d54600b54604051637ccea03360e01b81526001600160a01b0386811660048301528b81166024830152604482018b9052606482019290925291169250637ccea0339150608401600060405180830381600087803b158015620011b057600080fd5b505af1158015620011c5573d6000803e3d6000fd5b50506040805160a08101825260008082526001600160a01b03808a16602080850191825288831685870190815260608601858152608087018f81528c8752928690529685209551865591516001860180549185166001600160a01b031992831617905591516002860180549190941692169190911790915592516003830155915160049091015560108054935091506200125f83620038b6565b9091555050600f80549060006200127683620038b6565b91905055506200128684620020d4565b6001600160a01b038085166000908152601560209081526040808320869055848416808452601483528184208790558a85168452601790925290912080546001600160a01b0319169091179055600254620012e591168430886200222d565b856001600160a01b03167fbcdb9f44b5b8f2ac27e12c3034dd4c05a0eeaeac1c103c5a8b2a719ef3f3e31d838787600b5460405162001328949392919062003944565b60405180910390a2505050505050565b336000818152600c6020526040812080549082905560025491929162001369906001600160a01b031683836200229c565b7f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d582826040516200139c92919062003907565b60405180910390a192915050565b6005546001600160a01b03163314620014065760405162461bcd60e51b815260206004820181905260248201527f6f6e6c794a61696c65723a204f6e6c79206a61696c65722063616e2063616c6c604482015260640162000992565b6001600160a01b0382166000908152601460205260408120549003620014435781604051631e98aca760e21b8152600401620009929190620035f2565b6001600160a01b0382166000908152600d602052604090819020805460ff1916831515179055517fbac9d5a8ac692179fe48f141ac178116a092cc3891dd9c90613ee320d0ced9e79062000bfe9084908490620038ec565b620014a56200209d565b620014b16000620022c5565b565b6005546001600160a01b0316331480620014de575033620014d362001854565b6001600160a01b0316145b620015455760405162461bcd60e51b815260206004820152603060248201527f6f6e6c794f776e65724f724a61696c65723a204f6e6c79206f776e6572206f7260448201526f081a985a5b195c8818d85b8818d85b1b60821b606482015260840162000992565b6001600160a01b03811660009081526006602052604090205460ff1615620015835780604051620d0aed60e01b8152600401620009929190620035f2565b600580546001600160a01b0319166001600160a01b03831690811790915560009081526006602052604090819020805460ff19166001179055517fea4155f70b8771a54a8ec691766ad5f0bc17e56fc9e2743dd7ef7b10f94cc03c90620008de908390620035f2565b620015f66200209d565b600081116200163c5760405162461bcd60e51b8152602060048201526011602482015270044656c61792063616e6e6f74206265203607c1b604482015260640162000992565b601c8190556040518181527f38e7e00323d42a0b5f016077f728a4df2926cf6e0d48bf422c20cbbe1e31a8ec90602001620008de565b6200167c6200209d565b601d80546001600160a01b0319166001600160a01b0383161790556040517f2535b3cb3f70782f3fceb21a7e7537c1133f935b24cbd1c0295ae1bec8e735da90620008de908390620035f2565b3380620016d562001cf3565b6001600160a01b03161462001701578060405163118cdaa760e01b8152600401620009929190620035f2565b6200170c81620022c5565b50565b6007546001600160a01b03163314620017805760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c7945706f63684368616e6765723a204f6e6c792065706f63684368616e60448201526b19d95c8818d85b8818d85b1b60a21b606482015260840162000992565b7f3b590190dc01922f0ee10772462016c2e33422f52c093c80bf38b3acba61f940620017ae60014362003920565b60128054914091906000620017c383620038b6565b91905055604051602001620017da91815260200190565b60408051601f19818403018152828252426020840152910160408051601f198184030181529082905262001813939291602001620039c2565b60405160208183030381529060405280519060200120600b5460016200183a919062003827565b6040516200184a92919062003936565b60405180910390a1565b60008062001861620022f0565b546001600160a01b031692915050565b6001600160a01b038481166000908152601960205260409020541615620018cc5760405162461bcd60e51b815260206004820152600e60248201526d135c18d059191c995cdcd55cd95960921b604482015260640162000992565b6000620018dc8585858562002314565b9050620018ea81856200273e565b600e541562001902576200190285858585856200287d565b6200190d8162002aff565b80604001518160200151600e5462001926919062003827565b62001932919062003920565b600e55600b80549060006200194783620038b6565b90915550506001600160a01b0385166000908152601860209081526040909120855162001977928701906200337c565b5060a0810180516001600160a01b0380881660008181526019602090815260408083208054959096166001600160a01b031995861617909555600b80548352601a9091529084902080549093169091179091554260135554915160c084015160e085015192517f877c810f6aa3473d70e6402389322e3a312654a8f0ca1152ced3c3ce62688c8e9462001a149490938a938c939192909162003a03565b60405180910390a15050505050565b6001818154811062001a3457600080fd5b6000918252602090912001546001600160a01b0316905081565b62001a586200209d565b60038190556040518181527f5c98cb726ec189ff4fc928f24ef4f91ddbaf3cda1c5018636b51969bea9b1be690602001620008de565b8160000362001ab05760405163a48dcc3d60e01b815260040160405180910390fd5b33600090815260146020526040902054821462001ae65733826040516323597ba760e01b81526004016200099292919062003907565b801562001b075760025462001b07906001600160a01b03163330846200222d565b6000828152602081905260408120600401805483929062001b2a90849062003827565b90915550506040517faec974d7b596f8551651267be5f52d7e39f448b8ed885cc6c56ba20fa415d6ff9062000bfe908490849062003936565b336000908152601760209081526040808320546001600160a01b031683526014909152902054821462001baf573382604051630642abdb60e51b81526004016200099292919062003907565b6001600160a01b0381166000908152601560205260409020541562001beb5780604051634d15e2f960e11b8152600401620009929190620035f2565b8160000362001c0d576040516307cc4d8f60e01b815260040160405180910390fd5b60008281526020818152604080832060010180546001600160a01b03908116808652601585528386208690559086168086529285208790558685529390925281546001600160a01b03191617905562001c668162002e35565b62001c7182620020d4565b604080518481523360208201526001600160a01b0384168183015290517f51436a593020da199e1ed669d94d2edb381ec1ed13ecef53e631cfe5a81ea0389181900360600190a1505050565b600060115460000362001cd05750600090565b600260115462001ce1919062003a95565b62001cee90600162003827565b905090565b6000806200186162002fb0565b6000818152601a60209081526040808320546001600160a01b03168352601882529182902080548351818402810184019094528084526060939283018282801562001d7557602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162001d56575b50505050509050919050565b6007546001600160a01b031633148062001dac57503362001da162001854565b6001600160a01b0316145b62001e1f5760405162461bcd60e51b815260206004820152603c60248201527f6f6e6c794f776e65724f7245706f63684368616e6765723a204f6e6c79206f7760448201527b1b995c881bdc88195c1bd8da10da185b99d95c8818d85b8818d85b1b60221b606482015260840162000992565b6001600160a01b03811660009081526008602052604090205460ff161562001e5d5780604051620d0aed60e01b8152600401620009929190620035f2565b600780546001600160a01b0319166001600160a01b03831690811790915560009081526008602052604090819020805460ff19166001179055517ffb599a6026670d0f34d6cb9779ffdf260948155dbb99c0cb1c483a04f960dddb90620008de908390620035f2565b62001ed06200209d565b600062001edc62002fb0565b80546001600160a01b0319166001600160a01b038416908117825590915062001f0462001854565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b600062001f4962002fd4565b805490915060ff600160401b82041615906001600160401b031660008115801562001f715750825b90506000826001600160401b0316600114801562001f8e5750303b155b90508115801562001f9d575080155b1562001fbc5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831562001fe657845460ff60401b1916600160401b1785555b62001ff13362002ffe565b600280546001600160a01b03808d166001600160a01b031992831617909255601b80548c841690831617905560016010556000601355601e80548b8416908316179055601d8054928a1692909116919091179055600386905583156200209157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b33620020a862001854565b6001600160a01b031614620014b1573360405163118cdaa760e01b8152600401620009929190620035f2565b60018054808201825560008281527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690910180546001600160a01b0319166001600160a01b038516179055815490916200212e9162003920565b9050805b8015620021da576000600162002149818462003920565b815481106200215c576200215c62003968565b6000918252602090912001546001600160a01b0390811691508416811015620021865750620021da565b80600183815481106200219d576200219d62003968565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905550620021d281620038d2565b905062002132565b81811462002228578260018281548110620021f957620021f962003968565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b505050565b6040516001600160a01b038481166024830152838116604483015260648201839052620022969186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505062003013565b50505050565b6200222883846001600160a01b031663a9059cbb85856040516024016200226392919062003907565b6000620022d162002fb0565b80546001600160a01b03191681559050620022ec8262003081565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6200236c604051806101000160405280600081526020016000815260200160008152602001600060ff168152602001600060ff16815260200160006001600160a01b0316815260200160608152602001606081525090565b6001546001600160401b0381111562002389576200238962003466565b604051908082528060200260200182016040528015620023b3578160200160208202803683370190505b5060c08201526001546001600160401b03811115620023d657620023d662003466565b60405190808252806020026020018201604052801562002400578160200160208202803683370190505b5060e0820152600180546000906200241c576200241c62003968565b60009182526020822001546001600160a01b031660a08301528080805b8581101562002732576000620024b8620024548b8b62000a82565b89898581811062002469576200246962003968565b90506020028101906200247d919062003ab8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620030df92505050565b90506001600160a01b038116620024e657604051630a57f30960e31b81526004810183905260240162000992565b826001600160a01b0316816001600160a01b0316116200251d57604051630948853760e41b81526004810183905260240162000992565b6001600160a01b038116600090815260156020526040812054908190036200255c576040516301f0190d60e01b81526004810184905260240162000992565b600081815260208181526040808320600201546001600160a01b031683526016909152902054919350839160ff1615620025a95760608701805190620025a28262003b08565b60ff169052505b8951876080015160ff16108015620025f55750816001600160a01b03168a886080015160ff1681518110620025e257620025e262003968565b60200260200101516001600160a01b0316145b156200261457608087018051906200260d8262003b08565b60ff169052505b600081815260208190526040812080546003909101541080156200265e5750600082815260208181526040808320600201546001600160a01b03168352600d90915290205460ff16155b156200267a57506000818152602081905260409020546200267e565b5060005b808860000181815162002692919062003827565b90525060c0880151805184919088908110620026b257620026b262003968565b60200260200101906001600160a01b031690816001600160a01b031681525050808860e001518781518110620026ec57620026ec62003968565b6020026020010181815250508681111562002714576001600160a01b03831660a08901529550855b856200272081620038b6565b96505050505080600101905062002439565b50505050949350505050565b60006200274a62001cbd565b9050806000036200276e576040516314d9f74d60e11b815260040160405180910390fd5b80836060015160ff161015806200278f57506009546001600160a01b031633145b620027c0576060830151604051635cdaeb3f60e11b81526004810183905260ff909116602482015260440162000992565b8151836080015160ff161480620027e157506009546001600160a01b031633145b62002813578151608084015160405163017ffb0360e61b8152600481019290925260ff16602482015260440162000992565b60036200281f62000e5d565b6200282c90600262003b2a565b62002838919062003a95565b6200284590600162003827565b83511015806200285f57506009546001600160a01b031633145b6200222857604051636078dee560e11b815260040160405180910390fd5b60005b8281101562002af75760008260c001518281518110620028a457620028a462003968565b6020908102919091018101516001600160a01b03808216600090815260158452604080822054808352828652818320600201549093168252600d909452929092205490925060ff161580156200290d575060008181526020819052604090208054600390910154105b1562002aec5760008181526020818152604080832060020154815163234b37e360e01b815291516001600160a01b039091169263234b37e392600480820193918290030181865afa15801562002967573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200298d919062003b44565b601b5486516000858152602081905260408082205460135491516338cb69f160e11b81526004810194909452602484015260448301859052606483015292935082916001600160a01b031690637196d3e2906084016040805180830381865afa158015620029ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a25919062003b5e565b60008681526020819052604081208054939550919350849262002a4a90849062003827565b92505081905550818760200181815162002a65919062003827565b9052506000848152602081905260409081902060020154600b54915163b958089b60e01b8152600481018590526024810184905260448101929092526001600160a01b03169063b958089b90606401600060405180830381600087803b15801562002acf57600080fd5b505af115801562002ae4573d6000803e3d6000fd5b505050505050505b505060010162002880565b505050505050565b60005b600154811015620022ec576000601560006001848154811062002b295762002b2962003968565b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220548083529082905282822060020154835163054302b960e11b81529351919550909316928392630a86057292600480830193919282900301818387803b15801562002b9c57600080fd5b505af115801562002bb1573d6000803e3d6000fd5b50505060008381526020819052604090206004015415905062002c335760008281526020819052604081206004810154815490929062002bf390849062003827565b909155505060008281526020818152604090912060040154908501805162002c1d90839062003827565b9052506000828152602081905260408120600401555b6000828152602081905260409020600301541562002e2a5760008281526020819052604081206003810154815490929062002c7090849062003920565b90915550506000828152602081905260409081902060030154908501805162002c9b90839062003827565b905250600082815260208181526040808320600301546001600160a01b0385168452600c909252822080549192909162002cd790849062003827565b909155505060008281526020819052604081206003810182905554900362002e2a57600f805490600062002d0b83620038d2565b909155505060008281526020818152604080832060018101546001600160a01b0390811685526015845282852085905560029091015481168452601483528184208490558151635ebaf1db60e01b815291516017949391861692635ebaf1db9260048083019391928290030181865afa15801562002d8d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002db3919062003b83565b6001600160a01b0390811682526020808301939093526040918201600090812080546001600160a01b03191690558581529283905291206001015462002dfa911662002e35565b60008281526020819052604090206002810180546001600160a01b03199081169091556001909101805490911690555b505060010162002b02565b600180549060009062002e49818462003920565b8154811062002e5c5762002e5c62003968565b6000918252602090912001546001600160a01b03169050600162002e81818462003920565b8154811062002e945762002e9462003968565b6000918252602082200180546001600160a01b031916905562002eb960018462003920565b90505b801562002f7457836001600160a01b0316826001600160a01b0316031562002f7457600162002eec818362003920565b8154811062002eff5762002eff62003968565b6000918252602090912001546001600160a01b031682600162002f23818562003920565b8154811062002f365762002f3662003968565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055915062002f6c81620038d2565b905062002ebc565b50600180548062002f895762002f8962003ba3565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0090565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0062000aea565b620030086200310d565b6200170c8162003135565b600080602060008451602086016000885af18062003037576040513d6000823e3d81fd5b50506000513d91508115620030515780600114156200305e565b6001600160a01b0384163b155b15620022965783604051635274afe760e01b8152600401620009929190620035f2565b60006200308d620022f0565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080600080620030f186866200316c565b925092509250620031038282620031bd565b5090949350505050565b6200311762003288565b620014b157604051631afcd79f60e31b815260040160405180910390fd5b6200313f6200310d565b6001600160a01b03811662001701576000604051631e4fbdf760e01b8152600401620009929190620035f2565b60008060008351604103620031aa5760208401516040850151606086015160001a6200319b88828585620032a4565b955095509550505050620031b6565b50508151600091506002905b9250925092565b6000826003811115620031d457620031d462003bb9565b03620031de575050565b6001826003811115620031f557620031f562003bb9565b03620032145760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156200322b576200322b62003bb9565b036200324e5760405163fce698f760e01b81526004810182905260240162000992565b600382600381111562003265576200326562003bb9565b03620022ec576040516335e2f38360e21b81526004810182905260240162000992565b60006200329462002fd4565b54600160401b900460ff16919050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03841115620032d7575060009150600390508262003364565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156200332c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166200335a5750600092506001915082905062003364565b9250600091508190505b9450945094915050565b6105bb8062003bd083390190565b828054828255906000526020600020908101928215620033d4579160200282015b82811115620033d457825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200339d565b50620033e2929150620033e6565b5090565b5b80821115620033e25760008155600101620033e7565b6001600160a01b03811681146200170c57600080fd5b80356200342081620033fd565b919050565b6000602082840312156200343857600080fd5b81356200344581620033fd565b9392505050565b6000602082840312156200345f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200348e57600080fd5b813560206001600160401b0380831115620034ad57620034ad62003466565b8260051b604051601f19603f83011681018181108482111715620034d557620034d562003466565b6040529384526020818701810194908101925087851115620034f657600080fd5b6020870191505b848210156200352157620035118262003413565b83529183019190830190620034fd565b979650505050505050565b600080604083850312156200354057600080fd5b82356200354d81620033fd565b915060208301356001600160401b038111156200356957600080fd5b62003577858286016200347c565b9150509250929050565b600080604083850312156200359557600080fd5b8235620035a281620033fd565b915060208301358015158114620035b857600080fd5b809150509250929050565b60008060408385031215620035d757600080fd5b8235620035e481620033fd565b946020939093013593505050565b6001600160a01b0391909116815260200190565b600080604083850312156200361a57600080fd5b50508035926020909101359150565b6000806000606084860312156200363f57600080fd5b83356200364c81620033fd565b92506020840135915060408401356200366581620033fd565b809150509250925092565b600080600080606085870312156200368757600080fd5b84356200369481620033fd565b935060208501356001600160401b0380821115620036b157600080fd5b620036bf888389016200347c565b94506040870135915080821115620036d657600080fd5b818701915087601f830112620036eb57600080fd5b813581811115620036fb57600080fd5b8860208260051b85010111156200371157600080fd5b95989497505060200194505050565b600080604083850312156200373457600080fd5b823591506020830135620035b881620033fd565b60008151808452602080850194506020840160005b83811015620037845781516001600160a01b0316875295820195908201906001016200375d565b509495945050505050565b60208152600062003445602083018462003748565b600080600080600060a08688031215620037bd57600080fd5b8535620037ca81620033fd565b94506020860135620037dc81620033fd565b93506040860135620037ee81620033fd565b925060608601356200380081620033fd565b949793965091946080013592915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000aea5762000aea62003811565b60005b838110156200385a57818101518382015260200162003840565b50506000910152565b6a0c6d0c2dcceca8ae0dec6d60ab1b81526001600160601b03198516600b82015283516000906200389c81601f8501602089016200383d565b909101601f81019390935250603f820152605f0192915050565b600060018201620038cb57620038cb62003811565b5060010190565b600081620038e457620038e462003811565b506000190190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b8181038181111562000aea5762000aea62003811565b918252602082015260400190565b93845260208401929092526001600160a01b03166040830152606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b03831681526040602082015260008251806040840152620039ad8160608501602087016200383d565b601f01601f1916919091016060019392505050565b83815260008351620039dc8160208501602088016200383d565b80830190508351620039f68160208401602088016200383d565b0160200195945050505050565b8681526000602060c0602084015262003a2060c084018962003748565b6001600160a01b03888116604086015287166060850152838103608085015262003a4b818762003748565b84810360a08601528551808252602080880193509091019060005b8181101562003a845783518352928401929184019160010162003a66565b50909b9a5050505050505050505050565b60008262003ab357634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811262003ad057600080fd5b8301803591506001600160401b0382111562003aeb57600080fd5b60200191503681900382131562003b0157600080fd5b9250929050565b600060ff821660ff810362003b215762003b2162003811565b60010192915050565b808202811582820484141762000aea5762000aea62003811565b60006020828403121562003b5757600080fd5b5051919050565b6000806040838503121562003b7257600080fd5b505080516020909101519092909150565b60006020828403121562003b9657600080fd5b81516200344581620033fd565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fdfe60a06040526040516105bb3803806105bb8339810160408190526100229161036f565b61002c828261003e565b506001600160a01b031660805261047a565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e7919061042f565b82610203565b505050565b6100fa61027a565b5050565b806001600160a01b03163b6000036101345780604051631933b43b60e21b815260040161012b919061044a565b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d4919061042f565b9050806001600160a01b03163b6000036100fa5780604051634c9c8ce360e01b815260040161012b919061044a565b6060600080846001600160a01b031684604051610220919061045e565b600060405180830381855af49150503d806000811461025b576040519150601f19603f3d011682016040523d82523d6000602084013e610260565b606091505b50909250905061027185838361029b565b95945050505050565b34156102995760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b0576102ab826102f1565b6102ea565b81511580156102c757506001600160a01b0384163b155b156102e75783604051639996b31560e01b815260040161012b919061044a565b50805b9392505050565b80511561030057805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461033057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561036657818101518382015260200161034e565b50506000910152565b6000806040838503121561038257600080fd5b61038b83610319565b60208401519092506001600160401b03808211156103a857600080fd5b818501915085601f8301126103bc57600080fd5b8151818111156103ce576103ce610335565b604051601f8201601f19908116603f011681019083821181831017156103f6576103f6610335565b8160405282815288602084870101111561040f57600080fd5b61042083602083016020880161034b565b80955050505050509250929050565b60006020828403121561044157600080fd5b6102ea82610319565b6001600160a01b0391909116815260200190565b6000825161047081846020870161034b565b9190910192915050565b6080516101276104946000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea26469706673582212206bdb282aec397175a4bcb20ccca0c27c9b4cab225138fd2e99b0baff431e4d1064736f6c63430008160033a2646970667358221220b0d2ef0e49a3a54da97c0eafe5bed616ff49ee0da7ca3981eeb5faaec036964764736f6c63430008160033