diff --git a/packages/evm/broadcast/UpgradeTimeBased.s.sol/84532/run-1773769048319.json b/packages/evm/broadcast/UpgradeTimeBased.s.sol/84532/run-1773769048319.json new file mode 100644 index 00000000..09156310 --- /dev/null +++ b/packages/evm/broadcast/UpgradeTimeBased.s.sol/84532/run-1773769048319.json @@ -0,0 +1,252 @@ +{ + "transactions": [ + { + "hash": "0x346aff597221598cfc28a4c74e58cb3baaef70d9b927bb927c7cdfd6e26361ff", + "transactionType": "CREATE2", + "contractName": "TimeBasedIncentiveCampaign", + "contractAddress": "0x402ba5996cb53e759b5528f126fa9df61189757d", + "function": null, + "arguments": null, + "transaction": { + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1b7a6e", + "value": "0x0", + "input": "0x0c5be6395ec9d43c63b18fb61e941b7b63bfc886f675e6b233512d7c3c72e91e6080604052348015600e575f80fd5b5060156019565b607c565b63409feecd198054600181161560365763f92ee8a95f526004601cfd5b6001600160401b03808260011c146077578060011b8355806020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050565b611643806100895f395ff3fe608060405234801561000f575f80fd5b5060043610610179575f3560e01c806378e97925116100d2578063d54ad2a111610088578063e945c39111610063578063e945c39114610365578063ed01bf2914610378578063f7c618c114610398575f80fd5b8063d54ad2a114610316578063dd98558c1461031f578063e1f1176d1461035c575f80fd5b80637d624231116100b85780637d624231146102bb578063b3f05b97146102ce578063c884ef83146102f7575f80fd5b806378e97925146102945780637c382d0b146102a8575f80fd5b80632eb4a7ab116101325780635abc657d1161010d5780635abc657d1461025a57806372b0d90c1461026e578063764d8e1814610281575f80fd5b80632eb4a7ab146101f95780633197cbb6146102025780634a8d7ff41461023b575f80fd5b80631d3231d4116101625780631d3231d4146101de5780631de77253146101e75780631fa35ad4146101f1575f80fd5b806302d05d3f1461017d5780630e15561a146101c7575b5f80fd5b60025461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101d060055481565b6040519081526020016101be565b6101d060085481565b6101ef6103b8565b005b6101d06104b5565b6101d060075481565b6006546102229068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b5f5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546102229067ffffffffffffffff1681565b6101d061027c3660046111ff565b610555565b6101d061028f36600461121f565b61074f565b6006546102229067ffffffffffffffff1681565b6101d06102b63660046112a5565b610a33565b6101ef6102c93660046112dc565b610ad9565b600a546102e79068010000000000000000900460ff1681565b60405190151581526020016101be565b6101d06103053660046111ff565b600b6020525f908152604090205481565b6101d060095481565b61033261032d366004611370565b610d01565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101be565b6101d060035481565b6102226103733660046113ea565b610f37565b60015461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60045461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610408576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff166104b35760065468010000000000000000900467ffffffffffffffff16421080156104485750600554600854105b1561047f576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001790555b565b600a545f9068010000000000000000900460ff1615806104fb575060065468010000000000000000900467ffffffffffffffff1642118015906104fb5750600554600854105b1561050557505f90565b6004545f9061052a9073ffffffffffffffffffffffffffffffffffffffff16306110bc565b90505f6105356110ef565b9050808211610544575f61054e565b61054e8183611430565b9250505090565b5f805473ffffffffffffffffffffffffffffffffffffffff1633146105a6576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff166105ee576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff1642118015906106195750600554600854105b15610650576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004545f906106759073ffffffffffffffffffffffffffffffffffffffff16306110bc565b90505f6106806110ef565b905080821161068f575f610699565b6106998183611430565b9250825f036106d4576040517fd0d04f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546106f89073ffffffffffffffffffffffffffffffffffffffff16858561114c565b8373ffffffffffffffffffffffffffffffffffffffff167feac6e2ea0a550106b4ccc8acee07faa33ef631bf5ff35d9c8766d931990776138460405161074091815260200190565b60405180910390a25050919050565b5f805473ffffffffffffffffffffffffffffffffffffffff1633146107a0576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546006546107c99167ffffffffffffffff9081169168010000000000000000900416611449565b421115610802576040517f82a49d9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075461083b576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546040805173ffffffffffffffffffffffffffffffffffffffff808916602083015290921690820152606081018590525f90608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506108d384846007548461119f565b610909576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86165f908152600b6020526040902054808611610967576040517f969bf72800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109718187611430565b73ffffffffffffffffffffffffffffffffffffffff88165f908152600b602052604081208890556009805492955085929091906109af908490611449565b90915550506004546109d89073ffffffffffffffffffffffffffffffffffffffff16888561114c565b604080518481526020810188905273ffffffffffffffffffffffffffffffffffffffff8916917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a910160405180910390a25050949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610a84576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506007805490839055600882905560408051828152602081018590529081018390527f4245c4fc9e349a90fcc3b21a800990dd8bbc22ca78480f3a9354e024d627a5e89060600160405180910390a192915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6011328054600382558015610b2a5760018160011c14303b10610b215763f92ee8a95f526004601cfd5b818160ff1b1b91505b503373ffffffffffffffffffffffffffffffffffffffff8b1614610b7a576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d81169182179093556001805483168d85169081179091556002805484168d861690811790915560038c905560048054909416948b1694851790935560058990556006805467ffffffffffffffff8a81167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092168217680100000000000000008b831690810291909117909355600a80547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016918a16919091179055604080518e8152602081019790975286018b90526060860152608085015291927ff66d267e514bde41afbebbf92bc8d0f073a359e8447083eb9580e7cfae53172a9060a00160405180910390a48015610cf5576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b50505050505050505050565b6001545f90819073ffffffffffffffffffffffffffffffffffffffff163314610d56576040517f287f012c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff16610d9e576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff164211801590610dc95750600554600854105b15610e00576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e0d86880188611501565b90508060200151806020019051810190610e2791906115f6565b60045490935073ffffffffffffffffffffffffffffffffffffffff1691505f610e5083306110bc565b90505f610e5b6110ef565b90505f818311610e6b575f610e75565b610e758284611430565b905080861115610eb1576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004548451610ed79173ffffffffffffffffffffffffffffffffffffffff16908861114c565b835f015173ffffffffffffffffffffffffffffffffffffffff167feac6e2ea0a550106b4ccc8acee07faa33ef631bf5ff35d9c8766d9319907761387604051610f2291815260200190565b60405180910390a25050505094509492505050565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610f88576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff16421115610fda576040517f287e67e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065467ffffffffffffffff6801000000000000000090910481169083161115611030576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506006805467ffffffffffffffff838116680100000000000000008181027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff85161790945560408051949093049091168084526020840191909152917fc7356ea889e9f64ab61293108de74888a5bf257ef77869683877880752578305910160405180910390a1919050565b5f816014526f70a082310000000000000000000000005f5260208060246010865afa601f3d111660205102905092915050565b600a546006545f9161111b9167ffffffffffffffff918216916801000000000000000090910416611449565b42111561112757505f90565b6009546008541161113757505f90565b6009546008546111479190611430565b905090565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661119557803d853b151710611195576390b8ec185f526004601cfd5b505f603452505050565b5f83156111cf578360051b8501855b803580851160051b94855260209485185260405f2093018181106111ae5750505b501492915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111fa575f80fd5b919050565b5f6020828403121561120f575f80fd5b611218826111d7565b9392505050565b5f805f8060608587031215611232575f80fd5b61123b856111d7565b935060208501359250604085013567ffffffffffffffff81111561125d575f80fd5b8501601f8101871361126d575f80fd5b803567ffffffffffffffff811115611283575f80fd5b8760208260051b8401011115611297575f80fd5b949793965060200194505050565b5f80604083850312156112b6575f80fd5b50508035926020909101359150565b803567ffffffffffffffff811681146111fa575f80fd5b5f805f805f805f805f6101208a8c0312156112f5575f80fd5b6112fe8a6111d7565b985061130c60208b016111d7565b975061131a60408b016111d7565b965060608a0135955061132f60808b016111d7565b945060a08a0135935061134460c08b016112c5565b925061135260e08b016112c5565b91506113616101008b016112c5565b90509295985092959850929598565b5f805f8060608587031215611383575f80fd5b843567ffffffffffffffff811115611399575f80fd5b8501601f810187136113a9575f80fd5b803567ffffffffffffffff8111156113bf575f80fd5b8760208284010111156113d0575f80fd5b602091820198909750908601359560400135945092505050565b5f602082840312156113fa575f80fd5b611218826112c5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561144357611443611403565b92915050565b8082018082111561144357611443611403565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156114ac576114ac61145c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156114f9576114f961145c565b604052919050565b5f60208284031215611511575f80fd5b813567ffffffffffffffff811115611527575f80fd5b820160408185031215611538575f80fd5b611540611489565b611549826111d7565b8152602082013567ffffffffffffffff811115611564575f80fd5b80830192505084601f830112611578575f80fd5b813567ffffffffffffffff8111156115925761159261145c565b6115c360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016114b2565b8181528660208386010111156115d7575f80fd5b816020850160208301375f602092820183015290820152949350505050565b5f60208284031215611606575f80fd5b505191905056fea2646970667358221220367687d6700b01b12245677f99fdaafedf8072924fafea529422ae122876496d64736f6c634300081a0033", + "nonce": "0xfb", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb4377345697123bf5058b4b4a8b622aeea6a74897221582055744bd76ded5baf", + "transactionType": "CREATE2", + "contractName": "TimeBasedIncentiveManager", + "contractAddress": "0x1924d78136c00b578600631c5c840407f5716dda", + "function": null, + "arguments": null, + "transaction": { + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x49530e", + "value": "0x0", + "input": "0x0c5be6395ec9d43c63b18fb61e941b7b63bfc886f675e6b233512d7c3c72e91e60a0604052306080523480156012575f80fd5b506019601d565b6080565b63409feecd1980546001811615603a5763f92ee8a95f526004601cfd5b6001600160401b03808260011c14607b578060011b8355806020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050565b608051613a4d61009f5f395f818161326901526132a00152613a4d5ff3fe60806040526004361061025d575f3560e01c80635598f8cc1161014b578063b0e21e8a116100c6578063ee8d238c1161007c578063f2fde38b11610062578063f2fde38b146106ca578063fdb88840146106dd578063fee81cf4146106fc575f80fd5b8063ee8d238c14610698578063f04e283e146106b7575f80fd5b8063c49378a7116100ac578063c49378a714610646578063cfdbf25414610665578063deaaf8da14610679575f80fd5b8063b0e21e8a14610607578063b3ab15fb14610627575f80fd5b8063715018a61161011b57806382a525191161010157806382a52519146105b05780638da5cb5b146105d057806394a30809146105e8575f80fd5b8063715018a6146105935780637274e30d1461059b575f80fd5b80635598f8cc146104f6578063570ca7351461052a5780635abc657d1461054957806362a6e06514610575575f80fd5b806343bc42d3116101db5780634e04275f116101ab57806352d1902d1161019157806352d1902d1461048f57806354d1f13d146104a357806354fd4d50146104ab575f80fd5b80634e04275f1461045d5780634f1ef2861461047c575f80fd5b806343bc42d3146103e157806345598b4a1461040057806346877b1a1461041f5780634a59c3c71461043e575f80fd5b80632e7ba6ef11610230578063323a5e3611610216578063323a5e361461037857806339a51be51461039757806339fca7de146103c2575f80fd5b80632e7ba6ef1461032c5780633090aadf1461034b575f80fd5b806302d9ce7414610261578063141961bc146102b757806325692962146103035780632e1a7d4d1461030d575b5f80fd5b34801561026c575f80fd5b506004546102999074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156102c2575f80fd5b506102eb6102d1366004613367565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b61030b61072d565b005b348015610318575f80fd5b5061030b610327366004613367565b61077a565b348015610337575f80fd5b5061030b610346366004613392565b610eeb565b348015610356575f80fd5b5061036a61036536600461343a565b61101e565b6040519081526020016102ae565b348015610383575f80fd5b5061030b610392366004613495565b6115a7565b3480156103a2575f80fd5b506003546102eb906801000000000000000090046001600160a01b031681565b3480156103cd575f80fd5b5061030b6103dc366004613506565b61198b565b3480156103ec575f80fd5b5061030b6103fb366004613521565b611a3a565b34801561040b575f80fd5b5061030b61041a366004613367565b611b03565b34801561042a575f80fd5b5061030b610439366004613506565b611e2c565b348015610449575f80fd5b5061036a610458366004613367565b611eeb565b348015610468575f80fd5b5061030b61047736600461353c565b611fa0565b61030b61048a366004613595565b6121f6565b34801561049a575f80fd5b5061036a6122a4565b61030b6122d2565b3480156104b6575f80fd5b50604080518082018252600581527f322e312e30000000000000000000000000000000000000000000000000000000602082015290516102ae9190613643565b348015610501575f80fd5b506102eb610510366004613367565b5f908152600160205260409020546001600160a01b031690565b348015610535575f80fd5b506004546102eb906001600160a01b031681565b348015610554575f80fd5b506005546102999068010000000000000000900467ffffffffffffffff1681565b348015610580575f80fd5b505f546102eb906001600160a01b031681565b61030b61230b565b3480156105a6575f80fd5b5061036a60025481565b3480156105bb575f80fd5b506005546102999067ffffffffffffffff1681565b3480156105db575f80fd5b50638b78c6d819546102eb565b3480156105f3575f80fd5b5061030b610602366004613662565b61231e565b348015610612575f80fd5b506003546102999067ffffffffffffffff1681565b348015610632575f80fd5b5061030b610641366004613506565b612596565b348015610651575f80fd5b5061030b610660366004613521565b612607565b348015610670575f80fd5b5061036a603281565b348015610684575f80fd5b5061030b610693366004613521565b6126e8565b3480156106a3575f80fd5b5061030b6106b2366004613521565b6127c5565b61030b6106c5366004613506565b612897565b61030b6106d8366004613506565b6128d4565b3480156106e8575f80fd5b5061036a6106f7366004613695565b6128fa565b348015610707575f80fd5b5061036a610716366004613506565b63389a75e1600c9081525f91909152602090205490565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b5f818152600160205260409020546001600160a01b0316806107c8576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f816001600160a01b031663ed01bf296040518163ffffffff1660e01b8152600401602060405180830381865afa158015610809573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082d9190613701565b90506001600160a01b038116156108f8576040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382169063fe9fbb8090602401602060405180830381865afa158015610899573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bd919061371c565b6108f3576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a2565b816001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109589190613701565b6001600160a01b0316336001600160a01b0316146109a2576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b0316633197cbb66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a029190613737565b67ffffffffffffffff164211158015610ad85750816001600160a01b0316630e15561a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a769190613752565b826001600160a01b0316631d3231d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad69190613752565b105b15610b0f576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6f919061371c565b610ba5576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811615610d4f575f826001600160a01b0316631fa35ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190613752565b9050805f03610c50576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81604051602001610c6491815260200190565b60408051601f19818403018152908290527fb300579300000000000000000000000000000000000000000000000000000000825291505f906001600160a01b0385169063b300579390610cc1908990869086908190600401613769565b60408051808303815f875af1158015610cdc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d00919061379d565b509050836001600160a01b0316877f02ffa641367f5b897c0f8be81bce51f2ef055b4113d7a1e4fd082feea749bf5283604051610d3f91815260200190565b60405180910390a3505050610ee5565b5f826001600160a01b03166372b0d90c846001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dbf9190613701565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016020604051808303815f875af1158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613752565b9050826001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea09190613701565b6001600160a01b0316857f02ffa641367f5b897c0f8be81bce51f2ef055b4113d7a1e4fd082feea749bf5283604051610edb91815260200190565b60405180910390a3505b50505050565b5f858152600160205260409020546001600160a01b031680610f39576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f764d8e180000000000000000000000000000000000000000000000000000000081525f906001600160a01b0383169063764d8e1890610f869089908990899089906004016137cc565b6020604051808303815f875af1158015610fa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc69190613752565b9050856001600160a01b0316877fd9cb1e2714d65a111c0f20f060176ad657496bd47a3de04ec7c3d4ca232112ac838860405161100d929190918252602082015260400190565b60405180910390a350505050505050565b5f6001600160a01b03851661105f576040517fdfde867100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f03611098576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428367ffffffffffffffff1610156110dc576040517f26e687eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff1611611129576040517f302e5b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6111348484613860565b60045490915067ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115611199576040517f9529f50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff90811690821610156111e3576040517f25c3636700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545f90612710906112009067ffffffffffffffff1688613880565b61120a9190613897565b90505f61121782886138cf565b90505f6112248930613118565b905061123b6001600160a01b038a1633308b61314b565b87816112478b30613118565b61125191906138cf565b14611288576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805461129d906001600160a01b03166131ad565b905060025f81546112ad906138e2565b91829055505f81815260016020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416179055955083156113a5575f6113188b600360089054906101000a90046001600160a01b0316613118565b600354909150611341906001600160a01b038d81169168010000000000000000900416876131be565b84816113628d600360089054906101000a90046001600160a01b0316613118565b61136c91906138cf565b146113a3576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b821561141b575f6113b68b83613118565b90506113cc6001600160a01b038c1683866131be565b83816113d88d85613118565b6113e291906138cf565b14611419576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6005546040517f7d6242310000000000000000000000000000000000000000000000000000000081523060048201525f6024820152336044820152606481018d90526001600160a01b038c8116608483015260a4820186905267ffffffffffffffff8b811660c48401528a811660e48401526801000000000000000090930490921661010482015290821690637d62423190610124015f604051808303815f87803b1580156114c8575f80fd5b505af11580156114da573d5f803e3d5ffd5b50505050896001600160a01b03165f6001600160a01b0316336001600160a01b03167f6ab5cc4de23c7e11ae0b117c2bda0b7e5c4c281706a98f16593e5d68fa511e14898f86898f8f600560089054906101000a900467ffffffffffffffff16604051611591979695949392919096875260208701959095526001600160a01b03939093166040860152606085019190915267ffffffffffffffff908116608085015290811660a08401521660c082015260e00190565b60405180910390a4505050505095945050505050565b638b78c6d819546001600160a01b0316336001600160a01b0316141580156115da57506004546001600160a01b03163314155b15611611576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81900361164b576040517fc2e5347d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032811115611686576040517f0b7d62e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015611986575f60015f8585858181106116a6576116a6613919565b608002919091013582525060208101919091526040015f20546001600160a01b0316905080611701576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001600160a01b0316637c382d0b86868681811061172357611723613919565b9050608002016020013587878781811061173f5761173f613919565b905060800201604001356040518363ffffffff1660e01b815260040161176f929190918252602082015260400190565b6020604051808303815f875af115801561178b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117af9190613752565b90508484848181106117c3576117c3613919565b9050608002015f01357ffb270bf61beeb2f6245d25e705aa540499f6e32b4d19f7081ecf930bc5dfa7b08287878781811061180057611800613919565b9050608002016020013588888881811061181c5761181c613919565b90506080020160400135604051611846939291909283526020830191909152604082015260600190565b60405180910390a284848481811061186057611860613919565b90506080020160600160208101906118789190613946565b80156118e15750816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118df919061371c565b155b1561197c57816001600160a01b0316631de772536040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561191e575f80fd5b505af1158015611930573d5f803e3d5ffd5b5050505084848481811061194657611946613919565b9050608002015f01357f79e19121aa255cb066a0c009cb90dc7e4847878c99372edec7374527541c181460405160405180910390a25b5050600101611688565b505050565b611993613211565b6001600160a01b0381166119d3576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917fecb67f84d4ac8c3c40a86a0fe2cc78920f164c7acd55770db1e6b8b8fd2913139190a35050565b611a42613211565b6127108167ffffffffffffffff161115611a88576040517f499fddb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003805467ffffffffffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083168117909355604080519190921680825260208201939093527f69c0c8b14820d4f18f9972772394ceb2d4bffb479d5bb9644dc40ff09fe6326b91015b60405180910390a15050565b5f818152600160205260409020546001600160a01b031680611b51576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f816001600160a01b031663ed01bf296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb69190613701565b9050611bc5638b78c6d8195490565b6001600160a01b0316336001600160a01b031614611d50576001600160a01b03811615611ca6576040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382169063fe9fbb8090602401602060405180830381865afa158015611c47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6b919061371c565b611ca1576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d50565b816001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d069190613701565b6001600160a01b0316336001600160a01b031614611d50576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe945c39100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff421660048201525f906001600160a01b0384169063e945c391906024016020604051808303815f875af1158015611db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ddc9190613737565b6040805167ffffffffffffffff80841682524216602082015291925086917f4bfb7649fc0a3d23cb10cd353998b86b71e0d98ac24d5f5e5a603839152e1ce4910160405180910390a25050505050565b611e34613211565b6001600160a01b038116611e74576040517fb6802b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001600160a01b03838116680100000000000000008181027fffffffff0000000000000000000000000000000000000000ffffffffffffffff85161790945560405193909204169182907ffb5b90d81126d568c8bdaa0398ba8a708fd01e26c7891e91fa88e96051985ce3905f90a35050565b5f818152600160205260408120546001600160a01b031680611f39576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b0316631fa35ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f999190613752565b9392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6011328054600382558015611ff15760018160011c14303b10611fe85763f92ee8a95f526004601cfd5b818160ff1b1b91505b506001600160a01b038416612032576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216612072576040517fb6802b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108367ffffffffffffffff1611156120b8576040517f499fddb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c18561322b565b5f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03868116919091179091556003805467ffffffffffffffff86167fffffffff00000000000000000000000000000000000000000000000000000000909116176801000000000000000092851692909202919091179055600480547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167701e133800000000000000000000000000000000000000000179055600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166a4f1a00000000000001518017905580156121ef576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b5050505050565b6121fe613266565b61220783613295565b8260601b60601c92503d5f526352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d885afa511461225c576355299b496001526004601dfd5b837fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a2839055801561198657604051818382375f388383875af4610ee5573d5f823e3d81fd5b5f6122ad61329d565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b612313613211565b61231c5f6132cc565b565b638b78c6d819546001600160a01b0316336001600160a01b03161415801561235157506004546001600160a01b03163314155b15612388576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848152600160205260409020546001600160a01b0316806123d6576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7c382d0b00000000000000000000000000000000000000000000000000000000815260048101859052602481018490525f906001600160a01b03831690637c382d0b906044016020604051808303815f875af115801561243c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124609190613752565b604080518281526020810188905290810186905290915086907ffb270bf61beeb2f6245d25e705aa540499f6e32b4d19f7081ecf930bc5dfa7b09060600160405180910390a28280156125105750816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250e919061371c565b155b1561258e57816001600160a01b0316631de772536040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561254d575f80fd5b505af115801561255f573d5f803e3d5ffd5b50506040518892507f79e19121aa255cb066a0c009cb90dc7e4847878c99372edec7374527541c181491505f90a25b505050505050565b61259e613211565b600480546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03905f90a35050565b61260f613211565b60055467ffffffffffffffff9081169082161015612659576040517ff1d6225400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805467ffffffffffffffff838116740100000000000000000000000000000000000000008181027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff85161790945560408051949093049091168084526020840191909152917f42d49bce8106572e241b8b0002dc47771ebe9bb431d333d0ad305e733c5230ef9101611af7565b6126f0613211565b60045467ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115612752576040517ff1d6225400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805467ffffffffffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083168117909355604080519190921680825260208201939093527ff380cae8d13933e5618f5cc29648b425d32946ed7be3fd40e3963ac8ca90f0439101611af7565b6127cd613211565b620151808167ffffffffffffffff161015612814576040517fb2bc234000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805467ffffffffffffffff838116680100000000000000008181027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff85161790945560408051949093049091168084526020840191909152917fbe0ff6c2b51e7f7f555afbb843d09658966145aa0df927e68d80672b880fb8489101611af7565b61289f613211565b63389a75e1600c52805f526020600c2080544211156128c557636f5e88185f526004601cfd5b5f90556128d1816132cc565b50565b6128dc613211565b8060601b6128f157637448fbae5f526004601cfd5b6128d1816132cc565b6040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201525f906001600160a01b0388169063fe9fbb8090602401602060405180830381865afa158015612957573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061297b919061371c565b6129b1576040517fc114438000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166129f1576040517fdfde867100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f03612a2a576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428367ffffffffffffffff161015612a6e576040517f26e687eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff1611612abb576040517f302e5b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612ac68484613860565b60045490915067ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115612b2b576040517f9529f50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff9081169082161015612b75576040517f25c3636700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545f9061271090612b929067ffffffffffffffff1688613880565b612b9c9190613897565b90505f612ba982886138cf565b5f805491925090612bc2906001600160a01b03166131ad565b905060025f8154612bd2906138e2565b91829055505f81815260016020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841617905594508215612e08575f612c3d8a600360089054906101000a90046001600160a01b0316613118565b90505f604051806080016040528060016002811115612c5e57612c5e613961565b81526020018c6001600160a01b03168152602001600360089054906101000a90046001600160a01b03166001600160a01b03168152602001604051806020016040528088815250604051602001612cb89151815260200190565b60408051601f19818403018152918152915251612cd8919060200161398e565b60408051601f19818403018152908290527ffa4ca9b100000000000000000000000000000000000000000000000000000000825291506001600160a01b038e169063fa4ca9b190612d2d908490600401613643565b6020604051808303815f875af1158015612d49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6d919061371c565b612da3576040517fd192263e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8482612dc48d600360089054906101000a90046001600160a01b0316613118565b612dce91906138cf565b14612e05576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b8115612fba575f612e198a83613118565b90505f604051806080016040528060016002811115612e3a57612e3a613961565b81526020018c6001600160a01b03168152602001846001600160a01b03168152602001604051806020016040528087815250604051602001612e7f9151815260200190565b60408051601f19818403018152918152915251612e9f919060200161398e565b60408051601f19818403018152908290527ffa4ca9b100000000000000000000000000000000000000000000000000000000825291506001600160a01b038e169063fa4ca9b190612ef4908490600401613643565b6020604051808303815f875af1158015612f10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f34919061371c565b612f6a576040517fd192263e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8382612f768d86613118565b612f8091906138cf565b14612fb7576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b6005546040517f7d6242310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038d81166024830152336044830152606482018d90528b8116608483015260a4820185905267ffffffffffffffff8a811660c484015289811660e48401526801000000000000000090930490921661010482015290821690637d62423190610124015f604051808303815f87803b158015613069575f80fd5b505af115801561307b573d5f803e3d5ffd5b505060055460408051898152602081018f90526001600160a01b03868116828401526060820188905267ffffffffffffffff8d811660808401528c811660a08401526801000000000000000090940490931660c082015290518d83169450918f16925033917f6ab5cc4de23c7e11ae0b117c2bda0b7e5c4c281706a98f16593e5d68fa511e149181900360e00190a4505050509695505050505050565b5f816014526f70a082310000000000000000000000005f5260208060246010865afa601f3d111660205102905092915050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af18060015f51141661319f57803d873b15171061319f57637939f4245f526004601cfd5b505f60605260405250505050565b5f6131b85f83613309565b92915050565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661320757803d853b151710613207576390b8ec185f526004601cfd5b505f603452505050565b638b78c6d81954331461231c576382b429005f526004601cfd5b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b307f00000000000000000000000000000000000000000000000000000000000000000361231c5761231c61335a565b6128d1613211565b307f00000000000000000000000000000000000000000000000000000000000000001461231c5761231c61335a565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b5f6c5af43d3d93803e602a57fd5bf36021528160145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c84f09050806133505763301164255f526004601cfd5b5f60215292915050565b639f03a0265f526004601cfd5b5f60208284031215613377575f80fd5b5035919050565b6001600160a01b03811681146128d1575f80fd5b5f805f805f608086880312156133a6575f80fd5b8535945060208601356133b88161337e565b935060408601359250606086013567ffffffffffffffff8111156133da575f80fd5b8601601f810188136133ea575f80fd5b803567ffffffffffffffff811115613400575f80fd5b8860208260051b8401011115613414575f80fd5b959894975092955050506020019190565b67ffffffffffffffff811681146128d1575f80fd5b5f805f805f60a0868803121561344e575f80fd5b8535945060208601356134608161337e565b935060408601359250606086013561347781613425565b9150608086013561348781613425565b809150509295509295909350565b5f80602083850312156134a6575f80fd5b823567ffffffffffffffff8111156134bc575f80fd5b8301601f810185136134cc575f80fd5b803567ffffffffffffffff8111156134e2575f80fd5b8560208260071b84010111156134f6575f80fd5b6020919091019590945092505050565b5f60208284031215613516575f80fd5b8135611f998161337e565b5f60208284031215613531575f80fd5b8135611f9981613425565b5f805f806080858703121561354f575f80fd5b843561355a8161337e565b9350602085013561356a8161337e565b9250604085013561357a81613425565b9150606085013561358a8161337e565b939692955090935050565b5f805f604084860312156135a7575f80fd5b83356135b28161337e565b9250602084013567ffffffffffffffff8111156135cd575f80fd5b8401601f810186136135dd575f80fd5b803567ffffffffffffffff8111156135f3575f80fd5b866020828401011115613604575f80fd5b939660209190910195509293505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611f996020830184613615565b80151581146128d1575f80fd5b5f805f8060808587031215613675575f80fd5b843593506020850135925060408501359150606085013561358a81613655565b5f805f805f8060c087890312156136aa575f80fd5b86356136b58161337e565b95506020870135945060408701356136cc8161337e565b93506060870135925060808701356136e381613425565b915060a08701356136f381613425565b809150509295509295509295565b5f60208284031215613711575f80fd5b8151611f998161337e565b5f6020828403121561372c575f80fd5b8151611f9981613655565b5f60208284031215613747575f80fd5b8151611f9981613425565b5f60208284031215613762575f80fd5b5051919050565b6001600160a01b0385168152608060208201525f61378a6080830186613615565b6040830194909452506060015292915050565b5f80604083850312156137ae575f80fd5b825160208401519092506137c18161337e565b809150509250929050565b6001600160a01b0385168152836020820152606060408201528160608201525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613818575f80fd5b8260051b808560808501379190910160800195945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908111156131b8576131b8613833565b80820281158282048414176131b8576131b8613833565b5f826138ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156131b8576131b8613833565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361391257613912613833565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613956575f80fd5b8135611f9981613655565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b602081525f8251600381106139ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b806020840152506001600160a01b0360208401511660408301526001600160a01b0360408401511660608301526060830151608080840152613a0f60a0840182613615565b94935050505056fea26469706673582212200b76305dd7cd75cc168198b71f832c4390d0e1adf9f571488f8cade0c92af68364736f6c634300081a0033", + "nonce": "0xfc", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf0f4414ceec86fbbf3b3e5f757e1871d8be89bcbd2ce012d2e60b247426a87e7", + "transactionType": "CALL", + "contractName": "TimeBasedIncentiveManager", + "contractAddress": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "function": "upgradeToAndCall(address,bytes)", + "arguments": [ + "0x1924d78136c00b578600631C5c840407f5716DDa", + "0x" + ], + "transaction": { + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "gas": "0xc3d5", + "value": "0x0", + "input": "0x4f1ef2860000000000000000000000001924d78136c00b578600631c5c840407f5716dda00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xfd", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe786c32edcf05ba0e142f55def26428e463c6150e2becee5a301b60daa86de9d", + "transactionType": "CALL", + "contractName": "TimeBasedIncentiveManager", + "contractAddress": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "function": "setCampaignImplementation(address)", + "arguments": [ + "0x402BA5996CB53E759B5528F126Fa9Df61189757d" + ], + "transaction": { + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "gas": "0xbed9", + "value": "0x0", + "input": "0x39fca7de000000000000000000000000402ba5996cb53e759b5528f126fa9df61189757d", + "nonce": "0xfe", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x7799b3", + "logs": [ + { + "address": "0x402ba5996cb53e759b5528f126fa9df61189757d", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0x346aff597221598cfc28a4c74e58cb3baaef70d9b927bb927c7cdfd6e26361ff", + "transactionIndex": "0x1e", + "logIndex": "0xf8", + "removed": false + } + ], + "logsBloom": "0x00000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000040000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x346aff597221598cfc28a4c74e58cb3baaef70d9b927bb927c7cdfd6e26361ff", + "transactionIndex": "0x1e", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "gasUsed": "0x13e4ce", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0x5ca4e", + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x402ba5996cb53e759b5528f126fa9df61189757d", + "daFootprintGasScalar": "0x8b", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x53", + "l1GasPrice": "0xa", + "l1GasUsed": "0xaaa6" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xa9bc9c", + "logs": [ + { + "address": "0x1924d78136c00b578600631c5c840407f5716dda", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0xb4377345697123bf5058b4b4a8b622aeea6a74897221582055744bd76ded5baf", + "transactionIndex": "0x1f", + "logIndex": "0xf9", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000800000000000000000000000080000000000000000000000000000000000000000000080002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb4377345697123bf5058b4b4a8b622aeea6a74897221582055744bd76ded5baf", + "transactionIndex": "0x1f", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "gasUsed": "0x3222e9", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0xd5972", + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x1924d78136c00b578600631c5c840407f5716dda", + "daFootprintGasScalar": "0x8b", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x53", + "l1GasPrice": "0xa", + "l1GasUsed": "0x1896b" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xaa4a64", + "logs": [ + { + "address": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001924d78136c00b578600631c5c840407f5716dda" + ], + "data": "0x", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0xf0f4414ceec86fbbf3b3e5f757e1871d8be89bcbd2ce012d2e60b247426a87e7", + "transactionIndex": "0x20", + "logIndex": "0xfa", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100004000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", + "type": "0x2", + "transactionHash": "0xf0f4414ceec86fbbf3b3e5f757e1871d8be89bcbd2ce012d2e60b247426a87e7", + "transactionIndex": "0x20", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "gasUsed": "0x8dc8", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0x364c", + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "contractAddress": null, + "daFootprintGasScalar": "0x8b", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x53", + "l1GasPrice": "0xa", + "l1GasUsed": "0x640" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xaad491", + "logs": [ + { + "address": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "topics": [ + "0xecb67f84d4ac8c3c40a86a0fe2cc78920f164c7acd55770db1e6b8b8fd291313", + "0x000000000000000000000000e20e335c56b5bc03aadfe81529f0fd3136e15f91", + "0x000000000000000000000000402ba5996cb53e759b5528f126fa9df61189757d" + ], + "data": "0x", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0xe786c32edcf05ba0e142f55def26428e463c6150e2becee5a301b60daa86de9d", + "transactionIndex": "0x21", + "logIndex": "0xfb", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000020000000400000000000000000000000000000000000000000000000000000004000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000100000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000008000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe786c32edcf05ba0e142f55def26428e463c6150e2becee5a301b60daa86de9d", + "transactionIndex": "0x21", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0x253192b", + "gasUsed": "0x8a2d", + "effectiveGasPrice": "0x5b8d80", + "blobGasUsed": "0x364c", + "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", + "to": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", + "contractAddress": null, + "daFootprintGasScalar": "0x8b", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x53", + "l1GasPrice": "0xa", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1773769048319, + "chain": 84532, + "commit": "57dd4169" +} \ No newline at end of file diff --git a/packages/evm/broadcast/UpgradeTimeBased.s.sol/84532/run-latest.json b/packages/evm/broadcast/UpgradeTimeBased.s.sol/84532/run-latest.json index bf518579..09156310 100644 --- a/packages/evm/broadcast/UpgradeTimeBased.s.sol/84532/run-latest.json +++ b/packages/evm/broadcast/UpgradeTimeBased.s.sol/84532/run-latest.json @@ -1,81 +1,81 @@ { "transactions": [ { - "hash": "0x192e14e903c100a913f531c40fccc0a24ec2980a431dd5c41a1f7e7ec4d37680", + "hash": "0x346aff597221598cfc28a4c74e58cb3baaef70d9b927bb927c7cdfd6e26361ff", "transactionType": "CREATE2", "contractName": "TimeBasedIncentiveCampaign", - "contractAddress": "0xe20e335c56b5bc03aadfe81529f0fd3136e15f91", + "contractAddress": "0x402ba5996cb53e759b5528f126fa9df61189757d", "function": null, "arguments": null, "transaction": { "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x1b30d8", + "gas": "0x1b7a6e", "value": "0x0", - "input": "0x0c5be6395ec9d43c63b18fb61e941b7b63bfc886f675e6b233512d7c3c72e91e6080604052348015600e575f80fd5b5060156019565b607c565b63409feecd198054600181161560365763f92ee8a95f526004601cfd5b6001600160401b03808260011c146077578060011b8355806020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050565b611604806100895f395ff3fe608060405234801561000f575f80fd5b5060043610610179575f3560e01c806378e97925116100d2578063d54ad2a111610088578063e945c39111610063578063e945c39114610365578063ed01bf2914610378578063f7c618c114610398575f80fd5b8063d54ad2a114610316578063dd98558c1461031f578063e1f1176d1461035c575f80fd5b80637d624231116100b85780637d624231146102bb578063b3f05b97146102ce578063c884ef83146102f7575f80fd5b806378e97925146102945780637c382d0b146102a8575f80fd5b80632eb4a7ab116101325780635abc657d1161010d5780635abc657d1461025a57806372b0d90c1461026e578063764d8e1814610281575f80fd5b80632eb4a7ab146101f95780633197cbb6146102025780634a8d7ff41461023b575f80fd5b80631d3231d4116101625780631d3231d4146101de5780631de77253146101e75780631fa35ad4146101f1575f80fd5b806302d05d3f1461017d5780630e15561a146101c7575b5f80fd5b60025461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101d060055481565b6040519081526020016101be565b6101d060085481565b6101ef6103b8565b005b6101d06104a6565b6101d060075481565b6006546102229068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b5f5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546102229067ffffffffffffffff1681565b6101d061027c3660046111c0565b610538565b6101d061028f3660046111e0565b610721565b6006546102229067ffffffffffffffff1681565b6101d06102b6366004611266565b610a05565b6101ef6102c936600461129d565b610aab565b600a546102e79068010000000000000000900460ff1681565b60405190151581526020016101be565b6101d06103053660046111c0565b600b6020525f908152604090205481565b6101d060095481565b61033261032d366004611331565b610cd3565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101be565b6101d060035481565b6102226103733660046113ab565b610ef8565b60015461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60045461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610408576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff166104a45760065468010000000000000000900467ffffffffffffffff16421015610470576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001790555b565b600a545f9068010000000000000000900460ff1615806104de575060065468010000000000000000900467ffffffffffffffff164211155b156104e857505f90565b6004545f9061050d9073ffffffffffffffffffffffffffffffffffffffff163061107d565b90505f6105186110b0565b9050808211610527575f610531565b61053181836113f1565b9250505090565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610589576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff166105d1576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff164211610622576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004545f906106479073ffffffffffffffffffffffffffffffffffffffff163061107d565b90505f6106526110b0565b9050808211610661575f61066b565b61066b81836113f1565b9250825f036106a6576040517fd0d04f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546106ca9073ffffffffffffffffffffffffffffffffffffffff16858561110d565b8373ffffffffffffffffffffffffffffffffffffffff167feac6e2ea0a550106b4ccc8acee07faa33ef631bf5ff35d9c8766d931990776138460405161071291815260200190565b60405180910390a25050919050565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610772576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5460065461079b9167ffffffffffffffff908116916801000000000000000090041661140a565b4211156107d4576040517f82a49d9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075461080d576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546040805173ffffffffffffffffffffffffffffffffffffffff808916602083015290921690820152606081018590525f90608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506108a5848460075484611160565b6108db576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86165f908152600b6020526040902054808611610939576040517f969bf72800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094381876113f1565b73ffffffffffffffffffffffffffffffffffffffff88165f908152600b6020526040812088905560098054929550859290919061098190849061140a565b90915550506004546109aa9073ffffffffffffffffffffffffffffffffffffffff16888561110d565b604080518481526020810188905273ffffffffffffffffffffffffffffffffffffffff8916917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a910160405180910390a25050949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610a56576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506007805490839055600882905560408051828152602081018590529081018390527f4245c4fc9e349a90fcc3b21a800990dd8bbc22ca78480f3a9354e024d627a5e89060600160405180910390a192915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6011328054600382558015610afc5760018160011c14303b10610af35763f92ee8a95f526004601cfd5b818160ff1b1b91505b503373ffffffffffffffffffffffffffffffffffffffff8b1614610b4c576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d81169182179093556001805483168d85169081179091556002805484168d861690811790915560038c905560048054909416948b1694851790935560058990556006805467ffffffffffffffff8a81167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092168217680100000000000000008b831690810291909117909355600a80547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016918a16919091179055604080518e8152602081019790975286018b90526060860152608085015291927ff66d267e514bde41afbebbf92bc8d0f073a359e8447083eb9580e7cfae53172a9060a00160405180910390a48015610cc7576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b50505050505050505050565b6001545f90819073ffffffffffffffffffffffffffffffffffffffff163314610d28576040517f287f012c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff16610d70576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff164211610dc1576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610dce868801886114c2565b90508060200151806020019051810190610de891906115b7565b60045490935073ffffffffffffffffffffffffffffffffffffffff1691505f610e11833061107d565b90505f610e1c6110b0565b90505f818311610e2c575f610e36565b610e3682846113f1565b905080861115610e72576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004548451610e989173ffffffffffffffffffffffffffffffffffffffff16908861110d565b835f015173ffffffffffffffffffffffffffffffffffffffff167feac6e2ea0a550106b4ccc8acee07faa33ef631bf5ff35d9c8766d9319907761387604051610ee391815260200190565b60405180910390a25050505094509492505050565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610f49576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff16421115610f9b576040517f287e67e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065467ffffffffffffffff6801000000000000000090910481169083161115610ff1576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506006805467ffffffffffffffff838116680100000000000000008181027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff85161790945560408051949093049091168084526020840191909152917fc7356ea889e9f64ab61293108de74888a5bf257ef77869683877880752578305910160405180910390a1919050565b5f816014526f70a082310000000000000000000000005f5260208060246010865afa601f3d111660205102905092915050565b600a546006545f916110dc9167ffffffffffffffff91821691680100000000000000009091041661140a565b4211156110e857505f90565b600954600854116110f857505f90565b60095460085461110891906113f1565b905090565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661115657803d853b151710611156576390b8ec185f526004601cfd5b505f603452505050565b5f8315611190578360051b8501855b803580851160051b94855260209485185260405f20930181811061116f5750505b501492915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111bb575f80fd5b919050565b5f602082840312156111d0575f80fd5b6111d982611198565b9392505050565b5f805f80606085870312156111f3575f80fd5b6111fc85611198565b935060208501359250604085013567ffffffffffffffff81111561121e575f80fd5b8501601f8101871361122e575f80fd5b803567ffffffffffffffff811115611244575f80fd5b8760208260051b8401011115611258575f80fd5b949793965060200194505050565b5f8060408385031215611277575f80fd5b50508035926020909101359150565b803567ffffffffffffffff811681146111bb575f80fd5b5f805f805f805f805f6101208a8c0312156112b6575f80fd5b6112bf8a611198565b98506112cd60208b01611198565b97506112db60408b01611198565b965060608a013595506112f060808b01611198565b945060a08a0135935061130560c08b01611286565b925061131360e08b01611286565b91506113226101008b01611286565b90509295985092959850929598565b5f805f8060608587031215611344575f80fd5b843567ffffffffffffffff81111561135a575f80fd5b8501601f8101871361136a575f80fd5b803567ffffffffffffffff811115611380575f80fd5b876020828401011115611391575f80fd5b602091820198909750908601359560400135945092505050565b5f602082840312156113bb575f80fd5b6111d982611286565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115611404576114046113c4565b92915050565b80820180821115611404576114046113c4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561146d5761146d61141d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156114ba576114ba61141d565b604052919050565b5f602082840312156114d2575f80fd5b813567ffffffffffffffff8111156114e8575f80fd5b8201604081850312156114f9575f80fd5b61150161144a565b61150a82611198565b8152602082013567ffffffffffffffff811115611525575f80fd5b80830192505084601f830112611539575f80fd5b813567ffffffffffffffff8111156115535761155361141d565b61158460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611473565b818152866020838601011115611598575f80fd5b816020850160208301375f602092820183015290820152949350505050565b5f602082840312156115c7575f80fd5b505191905056fea26469706673582212209d7284069ebcb5333ff2afe97ca27a5ecaaca223cfe19cd9d6051ebfd0cf8ccc64736f6c634300081a0033", - "nonce": "0x83", + "input": "0x0c5be6395ec9d43c63b18fb61e941b7b63bfc886f675e6b233512d7c3c72e91e6080604052348015600e575f80fd5b5060156019565b607c565b63409feecd198054600181161560365763f92ee8a95f526004601cfd5b6001600160401b03808260011c146077578060011b8355806020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050565b611643806100895f395ff3fe608060405234801561000f575f80fd5b5060043610610179575f3560e01c806378e97925116100d2578063d54ad2a111610088578063e945c39111610063578063e945c39114610365578063ed01bf2914610378578063f7c618c114610398575f80fd5b8063d54ad2a114610316578063dd98558c1461031f578063e1f1176d1461035c575f80fd5b80637d624231116100b85780637d624231146102bb578063b3f05b97146102ce578063c884ef83146102f7575f80fd5b806378e97925146102945780637c382d0b146102a8575f80fd5b80632eb4a7ab116101325780635abc657d1161010d5780635abc657d1461025a57806372b0d90c1461026e578063764d8e1814610281575f80fd5b80632eb4a7ab146101f95780633197cbb6146102025780634a8d7ff41461023b575f80fd5b80631d3231d4116101625780631d3231d4146101de5780631de77253146101e75780631fa35ad4146101f1575f80fd5b806302d05d3f1461017d5780630e15561a146101c7575b5f80fd5b60025461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101d060055481565b6040519081526020016101be565b6101d060085481565b6101ef6103b8565b005b6101d06104b5565b6101d060075481565b6006546102229068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b5f5461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546102229067ffffffffffffffff1681565b6101d061027c3660046111ff565b610555565b6101d061028f36600461121f565b61074f565b6006546102229067ffffffffffffffff1681565b6101d06102b63660046112a5565b610a33565b6101ef6102c93660046112dc565b610ad9565b600a546102e79068010000000000000000900460ff1681565b60405190151581526020016101be565b6101d06103053660046111ff565b600b6020525f908152604090205481565b6101d060095481565b61033261032d366004611370565b610d01565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101be565b6101d060035481565b6102226103733660046113ea565b610f37565b60015461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b60045461019d9073ffffffffffffffffffffffffffffffffffffffff1681565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610408576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff166104b35760065468010000000000000000900467ffffffffffffffff16421080156104485750600554600854105b1561047f576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001790555b565b600a545f9068010000000000000000900460ff1615806104fb575060065468010000000000000000900467ffffffffffffffff1642118015906104fb5750600554600854105b1561050557505f90565b6004545f9061052a9073ffffffffffffffffffffffffffffffffffffffff16306110bc565b90505f6105356110ef565b9050808211610544575f61054e565b61054e8183611430565b9250505090565b5f805473ffffffffffffffffffffffffffffffffffffffff1633146105a6576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff166105ee576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff1642118015906106195750600554600854105b15610650576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004545f906106759073ffffffffffffffffffffffffffffffffffffffff16306110bc565b90505f6106806110ef565b905080821161068f575f610699565b6106998183611430565b9250825f036106d4576040517fd0d04f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546106f89073ffffffffffffffffffffffffffffffffffffffff16858561114c565b8373ffffffffffffffffffffffffffffffffffffffff167feac6e2ea0a550106b4ccc8acee07faa33ef631bf5ff35d9c8766d931990776138460405161074091815260200190565b60405180910390a25050919050565b5f805473ffffffffffffffffffffffffffffffffffffffff1633146107a0576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546006546107c99167ffffffffffffffff9081169168010000000000000000900416611449565b421115610802576040517f82a49d9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075461083b576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546040805173ffffffffffffffffffffffffffffffffffffffff808916602083015290921690820152606081018590525f90608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506108d384846007548461119f565b610909576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86165f908152600b6020526040902054808611610967576040517f969bf72800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109718187611430565b73ffffffffffffffffffffffffffffffffffffffff88165f908152600b602052604081208890556009805492955085929091906109af908490611449565b90915550506004546109d89073ffffffffffffffffffffffffffffffffffffffff16888561114c565b604080518481526020810188905273ffffffffffffffffffffffffffffffffffffffff8916917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a910160405180910390a25050949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610a84576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506007805490839055600882905560408051828152602081018590529081018390527f4245c4fc9e349a90fcc3b21a800990dd8bbc22ca78480f3a9354e024d627a5e89060600160405180910390a192915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6011328054600382558015610b2a5760018160011c14303b10610b215763f92ee8a95f526004601cfd5b818160ff1b1b91505b503373ffffffffffffffffffffffffffffffffffffffff8b1614610b7a576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d81169182179093556001805483168d85169081179091556002805484168d861690811790915560038c905560048054909416948b1694851790935560058990556006805467ffffffffffffffff8a81167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092168217680100000000000000008b831690810291909117909355600a80547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016918a16919091179055604080518e8152602081019790975286018b90526060860152608085015291927ff66d267e514bde41afbebbf92bc8d0f073a359e8447083eb9580e7cfae53172a9060a00160405180910390a48015610cf5576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b50505050505050505050565b6001545f90819073ffffffffffffffffffffffffffffffffffffffff163314610d56576040517f287f012c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5468010000000000000000900460ff16610d9e576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff164211801590610dc95750600554600854105b15610e00576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e0d86880188611501565b90508060200151806020019051810190610e2791906115f6565b60045490935073ffffffffffffffffffffffffffffffffffffffff1691505f610e5083306110bc565b90505f610e5b6110ef565b90505f818311610e6b575f610e75565b610e758284611430565b905080861115610eb1576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004548451610ed79173ffffffffffffffffffffffffffffffffffffffff16908861114c565b835f015173ffffffffffffffffffffffffffffffffffffffff167feac6e2ea0a550106b4ccc8acee07faa33ef631bf5ff35d9c8766d9319907761387604051610f2291815260200190565b60405180910390a25050505094509492505050565b5f805473ffffffffffffffffffffffffffffffffffffffff163314610f88576040517fddd53ed500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065468010000000000000000900467ffffffffffffffff16421115610fda576040517f287e67e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065467ffffffffffffffff6801000000000000000090910481169083161115611030576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506006805467ffffffffffffffff838116680100000000000000008181027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff85161790945560408051949093049091168084526020840191909152917fc7356ea889e9f64ab61293108de74888a5bf257ef77869683877880752578305910160405180910390a1919050565b5f816014526f70a082310000000000000000000000005f5260208060246010865afa601f3d111660205102905092915050565b600a546006545f9161111b9167ffffffffffffffff918216916801000000000000000090910416611449565b42111561112757505f90565b6009546008541161113757505f90565b6009546008546111479190611430565b905090565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661119557803d853b151710611195576390b8ec185f526004601cfd5b505f603452505050565b5f83156111cf578360051b8501855b803580851160051b94855260209485185260405f2093018181106111ae5750505b501492915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111fa575f80fd5b919050565b5f6020828403121561120f575f80fd5b611218826111d7565b9392505050565b5f805f8060608587031215611232575f80fd5b61123b856111d7565b935060208501359250604085013567ffffffffffffffff81111561125d575f80fd5b8501601f8101871361126d575f80fd5b803567ffffffffffffffff811115611283575f80fd5b8760208260051b8401011115611297575f80fd5b949793965060200194505050565b5f80604083850312156112b6575f80fd5b50508035926020909101359150565b803567ffffffffffffffff811681146111fa575f80fd5b5f805f805f805f805f6101208a8c0312156112f5575f80fd5b6112fe8a6111d7565b985061130c60208b016111d7565b975061131a60408b016111d7565b965060608a0135955061132f60808b016111d7565b945060a08a0135935061134460c08b016112c5565b925061135260e08b016112c5565b91506113616101008b016112c5565b90509295985092959850929598565b5f805f8060608587031215611383575f80fd5b843567ffffffffffffffff811115611399575f80fd5b8501601f810187136113a9575f80fd5b803567ffffffffffffffff8111156113bf575f80fd5b8760208284010111156113d0575f80fd5b602091820198909750908601359560400135945092505050565b5f602082840312156113fa575f80fd5b611218826112c5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561144357611443611403565b92915050565b8082018082111561144357611443611403565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156114ac576114ac61145c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156114f9576114f961145c565b604052919050565b5f60208284031215611511575f80fd5b813567ffffffffffffffff811115611527575f80fd5b820160408185031215611538575f80fd5b611540611489565b611549826111d7565b8152602082013567ffffffffffffffff811115611564575f80fd5b80830192505084601f830112611578575f80fd5b813567ffffffffffffffff8111156115925761159261145c565b6115c360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016114b2565b8181528660208386010111156115d7575f80fd5b816020850160208301375f602092820183015290820152949350505050565b5f60208284031215611606575f80fd5b505191905056fea2646970667358221220367687d6700b01b12245677f99fdaafedf8072924fafea529422ae122876496d64736f6c634300081a0033", + "nonce": "0xfb", "chainId": "0x14a34" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x76bdc28e958195c66e1a1b82509b135c12500c5c61f77c57cfdbce87601b9c53", + "hash": "0xb4377345697123bf5058b4b4a8b622aeea6a74897221582055744bd76ded5baf", "transactionType": "CREATE2", "contractName": "TimeBasedIncentiveManager", - "contractAddress": "0xa0f08989ea0e5677e643cbda7c772e42b386c9bf", + "contractAddress": "0x1924d78136c00b578600631c5c840407f5716dda", "function": null, "arguments": null, "transaction": { "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x445333", + "gas": "0x49530e", "value": "0x0", - "input": "0x0c5be6395ec9d43c63b18fb61e941b7b63bfc886f675e6b233512d7c3c72e91e60a0604052306080523480156012575f80fd5b506019601d565b6080565b63409feecd1980546001811615603a5763f92ee8a95f526004601cfd5b6001600160401b03808260011c14607b578060011b8355806020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050565b60805161398261009f5f395f818161319e01526131d501526139825ff3fe60806040526004361061025d575f3560e01c80635598f8cc1161014b578063b0e21e8a116100c6578063ee8d238c1161007c578063f2fde38b11610062578063f2fde38b146106ca578063fdb88840146106dd578063fee81cf4146106fc575f80fd5b8063ee8d238c14610698578063f04e283e146106b7575f80fd5b8063c49378a7116100ac578063c49378a714610646578063cfdbf25414610665578063deaaf8da14610679575f80fd5b8063b0e21e8a14610607578063b3ab15fb14610627575f80fd5b8063715018a61161011b57806382a525191161010157806382a52519146105b05780638da5cb5b146105d057806394a30809146105e8575f80fd5b8063715018a6146105935780637274e30d1461059b575f80fd5b80635598f8cc146104f6578063570ca7351461052a5780635abc657d1461054957806362a6e06514610575575f80fd5b806343bc42d3116101db5780634e04275f116101ab57806352d1902d1161019157806352d1902d1461048f57806354d1f13d146104a357806354fd4d50146104ab575f80fd5b80634e04275f1461045d5780634f1ef2861461047c575f80fd5b806343bc42d3146103e157806345598b4a1461040057806346877b1a1461041f5780634a59c3c71461043e575f80fd5b80632e7ba6ef11610230578063323a5e3611610216578063323a5e361461037857806339a51be51461039757806339fca7de146103c2575f80fd5b80632e7ba6ef1461032c5780633090aadf1461034b575f80fd5b806302d9ce7414610261578063141961bc146102b757806325692962146103035780632e1a7d4d1461030d575b5f80fd5b34801561026c575f80fd5b506004546102999074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156102c2575f80fd5b506102eb6102d136600461329c565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b61030b61072d565b005b348015610318575f80fd5b5061030b61032736600461329c565b61077a565b348015610337575f80fd5b5061030b6103463660046132c7565b610e20565b348015610356575f80fd5b5061036a61036536600461336f565b610f53565b6040519081526020016102ae565b348015610383575f80fd5b5061030b6103923660046133ca565b6114dc565b3480156103a2575f80fd5b506003546102eb906801000000000000000090046001600160a01b031681565b3480156103cd575f80fd5b5061030b6103dc36600461343b565b6118c0565b3480156103ec575f80fd5b5061030b6103fb366004613456565b61196f565b34801561040b575f80fd5b5061030b61041a36600461329c565b611a38565b34801561042a575f80fd5b5061030b61043936600461343b565b611d61565b348015610449575f80fd5b5061036a61045836600461329c565b611e20565b348015610468575f80fd5b5061030b610477366004613471565b611ed5565b61030b61048a3660046134ca565b61212b565b34801561049a575f80fd5b5061036a6121d9565b61030b612207565b3480156104b6575f80fd5b50604080518082018252600581527f322e302e30000000000000000000000000000000000000000000000000000000602082015290516102ae9190613578565b348015610501575f80fd5b506102eb61051036600461329c565b5f908152600160205260409020546001600160a01b031690565b348015610535575f80fd5b506004546102eb906001600160a01b031681565b348015610554575f80fd5b506005546102999068010000000000000000900467ffffffffffffffff1681565b348015610580575f80fd5b505f546102eb906001600160a01b031681565b61030b612240565b3480156105a6575f80fd5b5061036a60025481565b3480156105bb575f80fd5b506005546102999067ffffffffffffffff1681565b3480156105db575f80fd5b50638b78c6d819546102eb565b3480156105f3575f80fd5b5061030b610602366004613597565b612253565b348015610612575f80fd5b506003546102999067ffffffffffffffff1681565b348015610632575f80fd5b5061030b61064136600461343b565b6124cb565b348015610651575f80fd5b5061030b610660366004613456565b61253c565b348015610670575f80fd5b5061036a603281565b348015610684575f80fd5b5061030b610693366004613456565b61261d565b3480156106a3575f80fd5b5061030b6106b2366004613456565b6126fa565b61030b6106c536600461343b565b6127cc565b61030b6106d836600461343b565b612809565b3480156106e8575f80fd5b5061036a6106f73660046135ca565b61282f565b348015610707575f80fd5b5061036a61071636600461343b565b63389a75e1600c9081525f91909152602090205490565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b5f818152600160205260409020546001600160a01b0316806107c8576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f816001600160a01b031663ed01bf296040518163ffffffff1660e01b8152600401602060405180830381865afa158015610809573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082d9190613636565b90506001600160a01b038116156108f8576040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382169063fe9fbb8090602401602060405180830381865afa158015610899573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bd9190613651565b6108f3576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a2565b816001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109589190613636565b6001600160a01b0316336001600160a01b0316146109a2576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b0316633197cbb66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a02919061366c565b67ffffffffffffffff164211610a44576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa49190613651565b610ada576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811615610c84575f826001600160a01b0316631fa35ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4a9190613687565b9050805f03610b85576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81604051602001610b9991815260200190565b60408051601f19818403018152908290527fb300579300000000000000000000000000000000000000000000000000000000825291505f906001600160a01b0385169063b300579390610bf690899086908690819060040161369e565b60408051808303815f875af1158015610c11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3591906136d2565b509050836001600160a01b0316877f02ffa641367f5b897c0f8be81bce51f2ef055b4113d7a1e4fd082feea749bf5283604051610c7491815260200190565b60405180910390a3505050610e1a565b5f826001600160a01b03166372b0d90c846001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf49190613636565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016020604051808303815f875af1158015610d4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d739190613687565b9050826001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd59190613636565b6001600160a01b0316857f02ffa641367f5b897c0f8be81bce51f2ef055b4113d7a1e4fd082feea749bf5283604051610e1091815260200190565b60405180910390a3505b50505050565b5f858152600160205260409020546001600160a01b031680610e6e576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f764d8e180000000000000000000000000000000000000000000000000000000081525f906001600160a01b0383169063764d8e1890610ebb908990899089908990600401613701565b6020604051808303815f875af1158015610ed7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efb9190613687565b9050856001600160a01b0316877fd9cb1e2714d65a111c0f20f060176ad657496bd47a3de04ec7c3d4ca232112ac8388604051610f42929190918252602082015260400190565b60405180910390a350505050505050565b5f6001600160a01b038516610f94576040517fdfde867100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f03610fcd576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428367ffffffffffffffff161015611011576040517f26e687eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff161161105e576040517f302e5b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6110698484613795565b60045490915067ffffffffffffffff74010000000000000000000000000000000000000000909104811690821611156110ce576040517f9529f50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff9081169082161015611118576040517f25c3636700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545f90612710906111359067ffffffffffffffff16886137b5565b61113f91906137cc565b90505f61114c8288613804565b90505f611159893061304d565b90506111706001600160a01b038a1633308b613080565b878161117c8b3061304d565b6111869190613804565b146111bd576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546111d2906001600160a01b03166130e2565b905060025f81546111e290613817565b91829055505f81815260016020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416179055955083156112da575f61124d8b600360089054906101000a90046001600160a01b031661304d565b600354909150611276906001600160a01b038d81169168010000000000000000900416876130f3565b84816112978d600360089054906101000a90046001600160a01b031661304d565b6112a19190613804565b146112d8576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8215611350575f6112eb8b8361304d565b90506113016001600160a01b038c1683866130f3565b838161130d8d8561304d565b6113179190613804565b1461134e576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6005546040517f7d6242310000000000000000000000000000000000000000000000000000000081523060048201525f6024820152336044820152606481018d90526001600160a01b038c8116608483015260a4820186905267ffffffffffffffff8b811660c48401528a811660e48401526801000000000000000090930490921661010482015290821690637d62423190610124015f604051808303815f87803b1580156113fd575f80fd5b505af115801561140f573d5f803e3d5ffd5b50505050896001600160a01b03165f6001600160a01b0316336001600160a01b03167f6ab5cc4de23c7e11ae0b117c2bda0b7e5c4c281706a98f16593e5d68fa511e14898f86898f8f600560089054906101000a900467ffffffffffffffff166040516114c6979695949392919096875260208701959095526001600160a01b03939093166040860152606085019190915267ffffffffffffffff908116608085015290811660a08401521660c082015260e00190565b60405180910390a4505050505095945050505050565b638b78c6d819546001600160a01b0316336001600160a01b03161415801561150f57506004546001600160a01b03163314155b15611546576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f819003611580576040517fc2e5347d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60328111156115bb576040517f0b7d62e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156118bb575f60015f8585858181106115db576115db61384e565b608002919091013582525060208101919091526040015f20546001600160a01b0316905080611636576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001600160a01b0316637c382d0b8686868181106116585761165861384e565b905060800201602001358787878181106116745761167461384e565b905060800201604001356040518363ffffffff1660e01b81526004016116a4929190918252602082015260400190565b6020604051808303815f875af11580156116c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e49190613687565b90508484848181106116f8576116f861384e565b9050608002015f01357ffb270bf61beeb2f6245d25e705aa540499f6e32b4d19f7081ecf930bc5dfa7b0828787878181106117355761173561384e565b905060800201602001358888888181106117515761175161384e565b9050608002016040013560405161177b939291909283526020830191909152604082015260600190565b60405180910390a28484848181106117955761179561384e565b90506080020160600160208101906117ad919061387b565b80156118165750816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118149190613651565b155b156118b157816001600160a01b0316631de772536040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611853575f80fd5b505af1158015611865573d5f803e3d5ffd5b5050505084848481811061187b5761187b61384e565b9050608002015f01357f79e19121aa255cb066a0c009cb90dc7e4847878c99372edec7374527541c181460405160405180910390a25b50506001016115bd565b505050565b6118c8613146565b6001600160a01b038116611908576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917fecb67f84d4ac8c3c40a86a0fe2cc78920f164c7acd55770db1e6b8b8fd2913139190a35050565b611977613146565b6127108167ffffffffffffffff1611156119bd576040517f499fddb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003805467ffffffffffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083168117909355604080519190921680825260208201939093527f69c0c8b14820d4f18f9972772394ceb2d4bffb479d5bb9644dc40ff09fe6326b91015b60405180910390a15050565b5f818152600160205260409020546001600160a01b031680611a86576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f816001600160a01b031663ed01bf296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aeb9190613636565b9050611afa638b78c6d8195490565b6001600160a01b0316336001600160a01b031614611c85576001600160a01b03811615611bdb576040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382169063fe9fbb8090602401602060405180830381865afa158015611b7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba09190613651565b611bd6576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c85565b816001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3b9190613636565b6001600160a01b0316336001600160a01b031614611c85576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe945c39100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff421660048201525f906001600160a01b0384169063e945c391906024016020604051808303815f875af1158015611ced573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d11919061366c565b6040805167ffffffffffffffff80841682524216602082015291925086917f4bfb7649fc0a3d23cb10cd353998b86b71e0d98ac24d5f5e5a603839152e1ce4910160405180910390a25050505050565b611d69613146565b6001600160a01b038116611da9576040517fb6802b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001600160a01b03838116680100000000000000008181027fffffffff0000000000000000000000000000000000000000ffffffffffffffff85161790945560405193909204169182907ffb5b90d81126d568c8bdaa0398ba8a708fd01e26c7891e91fa88e96051985ce3905f90a35050565b5f818152600160205260408120546001600160a01b031680611e6e576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b0316631fa35ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ece9190613687565b9392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6011328054600382558015611f265760018160011c14303b10611f1d5763f92ee8a95f526004601cfd5b818160ff1b1b91505b506001600160a01b038416611f67576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611fa7576040517fb6802b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108367ffffffffffffffff161115611fed576040517f499fddb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff685613160565b5f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03868116919091179091556003805467ffffffffffffffff86167fffffffff00000000000000000000000000000000000000000000000000000000909116176801000000000000000092851692909202919091179055600480547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167701e133800000000000000000000000000000000000000000179055600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166a4f1a0000000000000151801790558015612124576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b5050505050565b61213361319b565b61213c836131ca565b8260601b60601c92503d5f526352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d885afa5114612191576355299b496001526004601dfd5b837fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a283905580156118bb57604051818382375f388383875af4610e1a573d5f823e3d81fd5b5f6121e26131d2565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b612248613146565b6122515f613201565b565b638b78c6d819546001600160a01b0316336001600160a01b03161415801561228657506004546001600160a01b03163314155b156122bd576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848152600160205260409020546001600160a01b03168061230b576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7c382d0b00000000000000000000000000000000000000000000000000000000815260048101859052602481018490525f906001600160a01b03831690637c382d0b906044016020604051808303815f875af1158015612371573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123959190613687565b604080518281526020810188905290810186905290915086907ffb270bf61beeb2f6245d25e705aa540499f6e32b4d19f7081ecf930bc5dfa7b09060600160405180910390a28280156124455750816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124439190613651565b155b156124c357816001600160a01b0316631de772536040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612482575f80fd5b505af1158015612494573d5f803e3d5ffd5b50506040518892507f79e19121aa255cb066a0c009cb90dc7e4847878c99372edec7374527541c181491505f90a25b505050505050565b6124d3613146565b600480546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03905f90a35050565b612544613146565b60055467ffffffffffffffff908116908216101561258e576040517ff1d6225400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805467ffffffffffffffff838116740100000000000000000000000000000000000000008181027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff85161790945560408051949093049091168084526020840191909152917f42d49bce8106572e241b8b0002dc47771ebe9bb431d333d0ad305e733c5230ef9101611a2c565b612625613146565b60045467ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115612687576040517ff1d6225400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805467ffffffffffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083168117909355604080519190921680825260208201939093527ff380cae8d13933e5618f5cc29648b425d32946ed7be3fd40e3963ac8ca90f0439101611a2c565b612702613146565b620151808167ffffffffffffffff161015612749576040517fb2bc234000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805467ffffffffffffffff838116680100000000000000008181027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff85161790945560408051949093049091168084526020840191909152917fbe0ff6c2b51e7f7f555afbb843d09658966145aa0df927e68d80672b880fb8489101611a2c565b6127d4613146565b63389a75e1600c52805f526020600c2080544211156127fa57636f5e88185f526004601cfd5b5f905561280681613201565b50565b612811613146565b8060601b61282657637448fbae5f526004601cfd5b61280681613201565b6040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201525f906001600160a01b0388169063fe9fbb8090602401602060405180830381865afa15801561288c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b09190613651565b6128e6576040517fc114438000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516612926576040517fdfde867100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f0361295f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428367ffffffffffffffff1610156129a3576040517f26e687eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff16116129f0576040517f302e5b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6129fb8484613795565b60045490915067ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115612a60576040517f9529f50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff9081169082161015612aaa576040517f25c3636700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545f9061271090612ac79067ffffffffffffffff16886137b5565b612ad191906137cc565b90505f612ade8288613804565b5f805491925090612af7906001600160a01b03166130e2565b905060025f8154612b0790613817565b91829055505f81815260016020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841617905594508215612d3d575f612b728a600360089054906101000a90046001600160a01b031661304d565b90505f604051806080016040528060016002811115612b9357612b93613896565b81526020018c6001600160a01b03168152602001600360089054906101000a90046001600160a01b03166001600160a01b03168152602001604051806020016040528088815250604051602001612bed9151815260200190565b60408051601f19818403018152918152915251612c0d91906020016138c3565b60408051601f19818403018152908290527ffa4ca9b100000000000000000000000000000000000000000000000000000000825291506001600160a01b038e169063fa4ca9b190612c62908490600401613578565b6020604051808303815f875af1158015612c7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca29190613651565b612cd8576040517fd192263e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8482612cf98d600360089054906101000a90046001600160a01b031661304d565b612d039190613804565b14612d3a576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b8115612eef575f612d4e8a8361304d565b90505f604051806080016040528060016002811115612d6f57612d6f613896565b81526020018c6001600160a01b03168152602001846001600160a01b03168152602001604051806020016040528087815250604051602001612db49151815260200190565b60408051601f19818403018152918152915251612dd491906020016138c3565b60408051601f19818403018152908290527ffa4ca9b100000000000000000000000000000000000000000000000000000000825291506001600160a01b038e169063fa4ca9b190612e29908490600401613578565b6020604051808303815f875af1158015612e45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e699190613651565b612e9f576040517fd192263e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8382612eab8d8661304d565b612eb59190613804565b14612eec576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b6005546040517f7d6242310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038d81166024830152336044830152606482018d90528b8116608483015260a4820185905267ffffffffffffffff8a811660c484015289811660e48401526801000000000000000090930490921661010482015290821690637d62423190610124015f604051808303815f87803b158015612f9e575f80fd5b505af1158015612fb0573d5f803e3d5ffd5b505060055460408051898152602081018f90526001600160a01b03868116828401526060820188905267ffffffffffffffff8d811660808401528c811660a08401526801000000000000000090940490931660c082015290518d83169450918f16925033917f6ab5cc4de23c7e11ae0b117c2bda0b7e5c4c281706a98f16593e5d68fa511e149181900360e00190a4505050509695505050505050565b5f816014526f70a082310000000000000000000000005f5260208060246010865afa601f3d111660205102905092915050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af18060015f5114166130d457803d873b1517106130d457637939f4245f526004601cfd5b505f60605260405250505050565b5f6130ed5f8361323e565b92915050565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661313c57803d853b15171061313c576390b8ec185f526004601cfd5b505f603452505050565b638b78c6d819543314612251576382b429005f526004601cfd5b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b307f0000000000000000000000000000000000000000000000000000000000000000036122515761225161328f565b612806613146565b307f0000000000000000000000000000000000000000000000000000000000000000146122515761225161328f565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b5f6c5af43d3d93803e602a57fd5bf36021528160145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c84f09050806132855763301164255f526004601cfd5b5f60215292915050565b639f03a0265f526004601cfd5b5f602082840312156132ac575f80fd5b5035919050565b6001600160a01b0381168114612806575f80fd5b5f805f805f608086880312156132db575f80fd5b8535945060208601356132ed816132b3565b935060408601359250606086013567ffffffffffffffff81111561330f575f80fd5b8601601f8101881361331f575f80fd5b803567ffffffffffffffff811115613335575f80fd5b8860208260051b8401011115613349575f80fd5b959894975092955050506020019190565b67ffffffffffffffff81168114612806575f80fd5b5f805f805f60a08688031215613383575f80fd5b853594506020860135613395816132b3565b93506040860135925060608601356133ac8161335a565b915060808601356133bc8161335a565b809150509295509295909350565b5f80602083850312156133db575f80fd5b823567ffffffffffffffff8111156133f1575f80fd5b8301601f81018513613401575f80fd5b803567ffffffffffffffff811115613417575f80fd5b8560208260071b840101111561342b575f80fd5b6020919091019590945092505050565b5f6020828403121561344b575f80fd5b8135611ece816132b3565b5f60208284031215613466575f80fd5b8135611ece8161335a565b5f805f8060808587031215613484575f80fd5b843561348f816132b3565b9350602085013561349f816132b3565b925060408501356134af8161335a565b915060608501356134bf816132b3565b939692955090935050565b5f805f604084860312156134dc575f80fd5b83356134e7816132b3565b9250602084013567ffffffffffffffff811115613502575f80fd5b8401601f81018613613512575f80fd5b803567ffffffffffffffff811115613528575f80fd5b866020828401011115613539575f80fd5b939660209190910195509293505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ece602083018461354a565b8015158114612806575f80fd5b5f805f80608085870312156135aa575f80fd5b84359350602085013592506040850135915060608501356134bf8161358a565b5f805f805f8060c087890312156135df575f80fd5b86356135ea816132b3565b9550602087013594506040870135613601816132b3565b93506060870135925060808701356136188161335a565b915060a08701356136288161335a565b809150509295509295509295565b5f60208284031215613646575f80fd5b8151611ece816132b3565b5f60208284031215613661575f80fd5b8151611ece8161358a565b5f6020828403121561367c575f80fd5b8151611ece8161335a565b5f60208284031215613697575f80fd5b5051919050565b6001600160a01b0385168152608060208201525f6136bf608083018661354a565b6040830194909452506060015292915050565b5f80604083850312156136e3575f80fd5b825160208401519092506136f6816132b3565b809150509250929050565b6001600160a01b0385168152836020820152606060408201528160608201525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561374d575f80fd5b8260051b808560808501379190910160800195945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908111156130ed576130ed613768565b80820281158282048414176130ed576130ed613768565b5f826137ff577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156130ed576130ed613768565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361384757613847613768565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020828403121561388b575f80fd5b8135611ece8161358a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b602081525f8251600381106138ff577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b806020840152506001600160a01b0360208401511660408301526001600160a01b036040840151166060830152606083015160808084015261394460a084018261354a565b94935050505056fea2646970667358221220f29cddf9e2a86fe8525b5dee879ea56571ced131bd36507c6a90322ea4c10ac764736f6c634300081a0033", - "nonce": "0x84", + "input": "0x0c5be6395ec9d43c63b18fb61e941b7b63bfc886f675e6b233512d7c3c72e91e60a0604052306080523480156012575f80fd5b506019601d565b6080565b63409feecd1980546001811615603a5763f92ee8a95f526004601cfd5b6001600160401b03808260011c14607b578060011b8355806020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050565b608051613a4d61009f5f395f818161326901526132a00152613a4d5ff3fe60806040526004361061025d575f3560e01c80635598f8cc1161014b578063b0e21e8a116100c6578063ee8d238c1161007c578063f2fde38b11610062578063f2fde38b146106ca578063fdb88840146106dd578063fee81cf4146106fc575f80fd5b8063ee8d238c14610698578063f04e283e146106b7575f80fd5b8063c49378a7116100ac578063c49378a714610646578063cfdbf25414610665578063deaaf8da14610679575f80fd5b8063b0e21e8a14610607578063b3ab15fb14610627575f80fd5b8063715018a61161011b57806382a525191161010157806382a52519146105b05780638da5cb5b146105d057806394a30809146105e8575f80fd5b8063715018a6146105935780637274e30d1461059b575f80fd5b80635598f8cc146104f6578063570ca7351461052a5780635abc657d1461054957806362a6e06514610575575f80fd5b806343bc42d3116101db5780634e04275f116101ab57806352d1902d1161019157806352d1902d1461048f57806354d1f13d146104a357806354fd4d50146104ab575f80fd5b80634e04275f1461045d5780634f1ef2861461047c575f80fd5b806343bc42d3146103e157806345598b4a1461040057806346877b1a1461041f5780634a59c3c71461043e575f80fd5b80632e7ba6ef11610230578063323a5e3611610216578063323a5e361461037857806339a51be51461039757806339fca7de146103c2575f80fd5b80632e7ba6ef1461032c5780633090aadf1461034b575f80fd5b806302d9ce7414610261578063141961bc146102b757806325692962146103035780632e1a7d4d1461030d575b5f80fd5b34801561026c575f80fd5b506004546102999074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156102c2575f80fd5b506102eb6102d1366004613367565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b61030b61072d565b005b348015610318575f80fd5b5061030b610327366004613367565b61077a565b348015610337575f80fd5b5061030b610346366004613392565b610eeb565b348015610356575f80fd5b5061036a61036536600461343a565b61101e565b6040519081526020016102ae565b348015610383575f80fd5b5061030b610392366004613495565b6115a7565b3480156103a2575f80fd5b506003546102eb906801000000000000000090046001600160a01b031681565b3480156103cd575f80fd5b5061030b6103dc366004613506565b61198b565b3480156103ec575f80fd5b5061030b6103fb366004613521565b611a3a565b34801561040b575f80fd5b5061030b61041a366004613367565b611b03565b34801561042a575f80fd5b5061030b610439366004613506565b611e2c565b348015610449575f80fd5b5061036a610458366004613367565b611eeb565b348015610468575f80fd5b5061030b61047736600461353c565b611fa0565b61030b61048a366004613595565b6121f6565b34801561049a575f80fd5b5061036a6122a4565b61030b6122d2565b3480156104b6575f80fd5b50604080518082018252600581527f322e312e30000000000000000000000000000000000000000000000000000000602082015290516102ae9190613643565b348015610501575f80fd5b506102eb610510366004613367565b5f908152600160205260409020546001600160a01b031690565b348015610535575f80fd5b506004546102eb906001600160a01b031681565b348015610554575f80fd5b506005546102999068010000000000000000900467ffffffffffffffff1681565b348015610580575f80fd5b505f546102eb906001600160a01b031681565b61030b61230b565b3480156105a6575f80fd5b5061036a60025481565b3480156105bb575f80fd5b506005546102999067ffffffffffffffff1681565b3480156105db575f80fd5b50638b78c6d819546102eb565b3480156105f3575f80fd5b5061030b610602366004613662565b61231e565b348015610612575f80fd5b506003546102999067ffffffffffffffff1681565b348015610632575f80fd5b5061030b610641366004613506565b612596565b348015610651575f80fd5b5061030b610660366004613521565b612607565b348015610670575f80fd5b5061036a603281565b348015610684575f80fd5b5061030b610693366004613521565b6126e8565b3480156106a3575f80fd5b5061030b6106b2366004613521565b6127c5565b61030b6106c5366004613506565b612897565b61030b6106d8366004613506565b6128d4565b3480156106e8575f80fd5b5061036a6106f7366004613695565b6128fa565b348015610707575f80fd5b5061036a610716366004613506565b63389a75e1600c9081525f91909152602090205490565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b5f818152600160205260409020546001600160a01b0316806107c8576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f816001600160a01b031663ed01bf296040518163ffffffff1660e01b8152600401602060405180830381865afa158015610809573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082d9190613701565b90506001600160a01b038116156108f8576040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382169063fe9fbb8090602401602060405180830381865afa158015610899573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bd919061371c565b6108f3576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a2565b816001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109589190613701565b6001600160a01b0316336001600160a01b0316146109a2576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b0316633197cbb66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a029190613737565b67ffffffffffffffff164211158015610ad85750816001600160a01b0316630e15561a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a769190613752565b826001600160a01b0316631d3231d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad69190613752565b105b15610b0f576040517fcc76115300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6f919061371c565b610ba5576040517fe07f7ab300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811615610d4f575f826001600160a01b0316631fa35ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190613752565b9050805f03610c50576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81604051602001610c6491815260200190565b60408051601f19818403018152908290527fb300579300000000000000000000000000000000000000000000000000000000825291505f906001600160a01b0385169063b300579390610cc1908990869086908190600401613769565b60408051808303815f875af1158015610cdc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d00919061379d565b509050836001600160a01b0316877f02ffa641367f5b897c0f8be81bce51f2ef055b4113d7a1e4fd082feea749bf5283604051610d3f91815260200190565b60405180910390a3505050610ee5565b5f826001600160a01b03166372b0d90c846001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dbf9190613701565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016020604051808303815f875af1158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613752565b9050826001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea09190613701565b6001600160a01b0316857f02ffa641367f5b897c0f8be81bce51f2ef055b4113d7a1e4fd082feea749bf5283604051610edb91815260200190565b60405180910390a3505b50505050565b5f858152600160205260409020546001600160a01b031680610f39576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f764d8e180000000000000000000000000000000000000000000000000000000081525f906001600160a01b0383169063764d8e1890610f869089908990899089906004016137cc565b6020604051808303815f875af1158015610fa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc69190613752565b9050856001600160a01b0316877fd9cb1e2714d65a111c0f20f060176ad657496bd47a3de04ec7c3d4ca232112ac838860405161100d929190918252602082015260400190565b60405180910390a350505050505050565b5f6001600160a01b03851661105f576040517fdfde867100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f03611098576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428367ffffffffffffffff1610156110dc576040517f26e687eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff1611611129576040517f302e5b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6111348484613860565b60045490915067ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115611199576040517f9529f50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff90811690821610156111e3576040517f25c3636700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545f90612710906112009067ffffffffffffffff1688613880565b61120a9190613897565b90505f61121782886138cf565b90505f6112248930613118565b905061123b6001600160a01b038a1633308b61314b565b87816112478b30613118565b61125191906138cf565b14611288576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805461129d906001600160a01b03166131ad565b905060025f81546112ad906138e2565b91829055505f81815260016020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416179055955083156113a5575f6113188b600360089054906101000a90046001600160a01b0316613118565b600354909150611341906001600160a01b038d81169168010000000000000000900416876131be565b84816113628d600360089054906101000a90046001600160a01b0316613118565b61136c91906138cf565b146113a3576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b821561141b575f6113b68b83613118565b90506113cc6001600160a01b038c1683866131be565b83816113d88d85613118565b6113e291906138cf565b14611419576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6005546040517f7d6242310000000000000000000000000000000000000000000000000000000081523060048201525f6024820152336044820152606481018d90526001600160a01b038c8116608483015260a4820186905267ffffffffffffffff8b811660c48401528a811660e48401526801000000000000000090930490921661010482015290821690637d62423190610124015f604051808303815f87803b1580156114c8575f80fd5b505af11580156114da573d5f803e3d5ffd5b50505050896001600160a01b03165f6001600160a01b0316336001600160a01b03167f6ab5cc4de23c7e11ae0b117c2bda0b7e5c4c281706a98f16593e5d68fa511e14898f86898f8f600560089054906101000a900467ffffffffffffffff16604051611591979695949392919096875260208701959095526001600160a01b03939093166040860152606085019190915267ffffffffffffffff908116608085015290811660a08401521660c082015260e00190565b60405180910390a4505050505095945050505050565b638b78c6d819546001600160a01b0316336001600160a01b0316141580156115da57506004546001600160a01b03163314155b15611611576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81900361164b576040517fc2e5347d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032811115611686576040517f0b7d62e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015611986575f60015f8585858181106116a6576116a6613919565b608002919091013582525060208101919091526040015f20546001600160a01b0316905080611701576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001600160a01b0316637c382d0b86868681811061172357611723613919565b9050608002016020013587878781811061173f5761173f613919565b905060800201604001356040518363ffffffff1660e01b815260040161176f929190918252602082015260400190565b6020604051808303815f875af115801561178b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117af9190613752565b90508484848181106117c3576117c3613919565b9050608002015f01357ffb270bf61beeb2f6245d25e705aa540499f6e32b4d19f7081ecf930bc5dfa7b08287878781811061180057611800613919565b9050608002016020013588888881811061181c5761181c613919565b90506080020160400135604051611846939291909283526020830191909152604082015260600190565b60405180910390a284848481811061186057611860613919565b90506080020160600160208101906118789190613946565b80156118e15750816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118df919061371c565b155b1561197c57816001600160a01b0316631de772536040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561191e575f80fd5b505af1158015611930573d5f803e3d5ffd5b5050505084848481811061194657611946613919565b9050608002015f01357f79e19121aa255cb066a0c009cb90dc7e4847878c99372edec7374527541c181460405160405180910390a25b5050600101611688565b505050565b611993613211565b6001600160a01b0381166119d3576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917fecb67f84d4ac8c3c40a86a0fe2cc78920f164c7acd55770db1e6b8b8fd2913139190a35050565b611a42613211565b6127108167ffffffffffffffff161115611a88576040517f499fddb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003805467ffffffffffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083168117909355604080519190921680825260208201939093527f69c0c8b14820d4f18f9972772394ceb2d4bffb479d5bb9644dc40ff09fe6326b91015b60405180910390a15050565b5f818152600160205260409020546001600160a01b031680611b51576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f816001600160a01b031663ed01bf296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb69190613701565b9050611bc5638b78c6d8195490565b6001600160a01b0316336001600160a01b031614611d50576001600160a01b03811615611ca6576040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382169063fe9fbb8090602401602060405180830381865afa158015611c47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6b919061371c565b611ca1576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d50565b816001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d069190613701565b6001600160a01b0316336001600160a01b031614611d50576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe945c39100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff421660048201525f906001600160a01b0384169063e945c391906024016020604051808303815f875af1158015611db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ddc9190613737565b6040805167ffffffffffffffff80841682524216602082015291925086917f4bfb7649fc0a3d23cb10cd353998b86b71e0d98ac24d5f5e5a603839152e1ce4910160405180910390a25050505050565b611e34613211565b6001600160a01b038116611e74576040517fb6802b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001600160a01b03838116680100000000000000008181027fffffffff0000000000000000000000000000000000000000ffffffffffffffff85161790945560405193909204169182907ffb5b90d81126d568c8bdaa0398ba8a708fd01e26c7891e91fa88e96051985ce3905f90a35050565b5f818152600160205260408120546001600160a01b031680611f39576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b0316631fa35ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f999190613752565b9392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6011328054600382558015611ff15760018160011c14303b10611fe85763f92ee8a95f526004601cfd5b818160ff1b1b91505b506001600160a01b038416612032576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216612072576040517fb6802b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108367ffffffffffffffff1611156120b8576040517f499fddb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c18561322b565b5f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03868116919091179091556003805467ffffffffffffffff86167fffffffff00000000000000000000000000000000000000000000000000000000909116176801000000000000000092851692909202919091179055600480547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167701e133800000000000000000000000000000000000000000179055600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166a4f1a00000000000001518017905580156121ef576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b5050505050565b6121fe613266565b61220783613295565b8260601b60601c92503d5f526352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d885afa511461225c576355299b496001526004601dfd5b837fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a2839055801561198657604051818382375f388383875af4610ee5573d5f823e3d81fd5b5f6122ad61329d565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b612313613211565b61231c5f6132cc565b565b638b78c6d819546001600160a01b0316336001600160a01b03161415801561235157506004546001600160a01b03163314155b15612388576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848152600160205260409020546001600160a01b0316806123d6576040517f477a3e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7c382d0b00000000000000000000000000000000000000000000000000000000815260048101859052602481018490525f906001600160a01b03831690637c382d0b906044016020604051808303815f875af115801561243c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124609190613752565b604080518281526020810188905290810186905290915086907ffb270bf61beeb2f6245d25e705aa540499f6e32b4d19f7081ecf930bc5dfa7b09060600160405180910390a28280156125105750816001600160a01b031663b3f05b976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250e919061371c565b155b1561258e57816001600160a01b0316631de772536040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561254d575f80fd5b505af115801561255f573d5f803e3d5ffd5b50506040518892507f79e19121aa255cb066a0c009cb90dc7e4847878c99372edec7374527541c181491505f90a25b505050505050565b61259e613211565b600480546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03905f90a35050565b61260f613211565b60055467ffffffffffffffff9081169082161015612659576040517ff1d6225400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805467ffffffffffffffff838116740100000000000000000000000000000000000000008181027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff85161790945560408051949093049091168084526020840191909152917f42d49bce8106572e241b8b0002dc47771ebe9bb431d333d0ad305e733c5230ef9101611af7565b6126f0613211565b60045467ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115612752576040517ff1d6225400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805467ffffffffffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083168117909355604080519190921680825260208201939093527ff380cae8d13933e5618f5cc29648b425d32946ed7be3fd40e3963ac8ca90f0439101611af7565b6127cd613211565b620151808167ffffffffffffffff161015612814576040517fb2bc234000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805467ffffffffffffffff838116680100000000000000008181027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff85161790945560408051949093049091168084526020840191909152917fbe0ff6c2b51e7f7f555afbb843d09658966145aa0df927e68d80672b880fb8489101611af7565b61289f613211565b63389a75e1600c52805f526020600c2080544211156128c557636f5e88185f526004601cfd5b5f90556128d1816132cc565b50565b6128dc613211565b8060601b6128f157637448fbae5f526004601cfd5b6128d1816132cc565b6040517ffe9fbb800000000000000000000000000000000000000000000000000000000081523360048201525f906001600160a01b0388169063fe9fbb8090602401602060405180830381865afa158015612957573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061297b919061371c565b6129b1576040517fc114438000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166129f1576040517fdfde867100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f03612a2a576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428367ffffffffffffffff161015612a6e576040517f26e687eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff1611612abb576040517f302e5b7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612ac68484613860565b60045490915067ffffffffffffffff7401000000000000000000000000000000000000000090910481169082161115612b2b576040517f9529f50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff9081169082161015612b75576040517f25c3636700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545f9061271090612b929067ffffffffffffffff1688613880565b612b9c9190613897565b90505f612ba982886138cf565b5f805491925090612bc2906001600160a01b03166131ad565b905060025f8154612bd2906138e2565b91829055505f81815260016020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841617905594508215612e08575f612c3d8a600360089054906101000a90046001600160a01b0316613118565b90505f604051806080016040528060016002811115612c5e57612c5e613961565b81526020018c6001600160a01b03168152602001600360089054906101000a90046001600160a01b03166001600160a01b03168152602001604051806020016040528088815250604051602001612cb89151815260200190565b60408051601f19818403018152918152915251612cd8919060200161398e565b60408051601f19818403018152908290527ffa4ca9b100000000000000000000000000000000000000000000000000000000825291506001600160a01b038e169063fa4ca9b190612d2d908490600401613643565b6020604051808303815f875af1158015612d49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6d919061371c565b612da3576040517fd192263e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8482612dc48d600360089054906101000a90046001600160a01b0316613118565b612dce91906138cf565b14612e05576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b8115612fba575f612e198a83613118565b90505f604051806080016040528060016002811115612e3a57612e3a613961565b81526020018c6001600160a01b03168152602001846001600160a01b03168152602001604051806020016040528087815250604051602001612e7f9151815260200190565b60408051601f19818403018152918152915251612e9f919060200161398e565b60408051601f19818403018152908290527ffa4ca9b100000000000000000000000000000000000000000000000000000000825291506001600160a01b038e169063fa4ca9b190612ef4908490600401613643565b6020604051808303815f875af1158015612f10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f34919061371c565b612f6a576040517fd192263e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8382612f768d86613118565b612f8091906138cf565b14612fb7576040517f9bfa3c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b6005546040517f7d6242310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038d81166024830152336044830152606482018d90528b8116608483015260a4820185905267ffffffffffffffff8a811660c484015289811660e48401526801000000000000000090930490921661010482015290821690637d62423190610124015f604051808303815f87803b158015613069575f80fd5b505af115801561307b573d5f803e3d5ffd5b505060055460408051898152602081018f90526001600160a01b03868116828401526060820188905267ffffffffffffffff8d811660808401528c811660a08401526801000000000000000090940490931660c082015290518d83169450918f16925033917f6ab5cc4de23c7e11ae0b117c2bda0b7e5c4c281706a98f16593e5d68fa511e149181900360e00190a4505050509695505050505050565b5f816014526f70a082310000000000000000000000005f5260208060246010865afa601f3d111660205102905092915050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af18060015f51141661319f57803d873b15171061319f57637939f4245f526004601cfd5b505f60605260405250505050565b5f6131b85f83613309565b92915050565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661320757803d853b151710613207576390b8ec185f526004601cfd5b505f603452505050565b638b78c6d81954331461231c576382b429005f526004601cfd5b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b307f00000000000000000000000000000000000000000000000000000000000000000361231c5761231c61335a565b6128d1613211565b307f00000000000000000000000000000000000000000000000000000000000000001461231c5761231c61335a565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b5f6c5af43d3d93803e602a57fd5bf36021528160145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c84f09050806133505763301164255f526004601cfd5b5f60215292915050565b639f03a0265f526004601cfd5b5f60208284031215613377575f80fd5b5035919050565b6001600160a01b03811681146128d1575f80fd5b5f805f805f608086880312156133a6575f80fd5b8535945060208601356133b88161337e565b935060408601359250606086013567ffffffffffffffff8111156133da575f80fd5b8601601f810188136133ea575f80fd5b803567ffffffffffffffff811115613400575f80fd5b8860208260051b8401011115613414575f80fd5b959894975092955050506020019190565b67ffffffffffffffff811681146128d1575f80fd5b5f805f805f60a0868803121561344e575f80fd5b8535945060208601356134608161337e565b935060408601359250606086013561347781613425565b9150608086013561348781613425565b809150509295509295909350565b5f80602083850312156134a6575f80fd5b823567ffffffffffffffff8111156134bc575f80fd5b8301601f810185136134cc575f80fd5b803567ffffffffffffffff8111156134e2575f80fd5b8560208260071b84010111156134f6575f80fd5b6020919091019590945092505050565b5f60208284031215613516575f80fd5b8135611f998161337e565b5f60208284031215613531575f80fd5b8135611f9981613425565b5f805f806080858703121561354f575f80fd5b843561355a8161337e565b9350602085013561356a8161337e565b9250604085013561357a81613425565b9150606085013561358a8161337e565b939692955090935050565b5f805f604084860312156135a7575f80fd5b83356135b28161337e565b9250602084013567ffffffffffffffff8111156135cd575f80fd5b8401601f810186136135dd575f80fd5b803567ffffffffffffffff8111156135f3575f80fd5b866020828401011115613604575f80fd5b939660209190910195509293505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611f996020830184613615565b80151581146128d1575f80fd5b5f805f8060808587031215613675575f80fd5b843593506020850135925060408501359150606085013561358a81613655565b5f805f805f8060c087890312156136aa575f80fd5b86356136b58161337e565b95506020870135945060408701356136cc8161337e565b93506060870135925060808701356136e381613425565b915060a08701356136f381613425565b809150509295509295509295565b5f60208284031215613711575f80fd5b8151611f998161337e565b5f6020828403121561372c575f80fd5b8151611f9981613655565b5f60208284031215613747575f80fd5b8151611f9981613425565b5f60208284031215613762575f80fd5b5051919050565b6001600160a01b0385168152608060208201525f61378a6080830186613615565b6040830194909452506060015292915050565b5f80604083850312156137ae575f80fd5b825160208401519092506137c18161337e565b809150509250929050565b6001600160a01b0385168152836020820152606060408201528160608201525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613818575f80fd5b8260051b808560808501379190910160800195945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff82811682821603908111156131b8576131b8613833565b80820281158282048414176131b8576131b8613833565b5f826138ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b818103818111156131b8576131b8613833565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361391257613912613833565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613956575f80fd5b8135611f9981613655565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b602081525f8251600381106139ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b806020840152506001600160a01b0360208401511660408301526001600160a01b0360408401511660608301526060830151608080840152613a0f60a0840182613615565b94935050505056fea26469706673582212200b76305dd7cd75cc168198b71f832c4390d0e1adf9f571488f8cade0c92af68364736f6c634300081a0033", + "nonce": "0xfc", "chainId": "0x14a34" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x027bf24c3ae97e89d62dd3548a9dba13292ab5d0536c56d80cdaa66c073e020c", + "hash": "0xf0f4414ceec86fbbf3b3e5f757e1871d8be89bcbd2ce012d2e60b247426a87e7", "transactionType": "CALL", "contractName": "TimeBasedIncentiveManager", "contractAddress": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", "function": "upgradeToAndCall(address,bytes)", "arguments": [ - "0xa0f08989ea0E5677e643CbdA7c772E42B386c9BF", + "0x1924d78136c00b578600631C5c840407f5716DDa", "0x" ], "transaction": { "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", "to": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", - "gas": "0xc3c6", + "gas": "0xc3d5", "value": "0x0", - "input": "0x4f1ef286000000000000000000000000a0f08989ea0e5677e643cbda7c772e42b386c9bf00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x85", + "input": "0x4f1ef2860000000000000000000000001924d78136c00b578600631c5c840407f5716dda00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xfd", "chainId": "0x14a34" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x9b4b99ac55216a3993bc5f5e8ef9a27eb9c9aba8b852aae354f06362bbec013e", + "hash": "0xe786c32edcf05ba0e142f55def26428e463c6150e2becee5a301b60daa86de9d", "transactionType": "CALL", "contractName": "TimeBasedIncentiveManager", "contractAddress": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", "function": "setCampaignImplementation(address)", "arguments": [ - "0xe20e335C56B5bC03AaDfe81529F0FD3136E15F91" + "0x402BA5996CB53E759B5528F126Fa9Df61189757d" ], "transaction": { "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", "to": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", "gas": "0xbed9", "value": "0x0", - "input": "0x39fca7de000000000000000000000000e20e335c56b5bc03aadfe81529f0fd3136e15f91", - "nonce": "0x86", + "input": "0x39fca7de000000000000000000000000402ba5996cb53e759b5528f126fa9df61189757d", + "nonce": "0xfe", "chainId": "0x14a34" }, "additionalContracts": [], @@ -85,109 +85,109 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x1d48ed", + "cumulativeGasUsed": "0x7799b3", "logs": [ { - "address": "0xe20e335c56b5bc03aadfe81529f0fd3136e15f91", + "address": "0x402ba5996cb53e759b5528f126fa9df61189757d", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", - "blockTimestamp": "0x69a20ffa", - "transactionHash": "0x192e14e903c100a913f531c40fccc0a24ec2980a431dd5c41a1f7e7ec4d37680", - "transactionIndex": "0x6", - "logIndex": "0xc", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0x346aff597221598cfc28a4c74e58cb3baaef70d9b927bb927c7cdfd6e26361ff", + "transactionIndex": "0x1e", + "logIndex": "0xf8", "removed": false } ], - "logsBloom": "0x00000000000200000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000040000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x192e14e903c100a913f531c40fccc0a24ec2980a431dd5c41a1f7e7ec4d37680", - "transactionIndex": "0x6", + "transactionHash": "0x346aff597221598cfc28a4c74e58cb3baaef70d9b927bb927c7cdfd6e26361ff", + "transactionIndex": "0x1e", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", - "gasUsed": "0x13af87", + "blockNumber": "0x253192b", + "gasUsed": "0x13e4ce", "effectiveGasPrice": "0x5b8d80", - "blobGasUsed": "0x5bba5", + "blobGasUsed": "0x5ca4e", "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0xe20e335c56b5bc03aadfe81529f0fd3136e15f91", + "contractAddress": "0x402ba5996cb53e759b5528f126fa9df61189757d", "daFootprintGasScalar": "0x8b", "l1BaseFeeScalar": "0x44d", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xa118b", - "l1Fee": "0x9c", - "l1GasPrice": "0x1c", - "l1GasUsed": "0xa8fa" + "l1Fee": "0x53", + "l1GasPrice": "0xa", + "l1GasUsed": "0xaaa6" }, { "status": "0x1", - "cumulativeGasUsed": "0x4ec03d", + "cumulativeGasUsed": "0xa9bc9c", "logs": [ { - "address": "0xa0f08989ea0e5677e643cbda7c772e42b386c9bf", + "address": "0x1924d78136c00b578600631c5c840407f5716dda", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", - "blockTimestamp": "0x69a20ffa", - "transactionHash": "0x76bdc28e958195c66e1a1b82509b135c12500c5c61f77c57cfdbce87601b9c53", - "transactionIndex": "0x7", - "logIndex": "0xd", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0xb4377345697123bf5058b4b4a8b622aeea6a74897221582055744bd76ded5baf", + "transactionIndex": "0x1f", + "logIndex": "0xf9", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000001000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000800000000000000000000000080000000000000000000000000000000000000000000080002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x76bdc28e958195c66e1a1b82509b135c12500c5c61f77c57cfdbce87601b9c53", - "transactionIndex": "0x7", + "transactionHash": "0xb4377345697123bf5058b4b4a8b622aeea6a74897221582055744bd76ded5baf", + "transactionIndex": "0x1f", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", - "gasUsed": "0x317750", + "blockNumber": "0x253192b", + "gasUsed": "0x3222e9", "effectiveGasPrice": "0x5b8d80", - "blobGasUsed": "0xd3fed", + "blobGasUsed": "0xd5972", "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0xa0f08989ea0e5677e643cbda7c772e42b386c9bf", + "contractAddress": "0x1924d78136c00b578600631c5c840407f5716dda", "daFootprintGasScalar": "0x8b", "l1BaseFeeScalar": "0x44d", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xa118b", - "l1Fee": "0x9c", - "l1GasPrice": "0x1c", - "l1GasUsed": "0x1867e" + "l1Fee": "0x53", + "l1GasPrice": "0xa", + "l1GasUsed": "0x1896b" }, { "status": "0x1", - "cumulativeGasUsed": "0x4f4dfb", + "cumulativeGasUsed": "0xaa4a64", "logs": [ { "address": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000a0f08989ea0e5677e643cbda7c772e42b386c9bf" + "0x0000000000000000000000001924d78136c00b578600631c5c840407f5716dda" ], "data": "0x", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", - "blockTimestamp": "0x69a20ffa", - "transactionHash": "0x027bf24c3ae97e89d62dd3548a9dba13292ab5d0536c56d80cdaa66c073e020c", - "transactionIndex": "0x8", - "logIndex": "0xe", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0xf0f4414ceec86fbbf3b3e5f757e1871d8be89bcbd2ce012d2e60b247426a87e7", + "transactionIndex": "0x20", + "logIndex": "0xfa", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000100000000000000000000000000000000000000000000400000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000", + "logsBloom": "0x00000000000000000000000000000100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100004000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "type": "0x2", - "transactionHash": "0x027bf24c3ae97e89d62dd3548a9dba13292ab5d0536c56d80cdaa66c073e020c", - "transactionIndex": "0x8", + "transactionHash": "0xf0f4414ceec86fbbf3b3e5f757e1871d8be89bcbd2ce012d2e60b247426a87e7", + "transactionIndex": "0x20", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", - "gasUsed": "0x8dbe", + "blockNumber": "0x253192b", + "gasUsed": "0x8dc8", "effectiveGasPrice": "0x5b8d80", "blobGasUsed": "0x364c", "from": "0xbaddd20aa8675653086783a0a73b38bf4100b5a1", @@ -197,37 +197,37 @@ "l1BaseFeeScalar": "0x44d", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xa118b", - "l1Fee": "0x9c", - "l1GasPrice": "0x1c", + "l1Fee": "0x53", + "l1GasPrice": "0xa", "l1GasUsed": "0x640" }, { "status": "0x1", - "cumulativeGasUsed": "0x4fd828", + "cumulativeGasUsed": "0xaad491", "logs": [ { "address": "0x81d1bb513197f4e23e9676b4f3aabc7de89b54d0", "topics": [ "0xecb67f84d4ac8c3c40a86a0fe2cc78920f164c7acd55770db1e6b8b8fd291313", - "0x00000000000000000000000070424aedd020bb8c87f62823f7c3f3ce48cc91f6", - "0x000000000000000000000000e20e335c56b5bc03aadfe81529f0fd3136e15f91" + "0x000000000000000000000000e20e335c56b5bc03aadfe81529f0fd3136e15f91", + "0x000000000000000000000000402ba5996cb53e759b5528f126fa9df61189757d" ], "data": "0x", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", - "blockTimestamp": "0x69a20ffa", - "transactionHash": "0x9b4b99ac55216a3993bc5f5e8ef9a27eb9c9aba8b852aae354f06362bbec013e", - "transactionIndex": "0x9", - "logIndex": "0xf", + "blockNumber": "0x253192b", + "blockTimestamp": "0x69b99136", + "transactionHash": "0xe786c32edcf05ba0e142f55def26428e463c6150e2becee5a301b60daa86de9d", + "transactionIndex": "0x21", + "logIndex": "0xfb", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000004000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000040200000000000000000000000000000000100000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000008000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000020000000400000000000000000000000000000000000000000000000000000004000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000100000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000008000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x9b4b99ac55216a3993bc5f5e8ef9a27eb9c9aba8b852aae354f06362bbec013e", - "transactionIndex": "0x9", + "transactionHash": "0xe786c32edcf05ba0e142f55def26428e463c6150e2becee5a301b60daa86de9d", + "transactionIndex": "0x21", "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockNumber": "0x247588d", + "blockNumber": "0x253192b", "gasUsed": "0x8a2d", "effectiveGasPrice": "0x5b8d80", "blobGasUsed": "0x364c", @@ -238,15 +238,15 @@ "l1BaseFeeScalar": "0x44d", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xa118b", - "l1Fee": "0x9c", - "l1GasPrice": "0x1c", + "l1Fee": "0x53", + "l1GasPrice": "0xa", "l1GasUsed": "0x640" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1772228635481, + "timestamp": 1773769048319, "chain": 84532, - "commit": "bf6d2968" + "commit": "57dd4169" } \ No newline at end of file diff --git a/packages/evm/contracts/archive/TimeBasedIncentiveManagerV1.sol b/packages/evm/contracts/archive/TimeBasedIncentives/TimeBasedIncentiveManagerV1.sol similarity index 100% rename from packages/evm/contracts/archive/TimeBasedIncentiveManagerV1.sol rename to packages/evm/contracts/archive/TimeBasedIncentives/TimeBasedIncentiveManagerV1.sol diff --git a/packages/evm/contracts/archive/TimeBasedIncentives/TimeBasedIncentiveManagerV2.sol b/packages/evm/contracts/archive/TimeBasedIncentives/TimeBasedIncentiveManagerV2.sol new file mode 100644 index 00000000..aa16c5ff --- /dev/null +++ b/packages/evm/contracts/archive/TimeBasedIncentives/TimeBasedIncentiveManagerV2.sol @@ -0,0 +1,603 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.24; + +import {Ownable} from "@solady/auth/Ownable.sol"; +import {Initializable} from "@solady/utils/Initializable.sol"; +import {LibClone} from "@solady/utils/LibClone.sol"; +import {SafeTransferLib} from "@solady/utils/SafeTransferLib.sol"; +import {UUPSUpgradeable} from "@solady/utils/UUPSUpgradeable.sol"; + +import {ABudget} from "contracts/budgets/ABudget.sol"; +import {AIncentive} from "contracts/incentives/AIncentive.sol"; +import {TimeBasedIncentiveCampaign} from "contracts/timebased/TimeBasedIncentiveCampaign.sol"; + +/// @title TimeBasedIncentiveManager V2 +/// @notice Factory and orchestration contract for time-based incentive campaigns (Version 2) +/// @dev Archived for upgrade safety validation. See TimeBasedIncentiveManager.sol for current version. +/// @custom:oz-upgrades-from contracts/archive/TimeBasedIncentives/TimeBasedIncentiveManagerV1.sol:TimeBasedIncentiveManagerV1 +contract TimeBasedIncentiveManagerV2 is Initializable, UUPSUpgradeable, Ownable { + using SafeTransferLib for address; + + /// @notice Parameters for a single root update in a batch + struct RootUpdate { + uint256 campaignId; + bytes32 root; + uint256 totalCommitted; + bool finalize; + } + + /// @notice Maximum number of root updates in a single batch + uint256 public constant MAX_BATCH_SIZE = 50; + + /// @notice The implementation contract used for cloning campaigns + address public campaignImplementation; + + /// @notice Mapping of campaign ID to campaign contract address + mapping(uint256 => address) public campaigns; + + /// @notice Total number of campaigns created + uint256 public campaignCount; + + /// @notice Protocol fee in basis points (1000 = 10%) + uint64 public protocolFee; + + /// @notice Address that receives protocol fees + address public protocolFeeReceiver; + + /// @notice Address authorized to publish merkle roots + address public operator; + + /// @notice Maximum campaign duration (default 365 days) + /// @dev Helps catch mistakes like using milliseconds instead of seconds + uint64 public maxCampaignDuration; + + /// @notice Minimum campaign duration (default 1 day) + /// @dev Ensures engine has time to compute and publish at least one merkle root + uint64 public minCampaignDuration; + + /// @notice Duration after campaign endTime during which claims are valid (default 60 days) + uint64 public claimExpiryDuration; + + /// @notice Allocated padding for storage packing + uint32 private __padding; + + /// @notice Allocated gap space for future variables + uint256[50] private __gap; + + /// @notice Emitted when a new campaign is created + event CampaignCreated( + uint256 campaignId, + bytes32 configHash, + address campaign, + address indexed creator, + address indexed budget, + address indexed rewardToken, + uint256 totalRewards, + uint64 startTime, + uint64 endTime, + uint64 claimExpiryDuration + ); + + /// @notice Emitted when the protocol fee is updated + event ProtocolFeeUpdated(uint64 oldFee, uint64 newFee); + + /// @notice Emitted when the protocol fee receiver is updated + event ProtocolFeeReceiverUpdated(address indexed oldReceiver, address indexed newReceiver); + + /// @notice Emitted when the campaign implementation is updated + event CampaignImplementationUpdated(address indexed oldImplementation, address indexed newImplementation); + + /// @notice Emitted when the operator is updated + event OperatorUpdated(address indexed oldOperator, address indexed newOperator); + + /// @notice Emitted when a campaign's merkle root is updated + event RootUpdated(uint256 indexed campaignId, bytes32 oldRoot, bytes32 newRoot, uint256 totalCommitted); + + /// @notice Emitted when a user claims rewards from a campaign + event Claimed(uint256 indexed campaignId, address indexed user, uint256 amount, uint256 cumulativeAmount); + + /// @notice Emitted when a campaign is cancelled by protocol admin + event CampaignCancelled(uint256 indexed campaignId, uint64 oldEndTime, uint64 newEndTime); + + /// @notice Emitted when undistributed funds are withdrawn + event Withdrawn(uint256 indexed campaignId, uint256 amount, address indexed destination); + + /// @notice Emitted when max campaign duration is updated + event MaxCampaignDurationUpdated(uint64 oldDuration, uint64 newDuration); + + /// @notice Emitted when min campaign duration is updated + event MinCampaignDurationUpdated(uint64 oldDuration, uint64 newDuration); + + /// @notice Emitted when claim expiry duration is updated + event ClaimExpiryDurationUpdated(uint64 oldDuration, uint64 newDuration); + + /// @notice Emitted when a campaign is finalized + event CampaignFinalized(uint256 indexed campaignId); + + /// @notice Error when caller is not authorized on the budget + error NotAuthorizedOnBudget(); + + /// @notice Error when caller is not the campaign creator + error NotCampaignCreator(); + + /// @notice Error when campaign is not budget-funded + error NotBudgetFunded(); + + /// @notice Error when campaign has not ended + error CampaignNotEnded(); + + /// @notice Error when start time is in the past + error StartTimeInPast(); + + /// @notice Error when end time is not after start time + error EndTimeBeforeStart(); + + /// @notice Error when campaign duration exceeds maximum (365 days) + error DurationTooLong(); + + /// @notice Error when campaign duration is less than minimum (1 day) + error DurationTooShort(); + + /// @notice Error when min duration exceeds max duration + error InvalidDurationRange(); + + /// @notice Error when total amount is zero + error ZeroAmount(); + + /// @notice Error when fee receiver is zero address + error ZeroFeeReceiver(); + + /// @notice Error when reward token is zero address + error InvalidRewardToken(); + + /// @notice Error when protocol fee exceeds 100% + error ProtocolFeeTooHigh(); + + /// @notice Error when campaign implementation is zero address + error InvalidImplementation(); + + /// @notice Error when budget disburse fails + error DisburseFailed(); + + /// @notice Error when caller is not owner or operator + error NotAuthorized(); + + /// @notice Error when campaign does not exist + error InvalidCampaign(); + + /// @notice Error when claim expiry duration is below the minimum (1 day) + error ClaimExpiryDurationTooShort(); + + /// @notice Error when batch update array exceeds MAX_BATCH_SIZE + error BatchTooLarge(); + + /// @notice Error when batch update array is empty + error EmptyBatch(); + + /// @notice Error when token transfer amount doesn't match (fee-on-transfer tokens) + error FeeOnTransferNotSupported(); + + /// @notice Error when campaign has not been finalized + error CampaignNotFinalized(); + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + /// @notice Initialize the TimeBasedIncentiveManager + /// @param owner_ The owner of the contract + /// @param campaignImpl_ The TimeBasedIncentiveCampaign implementation for cloning + /// @param protocolFee_ Initial protocol fee in basis points + /// @param protocolFeeReceiver_ Address to receive protocol fees + function initialize(address owner_, address campaignImpl_, uint64 protocolFee_, address protocolFeeReceiver_) + external + initializer + { + if (campaignImpl_ == address(0)) revert InvalidImplementation(); + if (protocolFeeReceiver_ == address(0)) revert ZeroFeeReceiver(); + if (protocolFee_ > 10000) revert ProtocolFeeTooHigh(); + + _initializeOwner(owner_); + campaignImplementation = campaignImpl_; + protocolFee = protocolFee_; + protocolFeeReceiver = protocolFeeReceiver_; + maxCampaignDuration = 365 days; + minCampaignDuration = 1 days; + claimExpiryDuration = 60 days; + } + + /// @notice Create a new time-based incentive campaign funded by a budget + /// @param budget The budget to fund the campaign from + /// @param configHash Hash of the off-chain campaign configuration + /// @param rewardToken The ERC20 token for rewards + /// @param totalAmount Total reward amount (before protocol fee deduction) + /// @param startTime Campaign start timestamp + /// @param endTime Campaign end timestamp + /// @return campaignId The ID of the created campaign + function createCampaign( + ABudget budget, + bytes32 configHash, + address rewardToken, + uint256 totalAmount, + uint64 startTime, + uint64 endTime + ) external returns (uint256 campaignId) { + // Validate caller is authorized on budget + if (!budget.isAuthorized(msg.sender)) revert NotAuthorizedOnBudget(); + + // Validate parameters + if (rewardToken == address(0)) revert InvalidRewardToken(); + if (totalAmount == 0) revert ZeroAmount(); + if (startTime < block.timestamp) revert StartTimeInPast(); + if (endTime <= startTime) revert EndTimeBeforeStart(); + uint64 duration = endTime - startTime; + if (duration > maxCampaignDuration) revert DurationTooLong(); + if (duration < minCampaignDuration) revert DurationTooShort(); + + // Calculate protocol fee + uint256 feeAmount = (totalAmount * protocolFee) / 10000; + uint256 netAmount = totalAmount - feeAmount; + + // Clone the campaign + address campaign = LibClone.clone(campaignImplementation); + + campaignId = ++campaignCount; + campaigns[campaignId] = campaign; + + // Disburse fee to protocol fee receiver (if fee > 0) + if (feeAmount > 0) { + uint256 feeReceiverBefore = SafeTransferLib.balanceOf(rewardToken, protocolFeeReceiver); + bytes memory feeTransfer = abi.encode( + ABudget.Transfer({ + assetType: ABudget.AssetType.ERC20, + asset: rewardToken, + target: protocolFeeReceiver, + data: abi.encode(ABudget.FungiblePayload({amount: feeAmount})) + }) + ); + if (!budget.disburse(feeTransfer)) revert DisburseFailed(); + if (SafeTransferLib.balanceOf(rewardToken, protocolFeeReceiver) - feeReceiverBefore != feeAmount) { + revert FeeOnTransferNotSupported(); + } + } + + // Disburse net rewards to campaign (skip if 0, e.g., 100% fee) + if (netAmount > 0) { + uint256 campaignBefore = SafeTransferLib.balanceOf(rewardToken, campaign); + bytes memory rewardTransfer = abi.encode( + ABudget.Transfer({ + assetType: ABudget.AssetType.ERC20, + asset: rewardToken, + target: campaign, + data: abi.encode(ABudget.FungiblePayload({amount: netAmount})) + }) + ); + if (!budget.disburse(rewardTransfer)) revert DisburseFailed(); + if (SafeTransferLib.balanceOf(rewardToken, campaign) - campaignBefore != netAmount) { + revert FeeOnTransferNotSupported(); + } + } + + // Initialize the campaign + TimeBasedIncentiveCampaign(campaign).initialize( + address(this), + address(budget), + msg.sender, + configHash, + rewardToken, + netAmount, + startTime, + endTime, + claimExpiryDuration + ); + + emit CampaignCreated( + campaignId, + configHash, + campaign, + msg.sender, + address(budget), + rewardToken, + netAmount, + startTime, + endTime, + claimExpiryDuration + ); + } + + /// @notice Create a new time-based incentive campaign with direct token transfer + /// @param configHash Hash of the off-chain campaign configuration + /// @param rewardToken The ERC20 token for rewards + /// @param totalAmount Total reward amount (before protocol fee deduction) + /// @param startTime Campaign start timestamp + /// @param endTime Campaign end timestamp + /// @return campaignId The ID of the created campaign + /// @dev Fee-on-transfer and rebasing tokens are not supported + /// @dev Caller must approve this contract to transfer tokens before calling + function createCampaignDirect( + bytes32 configHash, + address rewardToken, + uint256 totalAmount, + uint64 startTime, + uint64 endTime + ) external returns (uint256 campaignId) { + // Validate parameters + if (rewardToken == address(0)) revert InvalidRewardToken(); + if (totalAmount == 0) revert ZeroAmount(); + if (startTime < block.timestamp) revert StartTimeInPast(); + if (endTime <= startTime) revert EndTimeBeforeStart(); + uint64 duration = endTime - startTime; + if (duration > maxCampaignDuration) revert DurationTooLong(); + if (duration < minCampaignDuration) revert DurationTooShort(); + + // Calculate protocol fee + uint256 feeAmount = (totalAmount * protocolFee) / 10000; + uint256 netAmount = totalAmount - feeAmount; + + // Pull tokens from caller and verify full amount received + uint256 balanceBefore = SafeTransferLib.balanceOf(rewardToken, address(this)); + rewardToken.safeTransferFrom(msg.sender, address(this), totalAmount); + if (SafeTransferLib.balanceOf(rewardToken, address(this)) - balanceBefore != totalAmount) { + revert FeeOnTransferNotSupported(); + } + + // Clone the campaign + address campaign = LibClone.clone(campaignImplementation); + + campaignId = ++campaignCount; + campaigns[campaignId] = campaign; + + // Transfer fee to protocol fee receiver (if fee > 0) + if (feeAmount > 0) { + uint256 feeReceiverBefore = SafeTransferLib.balanceOf(rewardToken, protocolFeeReceiver); + rewardToken.safeTransfer(protocolFeeReceiver, feeAmount); + if (SafeTransferLib.balanceOf(rewardToken, protocolFeeReceiver) - feeReceiverBefore != feeAmount) { + revert FeeOnTransferNotSupported(); + } + } + + // Transfer net rewards to campaign (skip if 0, e.g., 100% fee) + if (netAmount > 0) { + uint256 campaignBefore = SafeTransferLib.balanceOf(rewardToken, campaign); + rewardToken.safeTransfer(campaign, netAmount); + if (SafeTransferLib.balanceOf(rewardToken, campaign) - campaignBefore != netAmount) { + revert FeeOnTransferNotSupported(); + } + } + + // Initialize the campaign with budget = address(0) for direct-funded campaigns + TimeBasedIncentiveCampaign(campaign).initialize( + address(this), + address(0), + msg.sender, + configHash, + rewardToken, + netAmount, + startTime, + endTime, + claimExpiryDuration + ); + + emit CampaignCreated( + campaignId, + configHash, + campaign, + msg.sender, + address(0), + rewardToken, + netAmount, + startTime, + endTime, + claimExpiryDuration + ); + } + + /// @notice Get a campaign contract by ID + /// @param campaignId The campaign ID + /// @return The campaign contract address + function getCampaign(uint256 campaignId) external view returns (address) { + return campaigns[campaignId]; + } + + /// @notice Set the protocol fee + /// @param fee_ New protocol fee in basis points (max 10000 = 100%) + function setProtocolFee(uint64 fee_) external onlyOwner { + if (fee_ > 10000) revert ProtocolFeeTooHigh(); + uint64 oldFee = protocolFee; + protocolFee = fee_; + emit ProtocolFeeUpdated(oldFee, fee_); + } + + /// @notice Set the protocol fee receiver address + /// @param receiver_ New address to receive protocol fees + function setProtocolFeeReceiver(address receiver_) external onlyOwner { + if (receiver_ == address(0)) revert ZeroFeeReceiver(); + address oldReceiver = protocolFeeReceiver; + protocolFeeReceiver = receiver_; + emit ProtocolFeeReceiverUpdated(oldReceiver, receiver_); + } + + /// @notice Set the operator address (engine hot wallet for merkle root publishing) + /// @param operator_ New operator address (can be zero to disable) + function setOperator(address operator_) external onlyOwner { + address oldOperator = operator; + operator = operator_; + emit OperatorUpdated(oldOperator, operator_); + } + + /// @notice Set the maximum campaign duration + /// @param duration_ New max duration in seconds + function setMaxCampaignDuration(uint64 duration_) external onlyOwner { + if (duration_ < minCampaignDuration) revert InvalidDurationRange(); + uint64 oldDuration = maxCampaignDuration; + maxCampaignDuration = duration_; + emit MaxCampaignDurationUpdated(oldDuration, duration_); + } + + /// @notice Set the minimum campaign duration + /// @param duration_ New min duration in seconds + function setMinCampaignDuration(uint64 duration_) external onlyOwner { + if (duration_ > maxCampaignDuration) revert InvalidDurationRange(); + uint64 oldDuration = minCampaignDuration; + minCampaignDuration = duration_; + emit MinCampaignDurationUpdated(oldDuration, duration_); + } + + /// @notice Set the claim expiry duration (time after campaign end that claims remain valid) + /// @param duration_ New claim expiry duration in seconds (minimum 1 day) + function setClaimExpiryDuration(uint64 duration_) external onlyOwner { + if (duration_ < 1 days) revert ClaimExpiryDurationTooShort(); + uint64 oldDuration = claimExpiryDuration; + claimExpiryDuration = duration_; + emit ClaimExpiryDurationUpdated(oldDuration, duration_); + } + + /// @notice Update the merkle root for a campaign + /// @dev Roots can still be updated after finalization for emergency corrections + /// @param campaignId The campaign ID + /// @param root The new merkle root + /// @param totalCommitted Total amount committed to users in the merkle tree + /// @param finalize If true, marks the campaign as finalized (unlocks withdrawal) + function updateRoot(uint256 campaignId, bytes32 root, uint256 totalCommitted, bool finalize) external { + if (msg.sender != owner() && msg.sender != operator) revert NotAuthorized(); + + address campaign = campaigns[campaignId]; + if (campaign == address(0)) revert InvalidCampaign(); + + bytes32 oldRoot = TimeBasedIncentiveCampaign(campaign).setMerkleRoot(root, totalCommitted); + + emit RootUpdated(campaignId, oldRoot, root, totalCommitted); + + if (finalize && !TimeBasedIncentiveCampaign(campaign).finalized()) { + TimeBasedIncentiveCampaign(campaign).setFinalized(); + emit CampaignFinalized(campaignId); + } + } + + /// @notice Update merkle roots for multiple campaigns in a single transaction + /// @param updates Array of RootUpdate structs containing campaignId, root, and totalCommitted + /// @dev If any entry has finalize=true but the campaign hasn't ended, the entire batch reverts. + /// Ensure finalize=false for campaigns where block.timestamp < endTime. + function updateRootsBatch(RootUpdate[] calldata updates) external { + if (msg.sender != owner() && msg.sender != operator) revert NotAuthorized(); + if (updates.length == 0) revert EmptyBatch(); + if (updates.length > MAX_BATCH_SIZE) revert BatchTooLarge(); + + for (uint256 i; i < updates.length; ++i) { + address campaign = campaigns[updates[i].campaignId]; + if (campaign == address(0)) revert InvalidCampaign(); + + bytes32 oldRoot = + TimeBasedIncentiveCampaign(campaign).setMerkleRoot(updates[i].root, updates[i].totalCommitted); + + emit RootUpdated(updates[i].campaignId, oldRoot, updates[i].root, updates[i].totalCommitted); + + if (updates[i].finalize && !TimeBasedIncentiveCampaign(campaign).finalized()) { + TimeBasedIncentiveCampaign(campaign).setFinalized(); + emit CampaignFinalized(updates[i].campaignId); + } + } + } + + /// @notice Set the campaign implementation address (for upgrades) + /// @param campaignImpl_ New campaign implementation for cloning + function setCampaignImplementation(address campaignImpl_) external onlyOwner { + if (campaignImpl_ == address(0)) revert InvalidImplementation(); + address oldImplementation = campaignImplementation; + campaignImplementation = campaignImpl_; + emit CampaignImplementationUpdated(oldImplementation, campaignImpl_); + } + + /// @notice Claim rewards from a campaign using a merkle proof + /// @param campaignId The campaign ID to claim from + /// @param user The user to claim rewards for + /// @param cumulativeAmount The cumulative amount the user is entitled to + /// @param proof The merkle proof validating the claim + function claim(uint256 campaignId, address user, uint256 cumulativeAmount, bytes32[] calldata proof) external { + address campaign = campaigns[campaignId]; + if (campaign == address(0)) revert InvalidCampaign(); + + uint256 amount = TimeBasedIncentiveCampaign(campaign).processClaim(user, cumulativeAmount, proof); + + emit Claimed(campaignId, user, amount, cumulativeAmount); + } + + /// @notice Cancel a campaign (emergency use - sets endTime to now) + /// @param campaignId The campaign ID to cancel + /// @dev Callable by owner, budget-authorized users (budget-funded), or creator (direct-funded) + function cancelCampaign(uint256 campaignId) external { + address campaign = campaigns[campaignId]; + if (campaign == address(0)) revert InvalidCampaign(); + + TimeBasedIncentiveCampaign c = TimeBasedIncentiveCampaign(campaign); + address payable budgetAddr = payable(c.budget()); + + if (msg.sender != owner()) { + if (budgetAddr != address(0)) { + if (!ABudget(budgetAddr).isAuthorized(msg.sender)) revert NotAuthorized(); + } else { + if (msg.sender != c.creator()) revert NotAuthorized(); + } + } + + uint64 oldEndTime = c.setEndTime(uint64(block.timestamp)); + + emit CampaignCancelled(campaignId, oldEndTime, uint64(block.timestamp)); + } + + /// @notice Withdraw undistributed funds from a campaign + /// @param campaignId The campaign ID to withdraw from + /// @dev Budget-funded: callable by anyone authorized on the budget + /// @dev Direct-funded: callable by the campaign creator + function withdraw(uint256 campaignId) external { + address campaign = campaigns[campaignId]; + if (campaign == address(0)) revert InvalidCampaign(); + + TimeBasedIncentiveCampaign c = TimeBasedIncentiveCampaign(campaign); + address payable budgetAddr = payable(c.budget()); + + if (budgetAddr != address(0)) { + if (!ABudget(budgetAddr).isAuthorized(msg.sender)) revert NotAuthorized(); + } else { + if (msg.sender != c.creator()) revert NotAuthorized(); + } + if (block.timestamp <= c.endTime()) revert CampaignNotEnded(); + if (!c.finalized()) revert CampaignNotFinalized(); + + if (budgetAddr != address(0)) { + // Budget-funded: route through budget clawback for accounting + uint256 withdrawable = c.getWithdrawable(); + if (withdrawable == 0) revert ZeroAmount(); + + bytes memory clawbackData = abi.encode(withdrawable); + (uint256 clawbackAmount,) = ABudget(budgetAddr).clawbackFromTarget(campaign, clawbackData, 0, 0); + + emit Withdrawn(campaignId, clawbackAmount, budgetAddr); + } else { + // Direct-funded: transfer to creator + uint256 amount = c.withdrawTo(c.creator()); + + emit Withdrawn(campaignId, amount, c.creator()); + } + } + + /// @notice Get the withdrawable amount for a campaign + /// @param campaignId The campaign ID + /// @return The amount that can be withdrawn (0 if not finalized or campaign hasn't ended) + function getWithdrawable(uint256 campaignId) external view returns (uint256) { + address campaign = campaigns[campaignId]; + if (campaign == address(0)) revert InvalidCampaign(); + return TimeBasedIncentiveCampaign(campaign).getWithdrawable(); + } + + /// @notice Authorize an upgrade to a new implementation + /// @param newImplementation The address of the new implementation + function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + + /// @notice Get the version of the contract + /// @return The version string + function version() public pure virtual returns (string memory) { + return "2.0.0"; + } +} diff --git a/packages/evm/contracts/timebased/TimeBasedIncentiveManager.sol b/packages/evm/contracts/timebased/TimeBasedIncentiveManager.sol index 72f3e255..23ecf94d 100644 --- a/packages/evm/contracts/timebased/TimeBasedIncentiveManager.sol +++ b/packages/evm/contracts/timebased/TimeBasedIncentiveManager.sol @@ -14,7 +14,7 @@ import {TimeBasedIncentiveCampaign} from "contracts/timebased/TimeBasedIncentive /// @title TimeBasedIncentiveManager /// @notice Factory and orchestration contract for time-based incentive campaigns /// @dev Deploys TimeBasedIncentiveCampaign clones and manages protocol fees. UUPS upgradeable. -/// @custom:oz-upgrades-from contracts/archive/TimeBasedIncentiveManagerV1.sol:TimeBasedIncentiveManagerV1 +/// @custom:oz-upgrades-from contracts/archive/TimeBasedIncentives/TimeBasedIncentiveManagerV2.sol:TimeBasedIncentiveManagerV2 contract TimeBasedIncentiveManager is Initializable, UUPSUpgradeable, Ownable { using SafeTransferLib for address; @@ -598,6 +598,6 @@ contract TimeBasedIncentiveManager is Initializable, UUPSUpgradeable, Ownable { /// @notice Get the version of the contract /// @return The version string function version() public pure virtual returns (string memory) { - return "2.0.0"; + return "2.1.0"; } } diff --git a/packages/evm/deploys/84532.json b/packages/evm/deploys/84532.json index 4bab306d..8f80965f 100644 --- a/packages/evm/deploys/84532.json +++ b/packages/evm/deploys/84532.json @@ -25,7 +25,7 @@ "SignerValidatorV2": "0xFF1DaA985E5FD471CFc6218EF702AE4DcBeB3d35", "SimpleAllowList": "0x274cB0E382d2408C0517B3e83B5263954512d69D", "SimpleDenyList": "0x26D4E00813e1A4F93C3DC91B6161CCbF24E57e07", - "TimeBasedIncentiveCampaign": "0xe20e335C56B5bC03AaDfe81529F0FD3136E15F91", + "TimeBasedIncentiveCampaign": "0x402BA5996CB53E759B5528F126Fa9Df61189757d", "TimeBasedIncentiveManager": "0x81d1Bb513197F4e23E9676B4f3aaBC7de89b54D0", "TransparentBudget": "0x778182f5df6Ab006F2E54898cfF315160208538F" -} \ No newline at end of file +} diff --git a/packages/evm/script/solidity/ValidateTimeBasedUpgrade.s.sol b/packages/evm/script/solidity/ValidateTimeBasedUpgrade.s.sol index 31440853..9290e673 100644 --- a/packages/evm/script/solidity/ValidateTimeBasedUpgrade.s.sol +++ b/packages/evm/script/solidity/ValidateTimeBasedUpgrade.s.sol @@ -7,7 +7,7 @@ import {Options} from "openzeppelin-foundry-upgrades/Options.sol"; /** * @title ValidateTimeBasedUpgrade - * @notice Validate TimeBasedIncentiveManager upgrade safety against the V1 archive + * @notice Validate TimeBasedIncentiveManager upgrade safety against the V2 archive * @dev Run: forge script script/solidity/ValidateTimeBasedUpgrade.s.sol * * Only validates the Manager (UUPS proxy). The Campaign is a plain contract @@ -25,10 +25,10 @@ contract ValidateTimeBasedUpgrade is Script { // These are false positives - Solady's patterns are secure but different from OZ opts.unsafeAllow = "constructor,state-variable-immutable"; - // Validate V2 against V1 storage layout - opts.referenceContract = "TimeBasedIncentiveManagerV1.sol:TimeBasedIncentiveManagerV1"; + // Validate V2.1 against V2 storage layout + opts.referenceContract = "TimeBasedIncentiveManagerV2.sol:TimeBasedIncentiveManagerV2"; - console.log("Validating TimeBasedIncentiveManager upgrade from V1..."); + console.log("Validating TimeBasedIncentiveManager upgrade from V2..."); Upgrades.validateUpgrade("TimeBasedIncentiveManager.sol:TimeBasedIncentiveManager", opts); console.log("[OK] TimeBasedIncentiveManager upgrade is safe!\n"); diff --git a/packages/evm/test/timebased/TimeBasedIncentiveManager.t.sol b/packages/evm/test/timebased/TimeBasedIncentiveManager.t.sol index 597a7ffa..422d3b56 100644 --- a/packages/evm/test/timebased/TimeBasedIncentiveManager.t.sol +++ b/packages/evm/test/timebased/TimeBasedIncentiveManager.t.sol @@ -3533,9 +3533,8 @@ contract TimeBasedIncentiveManagerTest is Test { // Set up merkle tree with two users bytes32 leaf1 = _makeLeaf(CLAIMER, address(rewardToken), 3 ether); bytes32 leaf2 = _makeLeaf(CLAIMER2, address(rewardToken), 2 ether); - bytes32 root = leaf1 < leaf2 - ? keccak256(abi.encodePacked(leaf1, leaf2)) - : keccak256(abi.encodePacked(leaf2, leaf1)); + bytes32 root = + leaf1 < leaf2 ? keccak256(abi.encodePacked(leaf1, leaf2)) : keccak256(abi.encodePacked(leaf2, leaf1)); bytes32[] memory proof1 = new bytes32[](1); proof1[0] = leaf2; bytes32[] memory proof2 = new bytes32[](1); @@ -3589,11 +3588,7 @@ contract TimeBasedIncentiveManagerTest is Test { vm.prank(CREATOR); manager.withdraw(campaignId); - assertEq( - rewardToken.balanceOf(CREATOR), - creatorBalanceBefore + 2 ether, - "Creator should receive excess funds" - ); + assertEq(rewardToken.balanceOf(CREATOR), creatorBalanceBefore + 2 ether, "Creator should receive excess funds"); } }