0 txs
48 calls
constructor
constructor(address _systemRegistry, address _stakeTracker, address _rewardToken, uint256 _newRewardRatio, uint256 _durationInBlock, bool _allowExtraReward)
functions
accessController
viewfunction accessController() view returns (address)
allowExtraRewards
viewfunction allowExtraRewards() view returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
canTokenBeRecovered
purefunction canTokenBeRecovered(address) pure returns (bool)
currentRewards
viewfunction currentRewards() view returns (uint256)
durationInBlock
viewfunction durationInBlock() view returns (uint256)
earned
viewfunction earned(address account) view returns (uint256)
extraRewards
viewfunction extraRewards() view returns (address[])
extraRewardsLength
viewfunction extraRewardsLength() view returns (uint256)
getExtraRewarder
viewfunction getExtraRewarder(uint256 index) view returns (address rewarder)
historicalRewards
viewfunction historicalRewards() view returns (uint256)
isWhitelisted
viewfunction isWhitelisted(address wallet) view returns (bool)
lastBlockRewardApplicable
viewfunction lastBlockRewardApplicable() view returns (uint256)
lastUpdateBlock
viewfunction lastUpdateBlock() view returns (uint256)
MAX_EXTRA_REWARDS
viewfunction MAX_EXTRA_REWARDS() view returns (uint256)
MINIMUM_RECOVER_DURATION
viewfunction MINIMUM_RECOVER_DURATION() view returns (uint256)
newRewardRatio
viewfunction newRewardRatio() view returns (uint256)
periodInBlockFinish
viewfunction periodInBlockFinish() view returns (uint256)
queuedRewards
viewfunction queuedRewards() view returns (uint256)
rewardPerToken
viewfunction rewardPerToken() view returns (uint256)
rewardPerTokenStored
viewfunction rewardPerTokenStored() view returns (uint256)
rewardRate
viewfunction rewardRate() view returns (uint256)
rewards
viewfunction rewards(address) view returns (uint256)
rewardToken
viewfunction rewardToken() view returns (address)
stakeTracker
viewfunction stakeTracker() view returns (address)
tokeLockDuration
viewfunction tokeLockDuration() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
userRewardPerTokenPaid
viewfunction userRewardPerTokenPaid(address) view returns (uint256)
whitelistedAddresses
viewfunction whitelistedAddresses(address) view returns (bool)
addExtraReward
nonpayablefunction addExtraReward(address reward)
addToWhitelist
nonpayablefunction addToWhitelist(address wallet)
getReward
nonpayablefunction getReward()
getReward
nonpayablefunction getReward(address account, address recipient, bool claimExtras)
queueNewRewards
nonpayablefunction queueNewRewards(uint256 newRewards)
recover
nonpayablefunction recover(address token, address recipient)
removeFromWhitelist
nonpayablefunction removeFromWhitelist(address wallet)
setTokeLockDuration
nonpayablefunction setTokeLockDuration(uint256 _tokeLockDuration)
stake
nonpayablefunction stake(address account, uint256 amount)
withdraw
nonpayablefunction withdraw(address account, uint256 amount, bool claim)
events
AddedToWhitelist
event AddedToWhitelist(address indexed wallet)
ExtraRewardAdded
event ExtraRewardAdded(address reward)
QueuedRewardsUpdated
event QueuedRewardsUpdated(uint256 startingQueuedRewards, uint256 startingNewRewards, uint256 queuedRewards)
Recovered
event Recovered(address token, address recipient, uint256 amount)
RemovedFromWhitelist
event RemovedFromWhitelist(address indexed wallet)
RewardAdded
event RewardAdded(uint256 reward, uint256 rewardRate, uint256 lastUpdateBlock, uint256 periodInBlockFinish, uint256 historicalRewards)
RewardPaid
event RewardPaid(address indexed user, address indexed recipient, uint256 reward)
Staked
event Staked(address indexed user, uint256 amount)
TokeLockDurationUpdated
event TokeLockDurationUpdated(uint256 newDuration)
UserRewardUpdated
event UserRewardUpdated(address indexed user, uint256 amount, uint256 rewardPerTokenStored, uint256 lastUpdateBlock)
Withdrawn
event Withdrawn(address indexed user, uint256 amount)
errors
AccessDenied
error AccessDenied()
AssetNotAllowed
error AssetNotAllowed(address token)
ExtraRewardsNotAllowed
error ExtraRewardsNotAllowed()
InvalidAddress
error InvalidAddress(address addr)
InvalidParam
error InvalidParam(string paramName)
ItemExists
error ItemExists()
ItemNotFound
error ItemNotFound()
MaxExtraRewardsReached
error MaxExtraRewardsReached()
RecoverDurationPending
error RecoverDurationPending()
StakingDurationTooShort
error StakingDurationTooShort()
UndefinedAddress
error UndefinedAddress()
ZeroAddress
error ZeroAddress(string paramName)
ZeroAmount
error ZeroAmount()
creation bytecode
0x6101806040523480156200001257600080fd5b5060405162002fba38038062002fba8339810160408190526200003591620003cf565b858484847f81a81f0d48ba50c2c672a817d0c6ff7010ef836a6c6a22ddf3743101563b01d8858585858585846001600160a01b031663bc43cbaf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200009f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c5919062000447565b6001600160a01b038116620000ed57604051630cbe126f60e11b815260040160405180910390fd5b6001600160a01b031660805260408051808201909152600c81526b2fb932bbb0b9322a37b5b2b760a11b60208083019190915262000136918691620013f562000327821b17901c565b62000175826040518060400160405280601081526020016f5f6475726174696f6e496e426c6f636b60801b8152506200035760201b6200141e1760201c565b620001b3836040518060400160405280600f81526020016e5f6e6577526577617264526174696f60881b8152506200035760201b6200141e1760201c565b620001ed816040518060400160405280600b81526020016a5f726577617264526f6c6560a81b8152506200037d60201b620014411760201c565b6001600160a01b0385811660e08190526040516316bfae7f60e31b815291861660048301529063b5fd73f890602401602060405180830381865afa1580156200023a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026091906200046e565b620002a257604051634389d5ab60e01b815260206004820152600c60248201526b2fb932bbb0b9322a37b5b2b760a11b60448201526064015b60405180910390fd5b6001600160a01b039093166101005260c09190915260a05261012052506001600b55151561014052505060408051808201909152600d81526c2fb9ba30b5b2aa3930b1b5b2b960991b6020828101919091526200030f9450899350909150620013f562000327821b17901c565b505050506001600160a01b03166101605250620004dc565b6001600160a01b03821662000353578060405163eac0d38960e01b81526004016200029991906200048c565b5050565b81600003620003535780604051634389d5ab60e01b81526004016200029991906200048c565b81620003535780604051634389d5ab60e01b81526004016200029991906200048c565b6001600160a01b0381168114620003b657600080fd5b50565b80518015158114620003ca57600080fd5b919050565b60008060008060008060c08789031215620003e957600080fd5b8651620003f681620003a0565b60208801519096506200040981620003a0565b60408801519095506200041c81620003a0565b60608801516080890151919550935091506200043b60a08801620003b9565b90509295509295509295565b6000602082840312156200045a57600080fd5b81516200046781620003a0565b9392505050565b6000602082840312156200048157600080fd5b6200046782620003b9565b600060208083528351808285015260005b81811015620004bb578581018301518582016040015282016200049d565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05160c05160e051610100516101205161014051610160516129d7620005e3600039600081816102440152818161110f01526113ac0152600081816104950152610b8b01526000818161062701528181610aca01528181610faa015261122601526000818161057901528181610a8e01528181610df001528181611de20152611e830152600081816106f10152818161079801528181611cc10152611d430152600081816103bf01526109fb015260008181610319015281816109940152818161176a01526117c20152600081816104bc0152818161065601528181610af901528181610cb801528181610fd901528181611255015261164e01526129d76000f3fe608060405234801561001057600080fd5b506004361061023a5760003560e01c80638b8763471161013b578063cd8e33d4116100b8578063e43252d71161007c578063e43252d714610530578063e665b41414610543578063ead5d35914610556578063ee495fb614610569578063f7c618c11461057457600080fd5b8063cd8e33d4146104f9578063ce60089d14610502578063d55a23f41461050a578063df136d6514610512578063e21c81d31461051b57600080fd5b8063adc9772e116100ff578063adc9772e1461047d578063b263487f14610490578063bc43cbaf146104b7578063c5285794146104de578063cd3daf9d146104f157600080fd5b80638b8763471461042f578063901a7d531461044f5780639a8c1c7014610458578063a218141b1461046c578063abe0429c1461047557600080fd5b80633d18b912116101c95780636c8bcee81161018d5780636c8bcee8146103ba5780636f73a38f146103e157806370a08231146103ea5780637b0a47ee146104135780638ab1d6811461041c57600080fd5b80633d18b91214610370578063590a41f5146103785780635e43c47b1461038b57806363d38c3b1461039e578063648bf774146103a757600080fd5b806314d092491161021057806314d09249146102f757806318160ddd1461030c5780631fc9305914610314578063262d3d6d1461033b5780633af32abf1461034457600080fd5b80615b671461023f5780628cc2621461028357806306c933d8146102a45780630700037d146102d7575b600080fd5b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6102966102913660046126bf565b61059b565b60405190815260200161027a565b6102c76102b23660046126bf565b600a6020526000908152604090205460ff1681565b604051901515815260200161027a565b6102966102e53660046126bf565b60086020526000908152604090205481565b61030a6103053660046126dc565b610618565b005b600e54610296565b6102967f000000000000000000000000000000000000000000000000000000000000000081565b61029660065481565b6102c76103523660046126bf565b6001600160a01b03166000908152600a602052604090205460ff1690565b61030a6108d6565b61030a6103863660046126dc565b6108ff565b61030a6103993660046126bf565b610abb565b61029660045481565b61030a6103b53660046126f5565b610c7a565b6102967f000000000000000000000000000000000000000000000000000000000000000081565b61029660095481565b6102966103f83660046126bf565b6001600160a01b03166000908152600f602052604090205490565b61029660015481565b61030a61042a3660046126bf565b610f9b565b61029661043d3660046126bf565b60076020526000908152604090205481565b61029660055481565b6102c76104663660046126bf565b50600190565b61029660025481565b6102966110ec565b61030a61048b36600461272e565b611104565b6102c77f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b61030a6104ec366004612768565b61115b565b61029661118f565b61029660005481565b610296600f81565b6102966111ff565b61029660035481565b61052361120b565b60405161027a91906127b3565b61030a61053e3660046126bf565b611217565b6102666105513660046126dc565b611394565b61030a610564366004612800565b6113a1565b6102966301e1338081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600860209081526040808320546007909252822054670de0b6b3a7640000906105d161118f565b6105db919061284d565b6001600160a01b0385166000908152600f60205260409020546105fe9190612860565b6106089190612877565b6106129190612899565b92915050565b604051632474521560e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c991906128ac565b6106e657604051634ca8886760e01b815260040160405180910390fd5b8115610899576107967f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663024d381b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077191906128c9565b60405180604001604052806007815260200166616363546f6b6560c81b8152506113f5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663024d381b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081891906128c9565b6001600160a01b0316635fec5c646040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087991906128e6565b8210156108995760405163bcec4c5360e01b815260040160405180910390fd5b60098290556040518281527f62ff17080925adbeb90d914efe5f615d059f19c2e728740b500d1e84ba65989a906020015b60405180910390a15050565b6108de611461565b6108e7336114ba565b6108f333336001611574565b6108fd6001600b55565b565b336000908152600a602052604090205460ff1615801561094657506109447f5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c1633611625565b155b1561096457604051634ca8886760e01b815260040160405180910390fd5b600454816109728282612899565b9250600054431061099057610986836116c2565b6000600455610a3e565b60007f00000000000000000000000000000000000000000000000000000000000000006000546109c0919061284d565b6109ca904361284d565b90506000816001546109dc9190612860565b90506000856109ed836103e8612860565b6109f79190612877565b90507f0000000000000000000000000000000000000000000000000000000000000000811015610a3457610a2a866116c2565b6000600455610a3a565b60048690555b5050505b600454604080518481526020810184905280820192909252517fe4a19739e7048ef5e90c7a157e8fb37a6e90cb8de298625227540d2443b9769c9181900360600190a1610ab66001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308461184a565b505050565b604051632474521560e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c91906128ac565b610b8957604051634ca8886760e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000610bc757604051639fe610b960e01b815260040160405180910390fd5b600f610bd3600c6118b5565b10610bf157604051635024a38f60e01b815260040160405180910390fd5b610c1982604051806040016040528060068152602001651c995dd85c9960d21b8152506113f5565b610c24600c836118bf565b610c4157604051633e04f87160e01b815260040160405180910390fd5b6040516001600160a01b03831681527fd432e6f46dbf91c120fdfa95a1f4bf5c43f04d957fbc3a32e693be0d29bf17b0906020016108ca565b604051632474521560e21b81527f712b73613835f525c3c675d2245c737ba70afbd0b97264479c97d623f214159460048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015610d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2b91906128ac565b610d4857604051634ca8886760e01b815260040160405180910390fd5b610d6f83604051806040016040528060058152602001643a37b5b2b760d91b8152506113f5565b610d9a82604051806040016040528060098152602001681c9958da5c1a595b9d60ba1b8152506113f5565b306001600160a01b03831603610dd357604051634726455360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6301e13380600254610de59190612899565b43108015610e2457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15610e4257604051633d38b78360e01b815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601610ec957478015610ec357604080516001600160a01b038087168252851660208201529081018290527ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6489060600160405180910390a1610ec383826118d4565b50505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3491906128e6565b90508015610ec357604080516001600160a01b038087168252851660208201529081018290527ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6489060600160405180910390a1610ec36001600160a01b03851684836119ed565b604051632474521560e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015611028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104c91906128ac565b61106957604051634ca8886760e01b815260040160405180910390fd5b6001600160a01b0382166000908152600a602052604090205460ff166110a25760405163d3ed043d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152600a6020526040808220805460ff19169055517fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df7579190a25050565b6000805443106110fd575060005490565b435b905090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461114d57604051634ca8886760e01b815260040160405180910390fd5b6111578282611a1d565b5050565b336001600160a01b0384161461118457604051634ca8886760e01b815260040160405180910390fd5b610ab6838383611b13565b60008061119b600e5490565b9050806000036111ad57505060035490565b806001546002546111bc6110ec565b6111c6919061284d565b6111d09190612860565b6111e290670de0b6b3a7640000612860565b6111ec9190612877565b6003546111f99190612899565b91505090565b60006110ff600c6118b5565b60606110ff600c611b39565b604051632474521560e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c891906128ac565b6112e557604051634ca8886760e01b815260040160405180910390fd5b61130d82604051806040016040528060068152602001651dd85b1b195d60d21b8152506113f5565b6001600160a01b0382166000908152600a602052604090205460ff161561134757604051633e04f87160e01b815260040160405180910390fd5b6001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab039190a25050565b6000610612600c83611b46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113ea57604051634ca8886760e01b815260040160405180910390fd5b610ab6838383611b52565b6001600160a01b038216611157578060405163eac0d38960e01b8152600401610dca9190612923565b816000036111575780604051634389d5ab60e01b8152600401610dca9190612923565b816111575780604051634389d5ab60e01b8152600401610dca9190612923565b6002600b54036114b35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610dca565b6002600b55565b60006114c461118f565b6003556114cf6110ec565b6002556003541561151f576001600160a01b0382161561151f576114f28261059b565b6001600160a01b038316600090815260086020908152604080832084905560035460079092529091205590505b6003546002546040805184815260208101939093528201526001600160a01b038316907f469d38647ec007a9c93421468c92550d50fccc01ae12e149b1216aa9b0136fc7906060015b60405180910390a25050565b61157e8383611c5b565b600061158a600c6118b5565b90508115610ec35760005b8181101561161e576115a8600c82611b46565b604051636b09169560e01b81526001600160a01b03878116600483015286811660248301529190911690636b09169590604401600060405180830381600087803b1580156115f557600080fd5b505af1158015611609573d6000803e3d6000fd5b505050508061161790612956565b9050611595565b5050505050565b604051632474521560e21b8152600481018390526001600160a01b0382811660248301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906391d1485490604401602060405180830381865afa158015611697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bb91906128ac565b9392505050565b80600660008282546116d49190612899565b9091555050600e5460000361171e57600054600254101561171957600154600254600054611702919061284d565b61170c9190612860565b6117169082612899565b90505b61175b565b60005443101561175b57600043600054611738919061284d565b905060006001548261174a9190612860565b90506117568184612899565b925050505b61176560006114ba565b61178f7f000000000000000000000000000000000000000000000000000000000000000082612877565b60018190556117b157604051631f2a200560e01b815260040160405180910390fd5b60058190554360028190556117e7907f000000000000000000000000000000000000000000000000000000000000000090612899565b6000819055600154600254600654604080518681526020810194909452830191909152606082019290925260808101919091527f8ce8cbe5f803930b0c6afe4640018bbfb02cbb5b0bfbe051b25a155201e80dac9060a00160405180910390a150565b6040516001600160a01b0380851660248301528316604482015260648101829052610ec39085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ff6565b6000610612825490565b60006116bb836001600160a01b0384166120c8565b804710156119245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610dca565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611971576040519150601f19603f3d011682016040523d82523d6000602084013e611976565b606091505b5050905080610ab65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610dca565b6040516001600160a01b038316602482015260448101829052610ab690849063a9059cbb60e01b9060640161187e565b611a26826114ba565b611a308282612117565b6000611a3c600c6118b5565b905060005b81811015611ac957611a54600c82611b46565b6040516356e4bb9760e11b81526001600160a01b03868116600483015260248201869052919091169063adc9772e90604401600060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b5050505080611ac290612956565b9050611a41565b5081600e6000828254611adc9190612899565b90915550506001600160a01b0383166000908152600f602052604081208054849290611b09908490612899565b9091555050505050565b611b1b611461565b611b24836114ba565b611b2f838383611574565b610ab66001600b55565b606060006116bb836121a3565b60006116bb83836121ff565b611b5b836114ba565b611b658383612229565b6000611b71600c6118b5565b905060005b81811015611bfe57611b89600c82611b46565b60405163f3fef3a360e01b81526001600160a01b03878116600483015260248201879052919091169063f3fef3a390604401600060405180830381600087803b158015611bd557600080fd5b505af1158015611be9573d6000803e3d6000fd5b5050505080611bf790612956565b9050611b76565b508115611c1157611c1184856001611574565b82600e6000828254611c23919061284d565b90915550506001600160a01b0384166000908152600f602052604081208054859290611c5090849061284d565b909155505050505050565b611c8482604051806040016040528060078152602001661858d8dbdd5b9d60ca1b8152506113f5565b611caf81604051806040016040528060098152602001681c9958da5c1a595b9d60ba1b8152506113f5565b6000611cba8361059b565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663024d381b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4191906128c9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f543bb0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906128c9565b9150915082600003611dd6575050505050565b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611e175750600954155b15611eaf576001600160a01b038086166000818152600860205260408082209190915551918616917f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e90611e6e9087815260200190565b60405180910390a3611eaa6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856119ed565b61161e565b604051633f6e925b60e01b8152600481018490526001600160a01b03831690633f6e925b90602401602060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1891906128ac565b1561161e576001600160a01b038086166000818152600860205260408082209190915551918616917f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e90611f6f9087815260200190565b60405180910390a3611f828183856122b5565b600954604051637628a37d60e01b81526004810185905260248101919091526001600160a01b038581166044830152831690637628a37d90606401600060405180830381600087803b158015611fd757600080fd5b505af1158015611feb573d6000803e3d6000fd5b505050505050505050565b600061204b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123599092919063ffffffff16565b805190915015610ab6578080602001905181019061206991906128ac565b610ab65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610dca565b600081815260018301602052604081205461210f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610612565b506000610612565b61214082604051806040016040528060078152602001661858d8dbdd5b9d60ca1b8152506113f5565b6121688160405180604001604052806006815260200165185b5bdd5b9d60d21b81525061141e565b816001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8260405161156891815260200190565b6060816000018054806020026020016040519081016040528092919081815260200182805480156121f357602002820191906000526020600020905b8154815260200190600101908083116121df575b50505050509050919050565b60008260000182815481106122165761221661296f565b9060005260206000200154905092915050565b61225282604051806040016040528060078152602001661858d8dbdd5b9d60ca1b8152506113f5565b61227a8160405180604001604052806006815260200165185b5bdd5b9d60d21b81525061141e565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58260405161156891815260200190565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015612305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232991906128e6565b90508015612345576123456001600160a01b0385168483612370565b610ec36001600160a01b038516848461247c565b6060612368848460008561252e565b949350505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156123c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e491906128e6565b9050818110156124485760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b6064820152608401610dca565b6040516001600160a01b0384166024820152828203604482018190529061161e90869063095ea7b360e01b9060640161187e565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f191906128e6565b6124fb9190612899565b6040516001600160a01b038516602482015260448101829052909150610ec390859063095ea7b360e01b9060640161187e565b60608247101561258f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610dca565b600080866001600160a01b031685876040516125ab9190612985565b60006040518083038185875af1925050503d80600081146125e8576040519150601f19603f3d011682016040523d82523d6000602084013e6125ed565b606091505b50915091506125fe87838387612609565b979650505050505050565b60608315612678578251600003612671576001600160a01b0385163b6126715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dca565b5081612368565b612368838381511561268d5781518083602001fd5b8060405162461bcd60e51b8152600401610dca9190612923565b6001600160a01b03811681146126bc57600080fd5b50565b6000602082840312156126d157600080fd5b81356116bb816126a7565b6000602082840312156126ee57600080fd5b5035919050565b6000806040838503121561270857600080fd5b8235612713816126a7565b91506020830135612723816126a7565b809150509250929050565b6000806040838503121561274157600080fd5b823561274c816126a7565b946020939093013593505050565b80151581146126bc57600080fd5b60008060006060848603121561277d57600080fd5b8335612788816126a7565b92506020840135612798816126a7565b915060408401356127a88161275a565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156127f45783516001600160a01b0316835292840192918401916001016127cf565b50909695505050505050565b60008060006060848603121561281557600080fd5b8335612820816126a7565b92506020840135915060408401356127a88161275a565b634e487b7160e01b600052601160045260246000fd5b8181038181111561061257610612612837565b808202811582820484141761061257610612612837565b60008261289457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561061257610612612837565b6000602082840312156128be57600080fd5b81516116bb8161275a565b6000602082840312156128db57600080fd5b81516116bb816126a7565b6000602082840312156128f857600080fd5b5051919050565b60005b8381101561291a578181015183820152602001612902565b50506000910152565b60208152600082518060208401526129428160408501602087016128ff565b601f01601f19169190910160400192915050565b60006001820161296857612968612837565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600082516129978184602087016128ff565b919091019291505056fea26469706673582212208e34513960032318aa7d929211dc1cc1868fe229325643814621fc1fba9a894164736f6c634300081100330000000000000000000000002218f90a98b0c070676f249ef44834686daa42850000000000000000000000004b1ea6f0e97cb0e859b1521a4548fbd0a94e6a63000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000