0 txs
2 calls
constructor
No constructor.
functions
brevisProof
viewfunction brevisProof() view returns (address)
currEpoch
viewfunction currEpoch() view returns (uint64)
getCumulativeRewards
viewfunction getCumulativeRewards(address user) view returns (uint256 amount)
getMerkleProof
viewfunction getMerkleProof(uint64 epoch, address user) view returns (uint256 _cumulativeRewards, bytes32[] proof)
getRoleAccounts
viewfunction getRoleAccounts(bytes32 role) view returns (address[] accounts)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
numRoleAccounts
viewfunction numRoleAccounts(bytes32 role) view returns (uint256)
owner
viewfunction owner() view returns (address)
REWARD_UPDATER_ROLE
viewfunction REWARD_UPDATER_ROLE() view returns (bytes32)
roleAccounts
viewfunction roleAccounts(bytes32 role, uint256) view returns (address accounts)
roles
viewfunction roles(bytes32 role, address account) view returns (bool)
state
viewfunction state() view returns (uint8)
TASK_UPDATER_ROLE
viewfunction TASK_UPDATER_ROLE() view returns (bytes32)
tasks
viewfunction tasks(uint64) view returns (bytes32 vkHash, uint64 chainId, string name)
topRoot
viewfunction topRoot() view returns (bytes32)
genSubRoot
nonpayablefunction genSubRoot(uint64 epoch, uint256 nLeaves)
genTopRoot
nonpayablefunction genTopRoot(uint64 epoch)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
grantRoles
nonpayablefunction grantRoles(bytes32 role, address[] accounts)
init
nonpayablefunction init(address owner, address _brevisProof, address _rewardUpdater, address _taskUpdater)
renounceRole
nonpayablefunction renounceRole(bytes32 role)
restartEpoch
nonpayablefunction restartEpoch(uint64 epoch)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
revokeRoles
nonpayablefunction revokeRoles(bytes32 role, address[] accounts)
setBrevisProof
nonpayablefunction setBrevisProof(address _brevisProof)
setGlobalState
nonpayablefunction setGlobalState(uint64 _currEpoch, uint8 _state)
setTask
nonpayablefunction setTask(uint64 taskId, bytes32 vkHash, uint64 chainId, string name)
setUserRewards
nonpayablefunction setUserRewards(address[] users, uint256[] cumulativeAmounts)
startEpoch
nonpayablefunction startEpoch(uint64 epoch)
startSubRootGen
nonpayablefunction startSubRootGen(uint64 epoch)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateRewards
nonpayablefunction updateRewards(bytes proof, bytes circuitOutput, uint32 batchIndex)
events
AllSubRootsGenerated
event AllSubRootsGenerated(uint64 indexed epoch)
BrevisProofUpdated
event BrevisProofUpdated(address brevisProof)
EpochRestarted
event EpochRestarted(uint64 indexed epoch)
EpochStarted
event EpochStarted(uint64 indexed epoch)
GlobalStateUpdated
event GlobalStateUpdated(uint64 indexed currEpoch, uint8 indexed state)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProofProcessed
event ProofProcessed(uint64 indexed taskId, uint32 indexed epoch, uint32 indexed batchIndex)
RewardsAdded
event RewardsAdded(uint64 indexed taskId, uint32 indexed epoch, address indexed user, uint256 newRewards)
RewardsSet
event RewardsSet(address indexed user, uint256 cumulativeRewards)
RoleGranted
event RoleGranted(bytes32 role, address account)
RoleRevoked
event RoleRevoked(bytes32 role, address account)
SubRootGenerated
event SubRootGenerated(uint64 indexed epoch, uint256 indexed subRootIndex, bytes32 subRoot)
SubRootGenStarted
event SubRootGenStarted(uint64 indexed epoch)
SubRootLeafProcessed
event SubRootLeafProcessed(uint64 indexed epoch, uint256 indexed subRootIndex, uint256 indexed leafIndex, address user, uint256 cumulativeRewards, bytes32 leafHash)
TaskSet
event TaskSet(uint64 indexed taskId, bytes32 vkHash, uint64 chainId, string name)
TopRootGenerated
event TopRootGenerated(uint64 indexed epoch, bytes32 topRoot)
TopRootSent
event TopRootSent(uint64 indexed epoch, bytes32 topRoot, address receiver, uint64 dstChainId)
errors
EnumerableMapNonexistentKey
error EnumerableMapNonexistentKey(bytes32 key)
creation bytecode
0x6080806040523460575760018054336001600160a01b0319821681179092556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3613338908161005c8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816306552ff314612158575080630ec693ea146120fb5780630f6d1eb414611def578063196f0f6214611d805780631a69d9c814611d465780631b4fc38b14611d295780632f2ff15d14611ce2578063354abdf0146116b0578063373db229146115b85780633abbf2da146112265780633bfe0caa14610f3f57806350f0fa2114610e535780635d129d1914610d115780636b895ab714610be1578063803c3c2c14610ae35780638879315d14610ab95780638bb9c5bf14610a9c5780638da5cb5b14610a695780638ffd8fed1461078657806391d148541461017c5780639393f38a1461074c578063a1b5ff0814610722578063ad9ebe32146106df578063c19d93fb146106b6578063c772c87f146105bf578063c7f5aaa01461058d578063cf8ad09114610446578063d547741f146103ff578063deb9a3a214610390578063e1ed0a82146102be578063f2fde38b146101d75763f8fc08b91461017c575f80fd5b346101d35760406003193601126101d3576101956125db565b6004355f52600260205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b5f80fd5b346101d35760206003193601126101d3576101f06125b8565b61021373ffffffffffffffffffffffffffffffffffffffff600154163314612934565b73ffffffffffffffffffffffffffffffffffffffff81161561023a5761023890613196565b005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b346101d35760206003193601126101d3576004355f52600360205260405f20604051806020835491828152019081935f5260205f20905f5b818110610364575050508161030c910382612642565b604051918291602083019060208452518091526040830191905f5b818110610335575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101610327565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016102f6565b346101d35761039e3661269b565b6103c173ffffffffffffffffffffffffffffffffffffffff600154163314612934565b5f5b815181101561023857806103f973ffffffffffffffffffffffffffffffffffffffff6103f160019486612920565b511685612b5c565b016103c3565b346101d35760406003193601126101d35761023861041b6125db565b61043e73ffffffffffffffffffffffffffffffffffffffff600154163314612934565b600435612d97565b346101d35760206003193601126101d35761045f61262b565b335f9081527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd60205260409020546104999060ff16612999565b600a549060ff821660048110156105605767ffffffffffffffff916104bf8392156127ed565b169160081c168103610502576104dd600160ff19600a541617600a55565b7ecf884ce8b4404972df942754cb9d2471b83031722b846c02ac615460dead9e5f80a2005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f63616e206f6e6c7920726573746172742063757272656e742065706f636800006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b346101d3575f6003193601126101d357602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101d35760206003193601126101d35773ffffffffffffffffffffffffffffffffffffffff6105ed6125b8565b6105fc82600154163314612934565b168015610658576020817f1bf3143ab1544528303e489724067fb6c3ff3f7e3b0a6df041cae24242e44773927fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c69642042726576697350726f6f66206164647265737300000000006044820152fd5b346101d3575f6003193601126101d35760ff600a54166040516004821015610560576020918152f35b346101d35760206003193601126101d357602061071873ffffffffffffffffffffffffffffffffffffffff6107126125b8565b166132d1565b9050604051908152f35b346101d35760206003193601126101d3576004355f526003602052602060405f2054604051908152f35b346101d3575f6003193601126101d35760206040517f054a4d32b012cfc64394ea4fc1640082c3aa7c70439890ed71380f6cc5099e3d8152f35b346101d35760806003193601126101d35761079f61262b565b60243560443567ffffffffffffffff81168091036101d35760643567ffffffffffffffff81116101d3576107d790369060040161273d565b335f9081527f19365ac8b8d54bf770da91698011c18fb0ab7be9f7d781eb8ecf54c665ac981e6020526040902054909391906108159060ff16612999565b604051936060850185811067ffffffffffffffff821117610a3c576040528285526002602086019585875267ffffffffffffffff610854368587612aba565b9860408301998a521696875f52600860205260405f209151825567ffffffffffffffff600183019151167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905501955195865167ffffffffffffffff8111610a3c576108c4825461279c565b601f81116109f7575b506020601f821160011461094f57908061093f959493927f04d9287293fda54261a7f59181f619c76d54b9264f3fcde50c16da4607cafa82999a5f92610944575b50505f198260011b9260031b1c19161790555b60405194859485526020850152606060408501526060840191612b1e565b0390a2005b015190508a8061090e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821698835f52815f20995f5b8181106109df575099600192849261093f989796957f04d9287293fda54261a7f59181f619c76d54b9264f3fcde50c16da4607cafa829c9d106109c7575b505050811b019055610921565b01515f1960f88460031b161c191690558a80806109ba565b838301518c556001909b019a6020938401930161097c565b825f5260205f20601f830160051c81019160208410610a32575b601f0160051c01905b818110610a2757506108cd565b5f8155600101610a1a565b9091508190610a11565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b346101d3575f6003193601126101d357602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101d35760206003193601126101d35761023833600435612d97565b346101d3575f6003193601126101d357602067ffffffffffffffff600a5460081c16604051908152f35b346101d35760206003193601126101d357610afc61262b565b335f9081527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd6020526040902054610b369060ff16612999565b600a5460ff8116600481101561056057610b5090156127ed565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff68ffffffffffffffff0067ffffffffffffffff841693610b9f67ffffffffffffffff8560081c168611612852565b60081b16911617600a55610bbb600160ff19600a541617600a55565b7f281c04c234fdbd7e35016586a80eb803fa39be36cd99201dd15cad01b56467825f80a2005b346101d35760206003193601126101d35767ffffffffffffffff610c0361262b565b165f52600860205260405f20805490600267ffffffffffffffff600183015416910191604051925f815491610c378361279c565b9081875260208701936001811690815f14610cf65750600114610cbb575b856080867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f888c610c8a818b0382612642565b60405196879586526020860152606060408601525180918160608701528686015e5f85828601015201168101030190f35b5f908152602081209092505b818310610cdc57505084016020018185610c55565b6001816020929493945483858b0101520191019190610cc7565b60ff191685525050151560051b850160200190508185610c55565b346101d35760206003193601126101d357610d2a61262b565b335f9081527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd6020526040902054610d649060ff16612999565b600a549060ff82169160048310156105605767ffffffffffffffff610d9e92610d9060018396146127ed565b1692839160081c1614612852565b600260ff19600a541617600a55600b545f5b818110610de257825f600b557f85267dbcd490b382ff99b188cd7e19b92cb64afedb24f9e5900be1a8a62f9bc75f80a2005b600b54811015610e26577f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db98101545f908152600c6020526040812055600101610db0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b346101d35760406003193601126101d357610e6c61262b565b6024359060048210156101d357335f9081527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd6020526040902054610eb39060ff16612999565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff68ffffffffffffffff00600a549260081b16911617600a5560ff60ff19600a5416911617600a55600a5460ff81169060048210156105605760081c67ffffffffffffffff167fc0b26fd2c11b8c0762b3ddd78c4beaf1923e7ef6307ad2b5ceafb992ccdc1b915f80a3005b346101d35760406003193601126101d35760043567ffffffffffffffff81116101d357610f7090369060040161276b565b9060243567ffffffffffffffff81116101d357610f9190369060040161276b565b335f9081527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd602052604090205490939190610fcf9060ff16612999565b60ff600a54166004811015610560576001610fea91146129fe565b8382036111a2579291905f935f935b82851061108557855f81131561101a5761101590600754612913565b600755005b5f811261102357005b7f8000000000000000000000000000000000000000000000000000000000000000811461105857611015905f036007546128b7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90919293946110b573ffffffffffffffffffffffffffffffffffffffff6107126110b089888a612a89565b612a99565b9190506110c3878486612a89565b355f8382039312818412811691841390151617611058575f8282019283129112908015821691151617611058576001909561113b6111056110b083888a612a89565b73ffffffffffffffffffffffffffffffffffffffff611125848789612a89565b35911690815f52600660205260405f205561327c565b5061114a6110b0828789612a89565b7f4de45f6c76bbeb7a14efbe2f206ee9fb4e77a38116455071d1440020ff9e668d602073ffffffffffffffffffffffffffffffffffffffff61118d85888a612a89565b35936040519485521692a20193929190610ff9565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f757365727320616e6420616d6f756e7473206c656e677468206d69736d61746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101d35760406003193601126101d35761123f61262b565b6112476125db565b600a549160ff83169060048210156105605767ffffffffffffffff8073ffffffffffffffffffffffffffffffffffffffff9561128661129295156127ed565b60081c16911614612852565b16805f52600660205260405f2054908115806115a4575b611579575f52600560205260405f20545f198101908111611058575f90600b54925f1984019380851194855b61105857848187961080611560575b156112f8576112f290612a7b565b946112d5565b9394508361153f575f955b60045461131088826128b7565b9161105857611326928610611515575b506128c4565b925f5b84518110156113d157806113bd61139161134d6113486001958c612913565b612c55565b60409391935192839160208301958690917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060349360601b16825260148201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612642565b5190206113ca8288612920565b5201611329565b506113e6846113e088886128b7565b90613031565b91604051906020828281520190600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b8181106114ff57505050906114368161143b94930382612642565b613031565b9061145161144c8251845190612913565b6128c4565b925f5b825181101561147c578061146a60019285612920565b516114758288612920565b5201611454565b50915f5b81518110156114b2578061149660019284612920565b516114ab6114a5838751612913565b88612920565b5201611480565b8484604051918291604083019083526040602084015281518091526020606084019201905f5b8181106114e6575050500390f35b82518452859450602093840193909201916001016114d8565b825484526020909301926001928301920161141b565b9061153361153992611526886125fe565b90549060031b1c906128b7565b906128b7565b87611320565b5f19840184811161105857611553906125fe565b90549060031b1c95611303565b5061156a816125fe565b90549060031b1c8510156112e4565b7f02b56686000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600560205260405f2054156112a9565b346101d35760206003193601126101d3576115d161262b565b600a549060ff82169060048210156105605767ffffffffffffffff80916115fd600361160a95146127ed565b169260081c168214612852565b604051806020600b54918281520190600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061169a578561165e8661165981880382612642565b612c90565b600e5560ff19600a5416600a557f149bb8e98c16d440ac1f1a03a4d3c2d93d9011a48aba5ab0e47386c72c6cd4f86020600e54604051908152a2005b8254845260209093019260019283019201611641565b346101d35760606003193601126101d35760043567ffffffffffffffff81116101d3576116e190369060040161273d565b60243567ffffffffffffffff81116101d35761170190369060040161273d565b9290916044359263ffffffff84168094036101d357335f9081527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd60205260409020546117509060ff16612999565b600a549260ff8416600481101561056057600161176d91146129fe565b856004116101d357813560e01c92600887106101d35763ffffffff600484013560e01c1694845f52600860205267ffffffffffffffff600160405f2001541615611c8457611854926117cf67ffffffffffffffff60609360081c168814612852565b855f52600860205267ffffffffffffffff600160405f20015416865f52600860205260405f2054935f73ffffffffffffffffffffffffffffffffffffffff81541692604051978895869485937fe04409530000000000000000000000000000000000000000000000000000000085526004850152604060248501526044840191612b1e565b03925af18015611c79575f925f91611c3c575b5003611bde57611878368784612aba565b6020815191012003611b8057815f52600960205260405f2063ffffffff84165f5260205273ffffffffffffffffffffffffffffffffffffffff60405f2054165f9160185b878110611956575b50509061192d91835f52600960205260405f2063ffffffff86165f5260205273ffffffffffffffffffffffffffffffffffffffff60405f2091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600754612913565b6007557f1f0d7914d4cb4a385698b22f7858662c0b7031b724631a13c15536ee57e003135f80a4005b60148101928382116110585761196e84838b86612a63565b90357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169160148110611b4b575b505060601c908115611b435773ffffffffffffffffffffffffffffffffffffffff8291161015611ae55780936024830190818111611058577f1a801145e69be7883688886460446c1a88f7623ed6381fa32f1acf9fa9c0f0006020611a6f611a0a8c958f958d968b612a63565b90357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169160108110611ab0575b505060801c809a611a5482611a4d8a6132d1565b9050612913565b885f526006855260405f2055611a698861327c565b50612913565b98604051908152a460248101809111156118bc577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009250829060100360031b1b16168f80611a39565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5573657220616464726573736573206e6f7420736f72746564000000000000006044820152fd5b9350506118c4565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009250829060140360031b1b16168a8061199d565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642063697263756974206f7574707574000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f766b48617368206d69736d6174636800000000000000000000000000000000006044820152fd5b9250506060823d606011611c71575b81611c5860609383612642565b810103126101d357602082015160409092015188611867565b3d9150611c4b565b6040513d5f823e3d90fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c6964207461736b20696400000000000000000000000000000000006044820152fd5b346101d35760406003193601126101d357610238611cfe6125db565b611d2173ffffffffffffffffffffffffffffffffffffffff600154163314612934565b600435612b5c565b346101d3575f6003193601126101d3576020600e54604051908152f35b346101d3575f6003193601126101d35760206040517f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae8152f35b346101d357611d8e3661269b565b611db173ffffffffffffffffffffffffffffffffffffffff600154163314612934565b5f5b81518110156102385780611de973ffffffffffffffffffffffffffffffffffffffff611de160019486612920565b511685612d97565b01611db3565b346101d35760406003193601126101d357611e0861262b565b602435600a549160ff83169060048210156105605767ffffffffffffffff8091611e376002611e4495146127ed565b169360081c168314612852565b640100000000811161209d57600b545f908061207a57600d545f600d558061201a575b505b611e75826004546128b7565b90818411612011575b84611e88856128c4565b5f5b868110611f5557506020611ebe7fa798d21d4735fa640961e41c1c64c71ac1a880bed56cc8f53dd2e4fa0cd51f4d92612c90565b611ec781613222565b50604051908152a38203611f0a575050600360ff19600a541617600a557fb95c96f28d7bc16885c1b6299dcc3816b715899206a2e0939cce4c4c9bb2d5675f80a2005b611f149250612913565b600d5468010000000000000000811015610a3c57611f3b816001611f519301600d556125fe565b81939154905f199060031b92831b921b19161790565b9055005b8084600193947f43fa36b7b583cad3d050ef0cb611495f9f3bd6ccfcc858eeb0b677dc65c71cce6060611f8b611348868d612913565b604051606083901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602082019081526034820183905290611fd18160548101611391565b5190209081611fe0898d612920565b5273ffffffffffffffffffffffffffffffffffffffff6040519316835260208301526040820152a401908691611e8a565b92508092611e7e565b600d5f527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5017fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb55b81811061206f5750611e67565b5f8155600101612062565b90505f19810181811161105857612090906125fe565b90549060031b1c90611e69565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f746f6f206d616e79206c656176657300000000000000000000000000000000006044820152fd5b346101d35760406003193601126101d3576024356004355f52600360205260405f209081548110156101d35761214873ffffffffffffffffffffffffffffffffffffffff91602093612616565b90549060031b1c16604051908152f35b346101d35760806003193601126101d3576121716125b8565b9061217a6125db565b916044359073ffffffffffffffffffffffffffffffffffffffff8216908183036101d3576064359473ffffffffffffffffffffffffffffffffffffffff8616948587036101d35773ffffffffffffffffffffffffffffffffffffffff6001541661255c575073ffffffffffffffffffffffffffffffffffffffff8216156124fe5761221973ffffffffffffffffffffffffffffffffffffffff92613196565b5f8054919092167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161781558181527f6e98191722f81699a429bb9aa1a53636666af1e598e3b4f3cab766e184f452fd602052604090205460ff166124a0577f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae5f52600360205260405f2090815468010000000000000000811015610a3c577f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3936122f182604095600161231d95018155612616565b90919073ffffffffffffffffffffffffffffffffffffffff8084549260031b9316831b921b1916179055565b7f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae5f526002602052815f20815f52602052815f20600160ff198254161790558151907f82531167a8e1b9df58acc5f105c04f72009b9ff406bf7d722b527a2f45d626ae82526020820152a15f8181527f19365ac8b8d54bf770da91698011c18fb0ab7be9f7d781eb8ecf54c665ac981e602052604090205460ff166124a0577f054a4d32b012cfc64394ea4fc1640082c3aa7c70439890ed71380f6cc5099e3d5f52600360205260405f2090815468010000000000000000811015610a3c577f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3936122f182604095600161243395018155612616565b7f054a4d32b012cfc64394ea4fc1640082c3aa7c70439890ed71380f6cc5099e3d5f526002602052815f20815f52602052815f20600160ff198254161790558151907f054a4d32b012cfc64394ea4fc1640082c3aa7c70439890ed71380f6cc5099e3d82526020820152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c72656164792068617320726f6c65000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152fd5b807f08c379a0000000000000000000000000000000000000000000000000000000006064925260206004820152601160248201527f6f776e657220616c7265616479207365740000000000000000000000000000006044820152fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d357565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d357565b600d54811015610e2657600d5f5260205f2001905f90565b8054821015610e26575f5260205f2001905f90565b6004359067ffffffffffffffff821682036101d357565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a3c57604052565b67ffffffffffffffff8111610a3c5760051b60200190565b9060406003198301126101d357600435916024359067ffffffffffffffff82116101d357806023830112156101d3578160040135906126d982612683565b926126e76040519485612642565b8284526024602085019360051b8201019182116101d357602401915b8183106127105750505090565b823573ffffffffffffffffffffffffffffffffffffffff811681036101d357815260209283019201612703565b9181601f840112156101d35782359167ffffffffffffffff83116101d357602083818601950101116101d357565b9181601f840112156101d35782359167ffffffffffffffff83116101d3576020808501948460051b0101116101d357565b90600182811c921680156127e3575b60208310146127b657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916127ab565b156127f457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964207374617465000000000000000000000000000000000000006044820152fd5b1561285957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642065706f6368000000000000000000000000000000000000006044820152fd5b9190820391821161105857565b906128ce82612683565b6128db6040519182612642565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129098294612683565b0190602036910137565b9190820180921161105857565b8051821015610e265760209160051b010190565b1561293b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156129a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e617574686f72697a656420726f6c650000000000000000000000000000006044820152fd5b15612a0557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e6f7420696e2072657761726473207375626d697373696f6e207374617465006044820152fd5b909392938483116101d35784116101d3578101920390565b5f1981146110585760010190565b9190811015610e265760051b0190565b3573ffffffffffffffffffffffffffffffffffffffff811681036101d35790565b92919267ffffffffffffffff8211610a3c5760405191612b02601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184612642565b8294818452818301116101d3578281602093845f960137010152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b90815f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff82165f5260205260ff60405f2054166124a057815f52600360205260405f209182549268010000000000000000841015610a3c57826122f185612be79360017f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f398018155612616565b805f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f20600160ff19825416179055612c506040519283928390929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b0390a1565b612c60906004612616565b90549060031b1c90815f52600660205273ffffffffffffffffffffffffffffffffffffffff60405f205492169190565b90815115612d92575b81516001811115612d82576001810180911161105857612cbb9060011c6128c4565b905f5b83515f19810190811161105857811015612d4457612cdc8185612920565b51600182019081831161105857612cf6612cfd9287612920565b5190613201565b612d0a8260011c85612920565b526002810180911115612cbe577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b909280515f198101908111611058578214612d62575b505090612c99565b612d6f82612d7a92612920565b519160011c83612920565b525f80612d5a565b5090805115610e26576020015190565b5f9150565b90815f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff82165f5260205260ff60405f20541615612fd357815f52600360205260405f20908154925f198401938411611058575f5b8354811015612f755773ffffffffffffffffffffffffffffffffffffffff612e128286612616565b90549060031b1c1673ffffffffffffffffffffffffffffffffffffffff841614612e3e57600101612dea565b8481959293949510612f3a575b50508254928315612f0d575f197f155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52940190612e868282612616565b73ffffffffffffffffffffffffffffffffffffffff82549160031b1b1916905555805f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060ff198154169055612c506040519283928390929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6122f173ffffffffffffffffffffffffffffffffffffffff612f5f612f6e9488612616565b90549060031b1c169186612616565b5f80612e4b565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f726f6c65206163636f756e74206e6f7420666f756e64000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f742068617320726f6c6500000000000000000000000000000000000000006044820152fd5b91610420604051906130438183612642565b6020825250610400366020830137805f935b8551600181111561318b57600116158015613176575b61314d575b60011c908551600181018091116110585761308d9060011c6128c4565b945f5b87515f1981019081116110585781101561310f576130ae8189612920565b51600182019081831161105857612cf66130c8928b612920565b6130d58260011c89612920565b526002810180911115613090577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b909396959194929580515f198101908111611058578214613138575b5050949193929092613055565b612d6f8261314592612920565b525f8061312b565b936131709061315f6001871888612920565b5161316a8285612920565b52612a7b565b93613070565b5085515f19810190811161105857811061306b565b505090935091909152565b73ffffffffffffffffffffffffffffffffffffffff80600154921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b81811015613215575f5260205260405f2090565b905f5260205260405f2090565b805f52600c60205260405f2054155f1461327757600b5468010000000000000000811015610a3c57613260611f3b826001859401600b55600b612616565b9055600b54905f52600c60205260405f2055600190565b505f90565b805f52600560205260405f2054155f146132775760045468010000000000000000811015610a3c576132ba611f3b8260018594016004556004612616565b9055600454905f52600560205260405f2055600190565b805f52600660205260405f205480155f146132fa57505f52600560205260405f20541515905f90565b60019290915056fea2646970667358221220146695fd8b1577dbad3bbb9066265404528bf2dbbc56ac78a76382885ae97c9364736f6c634300081d0033