896.8k txs
896.8k calls
constructor
constructor(address _adminAddress, address _operatorAddress, uint256 _intervalSeconds, uint256 _bufferSeconds, uint256 _minBetAmount, uint256 _treasuryFee)
functions
adminAddress
viewfunction adminAddress() view returns (address)
bufferSeconds
viewfunction bufferSeconds() view returns (uint256)
claimable
viewfunction claimable(uint256 epoch, address user) view returns (bool)
currentEpoch
viewfunction currentEpoch() view returns (uint256)
genesisLockOnce
viewfunction genesisLockOnce() view returns (bool)
genesisStartOnce
viewfunction genesisStartOnce() view returns (bool)
getUserRounds
viewfunction getUserRounds(address user, uint256 cursor, uint256 size) view returns (uint256[], tuple[], uint256)
getUserRoundsLength
viewfunction getUserRoundsLength(address user) view returns (uint256)
intervalSeconds
viewfunction intervalSeconds() view returns (uint256)
ledger
viewfunction ledger(uint256, address) view returns (uint8 position, uint128 amount, bool claimed)
MAX_TREASURY_FEE
viewfunction MAX_TREASURY_FEE() view returns (uint256)
minBetAmount
viewfunction minBetAmount() view returns (uint256)
operatorAddress
viewfunction operatorAddress() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
refundable
viewfunction refundable(uint256 epoch, address user) view returns (bool)
rounds
viewfunction rounds(uint256) view returns (uint32 startTimestamp, uint32 lockTimestamp, uint32 closeTimestamp, uint128 AIPrice, uint128 lockPrice, uint128 closePrice, uint128 totalAmount, uint128 bullAmount, uint128 bearAmount, uint128 rewardBaseCalAmount, uint128 rewardAmount, bool oracleCalled)
treasuryAmount
viewfunction treasuryAmount() view returns (uint256)
treasuryFee
viewfunction treasuryFee() view returns (uint256)
userRounds
viewfunction userRounds(address, uint256) view returns (uint256)
betBear
payablefunction betBear(uint256 epoch) payable
betBull
payablefunction betBull(uint256 epoch) payable
claim
nonpayablefunction claim(uint256[] epochs)
claimTreasury
nonpayablefunction claimTreasury()
executeRound
nonpayablefunction executeRound(uint128 currentPrice, uint128 AIPrice)
genesisLockRound
nonpayablefunction genesisLockRound(uint128 currentPrice, uint128 AIPrice)
genesisStartRound
nonpayablefunction genesisStartRound(uint128 AIPrice)
pause
nonpayablefunction pause()
recoverToken
nonpayablefunction recoverToken(address _token, uint256 _amount)
renounceOwnership
nonpayablefunction renounceOwnership()
setAdmin
nonpayablefunction setAdmin(address _adminAddress)
setBufferAndIntervalSeconds
nonpayablefunction setBufferAndIntervalSeconds(uint256 _bufferSeconds, uint256 _intervalSeconds)
setMinBetAmount
nonpayablefunction setMinBetAmount(uint256 _minBetAmount)
setOperator
nonpayablefunction setOperator(address _operatorAddress)
setTreasuryFee
nonpayablefunction setTreasuryFee(uint256 _treasuryFee)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
BetBear
event BetBear(address indexed sender, uint256 indexed epoch, uint128 amount)
BetBull
event BetBull(address indexed sender, uint256 indexed epoch, uint128 amount)
Claim
event Claim(address indexed sender, uint256 indexed epoch, uint256 amount)
EndRound
event EndRound(uint256 indexed epoch, uint128 price)
LockRound
event LockRound(uint256 indexed epoch, uint128 price)
NewAdminAddress
event NewAdminAddress(address indexed admin)
NewBufferAndIntervalSeconds
event NewBufferAndIntervalSeconds(uint256 bufferSeconds, uint256 intervalSeconds)
NewMinBetAmount
event NewMinBetAmount(uint256 indexed epoch, uint256 minBetAmount)
NewOperatorAddress
event NewOperatorAddress(address indexed operator)
NewTreasuryFee
event NewTreasuryFee(uint256 indexed epoch, uint256 treasuryFee)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Pause
event Pause(uint256 indexed epoch)
Paused
event Paused(address account)
RewardsCalculated
event RewardsCalculated(uint256 indexed epoch, uint256 rewardBaseCalAmount, uint256 rewardAmount, uint256 treasuryAmount)
StartRound
event StartRound(uint256 indexed epoch, uint128 AIPrice)
TokenRecovery
event TokenRecovery(address indexed token, uint256 amount)
TreasuryClaim
event TreasuryClaim(uint256 amount)
Unpause
event Unpause(uint256 indexed epoch)
Unpaused
event Unpaused(address account)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60806040525f805461ffff60a81b191690553480156200001d575f80fd5b50604051620047b1380380620047b1833981016040819052620000409162000186565b33806200006757604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b62000072816200011b565b505f805460ff60a01b191690556103e8811115620000d35760405162461bcd60e51b815260206004820152601560248201527f54726561737572792066656520746f6f2068696768000000000000000000000060448201526064016200005e565b600180546001600160a01b039788166001600160a01b0319918216179091556002805496909716951694909417909455600491909155600355600591909155600655620001df565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811462000181575f80fd5b919050565b5f805f805f8060c087890312156200019c575f80fd5b620001a7876200016a565b9550620001b7602088016200016a565b945060408701519350606087015192506080870151915060a087015190509295509295509295565b6145c480620001ed5f395ff3fe60806040526004361061025c575f3560e01c80638456cb591161014b578063c61df64a116100c6578063f2b3c8091161007c578063f7fdec2811610062578063f7fdec2814610835578063fa968eea14610867578063fc6f94681461087c575f80fd5b8063f2b3c80914610801578063f2fde38b14610816575f80fd5b8063dd1f7596116100ac578063dd1f7596146107ae578063e46c6287146107cd578063eaba2361146107ec575f80fd5b8063c61df64a1461077a578063cc32d17614610799575f80fd5b8063951fd6001161011b578063aa6b873a11610101578063aa6b873a14610729578063b29a81401461073c578063b3ab15fb1461075b575f80fd5b8063951fd600146106dc578063a0c7f71c1461070a575f80fd5b80638456cb5914610538578063890dc7661461054c5780638c65c81f1461056b5780638da5cb5b146106b3575f80fd5b80636ba4c138116101db5780637285c58b116101ab57806377e741c71161019157806377e741c7146104e55780637bf41254146105045780637d1cd04f14610523575f80fd5b80637285c58b1461045657806376671808146104d0575f80fd5b80636ba4c138146103e55780636c18859314610404578063704b6c0214610423578063715018a614610442575f80fd5b8063368acb091161023057806343b2fde51161021657806343b2fde51461038557806357fb096f146103a45780635c975abb146103b7575f80fd5b8063368acb091461035c5780633f4ba83a14610371575f80fd5b80623bdc74146102605780630f74174f14610276578063127effb2146102bc578063273867d41461030d575b5f80fd5b34801561026b575f80fd5b506102746108a8565b005b348015610281575f80fd5b505f546102a7907501000000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c7575f80fd5b506002546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b3565b348015610318575f80fd5b5061034e610327366004614157565b73ffffffffffffffffffffffffffffffffffffffff165f908152600b602052604090205490565b6040519081526020016102b3565b348015610367575f80fd5b5061034e60075481565b34801561037c575f80fd5b5061027461099f565b348015610390575f80fd5b5061027461039f36600461418f565b610aa6565b6102746103b23660046141c0565b610cf1565b3480156103c2575f80fd5b505f5474010000000000000000000000000000000000000000900460ff166102a7565b3480156103f0575f80fd5b506102746103ff3660046141d7565b6110e2565b34801561040f575f80fd5b5061027461041e3660046141c0565b6115df565b34801561042e575f80fd5b5061027461043d366004614157565b611710565b34801561044d575f80fd5b50610274611803565b348015610461575f80fd5b506104c1610470366004614246565b600960209081525f928352604080842090915290825290205460ff808216916fffffffffffffffffffffffffffffffff61010082041691710100000000000000000000000000000000009091041683565b6040516102b3939291906142cd565b3480156104db575f80fd5b5061034e60085481565b3480156104f0575f80fd5b506102746104ff3660046141c0565b611814565b34801561050f575f80fd5b506102a761051e366004614246565b611941565b34801561052e575f80fd5b5061034e60045481565b348015610543575f80fd5b50610274611b23565b348015610557575f80fd5b50610274610566366004614303565b611c03565b348015610576575f80fd5b506106316105853660046141c0565b600a6020525f90815260409020805460018201546002830154600384015460049094015463ffffffff808516956401000000008604821695680100000000000000008104909216946fffffffffffffffffffffffffffffffff6c0100000000000000000000000090930483169481841694700100000000000000000000000000000000928390048516948281169492849004811693838216938190048216929182169160ff919004168c565b6040805163ffffffff9d8e1681529b8d1660208d015299909b16988a01989098526fffffffffffffffffffffffffffffffff96871660608a0152948616608089015292851660a088015290841660c0870152831660e08601528216610100850152811661012084015216610140820152901515610160820152610180016102b3565b3480156106be575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102e8565b3480156106e7575f80fd5b506106fb6106f6366004614323565b611d62565b6040516102b393929190614353565b348015610715575f80fd5b506102a7610724366004614246565b612018565b6102746107373660046141c0565b612342565b348015610747575f80fd5b50610274610756366004614406565b61271c565b348015610766575f80fd5b50610274610775366004614157565b612799565b348015610785575f80fd5b5061027461079436600461418f565b612905565b3480156107a4575f80fd5b5061034e60065481565b3480156107b9575f80fd5b5061034e6107c8366004614406565b612add565b3480156107d8575f80fd5b506102746107e736600461442e565b612b08565b3480156107f7575f80fd5b5061034e60035481565b34801561080c575f80fd5b5061034e6103e881565b348015610821575f80fd5b50610274610830366004614157565b612c9d565b348015610840575f80fd5b505f546102a790760100000000000000000000000000000000000000000000900460ff1681565b348015610872575f80fd5b5061034e60055481565b348015610887575f80fd5b506001546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b6108b0612cfd565b60015473ffffffffffffffffffffffffffffffffffffffff163314610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600780545f9091556001546109619073ffffffffffffffffffffffffffffffffffffffff1682612d83565b6040518181527fb9197c6b8e21274bd1e2d9c956a88af5cfee510f630fab3f046300f88b4223619060200160405180910390a15061099d612e4e565b565b6109a7612e78565b60015473ffffffffffffffffffffffffffffffffffffffff163314806109e4575060025473ffffffffffffffffffffffffffffffffffffffff1633145b610a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f742061646d696e2f6f70657261746f720000000000000000000000000000604482015260640161092d565b5f80547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff169055610a79612ecb565b6008546040517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab7905f90a2565b610aae612f47565b60025473ffffffffffffffffffffffffffffffffffffffff163314610b2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015260640161092d565b5f54760100000000000000000000000000000000000000000000900460ff16610bda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e6420697320747269676765726564000000000000000000000000000000606482015260840161092d565b5f547501000000000000000000000000000000000000000000900460ff1615610c85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43616e206f6e6c792072756e2067656e657369734c6f636b526f756e64206f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161092d565b610c9160085483612f9b565b600854610c9f906001614474565b6008819055610cae9082613250565b50505f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b610cf9612f47565b610d01612cfd565b333b15610d6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f776564000000000000000000000000604482015260640161092d565b333214610dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604482015260640161092d565b6008548114610e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42657420697320746f6f206561726c792f6c6174650000000000000000000000604482015260640161092d565b5f818152600a60205260409020610e54816133c7565b610eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526f756e64206e6f74206265747461626c650000000000000000000000000000604482015260640161092d565b600554341015610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f42657420616d6f756e74206d7573742062652067726561746572207468616e2060448201527f6d696e426574416d6f756e740000000000000000000000000000000000000000606482015260840161092d565b5f8281526009602090815260408083203384529091529020805461010090046fffffffffffffffffffffffffffffffff1615610fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c7920626574206f6e63652070657220726f756e640000000000604482015260640161092d565b6002820180547001000000000000000000000000000000007fffffffffffffffffffffffffffffffff000000000000000000000000000000008216346fffffffffffffffffffffffffffffffff938416810184169182178390048416810184169092021790925582547fffffffffffffffffffffffffffffff000000000000000000000000000000000016610100918316918202178355335f818152600b60209081526040808320805460018101825590845292829020909201889055905192835286927fc4dff95c4e464dd34e49d0e93b6d7bc0cbd425589cea42e9ac0064a1a2bba26491015b60405180910390a35050506110df612e4e565b50565b6110ea612cfd565b333b15611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f776564000000000000000000000000604482015260640161092d565b3332146111bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604482015260640161092d565b5f81815b818110156115c0575f8585838181106111db576111db614487565b602090810292909201355f818152600a84526040808220815161018081018352815463ffffffff808216808452640100000000830482169984019990995268010000000000000000820416938201939093526c010000000000000000000000009092046fffffffffffffffffffffffffffffffff90811660608401526001820154808216608085015270010000000000000000000000000000000090819004821660a0850152600283015480831660c0860152819004821660e0850152600383015480831661010086015281900482166101208501526004909201549081166101408401520460ff16151561016082015291945090929003905061133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f526f756e6420686173206e6f7420737461727465640000000000000000000000604482015260640161092d565b806040015163ffffffff164263ffffffff16116113b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e6420686173206e6f7420656e64656400000000000000000000000000604482015260640161092d565b5f82815260096020908152604080832033845290915281206101608301511561148d576113e18433612018565b611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f7420656c696769626c6520666f7220636c61696d00000000000000000000604482015260640161092d565b61012083015161014084015182546fffffffffffffffffffffffffffffffff9283169261147c928116916101009004166144b4565b61148691906144cb565b9150611519565b6114978433611941565b6114fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420656c696769626c6520666f7220726566756e64000000000000000000604482015260640161092d565b805461010090046fffffffffffffffffffffffffffffffff1691505b80547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815561155d8288614474565b9650833373ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7846040516115a891815260200190565b60405180910390a35050600190920191506111c09050565b5081156115d1576115d13383612d83565b50506115db612e4e565b5050565b6115e7612e78565b60015473ffffffffffffffffffffffffffffffffffffffff163314611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e0000000000000000000000000000000000000000000000604482015260640161092d565b805f036116d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d757374206265207375706572696f7220746f20300000000000000000000000604482015260640161092d565b60058190556008546040518281527f90eb87c560a0213754ceb3a7fa3012f01acab0a35602c1e1995adf69dabc9d50906020015b60405180910390a250565b611718613425565b73ffffffffffffffffffffffffffffffffffffffff8116611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f206164647265737300000000000000000000604482015260640161092d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f137b621413925496477d46e5055ac0d56178bdd724ba8bf843afceef18268ba3905f90a250565b61180b613425565b61099d5f613477565b61181c612e78565b60015473ffffffffffffffffffffffffffffffffffffffff16331461189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e0000000000000000000000000000000000000000000000604482015260640161092d565b6103e8811115611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f54726561737572792066656520746f6f20686967680000000000000000000000604482015260640161092d565b60068190556008546040518281527fb1c4ee38d35556741133da7ff9b6f7ab0fa88d0406133126ff128f635490a85790602001611705565b5f82815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff16600181111561199557611995614267565b60018111156119a6576119a6614267565b815290546fffffffffffffffffffffffffffffffff610100808304821660208086019190915260ff71010000000000000000000000000000000000909404841615156040958601525f8a8152600a8252859020855161018081018752815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316968101969096526c01000000000000000000000000909104831660608601526001810154808416608087015270010000000000000000000000000000000090819004841660a0870152600282015480851660c0880152819004841660e08701526003820154808516938701939093529182900483166101208601526004015491821661014085015290041615801561016083018190529293509091611ad557508160400151155b8015611af75750600354816040015163ffffffff16611af49190614474565b42115b8015611b18575060208201516fffffffffffffffffffffffffffffffff1615155b925050505b92915050565b611b2b612f47565b60015473ffffffffffffffffffffffffffffffffffffffff16331480611b68575060025473ffffffffffffffffffffffffffffffffffffffff1633145b611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f742061646d696e2f6f70657261746f720000000000000000000000000000604482015260640161092d565b611bd66134eb565b6008546040517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d905f90a2565b611c0b612e78565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e0000000000000000000000000000000000000000000000604482015260640161092d565b808210611d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f6275666665725365636f6e6473206d75737420626520696e666572696f72207460448201527f6f20696e74657276616c5365636f6e6473000000000000000000000000000000606482015260840161092d565b6003829055600481905560408051838152602081018390527fe60149e0431fec12df63dfab5fce2a9cefe9a4d3df5f41cb626f579ae1f2b91a910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600b602052604081205460609182918490611d99908790614503565b811115611dd35773ffffffffffffffffffffffffffffffffffffffff87165f908152600b6020526040902054611dd0908790614503565b90505b5f8167ffffffffffffffff811115611ded57611ded614516565b604051908082528060200260200182016040528015611e16578160200160208202803683370190505b5090505f8267ffffffffffffffff811115611e3357611e33614516565b604051908082528060200260200182016040528015611e9b57816020015b604080516060810182525f80825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611e515790505b5090505f5b83811015611ff95773ffffffffffffffffffffffffffffffffffffffff8a165f908152600b60205260409020611ed6828b614474565b81548110611ee657611ee6614487565b905f5260205f200154838281518110611f0157611f01614487565b60200260200101818152505060095f848381518110611f2257611f22614487565b60209081029190910181015182528181019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff8e168252909252908190208151606081019092528054829060ff166001811115611f8157611f81614267565b6001811115611f9257611f92614267565b8152905461010081046fffffffffffffffffffffffffffffffff16602083015271010000000000000000000000000000000000900460ff1615156040909101528251839083908110611fe657611fe6614487565b6020908102919091010152600101611ea0565b508181612006858b614474565b95509550955050505093509350939050565b5f82815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff16600181111561206c5761206c614267565b600181111561207d5761207d614267565b815290546fffffffffffffffffffffffffffffffff610100808304821660208086019190915260ff71010000000000000000000000000000000000909404841615156040958601525f8a8152600a8252858120865161018081018852815463ffffffff80821683526401000000008204811695830195909552680100000000000000008104909416978101979097526c010000000000000000000000009092048416606087015260018201548085166080880181905270010000000000000000000000000000000091829004861660a08901819052600285015480881660c08b0152839004871660e08a01526003850154808816968a0196909652948290048616610120890152600490930154948516610140880152909304909316151561016085015293945091921180156121de575081608001516fffffffffffffffffffffffffffffffff1682606001516fffffffffffffffffffffffffffffffff16115b8061224a575081608001516fffffffffffffffffffffffffffffffff168260a001516fffffffffffffffffffffffffffffffff1610801561224a575081608001516fffffffffffffffffffffffffffffffff1682606001516fffffffffffffffffffffffffffffffff16105b806122b6575081608001516fffffffffffffffffffffffffffffffff168260a001516fffffffffffffffffffffffffffffffff161480156122b6575081608001516fffffffffffffffffffffffffffffffff1682606001516fffffffffffffffffffffffffffffffff16145b905081610160015180156122df575060208301516fffffffffffffffffffffffffffffffff1615155b80156122ed57508260400151155b8015612338575080801561231257505f8351600181111561231057612310614267565b145b80612338575080158015612338575060018351600181111561233657612336614267565b145b9695505050505050565b61234a612f47565b612352612cfd565b333b156123bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f776564000000000000000000000000604482015260640161092d565b333214612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604482015260640161092d565b600854811461248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42657420697320746f6f206561726c792f6c6174650000000000000000000000604482015260640161092d565b5f818152600a602052604090206124a5816133c7565b61250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526f756e64206e6f74206265747461626c650000000000000000000000000000604482015260640161092d565b60055434101561259d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f42657420616d6f756e74206d7573742062652067726561746572207468616e2060448201527f6d696e426574416d6f756e740000000000000000000000000000000000000000606482015260840161092d565b5f8281526009602090815260408083203384529091529020805461010090046fffffffffffffffffffffffffffffffff1615612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c7920626574206f6e63652070657220726f756e640000000000604482015260640161092d565b6002820180546fffffffffffffffffffffffffffffffff8082163490810182167fffffffffffffffffffffffffffffffff00000000000000000000000000000000938416179093556003850180548083168501831693169290921790915582547fffffffffffffffffffffffffffffff0000000000000000000000000000000000166101009183169182021760019081178455335f818152600b602090815260408083208054958601815583529181902090930188905551928352869290917f58d983c1c289f0d1b4b762549078c5845b1b2ec2de3b513cd137e9d1da5f89a291016110cc565b612724613425565b61274573ffffffffffffffffffffffffffffffffffffffff83163383613559565b8173ffffffffffffffffffffffffffffffffffffffff167f14f11966a996e0629572e51064726d2057a80fbd34efc066682c06a71dbb6e988260405161278d91815260200190565b60405180910390a25050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461281a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e0000000000000000000000000000000000000000000000604482015260640161092d565b73ffffffffffffffffffffffffffffffffffffffff8116612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f206164647265737300000000000000000000604482015260640161092d565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fc47d127c07bdd56c5ccba00463ce3bd3c1bca71b4670eea6e5d0c02e4aa156e2905f90a250565b61290d612f47565b60025473ffffffffffffffffffffffffffffffffffffffff16331461298e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015260640161092d565b5f54760100000000000000000000000000000000000000000000900460ff1680156129d357505f547501000000000000000000000000000000000000000000900460ff165b612a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e6420616e642067656e657369734c6f636b526f756e642069732074726960648201527f6767657265640000000000000000000000000000000000000000000000000000608482015260a40161092d565b612a9160085483612f9b565b612aa96001600854612aa39190614503565b836135e6565b612ac06001600854612abb9190614503565b6138aa565b600854612ace906001614474565b60088190556115db9082613cc6565b600b602052815f5260405f208181548110612af6575f80fd5b905f5260205f20015f91509150505481565b612b10612f47565b60025473ffffffffffffffffffffffffffffffffffffffff163314612b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015260640161092d565b5f54760100000000000000000000000000000000000000000000900460ff1615612c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616e206f6e6c792072756e2067656e657369735374617274526f756e64206f60448201527f6e63650000000000000000000000000000000000000000000000000000000000606482015260840161092d565b600854612c4b906001614474565b6008819055612c5a9082613250565b505f80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b612ca5613425565b73ffffffffffffffffffffffffffffffffffffffff8116612cf4576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f600482015260240161092d565b6110df81613477565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15612d56576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90613eff565b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612dd9576040519150601f19603f3d011682016040523d82523d5f602084013e612dde565b606091505b5050905080612e49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161092d565b505050565b61099d5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00612d7d565b5f5474010000000000000000000000000000000000000000900460ff1661099d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ed3612e78565b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b5f5474010000000000000000000000000000000000000000900460ff161561099d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600a602052604081208054909163ffffffff9091169003613042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e206f6e6c79206c6f636b20726f756e6420616674657220726f756e642060448201527f6861732073746172746564000000000000000000000000000000000000000000606482015260840161092d565b805463ffffffff64010000000090910481164290911610156130e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c79206c6f636b20726f756e64206166746572206c6f636b546960448201527f6d657374616d7000000000000000000000000000000000000000000000000000606482015260840161092d565b60035481546131039190640100000000900463ffffffff16614474565b421115613192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43616e206f6e6c79206c6f636b20726f756e642077697468696e20627566666560448201527f725365636f6e6473000000000000000000000000000000000000000000000000606482015260840161092d565b60045481547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff16680100000000000000004290920163ffffffff16919091021781556001810180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff841690811790915560405190815283907f6ec696c906ea967e40a4a5cef6dcdf1b469bda698722fb465728a15b521e207e906020015b60405180910390a2505050565b5f828152600a602052604090819020805463ffffffff428181167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008416811785556004805483018416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909516909117939093178085559254600280860180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556fffffffffffffffffffffffffffffffff88166c01000000000000000000000000027fffffffff00000000000000000000000000000000ffffffffffffffffffffffff919092029092019092166801000000000000000002167fffffffff0000000000000000000000000000000000000000ffffffffffffffff909216919091171790555182907f8d3960384b609cf325c5ed2cb49da19bee5a75fe7001d56b90ed7452fc7eccd09061278d9084906fffffffffffffffffffffffffffffffff91909116815260200190565b80545f9063ffffffff16158015906133ed57508154640100000000900463ffffffff1615155b80156134045750815463ffffffff90811642909116115b8015611b1d57505054640100000000900463ffffffff908116429091161090565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461099d576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161092d565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6134f3612f47565b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612f1d3390565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612e49908490613f06565b5f828152600a6020526040812054640100000000900463ffffffff169003613690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f43616e206f6e6c7920656e6420726f756e6420616674657220726f756e64206860448201527f6173206c6f636b65640000000000000000000000000000000000000000000000606482015260840161092d565b5f828152600a602052604090205463ffffffff680100000000000000009091048116429091161015613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e6420616674657220636c6f7365546960448201527f6d657374616d7000000000000000000000000000000000000000000000000000606482015260840161092d565b6003545f838152600a6020526040902054613771919068010000000000000000900463ffffffff16614474565b421115613800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e642077697468696e2062756666657260448201527f5365636f6e647300000000000000000000000000000000000000000000000000606482015260840161092d565b5f828152600a60209081526040918290206001810180546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000878316810291909117928390556004840180547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16821790559451949091041683529184917f7565b575bc429a154ce00e55941c44b14b3318545f3a223a4bd919cbf0136ec89101613243565b5f818152600a60205260409020600381015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16158015613903575060048101546fffffffffffffffffffffffffffffffff16155b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526577617264732063616c63756c617465640000000000000000000000000000604482015260640161092d565b60018101545f90819081906fffffffffffffffffffffffffffffffff808216700100000000000000000000000000000000909204161180156139d75750600184015484546fffffffffffffffffffffffffffffffff9182166c01000000000000000000000000909104909116115b80613a45575060018401546fffffffffffffffffffffffffffffffff80821670010000000000000000000000000000000090920416108015613a455750600184015484546fffffffffffffffffffffffffffffffff9182166c01000000000000000000000000909104909116105b80613ab15750600184015470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff9081169116148015613ab15750600184015484546c0100000000000000000000000090046fffffffffffffffffffffffffffffffff9081169116145b15613b6657600284015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1692505f839003613b095760028401546fffffffffffffffffffffffffffffffff169150613b3d565b600654600285015461271091613b30916fffffffffffffffffffffffffffffffff166144b4565b613b3a91906144cb565b91505b6002840154613b5f9083906fffffffffffffffffffffffffffffffff16614503565b9050613bfe565b60038401546fffffffffffffffffffffffffffffffff1692505f839003613ba55760028401546fffffffffffffffffffffffffffffffff169150613bd9565b600654600285015461271091613bcc916fffffffffffffffffffffffffffffffff166144b4565b613bd691906144cb565b91505b6002840154613bfb9083906fffffffffffffffffffffffffffffffff16614503565b90505b6003840180546fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000086831602179091556004850180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016918316919091179055600780548391905f90613c77908490614474565b9091555050604080518481526020810183905290810183905285907f6dfdfcb09c8804d0058826cd2539f1acfbe3cb887c9be03d928035bce0f1a58d9060600160405180910390a25050505050565b5f54760100000000000000000000000000000000000000000000900460ff16613d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e6420697320747269676765726564000000000000000000000000000000606482015260840161092d565b600a5f613d7f600285614503565b815260208101919091526040015f9081205468010000000000000000900463ffffffff169003613e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f43616e206f6e6c7920737461727420726f756e6420616674657220726f756e6460448201527f206e2d322068617320656e646564000000000000000000000000000000000000606482015260840161092d565b600a5f613e3f600285614503565b815260208101919091526040015f205463ffffffff680100000000000000009091048116429091161015613ef5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43616e206f6e6c79207374617274206e657720726f756e64206166746572207260448201527f6f756e64206e2d3220636c6f736554696d657374616d70000000000000000000606482015260840161092d565b6115db8282613250565b80825d5050565b5f613f2773ffffffffffffffffffffffffffffffffffffffff841683613f9a565b905080515f14158015613f4b575080806020019051810190613f499190614543565b155b15612e49576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161092d565b6060613fa783835f613fae565b9392505050565b606081471015613fec576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161092d565b5f808573ffffffffffffffffffffffffffffffffffffffff1684866040516140149190614562565b5f6040518083038185875af1925050503d805f811461404e576040519150601f19603f3d011682016040523d82523d5f602084013e614053565b606091505b50915091506123388683836060826140735761406e826140ed565b613fa7565b8151158015614097575073ffffffffffffffffffffffffffffffffffffffff84163b155b156140e6576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161092d565b5080613fa7565b8051156140fd5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114614152575f80fd5b919050565b5f60208284031215614167575f80fd5b613fa78261412f565b80356fffffffffffffffffffffffffffffffff81168114614152575f80fd5b5f80604083850312156141a0575f80fd5b6141a983614170565b91506141b760208401614170565b90509250929050565b5f602082840312156141d0575f80fd5b5035919050565b5f80602083850312156141e8575f80fd5b823567ffffffffffffffff808211156141ff575f80fd5b818501915085601f830112614212575f80fd5b813581811115614220575f80fd5b8660208260051b8501011115614234575f80fd5b60209290920196919550909350505050565b5f8060408385031215614257575f80fd5b823591506141b76020840161412f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600281106142c9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b606081016142db8286614294565b6fffffffffffffffffffffffffffffffff841660208301528215156040830152949350505050565b5f8060408385031215614314575f80fd5b50508035926020909101359150565b5f805f60608486031215614335575f80fd5b61433e8461412f565b95602085013595506040909401359392505050565b606080825284518282018190525f91906020906080850190828901855b8281101561438c57815184529284019290840190600101614370565b505050848103828601528651808252878301918301905f5b818110156143ef5783516143b9848251614294565b808601516fffffffffffffffffffffffffffffffff168487015260409081015115159084015292840192918501916001016143a4565b505080945050505050826040830152949350505050565b5f8060408385031215614417575f80fd5b6144208361412f565b946020939093013593505050565b5f6020828403121561443e575f80fd5b613fa782614170565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611b1d57611b1d614447565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082028115828204841417611b1d57611b1d614447565b5f826144fe577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b81810381811115611b1d57611b1d614447565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614553575f80fd5b81518015158114613fa7575f80fd5b5f82515f5b818110156145815760208186018101518583015201614567565b505f92019182525091905056fea26469706673582212206509619f03e53e9419eb36ab6779d4aefad66fbec1ccae9337d2b5a233fd4ab864736f6c63430008180033000000000000000000000000b134367c0e447d7de9bd50e55762c190c678ffea000000000000000000000000b134367c0e447d7de9bd50e55762c190c678ffea000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000009184e72a000000000000000000000000000000000000000000000000000000000000000012c