0 txs
5 calls
constructor
constructor()
functions
clonedFrom
viewfunction clonedFrom(bytes32 cloneGameId) view returns (bytes32 originalGameId)
entries
viewfunction entries(bytes32 roundId, bytes32 entryId) view returns (bool entered, bool scored, address user, uint40 score, uint40 scoreTime)
getEntry
viewfunction getEntry(bytes32 roundId, bytes32 entryId) view returns (tuple)
getPayoutConfig
viewfunction getPayoutConfig() view returns (uint8 minEntriesToPayout_, uint16[5] payoutCurveBPS_)
getRound
viewfunction getRound(bytes32 roundId) view returns (tuple round, bytes32[5] top, tuple[5] topEntries)
getUserEntriesForRound
viewfunction getUserEntriesForRound(bytes32 roundId, address user) view returns (bytes32[] entryIds, tuple[] entryDatas)
getUserRanksAndExpectedPayout
viewfunction getUserRanksAndExpectedPayout(bytes32 roundId, address user) view returns (uint8[] ranks, uint256 expectedPayout)
leaderboard
viewfunction leaderboard(bytes32 roundId, uint256) view returns (bytes32)
owner
viewfunction owner() view returns (address)
platformFeeRecipient
viewfunction platformFeeRecipient() view returns (address)
platformSigner
viewfunction platformSigner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rounds
viewfunction rounds(bytes32 roundId) view returns (bytes32 gameId, uint256 prizePool, address creator, uint40 roundEndTime, uint24 totalEntries, bool paidOut)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usdcAddress
viewfunction usdcAddress() view returns (address)
claim
nonpayablefunction claim(bytes32 roundId)
cloneGame
nonpayablefunction cloneGame(bytes32 originalGameId, bytes32 cloneGameId, address originalGameOwnerAddress, address clonerAddress, uint256 cloneFee, uint256 signatureDeadline, tuple permit, bytes platformSig)
enter
nonpayablefunction enter(bytes32 gameId, bytes32 roundId, bytes32 entryId, uint256 entryFee, uint256 maxEntriesPerUser, address user, address creator, uint40 roundEndTime, tuple permit, bytes platformSig)
initialize
nonpayablefunction initialize(address _usdcAddress, address _platformSigner, address _platformFeeRecipient, address _owner)
renounceOwnership
nonpayablefunction renounceOwnership()
setPayoutConfig
nonpayablefunction setPayoutConfig(uint8 minEntriesToPayout, uint16[5] payoutCurveBPS_)
setPlatformConfig
nonpayablefunction setPlatformConfig(address platformSigner_, address platformFeeRecipient_)
submitScore
nonpayablefunction submitScore(bytes32 entryId, bytes32 roundId, address user, uint40 score, uint40 scoreTime, bytes platformSig)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Claimed
event Claimed(bytes32 indexed roundId, uint256 prizePool, address creator, address platform)
Cloned
event Cloned(bytes32 indexed originalGameId, bytes32 indexed cloneGameId, address indexed cloner, address originalOwner, uint256 fee)
Entered
event Entered(bytes32 indexed roundId, bytes32 indexed entryId, address indexed user, uint256 entryFee)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PayoutConfigUpdated
event PayoutConfigUpdated(uint8 minEntriesToPayout, uint16[5] payoutCurveBPS)
PlatformConfigUpdated
event PlatformConfigUpdated(address platformSigner, address platformFeeRecipient)
Scored
event Scored(bytes32 indexed roundId, bytes32 indexed entryId, address indexed user, uint40 score, uint40 scoreTime)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyPaidOut
error AlreadyPaidOut()
AlreadyScored
error AlreadyScored()
CloneExists
error CloneExists()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EntryAlreadyExists
error EntryAlreadyExists()
EntryNotFound
error EntryNotFound()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
NothingToClaim
error NothingToClaim()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RoundNotOver
error RoundNotOver()
RoundOver
error RoundOver()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TooManyEntries
error TooManyEntries()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroScoreTime
error ZeroScoreTime()
creation bytecode
0x60e080604052346101be57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166101ad576002600160401b03196001600160401b03821601610147575b4660c0526040516100666040826101c3565b600881526756696547616d657360c01b602090910152604080517fe6cbd3052d70b35b022030df830faf6bb35562659bc0d64d6520a58bfc335e78916100ac90826101c3565b600181526020810190603160f81b82525190206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261011060c0826101c3565b51902060a0526040516129f690816101fd82396080518181816118b8015261195e015260a0518161227c015260c051816122510152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fd5b601f909101601f19168101906001600160401b038211908210176101e657604052565b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816302d4545714611b70575080633428c8cc14611b365780634f1ef2861461190d57806352d1902d146118a55780636889e2351461167157806368df4812146115fe578063715018a6146115945780637a4b2291146113985780638da5cb5b14611362578063936e9aa9146113385780639515cf56146112ae5780639790729614611243578063a23ad88d146111cd578063a3d4595414610fee578063ad3cb1cc14610f74578063ba92ddbc14610f4b578063bd66528a14610c32578063c50d5a8414610b63578063ca6b919614610afe578063dd2be61d1461087c578063de061665146104f6578063eb13554f146104cd578063f2fde38b1461047c578063f8c8765e1461027e5763fbc7437e1461013457600080fd5b3461027b5760c036600319011261027b5760043560ff8116809103610279573660c4116102795761016361242c565b6040516040810181811067ffffffffffffffff821117610265576040528181526040519061019260a083611c3f565b6024825b60c4821061024d5750508082602060ff930152511660ff1960035416176003558290835b60058110610227575050600455604051908152602482602083015b6005821061020657847f897652183c87d51d398cc3030ab9e4f4cd052ed8b3732398c14435d21194c09660c086a180f35b60208060019261ffff610218876121f6565b168152019301910190916101d5565b9091602060019161ffff8551169061ffff8560041b92831b921b191617930191016101ba565b6020809161025a846121f6565b815201910190610196565b634e487b7160e01b84526041600452602484fd5b505b80fd5b503461027b57608036600319011261027b57610298611b94565b906102a1611bdb565b916102aa611baf565b6102b2611bc5565b906000805160206129a1833981519152549260ff8460401c16159367ffffffffffffffff811680159081610474575b600114908161046a575b159081610461575b506104525767ffffffffffffffff1981166001176000805160206129a18339815191525584610425575b506001600160a01b03169485158015610414575b8015610403575b80156103f2575b6103e35784546001600160a01b031990811690961785556001805487166001600160a01b0392831617905560028054909616911617909355909161038290612462565b6103895780f35b68ff0000000000000000196000805160206129a183398151915254166000805160206129a1833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b63d92e233d60e01b8552600485fd5b506001600160a01b0383161561033f565b506001600160a01b03821615610338565b506001600160a01b03811615610331565b68ffffffffffffffffff191668010000000000000001176000805160206129a1833981519152553861031d565b63f92ee8a960e01b8652600486fd5b905015386102f3565b303b1591506102eb565b8691506102e1565b503461027b57602036600319011261027b57610496611b94565b61049e61242c565b6001600160a01b038116156104b9576104b690612462565b80f35b631e4fbdf760e01b82526004829052602482fd5b503461027b578060031936011261027b576002546040516001600160a01b039091168152602090f35b503461027b576101c036600319011261027b5760a4356001600160a01b038116906044359060243590606435906004356084358683036108785760c4356001600160a01b038116908190036108745760e4359064ffffffffff82168083036108705760a036610103190112610870576101a43567ffffffffffffffff811161086c57898b8a61058c61060b943690600401611cb4565b939092610597612205565b6040519160208301937fded43feb1bc9879e0aae9ee18d27e3df45e29442fae48004df2afd34c75617a085528c6040850152606084015260808301528c60a08301528960c083015260e08201528661010082015285610120820152610120815261060361014082611c3f565b519020612241565b421161085e57868a52600760205260408a20888b5260205260408a209160ff83541661084f57878b52600560205260408b209485541561080f575b5050815461ff01600160b01b031916601086901b62010000600160b01b03161760011790915550848852600860209081526040808a2060008a81529252902061068f8782612724565b50541161080057600281018054600162ffffff8260c81c160162ffffff81116107ec5762ffffff60c81b1990911660c89190911b62ffffff60c81b1617905560010180546106de908490611e38565b90558554869061014435906001600160a01b031660ff821682036107e857803b156107e85760405163d505accf60e01b81526001600160a01b038516600482015230602482015261010435604482015261012435606482015260ff9290921660848301526101643560a48301526101843560c48301528290829060e490829084905af180156107dd576107c4575b5050816107a87f7593d3746f77d061894217b20c7fd9f802da156876178e169eb47b787b1ac14d93602093309060018060a01b038b54166123a4565b604051908152a460016000805160206129818339815191525580f35b816107ce91611c3f565b6107d957853861076c565b8580fd5b6040513d84823e3d90fd5b8280fd5b634e487b7160e01b8a52601160045260248afd5b630fdfc52760e21b8752600487fd5b855560028501805464ffffffffff60a01b199093166001600160c81b03199093169290921760a09190911b64ffffffffff60a01b16179055388080610646565b63fea82a7d60e01b8b5260048bfd5b62edcdfb60e11b8a5260048afd5b8b80fd5b8a80fd5b8880fd5b8780fd5b503461027b57602036600319011261027b576004358160a06040516108a081611c23565b828152826020820152826040820152826060820152826080820152015260a0806040516108cd8282611c3f565b3690376040516108dd8282611c3f565b60005b828110610ae35750828452600560205260408420926040519361090285611c23565b805485526002600182015491602087019283520154906040860160018060a01b0383168152606087019064ffffffffff84881c168252608088019262ffffff8560c81c16845260ff888a019560e01c1615158552858a52600660205260408a209560405196878c905b60058210610acc575050506109808988611c3f565b8a5b60058110610a255750506040805199518a52905160208a015290516001600160a01b0316908801525164ffffffffff1660608701525162ffffff166080860152511515838501528460c085015b60058210610a0e5750505061016083019093905b600582106109f15761048084f35b60208382610a026001948951611cf8565b019501910190936109e3565b8251815260209283019260019290920191016109cf565b808981610a379b9e9b6001948c611d3a565b51918c83610a4d575b50505050019a979a610982565b610ac293878252600760205260408220915260205260408d2060405190610a7382611bf1565b5460ff81161515825260ff8160081c1615156020830152868060a01b038160101c16604083015264ffffffffff8160b01c16606083015260d81c6080820152610abc8383611d3a565b52611d3a565b5038818e8c610a40565b82548152600192830192919091019060200161096b565b602090610af19592956121a7565b81870152019390936108e0565b503461027b578060031936011261027b5760a0604051610b1e8282611c3f565b36903760ff6003541690610b30611df2565b60405192835290602083015b60058210610b495760c084f35b60208060019261ffff865116815201930191019091610b3c565b503461027b57604036600319011261027b57610b7d611b94565b610b85611bdb565b90610b8e61242c565b6001600160a01b03169081158015610c21575b610c1257816040917fdca26c8e8156991b819fab21fadf79291aa6896dd2012698290d70925f2d32e5936bffffffffffffffffffffffff60a01b600154161760015560018060a01b0316806bffffffffffffffffffffffff60a01b600254161760025582519182526020820152a180f35b63d92e233d60e01b8352600483fd5b506001600160a01b03811615610ba1565b503461027b57602036600319011261027b57600435610c4f612205565b808252600560205260408220805415610f3c5760028101805460ff8160e01c16610f2d5764ffffffffff8160a01c16421115610f1e5783855260066020526040852090604051918287905b60058210610f0857505050610cb060a083611c3f565b610cb9826123ed565b938415610ef957600101549360ff600354168110600014610dae57610cdf915084611dc5565b855b60058110610d5b575050507f2bade9a179b16e2287f0f6b37c2f6a316d66e528e38631a9f8c7520fcad45f3c916060915b805460ff60e01b198116600160e01b17909155600254604080519384526001600160a01b039283166020850152911690820152a260016000805160206129818339815191525580f35b80610d6860019285611d3a565b518015610da857878952600760205260408920908952602052610da283838060a01b0360408b205460101c16848060a01b038b5416612630565b01610ce1565b50610da2565b50601e8402841590858104601e14821715610ee5576064900490600a860290868204600a141715610ee55790610e0e6064610e25930491610df883610df3838b611de5565b611de5565b8a5490956001600160a01b039081169116612630565b87546002546001600160a01b039081169116612630565b610e2d611df2565b90865b60058110610e6657505050507f2bade9a179b16e2287f0f6b37c2f6a316d66e528e38631a9f8c7520fcad45f3c91606091610d12565b80610e7360019286611d3a565b518015610edf57888a52600760205260408a20908a52602052818060a01b0360408a205460101c16612710610eb661ffff610eae8589611d3a565b511686611db2565b0480610ec6575b50505b01610e30565b610ed891848060a01b038c5416612630565b3880610ebd565b50610ec0565b634e487b7160e01b88526011600452602488fd5b6312d37ee560e31b8752600487fd5b6001602081928554815201930191019091610c9a565b63131bffcf60e21b8552600485fd5b631897796360e21b8552600485fd5b6312d37ee560e31b8352600483fd5b503461027b578060031936011261027b576001546040516001600160a01b039091168152602090f35b503461027b578060031936011261027b576040805191610f948284611c3f565b60058352640352e302e360dc1b6020840152815192839160208352815191826020850152815b838110610fd7575050828201840152601f01601f19168101030190f35b602082820181015188830188015287955001610fba565b503461027b57604036600319011261027b576004359061100c611bdb565b8282526008602052604082209060018060a01b0316600052602052604060002080549161103883611d86565b926110466040519485611c3f565b80845261105281611d86565b602085019190601f190136833761106881611d86565b956110766040519788611c3f565b81875261108282611d86565b946110956020890196601f1901876121d2565b845b838110611125575050505060405194859460408601906040875251809152606086019290845b81811061110c575050506020908583038287015251918281520192915b8181106110e8575050500390f35b91935091602060a0826110fe6001948851611cf8565b0194019101918493926110da565b82518552889750602094850194909201916001016110bd565b80611137600192849b97999a9b61270c565b90549060031b1c80611149838d611d9e565b52848852600760205260408820908852602052604087206040519061116d82611bf1565b5460ff81161515825260ff8160081c1615156020830152838060a01b038160101c16604083015264ffffffffff8160b01c16606083015260d81c60808201526111b68288611d9e565b526111c18187611d9e565b50019796959397611097565b503461027b57602036600319011261027b57604060c091600435815260056020522060ff8154916002600182015491015490604051938452602084015260018060a01b038116604084015264ffffffffff8160a01c16606084015262ffffff8160c81c16608084015260e01c16151560a0820152f35b503461027b57604060a09161125736611ce2565b908252600760205282822090825260205220546040519060ff81161515825260ff8160081c1615156020830152600180841b038160101c16604083015264ffffffffff8160b01c16606083015260d81c6080820152f35b503461027b57604060a0916112c236611ce2565b906112cb6121a7565b508252600760205282822090825260205220604051906112ea82611bf1565b5460ff81161515825260ff8160081c1615156020830152600180841b038160101c16604083015264ffffffffff8160b01c16606083015260d81c60808201526113366040518092611cf8565bf35b503461027b57602036600319011261027b5760406020916004358152600983522054604051908152f35b503461027b578060031936011261027b57600080516020612941833981519152546040516001600160a01b039091168152602090f35b503461027b5760c036600319011261027b576024356004356113b8611baf565b9160643564ffffffffff8116908181036107d95760843564ffffffffff8116918282036108785760a43567ffffffffffffffff8111610874576113ff903690600401611cb4565b90611408612205565b84156115855790611475916040519960208b01907f4ea95f4e91a29531b78c6aec12d6eea30ba8cb785c7228371ad3c06e8ae2bb0982528a60408d01528960608d015260018060a01b03169a8b60808201528860a08201528760c082015260c0815261060360e082611c3f565b84885260076020526040882086895260205260408820805460ff8116156115765760ff8160081c1661156757868a52600560205264ffffffffff600260408c20015460a01c166014810180911161155357421161085e5760b083901b64ffffffffff60b01b1661ff01600160b01b039091161760d884901b6001600160d81b031916176101001790557f7ebe750739023d9641640be5606c39f88076e129a855f3e5950a504d93bafb939360409390929091611533919088886124b8565b82519182526020820152a460016000805160206129818339815191525580f35b634e487b7160e01b8b52601160045260248bfd5b637a2530f160e01b8a5260048afd5b635d47e14960e11b8a5260048afd5b63110ca3b360e01b8a5260048afd5b503461027b578060031936011261027b576115ad61242c565b60008051602061294183398151915280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461027b57604036600319011261027b5761162361161b611bdb565b600435611e45565b90604051916040830193604084528251809552602060608501930190945b80861061165657505082935060208301520390f35b909260208060019260ff875116815201940195019490611641565b503461027b5761018036600319011261027b57600435602435611692611baf565b9161169b611bc5565b6084359060a43560a03660c31901126118a1576101643567ffffffffffffffff8111610878576116cf903690600401611cb4565b916116d8612205565b80421161189357868952600960205260408920546118845790611741929160405160208101917fe13a4c95b344dca84f1576e94f4f8c8cc01a8b6a1fbe02bdde49cb81e7fa6e56835288604083015287606083015260808201526080815261060360a082611c3f565b855486906001600160a01b03166101043560ff811681036107e857813b156107e85760405163d505accf60e01b81526001600160a01b038516600482015230602482015260c48035604483015260e48035606484015260ff9390931660848301526101243560a483015261014435908201529291839190829084905af1801561187957611843575b50908161180282877fb9d8ab3a9477c87846baa1ea484452287ded314f7552d993a02d5a7be7c9d1dd9560018060a01b038b54166123a4565b84875260096020908152604080892086905580516001600160a01b03988916815291820193909352951694a460016000805160206129818339815191525580f35b95611871817fb9d8ab3a9477c87846baa1ea484452287ded314f7552d993a02d5a7be7c9d1dd949398611c3f565b9590916117c9565b6040513d89823e3d90fd5b634678fbb760e11b8952600489fd5b62edcdfb60e11b8952600489fd5b8680fd5b503461027b578060031936011261027b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036118fe5760206040516000805160206129618339815191528152f35b63703e46dd60e11b8152600490fd5b50604036600319011261027b57611922611b94565b9060243567ffffffffffffffff8111610279573660238201121561027957611954903690602481600401359101611c7d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611b13575b50611b045761199661242c565b6040516352d1902d60e01b8152926001600160a01b0381169190602085600481865afa80958596611acc575b506119db57634c9c8ce360e01b84526004839052602484fd5b9091846000805160206129618339815191528103611aba5750813b15611aa85760008051602061296183398151915280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015611a8e5780836020611a8295519101845af43d15611a86573d91611a6683611c61565b92611a746040519485611c3f565b83523d85602085013e612856565b5080f35b606091612856565b50505034611a995780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8452600452602483fd5b632a87526960e21b8552600452602484fd5b9095506020813d602011611afc575b81611ae860209383611c3f565b81010312611af8575194386119c2565b8480fd5b3d9150611adb565b63703e46dd60e11b8252600482fd5b600080516020612961833981519152546001600160a01b03161415905038611989565b503461027b57604036600319011261027b57602435600435825260066020526040822060058210156107e857602092500154604051908152f35b90503461027957816003193601126102795790546001600160a01b03168152602090f35b600435906001600160a01b0382168203611baa57565b600080fd5b604435906001600160a01b0382168203611baa57565b606435906001600160a01b0382168203611baa57565b602435906001600160a01b0382168203611baa57565b60a0810190811067ffffffffffffffff821117611c0d57604052565b634e487b7160e01b600052604160045260246000fd5b60c0810190811067ffffffffffffffff821117611c0d57604052565b90601f8019910116810190811067ffffffffffffffff821117611c0d57604052565b67ffffffffffffffff8111611c0d57601f01601f191660200190565b929192611c8982611c61565b91611c976040519384611c3f565b829481845281830111611baa578281602093846000960137010152565b9181601f84011215611baa5782359167ffffffffffffffff8311611baa5760208381860195010111611baa57565b6040906003190112611baa576004359060243590565b64ffffffffff6080809280511515855260208101511515602086015260018060a01b036040820151166040860152826060820151166060860152015116910152565b906005811015611d4b5760051b0190565b634e487b7160e01b600052603260045260246000fd5b6000198114611d705760010190565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8111611c0d5760051b60200190565b8051821015611d4b5760209160051b010190565b81810292918115918404141715611d7057565b8115611dcf570490565b634e487b7160e01b600052601260045260246000fd5b91908203918211611d7057565b6040519061ffff6004548181168452818160101c166020850152818160201c166040850152818160301c16606085015260401c166080830152611e3660a083611c3f565b565b91908201809211611d7057565b600081815260066020526040808220905194939082865b6005821061219157505050611e7260a086611c3f565b60009460005b6005811061211c5750611e8a86611d86565b93611e986040519586611c3f565b868552601f19611ea788611d86565b013660208701378460009660005b60ff81166005811015611f5a57611ecc8187611d3a565b5115611f4f578460005260076020526040600020611eea8288611d3a565b5160005260205260018060a01b0360406000205460101c1660018060a01b03881614611f1f575b50600160ff915b0116611eb5565b60010160ff8111611d705760ff9160019183611f44611f3d8e611d61565b9d8d611d9e565b911690529150611f11565b50600160ff91611f18565b50509593909794929650816000526005602052604060002093604051611f7f81611c23565b8554815260018601549060a060ff60026020840199858b520154600180841b038116604085015264ffffffffff81841c16606085015262ffffff8160c81c16608085015260e01c1615159101528615908115612113575b506121065750611fe5876123ed565b9660ff600354168810600014612010575050505061200d92936120089151611dc5565b611db2565b90565b9296509290935051601e8102811590828104601e14821715611d70576064612039910483611de5565b90600a8302928304600a141715611d70576064612057920490611de5565b91612060611df2565b9160005b6005811061207457505050505050565b61207e8183611d3a565b51156120fe57856000526007602052604060002061209c8284611d3a565b5160005260205260018060a01b0360406000205460101c1660018060a01b038416146120cd575b6001905b01612064565b966120f66001916127106120ef61ffff6120e78d8a611d3a565b511689611db2565b0490611e38565b9790506120c3565b6001906120c7565b9750600096505050505050565b90501538611fd6565b6121268183611d3a565b51156121895784600052600760205260406000206121448284611d3a565b5160005260205260018060a01b0360406000205460101c1660018060a01b03841614612175575b6001905b01611e78565b95612181600191611d61565b96905061216b565b60019061216f565b6001602081928554815201930191019091611e5c565b604051906121b482611bf1565b60006080838281528260208201528260408201528260608201520152565b60005b8281106121e157505050565b6020906121ec6121a7565b81840152016121d5565b359061ffff82168203611baa57565b6002600080516020612981833981519152541461223057600260008051602061298183398151915255565b633ee5aeb560e01b60005260046000fd5b916122d26122d8926122e19460007f0000000000000000000000000000000000000000000000000000000000000000461460001461230957507f0000000000000000000000000000000000000000000000000000000000000000905b60405190602082019261190160f01b845260228301526042820152604281526122c7606282611c3f565b519020923691611c7d565b90612792565b909291926127ce565b6001546001600160a01b039081169116036122f857565b638baa579f60e01b60005260046000fd5b60409060086020835161231c8582611c3f565b828152016756696547616d657360c01b81522090506001602083516123418582611c3f565b82815201603160f81b81522082519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f855283015260608201524660808201523060a082015260a0815261239b60c082611c3f565b5190209061229d565b6040516323b872dd60e01b60208201526001600160a01b039283166024820152929091166044830152606480830193909352918152611e36916123e8608483611c3f565b61266c565b9060009160005b60058110612400575050565b61240a8183611d3a565b51612418575b6001016123f4565b92612424600191611d61565b939050612410565b600080516020612941833981519152546001600160a01b0316330361244d57565b63118cdaa760e01b6000523360045260246000fd5b60008051602061294183398151915280546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b919282600052600660205260406000209360405194856000905b6005821061261a575050506124e860a086611c3f565b60005b600581106125f9575060059160005b6005811061258f575b50505060058110612515575b50505050565b60045b81811161255e575061252a9084611d3a565b52600052600660205260406000209060005b6005811061254a578061250f565b60019060208351930192818501550161253c565b6000198101818111611d70576125749086611d3a565b5161257f8287611d3a565b528015611d705760001901612518565b6125998188611d3a565b5180156125ec578660005260076020526040600020906000526020526125d460406000205464ffffffffff8160d81c9160b01c1684866126d3565b6125e0576001016124fa565b92505050388080612503565b5092505050388080612503565b836126048288611d3a565b5114612612576001016124eb565b505050505050565b60016020819285548152019301910190916124d2565b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611e36916123e8606483611c3f565b906000602091828151910182855af1156126c7576000513d6126be57506001600160a01b0381163b155b61269d5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415612696565b6040513d6000823e3d90fd5b90929164ffffffffff809116911681811161270357106126fc5764ffffffffff80911691161090565b5050600090565b50505050600190565b8054821015611d4b5760005260206000200190600090565b600181019082600052816020526040600020541560001461278a57805468010000000000000000811015611c0d57806001612762920183558261270c565b81549060031b9085821b91600019901b19161790555491600052602052604060002055600190565b505050600090565b81519190604183036127c3576127bc92506020820151906060604084015193015160001a906128b7565b9192909190565b505060009160029190565b919091600481101561284057806127e457509050565b6000600182036127ff5763f645eedf60e01b60005260046000fd5b506002810361281d578263fce698f760e01b60005260045260246000fd5b909160036000921461282d575050565b6335e2f38360e21b825260045260249150fd5b634e487b7160e01b600052602160045260246000fd5b9061287c575080511561286b57805190602001fd5b63d6bda27560e01b60005260046000fd5b815115806128ae575b61288d575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15612885565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612934579160209360809260ff60009560405194855216868401526040830152606082015282805260015afa156126c7576000516001600160a01b038116156129285790600090600090565b50600090600190600090565b5050506000916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212201a975a34a0a7695978e15d25831e23d62a5eb078ecd2feadc046e95988e41ac464736f6c634300081b0033