diff --git a/broadcast/DeployKernel.s.sol/11155111/run-1718039360.json b/broadcast/DeployKernel.s.sol/11155111/run-1718039360.json new file mode 100644 index 0000000..f8065b4 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/11155111/run-1718039360.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0x952bfd07525fd91a68340bf2e3cac2f78b7ae26109c0bdfe787953c56e51c6e8", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xdc4cfd181a721a047ee48a55393b25258b27ecb0", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6678bb", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346101fd57601f61539d38819003918201601f191683019291906001600160401b038411838510176102025781602092849260409687528339810103126101fd57516001600160a01b03811681036101fd57306080524660a05260a0825161006981610218565b600681526005602082016512d95c9b995b60d21b81526020865161008c81610218565b838152019264302e332e3160d81b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b82526004815261011081610218565b5190516001600160581b0319918282169190601581106101e8575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b031982541617905551906151699283610234843960805183614296015260a051836142b9015260c0518361432b015260e051836143510152518261427501525181818161050301528181610827015281816109dd01528181610d74015281816110d901528181611241015281816112a1015281816117c901528181611938015281816121d70152612a880152f35b8391925060150360031b1b161680388061012b565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176102025760405256fe6080604052600436101561001d575b366129485761001b612917565b005b60003560e01c8063112d3a7d146101ed57806312af322c146101e8578063150b7a02146101e35780631626ba7e146101de57806319822f7c146101d95780631f1b92e3146101d45780633659cfe6146101cf57806357b3a5f4146101ca5780636e6fa0c6146101c5578063721e67f4146101c057806384b0196e146101bb5780638dd7712f146101b657806390ef8862146101b15780639198bdf5146101ac5780639517e29f146101a75780639cfd7cff146101a2578063a65d69d41461019d578063a71763a814610198578063adb610a314610193578063b8afe17d1461018e578063bc197c8114610189578063c3e5897814610184578063d03c79141461017f578063d691c9641461017a578063e6f3d50a14610175578063e9ae5c5314610170578063f1f7f0f91461016b578063f23a6e61146101665763f2dc691d0361000e57611ac5565b611a6b565b611a33565b611907565b61174e565b61166a565b61161d565b611541565b61143a565b6113d0565b61139c565b611270565b61122b565b6111d4565b6110a8565b610fa1565b610e50565b610d3f565b610c9d565b610bf1565b610b94565b610ae6565b61099d565b6107e5565b6104c5565b610465565b61040b565b6102b9565b610281565b6001600160a01b0381160361020357565b600080fd5b3590610213826101f2565b565b9181601f84011215610203578235916001600160401b038311610203576020838186019501011161020357565b6060600319820112610203576004359160243561025e816101f2565b91604435906001600160401b0382116102035761027d91600401610215565b9091565b3461020357602061029d61029436610242565b92919091611cc5565b6040519015158152f35b6001600160581b031981160361020357565b34610203576080366003190112610203576004356102d6816102a7565b6024356102e2816101f2565b6001600160401b039060443582811161020357610303903690600401610215565b90926064359081116102035761031d903690600401610215565b9390926001600160581b031961035d816103566103496000805160206151498339815191525460581b90565b6001600160581b03191690565b1615611d8f565b8616156103f9576001600160f81b03198616600160f81b81141590816103ea575b506103d8578561039061001b97612af1565b6103b061039b610f70565b60018152926001600160a01b03166020840152565b600080516020615149833981519152805463ffffffff60a81b1916600160a81b179055612b4c565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861037e565b604051631a0a9b9f60e21b8152600490fd5b34610203576080366003190112610203576104276004356101f2565b6104326024356101f2565b6064356001600160401b03811161020357610451903690600401610215565b5050604051630a85bd0160e11b8152602090f35b34610203576040366003190112610203576024356001600160401b038111610203576104a361049a6020923690600401610215565b90600435611eaa565b6040516001600160e01b03199091168152f35b90816101209103126102035790565b606036600319011261020357600480356001600160401b038111610203576104f090369083016104b6565b60243590604435906001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036107b05780849261053a6020830135612eb8565b6001600160f81b031990911615959093909186610786575b908461055e939261309d565b9561057061056b84611c53565b611fd7565b9415948580610744575b61073357602001516001600160a01b0316918216908115610722576001926105af6105ce926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036106815782610623575b5050610612576105fc9250805b610600575b506040519081529081906020820190565b0390f35b3490349034903490335af150386105eb565b604051631a0a9b9f60e21b81528390fd5b61067a92506106769161065861065261064c61064161066f95611c8c565b936060810190612003565b90611af4565b90611c27565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b38806105d9565b829192916106ef575b506106de5761064c8160606106a0930190612003565b638dd7712f60e01b916001600160e01b0319916106bc91611c27565b16036106cd576105fc9250806105e6565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61071c915061066f61070361067692611c8c565b6106586106526107166060880188612003565b90611ae3565b3861068a565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff61077e6107756000805160206151498339815191525463ffffffff9060c81c1690565b63ffffffff1690565b91161061057a565b93509061055e916107a66000805160206151498339815191525460581b90565b9490919250610552565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff8216820361020357565b359063ffffffff8216820361020357565b6020366003190112610203576107f96107c1565b61081b6108156000805160206151498339815191525460581b90565b60581c90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610993575b156109885760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561091957600091610959575b50156109475760405163d68f602560e01b815291600083806108aa363433600485016120c6565b038183865af19283156109195760009361091e575b506108c990613244565b803b1561020357604051630b9dfbed60e11b81529160009183918290849082906108f69060048301612102565b03925af180156109195761090657005b8061091361001b92610eca565b80610c4a565b611e9e565b6108c9919350610940903d806000833e6109388183610f4f565b810190612068565b92906108bf565b6040516348f5c3ed60e01b8152600490fd5b61097b915060203d602011610981575b6109738183610f4f565b810190612035565b38610883565b503d610969565b505061001b90613244565b5030331415610850565b6020366003190112610203576004356109b5816101f2565b6109d16108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610aca575b15610abf5760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561091957600091610aa0575b50156109475760405163d68f602560e01b81529160008380610a60363433600485016120c6565b038183865af192831561091957600093610a7f575b506108c990612113565b6108c9919350610a99903d806000833e6109388183610f4f565b9290610a75565b610ab9915060203d602011610981576109738183610f4f565b38610a39565b505061001b90612113565b5030331415610a06565b6001600160e01b031981160361020357565b34610203576020366003190112610203576105fc610b28600435610b0981610ad4565b600060408051610b1881610ee2565b8281528260208201520152611dd1565b60405190610b3582610ee2565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b3461020357604036600319011261020357602060ff610be5600435610bb8816102a7565b610bcd60243591610bc883610ad4565b611c8c565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b34610203576020366003190112610203576020610c27600435610c13816101f2565b6000604051610c2181610efd565b52612aca565b60405190610c3482610efd565b546001600160a01b031690819052604051908152f35b600091031261020357565b60005b838110610c685750506000910152565b8181015183820152602001610c58565b90602091610c9181518092818552858086019101610c55565b601f01601f1916010190565b3461020357600036600319011261020357610cec610cb9613324565b90604051928392600f60f81b8452610cde60209360e0602087015260e0860190610c78565b908482036040860152610c78565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610d2857505050500390f35b835185528695509381019392810192600101610d19565b6040366003190112610203576004356001600160401b03811161020357610d6a9036906004016104b6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081163303610947576060906001610dc6610db96024356000526000602052604060002090565b546001600160a01b031690565b91821614159283610e20575b610ded610de6826060610df4940190612003565b8091611b02565b903061346b565b509215610e055761001b9250613492565b505015610e0e57005b60405163f21e646b60e01b8152600490fd5b9150610df4610ded610de6610e46610e3e610de66060880188612003565b9034876133e9565b9492505050610dd2565b3461020357600036600319011261020357602063ffffffff6000805160206151498339815191525460c81c16604051908152f35b9181601f84011215610203578235916001600160401b038311610203576020808501948460051b01011161020357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610edd57604052565b610eb4565b606081019081106001600160401b03821117610edd57604052565b602081019081106001600160401b03821117610edd57604052565b604081019081106001600160401b03821117610edd57604052565b61012081019081106001600160401b03821117610edd57604052565b90601f801991011681019081106001600160401b03821117610edd57604052565b6040519061021382610f18565b6040519061021382610f33565b6001600160401b038111610edd5760051b60200190565b6080366003190112610203576001600160401b0360043581811161020357610fcd903690600401610e84565b906024358381116102035736602382011215610203578060040135610ff181610f8a565b916040916110026040519485610f4f565b8084526020906024602086019160061b8401019236841161020357602401905b83821061106a57505050505060443584811161020357611046903690600401610e84565b916064359586116102035761106261001b963690600401610e84565b9590946121a8565b848236031261020357828591825161108181610f18565b61108a856107d4565b815282850135611099816101f2565b83820152815201910190611022565b6110b136610242565b6110cd6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806111ca575b156111be5760405163ecd0596160e01b815260048082015291169290602081602481875afa9081156109195760009161119f575b50156109475760405163d68f602560e01b8152936000858061115d363433600485016120c6565b038183885af19485156109195760009561117e575b506108c9939495612364565b6108c9949550611198903d806000833e6109388183610f4f565b9493611172565b6111b8915060203d602011610981576109738183610f4f565b38611136565b50509161001b93612364565b5030331415611102565b34610203576000366003190112610203576105fc6040516111f481610f18565b60168152756b65726e656c2e616476616e6365642e76302e332e3160501b6020820152604051918291602083526020830190610c78565b34610203576000366003190112610203576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b61127936610242565b6112956108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611392575b156113865760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561091957600091611367575b50156109475760405163d68f602560e01b81529360008580611325363433600485016120c6565b038183885af194851561091957600095611346575b506108c9939495612673565b6108c9949550611360903d806000833e6109388183610f4f565b949361133a565b611380915060203d602011610981576109738183610f4f565b386112fe565b50509161001b93612673565b50303314156112ca565b3461020357600036600319011261020357602063ffffffff6000805160206151498339815191525460a81c16604051908152f35b346102035760203660031901126102035760406114006004356113f2816102a7565b6113fa61280f565b50611c53565b602082519161140e83610f18565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b346102035760a0366003190112610203576114566004356101f2565b6114616024356101f2565b6001600160401b0360443581811161020357611481903690600401610e84565b50506064358181116102035761149b903690600401610e84565b5050608435908111610203576114b5903690600401610215565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611523575050505090565b83516001600160501b03191685529381019392810192600101611515565b34610203576020806003193601126102035760043561155f81610ad4565b611584604091606083805161157381610ee2565b600081526000878201520152611e09565b9080519161159183610ee2565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106115fb576105fc8888886115ed818e0382610f4f565b8183015251918291826114c9565b845460501b6001600160501b03191689529788019793830193908301906115d4565b3461020357602036600319011261020357602061029d600435612828565b9060406003198301126102035760043591602435906001600160401b0382116102035761027d91600401610215565b6116733661163b565b916001600160a01b0361168533612aca565b541690811561173c57606060019460018414159485611725575b6116a99293613b55565b92611715575b5050906040519060208083016020845284518091526040840191602060408360051b8701019601926000905b8382106116e85786880387f35b90919293948380611704839a603f198b82030186528951610c78565b9997019594939190910191016116db565b61171e91613492565b38806116af565b6116a99250611735363487613365565b925061169f565b60405163710c949760e01b8152600490fd5b6060366003190112610203576004803590611768826102a7565b6001600160401b0391602435838111610203576117889036908401610215565b93604435908111610203576117a09036908501610215565b906117bd6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806118fd575b156118ed57169560405163ecd0596160e01b81526020818061181b8a8201906004602083019252565b03818b5afa908115610919576000916118ce575b50156118bd5760405163d68f602560e01b815293600085806118553634338d85016120c6565b0381838c5af19485156109195760009561189e575b5061187594956128ea565b823b15610203576108f69260009283604051809681958294630b9dfbed60e11b84528301612102565b61187595506118b7903d806000833e6109388183610f4f565b9461186a565b6040516348f5c3ed60e01b81528690fd5b6118e7915060203d602011610981576109738183610f4f565b3861182f565b50509261001b95929194506128ea565b50303314156117f2565b6119103661163b565b61192c6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611a29575b15611a1d5760405163ecd0596160e01b815260048082015291169190602081602481865afa908115610919576000916119fe575b50156109475760405163d68f602560e01b815292600084806119bc363433600485016120c6565b038183875af1938415610919576000946119dd575b506108c99293946128ff565b6108c99394506119f7903d806000833e6109388183610f4f565b93926119d1565b611a17915060203d602011610981576109738183610f4f565b38611995565b50509061001b926128ff565b5030331415611961565b346102035760003660031901126102035760206000805160206151498339815191525460581b604051906001600160581b0319168152f35b346102035760a036600319011261020357611a876004356101f2565b611a926024356101f2565b6084356001600160401b03811161020357611ab1903690600401610215565b505060405163f23a6e6160e01b8152602090f35b3461020357602036600319011261020357602061029d60043561290a565b906008116102035760040190600490565b906004116102035790600490565b909291928360041161020357831161020357600401916003190190565b906018116102035760040190601490565b906014116102035790601490565b906020116102035790602090565b909291928360011161020357831161020357600101916000190190565b909291928360141161020357831161020357601401916013190190565b906016116102035790601690565b906016116102035760020190601490565b909291928360161161020357831161020357601601916015190190565b906002116102035790600290565b906009116102035760010190600890565b909291928360091161020357831161020357600901916008190190565b90602c116102035760180190601490565b90939293848311610203578411610203578101920390565b6001600160e01b03199035818116939260048110611c4457505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611d1457506001600160a01b0392611d0e9250611cfe915060581b600160581b600160f81b0316600160f81b17611c53565b5460201c6001600160a01b031690565b16151590565b60028103611d4757506001600160a01b0392611d0e9250611d3b9150610db9908416612aca565b6001600160a01b031690565b600303611d8757611d68611d63610652600193611d7695611af4565b611dd1565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611d9657565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126102035751611e5681610ad4565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611e56949260609260018060a01b0316825260208201528160408201520191611e59565b6040513d6000823e3d90fd5b91611eb491612d3d565b91906001600160f81b031980831615611fb6575b6001600160a01b039081611ee1611d3b611cfe87611c53565b16156103f9578316600160f81b03611f6657906020939291611f05611f2396612e6f565b604051637aa8f17760e11b8152968795869485933360048601611e7a565b039260581c165afa90811561091957600091611f3d575090565b611e56915060203d602011611f5f575b611f578183610f4f565b810190611e41565b503d611f4d565b509060081b92600160f11b611f94611f87611f8087611e09565b5460f01b90565b6001600160f01b03191690565b16611fa457611e56933390612dbe565b604051635b71057960e01b8152600490fd5b9150611fd16000805160206151498339815191525460581b90565b91611ec8565b90604051611fe481610f18565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561020357018035906001600160401b0382116102035760200191813603831361020357565b90816020910312610203575180151581036102035790565b6001600160401b038111610edd57601f01601f191660200190565b602081830312610203578051906001600160401b038211610203570181601f8201121561020357805161209a8161204d565b926120a86040519485610f4f565b8184526020828401011161020357611e569160208085019101610c55565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b906020611e56928181520190610c78565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b9060405161217481610ee2565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946121cb6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612318575b156123085760405163ecd0596160e01b8152600480820152911695906020816024818a5afa908115610919576000916122e9575b50156109475760405163d68f602560e01b8152966000888061225b363433600485016120c6565b0381838b5af1978815610919576000986122c8575b5061227c96979861353d565b803b1561020357604051630b9dfbed60e11b81529160009183918290849082906122a99060048301612102565b03925af18015610919576122bb575b50565b8061091361021392610eca565b61227c9798506122e2903d806000833e6109388183610f4f565b9796612270565b612302915060203d602011610981576109738183610f4f565b38612234565b505091939092946102139661353d565b5030331415612200565b916020611e56938181520191611e59565b6bffffffffffffffffffffffff19903581811693926014811061235557505050565b60140360031b82901b16169150565b6001810361244057506106526102139361242c61243a93600160581b600160f81b039060581b16600160f81b17946123fb6123d4611d3b6123ce6123c86123c16000805160206151498339815191525463ffffffff9060a81c1690565b9786611b30565b90612333565b60601c90565b6123eb6123df610f70565b63ffffffff9096168652565b6001600160a01b03166020850152565b6014810135810192603482013582019160548101350193603460148401359301916034601483013592019089612b4c565b603460148201359101611af4565b90613851565b6002810361249c57509161248d61021393612472611d3b6123ce6123c860148801358801966034890135890198611b30565b928391601482013591603401906001600160a01b03166137c3565b603460148301359201906136f6565b9091906003810361251c5750612517611d3b612507610213958461250260186123ce97013582016123ce60388401358401996124db6106528787611af4565b906124fc611d3b6124ec8989611b1f565b6018880135976038019691612333565b916135ab565b611b1f565b6018860135956038019491612333565b6136f6565b9091906004810361255d57506001600160a01b031691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b6005810361259b57506001600160a01b031691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b6006036125d7576001600160a01b031691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b604051631092ef5760e11b8152600490fd5b604051906125f682610efd565b60008252565b35906020811061260a575090565b6000199060200360031b1b1690565b91906040519061262882610efd565b819360008352116102035760206000910152565b9291926126488261204d565b916126566040519384610f4f565b829481845281830111610203578281602093846000960137010152565b9291906001840361269d576122b8935060581b600160581b600160f81b0316600160f81b17613a09565b600284036126b8576122b893506001600160a01b03166139bf565b909190600384036126e757506122b8925080806126db6106526126e19486611af4565b93611b02565b91613965565b91926004810361276d57506122b89261273a916127136000805160206151498339815191525460581b90565b61271f611cfe82611c53565b6001600160a01b03868116911614612740575b50369161263c565b906138b6565b61274c61276791611c53565b8054640100000000600160c01b031916640100000000179055565b38612732565b600581036127f057506000805160206151498339815191525460581b5b61279d6127978386611b3e565b906125fc565b906001600160f81b03198116600160f91b146127c5575b50506122b89261273a91369161263c565b60081b6001600160e01b031916146127de5738806127b4565b6040516313002bdd60e31b8152600490fd5b6006036125d7576000805160206151498339815191525460581b61278a565b6040519061281c82610f18565b60006020838281520152565b61283c818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816128e0575b816128d5575b816128c6575b506128bc57169081141590816128b2575b506128ab576001600160e01b0319166128a5576001600160501b0319166128a057600190565b600090565b50600090565b5050600090565b905015153861287a565b5050505050600090565b607f60f91b1415905038612869565b838114159150612863565b801515915061285d565b916128fa91610213959493613a09565b613d5a565b906122b89291613b55565b600711156128a057600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6129656129606000356001600160e01b031916611dd1565b612167565b80516001600160a01b039190829061297e908216611d3b565b168061299657604051631cd4b64760e21b8152600490fd5b606090600181141580612ac0575b15612a7c57505080516129c3906001600160a01b031636903490613365565b915b60408201516001600160f81b031990811680612a3c5750506020820151612a0d93906001906129fc906001600160a01b0316613db7565b9590945b516001600160a01b031690565b92831603612a2c575b5050612a2457602081519101fd5b602081519101f35b612a3591613492565b3880612a16565b03612a6a576020820151612a0d9390600190612a62906001600160a01b03163690613444565b959094612a00565b604051632d6a6bb760e01b8152600490fd5b92809193036129c557337f00000000000000000000000000000000000000000000000000000000000000008216146129c5576040516348f5c3ed60e01b8152600490fd5b50838114156129a4565b6001600160a01b031660009081526000805160206151298339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88916000805160206151498339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612b67612b5d84611c53565b5463ffffffff1690565b9360008051602061514983398151915294612b8a865463ffffffff9060a81c1690565b63ffffffff809281808416911614612cff575b50506020820180516001600160a01b0397919291612bca91891615612cf6575b5460a81c63ffffffff1690565b81612bdc610775865163ffffffff1690565b91161490811591612ccc575b50612cba57612a00612c3792612bfd87611c53565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612ca9575b5050506001600160f81b03198116600160f81b8103612c8d575060581c1691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b909350600160f91b141590506103d8576102139160081b613ef6565b612cb2926136f6565b388080612c43565b604051633ab3447f60e11b8152600490fd5b9050612cda612b5d87611c53565b90612cec610775855163ffffffff1690565b9116101538612be8565b60018452612bbd565b600080516020615149833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612b9d565b9182358060f81c80600014612d835780600114612d7657600214612d6057600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611e569694835260018060a01b0316602083015260408201528160608201520191611e59565b909192612ddd94612dd191858585614156565b9492939196909661424a565b509065ffffffffffff8091164210918215612e63575b5050612e5057612e31612e07602096612e6f565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612d93565b03916001600160a01b03165afa90811561091957600091611f3d575090565b506001600160e01b031995945050505050565b16421190503880612df3565b611e569060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612eb081610ee2565b519020614273565b90818060081b9160ff839260f01c16600214612ed057565b6001600160d81b031983169150565b9080601f8301121561020357816020611e569335910161263c565b91906101208382031261020357612f0f610f7d565b92612f1981610208565b8452602081013560208501526040810135916001600160401b03928381116102035781612f47918401612edf565b604086015260608201358381116102035781612f64918401612edf565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116102035781612f9f918401612edf565b60e0860152610100928383013590811161020357612fbd9201612edf565b90830152565b90816020910312610203575190565b80516001600160a01b03168252611e56919061305061302061300e61012060208501516020870152604085015190806040880152860190610c78565b60608401518582036060870152610c78565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610c78565b916101008092015191818403910152610c78565b939291613081906040928652606060208701526060860190612fd2565b930152565b929190613081602091604086526040860190612fd2565b9290926000926130ad3682612efa565b9161010091828101916130c08383612003565b90949093600160f81b936001600160f81b03199384168514613209575b50505087160361316a575050604051639700320360e01b8152936020928592839160009183916131109160048401613086565b039260581c6001600160a01b03165af190811561091957611e5692600092613139575b50614771565b61315c91925060203d602011613163575b6131548183610f4f565b810190612fc3565b9038613133565b503d61314a565b909460081b93909291600160f01b613187611f87611f8088611e09565b166131f75760006131a86131a26020966131d299858a614571565b94614771565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501613064565b03926001600160a01b03165af190811561091957611e56926000926131395750614771565b6040516314b9743f60e01b8152600490fd5b9091955061322593985061321e929450612003565b9088614387565b969192909361323885899599369161263c565b908601523880806130dd565b60008051602061514983398151915280549163ffffffff92600a848260a81c16019084821161330e5782851691851682116132fc5760c81c84161015612cba57600080516020615149833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106132ca5750565b600080516020615149833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b60405161333081610f18565b600681526512d95c9b995b60d21b60208201529060405161335081610f18565b6005815264302e332e3160d81b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156109195780926133d557505090565b611e5692503d8091833e6109388183610f4f565b6000928361341095936040519687958694859363d68f602560e01b85523360048601611e7a565b03926001600160a01b03165af19081156109195760009161342f575090565b611e5691503d806000833e6109388183610f4f565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b6001600160a01b0316803b1561020357604051630b9dfbed60e11b8152602060048201529160009183918290849082906134d0906024830190610c78565b03925af18015610919576134e15750565b61021390610eca565b634e487b7160e01b600052603260045260246000fd5b80511561350d5760200190565b6134ea565b805182101561350d5760209160051b010190565b9082101561350d5761027d9160051b810190612003565b96959192939694909460005b86811061355b57505050505050509050565b8061359c8a60019360051b850135613572816102a7565b61358884613580818c613512565b51938c613526565b90613594868b8b613526565b949093612b4c565b01613549565b901561350d5790565b6001600160a01b039391929190848316156136ee575b6135ca90611dd1565b946135f66135e96135db83856135a2565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806136cf575050908061361892861693611b4c565b823b156102035761364392600092836040518096819582946306d61fe760e41b845260048401612322565b03925af19485156109195761367f61369f93600193610213986136bc575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806109136136c992610eca565b38613661565b925092505094919403612a6a57600161369f9161367f61021396613663565b8492506135c1565b6001600160a01b031691821580156137b9575b6137b45760405163d60b347f60e01b8152306004820152602081602481875afa90811561091957600091613795575b5015613760576001600160f81b0319806137556135db84866135a2565b161461376057505050565b8061376a92611b4c565b823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b6137ae915060203d602011610981576109738183610f4f565b38613738565b505050565b5060018314613709565b919392916001600160a01b039081841615613848575b1660008181526000805160206151298339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613844576134d09394836040518096819582946306d61fe760e41b8452602060048501526024840191611e59565b8280fd5b600193506137d9565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a9160609161388382610bcd83611c8c565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a825195613916876139086020820193638a91b0e360e01b8552602060248401526044830190610c78565b03601f198101895288610f4f565b6000918291828587519a6139298c610efd565b828c525193f1943d908161395c575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b60009150613938565b6139756139a89194939294611dd1565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161273a9136919061263c565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b0390811660008181526000805160206151298339815191526020526040902080546001600160a01b0319811690915590911693926122b89261273a91369161263c565b90929192613a3b613a296000805160206151498339815191525460581b90565b6001600160581b031980851691161490565b6127de57613a4b611cfe83611c53565b93613a6c613a5884611c53565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b8103613aa557506122b89291613a9391369161263c565b9060581c6001600160a01b03166138b6565b600160f91b141590506103d8576102139160081b61480c565b604051613aca81610f18565b600181528060005b602080821015613aed57906060602092828501015201613ad2565b50505090565b90613afd82610f8a565b613b0a6040519182610f4f565b8281528092613b1b601f1991610f8a565b019060005b828110613b2c57505050565b806060602080938501015201613b20565b906040611e5692600081528160208201520190610c78565b613b69818060081b918160301b9160501b90565b5090936001600160f81b031993600160f81b939092508416838103613bf4575050613b9b908035019060208201913590565b929093168015600014613bb3575050611e5691614a8a565b03613bc157611e56916149cd565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b94959490919080613c96575090613c0a91614921565b93909294613c16613abe565b971680613c3b575050613c2893614972565b613c3183613500565b526122b882613500565b03613bc157613c4993614949565b613c5284613500565b52610213577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613c91613c8484613500565b5160405191829182613b3d565b0390a1565b919593918203613bc157613ccd90613cc7613caf613abe565b9780613cc16123ce6123c88387611b30565b93611b69565b9161346b565b613cd987959295613500565b5216908103613d17575015613cea57565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613c91613c8484613500565b613bc1576102135760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b6001600160a01b03169081158015613dad575b6137b457821561350d576001600160f81b03198135811614613d8e57505050565b82600111610203576122b89261273a913691600019019060010161263c565b5060018214613d6d565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613e0b57505050565b6000526020600020918201915b828110613e2457505050565b818155600101613e18565b6001600160501b03199035818116939260168110613e4c57505050565b60160360031b82901b16169150565b805482101561350d5760005260206000200190600090565b805468010000000000000000811015610edd57613e9591600182018155613e5b565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ee757505050565b60020360031b82901b16169150565b90803501906020808301923560fe8111801561414e575b61413c57600180613f1d85611e09565b0154614123575b60001982019260005b848110614046575061400b9594614019949093613fef9350613fe89250613f88613fd9613fc0611f87613fba613fb487878e613faf8e613f80611d3b6123ce6123c8613f7a898989613526565b90611b94565b9a8b91611e09565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613526565b90611bc2565b90613eca565b613fc988611e09565b9060f01c61ffff19825416179055565b6001600160a01b031696613526565b8091611ba5565b6040519586939092906001600160e01b03191660208501613eb4565b03601f198101845283610f4f565b803b15610203576040516306d61fe760e41b81529160009183918290849082906122a99060048301612102565b61409d611d3b611d3b6123ce6123c8613f7a868a8e613faf8f6140698e91611e09565b0161409761408a61408461407e888888613526565b90611b86565b90613e2f565b6001600160501b03191690565b90613e73565b906140ac613fe882878b613526565b906140cd60409161400b83519485928d63ffffffff60e01b168a8501613eb4565b833b156102035760009384926140f792519586809481936306d61fe760e41b835260048301612102565b03925af1918215610919578492614110575b5001613f2d565b8061091361411d92610eca565b38614109565b614137600161413186611e09565b01613df7565b613f24565b60405163b62d956d60e01b8152600490fd5b508015613f0d565b84846141d9926141c497969498956040519161417183610f33565b6141d360009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614b23565b60ff806141f26141ec6135db87866135a2565b60f81c90565b16036142385761422161420c8461421c9561423194611b4c565b9490955163ffffffff60e01b1690565b611e09565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c1692831560011461426b575b5060d01c92565b925038614264565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614300575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206142e1565b9192909261439361280f565b9061439e9085611b30565b6143a791612333565b60601c602082018190526000805160206151498339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906144189261263c565b80519060200120913661442c90888861263c565b805190602001203661443f908b8d61263c565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906144cb61010082610f4f565b5190206144d790614273565b607489013589018d8b82013591016144ee92614d75565b9a6144f99488612b4c565b6145038183614f12565b61450c91611af4565b61451591611c27565b61451e91613851565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061454b57505050565b60080360031b82901b16169150565b604090611e56939281528160208201520190612fd2565b60009493916001868161458385611e09565b016000835b6145d0575b5050505060ff806145a46141ec6135db87896135a2565b1603614238576101006145c86145c18561422196611e5698611b4c565b369161263c565b910152611e09565b8197969754811015614769576146016145f96145ec8385613e5b565b90549060031b1c60501b90565b908160501c90565b98909761461d6146176141ec6135db85856135a2565b60ff1690565b808403614738575090818161465661464a61464461463e8461467398611bd0565b9061452e565b60c01c90565b6001600160401b031690565b600901916146686145c1848484611be1565b6101008b0152611c0f565b989098975b600160f01b161561468d575b50830183614588565b99866146ca929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d840161455a565b0393165af1958615610919578896614719575b505084166146ff5750506146f5859493928592614771565b9a91929350614684565b51631f24c1fb60e11b81529081018c815281906020010390fd5b614730929650803d10613163576131548183610f4f565b9338806146dd565b909991989083111561475657604051630760bdcf60e11b8152600490fd5b61475e6125e9565b610100880152614678565b96959661458d565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146147a257505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614804575b83811680156147fd575b8781109088180280881897146147f5575b508181119082180218921716171790565b9550386147e4565b50806147d3565b9550856147c9565b9190803501916020906020840193359061482581611e09565b9260019060018501906001825401850361490f57906000835b6148a1575b505050506148909161488b82613fef6102139798614868600161413161400b98611e09565b875461487f9060101c6001600160a01b0316611d3b565b94600019810191613526565b6138b6565b5080546001600160b01b0319169055565b815481101561490a5790838261490061400b8c6148f28a6148d7868e6148cf6145f96145ec8c9f9e8e613e5b565b969050613526565b6040519586939092906001600160e01b0319168c8501613eb4565b6001600160a01b03166138b6565b500190919261483e565b614843565b60405163013dcc8d60e31b8152600490fd5b908060141161020357813560601c928160341161020357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af1156149a1573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b919081101561350d5760051b81013590605e1981360301821215610203570190565b9190916149d983613af3565b9260005b8181106149e957505050565b806149f760019284866149ab565b8035614a02816101f2565b614a2360208093604093614a1885830183612003565b939092013590614949565b614a2d858b613512565b5215614a3c575b5050016149dd565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb791614a80614a6b858b613512565b51838051948594888652850152830190610c78565b0390a13880614a34565b919091614a9683613af3565b9260005b818110614aa657505050565b80614adc6020614ab960019486886149ab565b8035614ac4816101f2565b614ad16040830183612003565b939092013590614972565b614ae68288613512565b52614af18187613512565b5001614a9a565b9092608092611e569594835260018060a01b0316602083015260408201528160608201520190610c78565b9190606083016001936001614b4261421c845163ffffffff60e01b1690565b01936000936000958054965b878110614b6057505050505050505050565b80614b726145f96145ec8c9486613e5b565b6001600160a01b031660a0880190815260808801959091614b9b906001600160f01b0319168752565b614bb5614bae6141ec6135db8a856135a2565b60ff168952565b614bc3614617895160ff1690565b808403614d3d5750868181614be861464a61464461463e614c3c9c9d614c0f98611bd0565b60208c018181528c60c0614c046145c160099586018789611be1565b910152510191611c0f565b959095965b51600160f11b90614c2e906001600160f01b031916611f87565b166001600160f01b03191690565b15614c49575b5001614b4e565b51909150614c5f906001600160a01b0316611d3b565b8651614c8390614c76906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614cc86101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b8601614af8565b03915afa938415610919578b94614d1e575b50506001600160a01b038316614d035750860180518b9392614cfb91614771565b905238614c42565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614d35929450803d10613163576131548183610f4f565b913880614cda565b839196945010600014614d5c57604051630760bdcf60e11b8152600490fd5b614c3c8b93614d6b3688612619565b60c08a0152614c14565b6000805160206151498339815191525460009493929060581b916001600160f81b03198316600160f81b8103614e385750604051637aa8f17760e11b8152936020938593909284928392614dcd923060048601611e7a565b039160581c6001600160a01b03165afa90811561091957600091614e19575b505b6001600160e01b0319166374eca2c160e11b01614e0757565b6040516362467c7760e11b8152600490fd5b614e32915060203d602011611f5f57611f578183610f4f565b38614dec565b919550929190600160f91b036103d857602091614e5b9160081b95843088614156565b60405163392dffaf60e01b81529297929586949385938493614e8e93909230906001600160e01b03191660048701612d93565b03916001600160a01b03165afa90811561091957600091614eb0575b50614dee565b614ec9915060203d602011611f5f57611f578183610f4f565b38614eaa565b15614ed657565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614f1f6106528383611af4565b906004831015614f2e57505050565b602c83106150be57614f49611d3b6123ce6123c88685611b1f565b602c8201358201602c604c820191013591604c840135840194614f83614f756135e96135db87876135a2565b6001600160f81b0319161590565b8061502d575b94614fca61251795611d3b95614fcf956102139b956123ce9a614fdf575b614fba611d3b6123ce6123c88a8a611bfe565b916001600160a01b0316906135ab565b611bfe565b602c86013595604c019491612333565b615028606c8701358701615022602c604c830192013580615009611d3b6123ce6123c88488611b30565b9361501d856001600160a01b038a166150cc565b611b69565b916136f6565b614fa7565b5091939092956040519163ecd0596160e01b83526020838061505760048201906002602083019252565b03816001600160a01b0389165afa92831561091957610213986123ce9761251797611d3b97614fcf97614fca9560009161509f575b50959a50959b5095509550955050614f89565b6150b8915060203d602011610981576109738183610f4f565b3861508c565b505060046102139114614ecf565b61021391906001600160a01b03908183161561511f575b1660005260008051602061512983398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b600192506150e356fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x46", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x244a50f193b593c6083a1b45b7a32ff092076f421612d413f435b89660b4bf29", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x8134d811e37c7c3c88e6fba5322808c6871d58a5", + "function": null, + "arguments": [ + "0xDC4CfD181a721A047EE48A55393b25258B27ECB0" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x600f4", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61046c38819003918201601f19168301916001600160401b03831184841017607857808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103dd908161008f823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000dc4cfd181a721a047ee48a55393b25258b27ecb0", + "nonce": "0x47", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa7c6b6633c4b26acb79ec12954dac829e9b4c4d2169964f2623c2c814f27ff71", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x8134d811E37C7c3C88e6fBA5322808c6871D58A5", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000008134d811e37c7c3c88e6fba5322808c6871d58a50000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x48", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xac75b9", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x952bfd07525fd91a68340bf2e3cac2f78b7ae26109c0bdfe787953c56e51c6e8", + "transactionIndex": "0x42", + "blockHash": "0xe3a090ce8595f1d8a8b4614da7e626d4539fd884046c2478eda58fe45d47bc20", + "blockNumber": "0x58db6a", + "gasUsed": "0x461625", + "effectiveGasPrice": "0x74362dc8a", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xdc4cfd181a721a047ee48a55393b25258b27ecb0" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb090ec", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x244a50f193b593c6083a1b45b7a32ff092076f421612d413f435b89660b4bf29", + "transactionIndex": "0x43", + "blockHash": "0xe3a090ce8595f1d8a8b4614da7e626d4539fd884046c2478eda58fe45d47bc20", + "blockNumber": "0x58db6a", + "gasUsed": "0x41b33", + "effectiveGasPrice": "0x74362dc8a", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x8134d811e37c7c3c88e6fba5322808c6871d58a5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb145ff", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa7c6b6633c4b26acb79ec12954dac829e9b4c4d2169964f2623c2c814f27ff71", + "transactionIndex": "0x44", + "blockHash": "0xe3a090ce8595f1d8a8b4614da7e626d4539fd884046c2478eda58fe45d47bc20", + "blockNumber": "0x58db6a", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x74362dc8a", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1718039360, + "chain": 11155111, + "commit": "8f7fd99" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/11155111/run-1718039506.json b/broadcast/DeployKernel.s.sol/11155111/run-1718039506.json new file mode 100644 index 0000000..12e71c0 --- /dev/null +++ b/broadcast/DeployKernel.s.sol/11155111/run-1718039506.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": "0x5476e320d4a6d399f6b2efc50a95cba1ee44d36cd5973d7b4866eb4bbc2ac1fd", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xca6e20d0ba4cc864f6160dc165a0a477581b594b", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x650349", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006101403461020457601f61574438819003918201601f191683019291906001600160401b0384118385101761020957816020928492604096875283398101031261020457516001600160a01b038116810361020457306080524660a05260a082516100698161021f565b600681526005602082016512d95c9b995b60d21b81526020865161008c8161021f565b838152019264302e332e3160d81b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b8252600481526101108161021f565b5190516001600160581b0319918282169190601581106101ef575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190615509928361023b8439608051836142d7015260a051836142fa015260c0518361436c015260e05183614392015251826142b60152518181816103af015281816106d30152818161088901528181610c22015281816110020152818161132901528181611491015281816114f101528181611a1901528181611b5f0152818161259d0152612e9d0152f35b8391925060150360031b1b161680388061012b565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176102095760405256fe6080604052600436101561001d575b36612d585761001b612d27565b005b60003560e01c8063112d3a7d146101fd578063150b7a02146101f85780631626ba7e146101f357806319822f7c146101ee5780631f1b92e3146101e95780633659cfe6146101e45780633c3b752b146101df57806352141cd9146101da57806357b3a5f4146101d55780636e6fa0c6146101d0578063721e67f4146101cb57806384b0196e146101c65780638dd7712f146101c157806390ef8862146101bc5780639198bdf5146101b75780639517e29f146101b25780639cfd7cff146101ad578063a65d69d4146101a8578063a71763a8146101a3578063adb610a31461019e578063b8afe17d14610199578063bc197c8114610194578063c3e589781461018f578063d03c79141461018a578063d691c96414610185578063e6f3d50a14610180578063e9ae5c531461017b578063f1f7f0f914610176578063f23a6e61146101715763f2dc691d0361000e57611cec565b611c92565b611c5a565b611b2e565b61199e565b6118ba565b61186d565b611791565b61168a565b611620565b6115ec565b6114c0565b61147b565b611424565b6112f8565b6111f1565b6110d0565b610fcc565b610f2a565b610e7e565b610e21565b610d73565b610b99565b6109c2565b610849565b610691565b610371565b610311565b6102b7565b610291565b6001600160a01b0381160361021357565b600080fd5b359061022382610202565b565b9181601f84011215610213578235916001600160401b038311610213576020838186019501011161021357565b6060600319820112610213576004359160243561026e81610202565b91604435906001600160401b0382116102135761028d91600401610225565b9091565b346102135760206102ad6102a436610252565b92919091611eec565b6040519015158152f35b34610213576080366003190112610213576102d3600435610202565b6102de602435610202565b6064356001600160401b038111610213576102fd903690600401610225565b5050604051630a85bd0160e11b8152602090f35b34610213576040366003190112610213576024356001600160401b0381116102135761034f6103466020923690600401610225565b9060043561209c565b6040516001600160e01b03199091168152f35b90816101209103126102135790565b606036600319011261021357600480356001600160401b0381116102135761039c9036908301610362565b60243590604435906001600160a01b03907f00000000000000000000000000000000000000000000000000000000000000008216330361065c578084926103e66020830135613093565b6001600160f81b031990911615959093909186610632575b908461040a9392613278565b9561041c61041784611e7a565b6121db565b94159485806105f0575b6105df57602001516001600160a01b03169182169081156105ce5760019261045b61047a926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361052d57826104cf575b50506104be576104a89250805b6104ac575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610497565b604051631a0a9b9f60e21b81528390fd5b6105269250610522916105046104fe6104f86104ed61051b95611eb3565b936060810190612207565b90611d1b565b90611e4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610485565b8291929161059b575b5061058a576104f881606061054c930190612207565b638dd7712f60e01b916001600160e01b03199161056891611e4e565b1603610579576104a8925080610492565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b6105c8915061051b6105af61052292611eb3565b6105046104fe6105c26060880188612207565b90611d0a565b38610536565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff61062a6106216000805160206154e98339815191525463ffffffff9060c81c1690565b63ffffffff1690565b911610610426565b93509061040a916106526000805160206154e98339815191525460581b90565b94909192506103fe565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff8216820361021357565b359063ffffffff8216820361021357565b6020366003190112610213576106a561066d565b6106c76106c16000805160206154e98339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061083f575b156108345760405163ecd0596160e01b8152600480820152911690602081602481855afa9081156107c557600091610805575b50156107f35760405163d68f602560e01b81529160008380610756363433600485016122ca565b038183865af19283156107c5576000936107ca575b506107759061341f565b803b1561021357604051630b9dfbed60e11b81529160009183918290849082906107a29060048301612306565b03925af180156107c5576107b257005b806107bf61001b9261111a565b80610ed7565b612090565b6107759193506107ec903d806000833e6107e4818361119f565b81019061226c565b929061076b565b6040516348f5c3ed60e01b8152600490fd5b610827915060203d60201161082d575b61081f818361119f565b810190612239565b3861072f565b503d610815565b505061001b9061341f565b50303314156106fc565b60203660031901126102135760043561086181610202565b61087d6106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610976575b1561096b5760405163ecd0596160e01b8152600480820152911690602081602481855afa9081156107c55760009161094c575b50156107f35760405163d68f602560e01b8152916000838061090c363433600485016122ca565b038183865af19283156107c55760009361092b575b5061077590612317565b610775919350610945903d806000833e6107e4818361119f565b9290610921565b610965915060203d60201161082d5761081f818361119f565b386108e5565b505061001b90612317565b50303314156108b2565b6001600160581b031981160361021357565b9181601f84011215610213578235916001600160401b038311610213576020808501948460051b01011161021357565b346102135760a03660031901126102135760048035906109e182610980565b602435906109ee82610202565b6001600160401b0360443581811161021357610a0d9036908401610225565b909160643581811161021357610a269036908601610225565b92909160843590811161021357610a409036908701610992565b9490966001600160581b0319610a8081610a79610a6c6000805160206154e98339815191525460581b90565b6001600160581b03191690565b161561236b565b891615610b88576001600160f81b03198916600160f81b8114159081610b79575b50610b685788610ab6610b049798999a6134e8565b610ad7610ac16111c0565b60018152925b6001600160a01b03166020840152565b6000805160206154e9833981519152805463ffffffff60a81b1916600160a81b179055613543565b613543565b60005b818110610b1057005b600080610b1e8385886123f5565b60409391610b30855180938193612411565b039082305af1610b3e612432565b5015610b4d5750600101610b07565b51636534eae560e11b81528084019182529081906020010390fd5b6040516361c4e91b60e11b81528790fd5b600160f91b1415905038610aa1565b604051631a0a9b9f60e21b81528790fd5b6080366003190112610213576004803590610bb382610980565b60243591610bc083610202565b6001600160401b039260443584811161021357610be09036908501610225565b909460643590811161021357610bf99036908601610225565b91610c166106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610d57575b15610d4657169660405163ecd0596160e01b815260208180610c748b8201906004602083019252565b03818c5afa9081156107c557600091610d27575b5015610d165760405163d68f602560e01b81529460008680610cae3634338e85016122ca565b0381838d5af19586156107c557600096610cf7575b50610cce9596612462565b823b15610213576107a29260009283604051809681958294630b9dfbed60e11b84528301612306565b610cce9650610d10903d806000833e6107e4818361119f565b95610cc3565b6040516348f5c3ed60e01b81528790fd5b610d40915060203d60201161082d5761081f818361119f565b38610c88565b505092909361001b96929550612462565b5030331415610c4b565b6001600160e01b031981160361021357565b34610213576020366003190112610213576104a8610db5600435610d9681610d61565b600060408051610da581611132565b8281528260208201520152611fc3565b60405190610dc282611132565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b3461021357604036600319011261021357602060ff610e72600435610e4581610980565b610e5a60243591610e5583610d61565b611eb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b34610213576020366003190112610213576020610eb4600435610ea081610202565b6000604051610eae8161114d565b52612ef1565b60405190610ec18261114d565b546001600160a01b031690819052604051908152f35b600091031261021357565b60005b838110610ef55750506000910152565b8181015183820152602001610ee5565b90602091610f1e81518092818552858086019101610ee2565b601f01601f1916010190565b3461021357600036600319011261021357610f79610f466136fb565b90604051928392600f60f81b8452610f6b60209360e0602087015260e0860190610f05565b908482036040860152610f05565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610fb557505050500390f35b835185528695509381019392810192600101610fa6565b6040366003190112610213576004356001600160401b03811161021357610ff7903690600401610362565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036107f357602435600090815260208190526040902054606091906001906001600160a01b0316938416141590816110a0575b61107261106b826060611079940190612207565b8091611d29565b9030613842565b501561108e5761108557005b61001b91613869565b60405163f21e646b60e01b8152600490fd5b915061107961107261106b6110c66110be61106b6060880188612207565b9034896137c0565b9492505050611057565b3461021357600036600319011261021357602063ffffffff6000805160206154e98339815191525460c81c16604051908152f35b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161112d57604052565b611104565b606081019081106001600160401b0382111761112d57604052565b602081019081106001600160401b0382111761112d57604052565b604081019081106001600160401b0382111761112d57604052565b61012081019081106001600160401b0382111761112d57604052565b90601f801991011681019081106001600160401b0382111761112d57604052565b6040519061022382611168565b6040519061022382611183565b6001600160401b03811161112d5760051b60200190565b6080366003190112610213576001600160401b036004358181116102135761121d903690600401610992565b906024358381116102135736602382011215610213578060040135611241816111da565b91604091611252604051948561119f565b8084526020906024602086019160061b8401019236841161021357602401905b8382106112ba57505050505060443584811161021357611296903690600401610992565b91606435958611610213576112b261001b963690600401610992565b95909461256e565b84823603126102135782859182516112d181611168565b6112da85610680565b8152828501356112e981610202565b83820152815201910190611272565b61130136610252565b61131d6106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061141a575b1561140e5760405163ecd0596160e01b815260048082015291169290602081602481875afa9081156107c5576000916113ef575b50156107f35760405163d68f602560e01b815293600085806113ad363433600485016122ca565b038183885af19485156107c5576000956113ce575b5061077593949561272a565b6107759495506113e8903d806000833e6107e4818361119f565b94936113c2565b611408915060203d60201161082d5761081f818361119f565b38611386565b50509161001b9361272a565b5030331415611352565b34610213576000366003190112610213576104a860405161144481611168565b60168152756b65726e656c2e616476616e6365642e76302e332e3160501b6020820152604051918291602083526020830190610f05565b34610213576000366003190112610213576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6114c936610252565b6114e56106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806115e2575b156115d65760405163ecd0596160e01b815260048082015291169290602081602481875afa9081156107c5576000916115b7575b50156107f35760405163d68f602560e01b81529360008580611575363433600485016122ca565b038183885af19485156107c557600095611596575b50610775939495612a83565b6107759495506115b0903d806000833e6107e4818361119f565b949361158a565b6115d0915060203d60201161082d5761081f818361119f565b3861154e565b50509161001b93612a83565b503033141561151a565b3461021357600036600319011261021357602063ffffffff6000805160206154e98339815191525460a81c16604051908152f35b3461021357602036600319011261021357604061165060043561164281610980565b61164a612c1f565b50611e7a565b602082519161165e83611168565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b346102135760a0366003190112610213576116a6600435610202565b6116b1602435610202565b6001600160401b03604435818111610213576116d1903690600401610992565b5050606435818111610213576116eb903690600401610992565b505060843590811161021357611705903690600401610225565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611773575050505090565b83516001600160501b03191685529381019392810192600101611765565b3461021357602080600319360112610213576004356117af81610d61565b6117d460409160608380516117c381611132565b600081526000878201520152611ffb565b908051916117e183611132565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b82821061184b576104a888888861183d818e038261119f565b818301525191829182611719565b845460501b6001600160501b0319168952978801979383019390830190611824565b346102135760203660031901126102135760206102ad600435612c38565b9060406003198301126102135760043591602435906001600160401b0382116102135761028d91600401610225565b6118c33661188b565b916001600160a01b036118d533612ef1565b541690811561198c57606060019460018414159485611975575b6118f99293613ef5565b92611965575b5050906040519060208083016020845284518091526040840191602060408360051b8701019601926000905b8382106119385786880387f35b90919293948380611954839a603f198b82030186528951610f05565b99970195949391909101910161192b565b61196e91613869565b38806118ff565b6118f9925061198536348761373c565b92506118ef565b60405163710c949760e01b8152600490fd5b60603660031901126102135760048035906119b882610980565b6001600160401b0391602435838111610213576119d89036908401610225565b93604435908111610213576119f09036908501610225565b90611a0d6106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611b24575b15611b1457169560405163ecd0596160e01b815260208180611a6b8a8201906004602083019252565b03818b5afa9081156107c557600091611af5575b5015611ae45760405163d68f602560e01b81529360008580611aa53634338d85016122ca565b0381838c5af19485156107c557600095611ac5575b50610cce9495612cfa565b610cce9550611ade903d806000833e6107e4818361119f565b94611aba565b6040516348f5c3ed60e01b81528690fd5b611b0e915060203d60201161082d5761081f818361119f565b38611a7f565b50509261001b9592919450612cfa565b5030331415611a42565b611b373661188b565b611b536106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611c50575b15611c445760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156107c557600091611c25575b50156107f35760405163d68f602560e01b81529260008480611be3363433600485016122ca565b038183875af19384156107c557600094611c04575b50610775929394612d0f565b610775939450611c1e903d806000833e6107e4818361119f565b9392611bf8565b611c3e915060203d60201161082d5761081f818361119f565b38611bbc565b50509061001b92612d0f565b5030331415611b88565b346102135760003660031901126102135760206000805160206154e98339815191525460581b604051906001600160581b0319168152f35b346102135760a036600319011261021357611cae600435610202565b611cb9602435610202565b6084356001600160401b03811161021357611cd8903690600401610225565b505060405163f23a6e6160e01b8152602090f35b346102135760203660031901126102135760206102ad600435612d1a565b906008116102135760040190600490565b906004116102135790600490565b909291928360041161021357831161021357600401916003190190565b906018116102135760040190601490565b906014116102135790601490565b906020116102135790602090565b909291928360011161021357831161021357600101916000190190565b909291928360141161021357831161021357601401916013190190565b906009116102135760010190600890565b909291928360091161021357831161021357600901916008190190565b906016116102135790601690565b906016116102135760020190601490565b909291928360161161021357831161021357601601916015190190565b906002116102135790600290565b90602c116102135760180190601490565b90939293848311610213578411610213578101920390565b6001600160e01b03199035818116939260048110611e6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611f3b57506001600160a01b0392611f359250611f25915060581b600160581b600160f81b0316600160f81b17611e7a565b5460201c6001600160a01b031690565b16151590565b60028103611f7b57506001600160a01b0392611f359250611f6f9150611f62908416612ef1565b546001600160a01b031690565b6001600160a01b031690565b600303611fbb57611f9c611f976104fe600193611faa95611d1b565b611fc3565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b90816020910312610213575161204881610d61565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b612048949260609260018060a01b031682526020820152816040820152019161204b565b6040513d6000823e3d90fd5b916120a691612f18565b91906001600160f81b0319808316156121ba575b6001600160a01b0390816120d3611f6f611f2587611e7a565b16156121a8578316600160f81b03612158579060209392916120f76121159661304a565b604051637aa8f17760e11b815296879586948593336004860161206c565b039260581c165afa9081156107c55760009161212f575090565b612048915060203d602011612151575b612149818361119f565b810190612033565b503d61213f565b509060081b92600160f11b61218661217961217287611ffb565b5460f01b90565b6001600160f01b03191690565b1661219657612048933390612f99565b604051635b71057960e01b8152600490fd5b604051631a0a9b9f60e21b8152600490fd5b91506121d56000805160206154e98339815191525460581b90565b916120ba565b906040516121e881611168565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561021357018035906001600160401b0382116102135760200191813603831361021357565b90816020910312610213575180151581036102135790565b6001600160401b03811161112d57601f01601f191660200190565b602081830312610213578051906001600160401b038211610213570181601f8201121561021357805161229e81612251565b926122ac604051948561119f565b81845260208284010111610213576120489160208085019101610ee2565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b906020612048928181520190610f05565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b1561237257565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b6000805160206154e9833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b600052603260045260246000fd5b9082101561240c5761028d9160051b810190612207565b6123df565b908092918237016000815290565b6040519061242c8261114d565b60008252565b3d1561245d573d9061244382612251565b91612451604051938461119f565b82523d6000602084013e565b606090565b94939291906001600160581b03198616156121a8576001600160f81b03198616600160f81b811415908161251e575b5061250c5761249f866134e8565b6001600160a01b036124b3611f2588611e7a565b16156124c2575b505050505050565b61250195610aff6124e96000805160206154e98339815191525463ffffffff9060a81c1690565b92610ac76124f56111c0565b63ffffffff9095168552565b3880808080806124ba565b6040516361c4e91b60e11b8152600490fd5b600160f91b1415905038612491565b9060405161253a81611132565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125916106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806126de575b156126ce5760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156107c5576000916126af575b50156107f35760405163d68f602560e01b81529660008880612621363433600485016122ca565b0381838b5af19788156107c55760009861268e575b506126429697986138e2565b803b1561021357604051630b9dfbed60e11b815291600091839182908490829061266f9060048301612306565b03925af180156107c557612681575b50565b806107bf6102239261111a565b6126429798506126a8903d806000833e6107e4818361119f565b9796612636565b6126c8915060203d60201161082d5761081f818361119f565b386125fa565b50509193909294610223966138e2565b50303314156125c6565b91602061204893818152019161204b565b6bffffffffffffffffffffffff19903581811693926014811061271b57505050565b60140360031b82901b16169150565b60018103612863575060581b600160581b600160f81b0316600160f81b17906127ee6127c7611f6f6127c16127bb6127b461277161276789611e7a565b5463ffffffff1690565b6000805160206154e983398151915290612793825463ffffffff9060a81c1690565b9063ffffffff9081168183161461284f575b50505460a81c63ffffffff1690565b9786611d57565b906126f9565b60601c90565b6127de6127d26111c0565b63ffffffff9096168652565b6001600160a01b03166020850152565b6128286014820135820191603481013581019060548101350194601486013593603460148401359301916034601483013592019087613543565b60048114612836575b505050565b6104fe6128499160346102239501611d1b565b90613bf1565b600161285c9201166123ad565b38806127a5565b600281036128bf5750916128b061022393612895611f6f6127c16127bb60148801358801966034890135890198611d57565b928391601482013591603401906001600160a01b0316613b63565b60346014830135920190613a9b565b9091906003810361293f575061293a611f6f61292a610223958461292560186127c197013582016127c160388401358401996128fe6104fe8787611d1b565b9061291f611f6f61290f8989611d46565b60188801359760380196916126f9565b91613950565b611d46565b60188601359560380194916126f9565b613a9b565b9091906004810361298057506001600160a01b031691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b600581036129be57506001600160a01b031691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b6006036129fa576001600160a01b031691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b604051631092ef5760e11b8152600490fd5b359060208110612a1a575090565b6000199060200360031b1b1690565b919060405190612a388261114d565b819360008352116102135760206000910152565b929192612a5882612251565b91612a66604051938461119f565b829481845281830111610213578281602093846000960137010152565b92919060018403612aad5761267e935060581b600160581b600160f81b0316600160f81b17613da9565b60028403612ac85761267e93506001600160a01b0316613d5f565b90919060038403612af7575061267e92508080612aeb6104fe612af19486611d1b565b93611d29565b91613d05565b919260048103612b7d575061267e92612b4a91612b236000805160206154e98339815191525460581b90565b612b2f611f2582611e7a565b6001600160a01b03868116911614612b50575b503691612a4c565b90613c56565b612b5c612b7791611e7a565b8054640100000000600160c01b031916640100000000179055565b38612b42565b60058103612c0057506000805160206154e98339815191525460581b5b612bad612ba78386611d65565b90612a0c565b906001600160f81b03198116600160f91b14612bd5575b505061267e92612b4a913691612a4c565b60081b6001600160e01b03191614612bee573880612bc4565b6040516313002bdd60e31b8152600490fd5b6006036129fa576000805160206154e98339815191525460581b612b9a565b60405190612c2c82611168565b60006020838281520152565b612c4c818060081b918160301b9160501b90565b929091600160f81b916001600160f81b031991908216838114159081612cf0575b81612ce5575b81612cd6575b50612ccc5716908114159081612cc2575b50612cbb576001600160e01b031916612cb5576001600160501b031916612cb057600190565b600090565b50600090565b5050600090565b9050151538612c8a565b5050505050600090565b607f60f91b1415905038612c79565b838114159150612c73565b8015159150612c6d565b91612d0a91610223959493613da9565b6140fa565b9061267e9291613ef5565b60071115612cb057600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612d75612d706000356001600160e01b031916611fc3565b61252d565b80516001600160a01b03908190612d8d908216611f6f565b1615612edf57815160609082908190612dae906001600160a01b0316611f6f565b16600181141580612ed5575b15612e955750508251612dda91506001600160a01b03163690349061373c565b60408301516001600160f81b031990811680612e5e5750506020830151612e09906001600160a01b0316614157565b93905b15612e5657516001600160a01b0316918083169060018214159182612e4b575b5050612e3b575b825160208401f35b612e4491613869565b3880612e33565b141590503880612e2c565b835160208501fd5b03612e83576020830151612e7c906001600160a01b0316369061381b565b9390612e0c565b604051632d6a6bb760e01b8152600490fd5b03612dda57337f0000000000000000000000000000000000000000000000000000000000000000831614612dda576040516348f5c3ed60e01b8152600490fd5b5081811415612dba565b604051631cd4b64760e21b8152600490fd5b6001600160a01b031660009081526000805160206154c98339815191526020526040902090565b9182358060f81c80600014612f5e5780600114612f5157600214612f3b57600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b90926080926120489694835260018060a01b031660208301526040820152816060820152019161204b565b909192612fb894612fac91858585614197565b9492939196909661428b565b509065ffffffffffff809116421091821561303e575b505061302b5761300c612fe260209661304a565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612f6e565b03916001600160a01b03165afa9081156107c55760009161212f575090565b506001600160e01b031995945050505050565b16421190503880612fce565b6120489060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83835260408201526040815261308b81611132565b5190206142b4565b90818060081b9160ff839260f01c166002146130ab57565b6001600160d81b031983169150565b9080601f830112156102135781602061204893359101612a4c565b919061012083820312610213576130ea6111cd565b926130f481610218565b8452602081013560208501526040810135916001600160401b039283811161021357816131229184016130ba565b60408601526060820135838111610213578161313f9184016130ba565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e0820135838111610213578161317a9184016130ba565b60e086015261010092838301359081116102135761319892016130ba565b90830152565b90816020910312610213575190565b80516001600160a01b03168252612048919061322b6131fb6131e961012060208501516020870152604085015190806040880152860190610f05565b60608401518582036060870152610f05565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610f05565b916101008092015191818403910152610f05565b93929161325c9060409286526060602087015260608601906131ad565b930152565b92919061325c6020916040865260408601906131ad565b92909260009261328836826130d5565b91610100918281019161329b8383612207565b90949093600160f81b936001600160f81b031993841685146133e4575b505050871603613345575050604051639700320360e01b8152936020928592839160009183916132eb9160048401613261565b039260581c6001600160a01b03165af19081156107c55761204892600092613314575b506147ca565b61333791925060203d60201161333e575b61332f818361119f565b81019061319e565b903861330e565b503d613325565b909460081b93909291600160f01b61336261217961217288611ffb565b166133d257600061338361337d6020966133ad99858a6145ca565b946147ca565b604051630ccab7a160e01b8152979096889586948593926001600160e01b0319166004850161323f565b03926001600160a01b03165af19081156107c5576120489260009261331457506147ca565b6040516314b9743f60e01b8152600490fd5b909195506134009398506133f9929450612207565b90886143c8565b9691929093613413858995993691612a4c565b908601523880806132b8565b6000805160206154e983398151915280549163ffffffff92600a848260a81c1601908482116134d25782851691851682116134c05760c81c841610156134ae576000805160206154e9833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106134a55750565b610223906123ad565b604051633ab3447f60e11b8152600490fd5b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88916000805160206154e98339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b919390929461355461276784611e7a565b936000805160206154e983398151915294613577865463ffffffff9060a81c1690565b63ffffffff8092818084169116146136e7575b50506020820180516001600160a01b03979192916135b7918916156136de575b5460a81c63ffffffff1690565b816135c9610621865163ffffffff1690565b911614908115916136b4575b506134ae57613624613631926135ea87611e7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b916001858416036136a3575b5050506001600160f81b03198116600160f81b8103613687575060581c1691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b909350600160f91b1415905061250c576102239160081b61494c565b6136ac92613a9b565b38808061363d565b90506136c261276787611e7a565b906136d4610621855163ffffffff1690565b91161015386135d5565b600184526135aa565b60016136f49201166123ad565b388161358a565b60405161370781611168565b600681526512d95c9b995b60d21b60208201529060405161372781611168565b6005815264302e332e3160d81b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156107c55780926137ac57505090565b61204892503d8091833e6107e4818361119f565b600092836137e795936040519687958694859363d68f602560e01b8552336004860161206c565b03926001600160a01b03165af19081156107c557600091613806575090565b61204891503d806000833e6107e4818361119f565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b6001600160a01b0316803b1561021357604051630b9dfbed60e11b8152602060048201529160009183918290849082906138a7906024830190610f05565b03925af180156107c5576138b85750565b6102239061111a565b80511561240c5760200190565b805182101561240c5760209160051b010190565b96959192939694909460005b86811061390057505050505050509050565b806139418a60019360051b85013561391781610980565b61392d84613925818c6138ce565b51938c6123f5565b90613939868b8b6123f5565b949093613543565b016138ee565b901561240c5790565b6001600160a01b03939192919084831615613a93575b61396f90611fc3565b9461399b61398e6139808385613947565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b031980871680613a7457505090806139bd92861693611d73565b823b15610213576139e892600092836040518096819582946306d61fe760e41b8452600484016126e8565b03925af19485156107c557613a24613a449360019361022398613a61575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107bf613a6e9261111a565b38613a06565b925092505094919403612e83576001613a4491613a2461022396613a08565b849250613966565b6001600160a01b03169182158015613b59575b6128315760405163d60b347f60e01b8152306004820152602081602481875afa9081156107c557600091613b3a575b5015613b05576001600160f81b031980613afa6139808486613947565b1614613b0557505050565b80613b0f92611d73565b823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b613b53915060203d60201161082d5761081f818361119f565b38613add565b5060018314613aae565b919392916001600160a01b039081841615613be8575b1660008181526000805160206154c98339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613be4576138a79394836040518096819582946306d61fe760e41b845260206004850152602484019161204b565b8280fd5b60019350613b79565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613c2382610e5a83611eb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a825195613cb687613ca86020820193638a91b0e360e01b8552602060248401526044830190610f05565b03601f19810189528861119f565b6000918291828587519a613cc98c61114d565b828c525193f1943d9081613cfc575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b60009150613cd8565b613d15613d489194939294611fc3565b80546001600160a01b031981168255600190910180546001600160a01b03928316969194921691612b4a91369190612a4c565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b0390811660008181526000805160206154c98339815191526020526040902080546001600160a01b03198116909155909116939261267e92612b4a913691612a4c565b90929192613ddb613dc96000805160206154e98339815191525460581b90565b6001600160581b031980851691161490565b612bee57613deb611f2583611e7a565b93613e0c613df884611e7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b8103613e45575061267e9291613e33913691612a4c565b9060581c6001600160a01b0316613c56565b600160f91b1415905061250c576102239160081b614bac565b604051613e6a81611168565b600181528060005b602080821015613e8d57906060602092828501015201613e72565b50505090565b90613e9d826111da565b613eaa604051918261119f565b8281528092613ebb601f19916111da565b019060005b828110613ecc57505050565b806060602080938501015201613ec0565b90604061204892600081528160208201520190610f05565b613f09818060081b918160301b9160501b90565b5090936001600160f81b031993600160f81b939092508416838103613f94575050613f3b908035019060208201913590565b929093168015600014613f5357505061204891614e2a565b03613f615761204891614d6d565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b94959490919080614036575090613faa91614cc1565b93909294613fb6613e5e565b971680613fdb575050613fc893614d12565b613fd1836138c1565b5261267e826138c1565b03613f6157613fe993614ce9565b613ff2846138c1565b52610223577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7614031614024846138c1565b5160405191829182613edd565b0390a1565b919593918203613f615761406d9061406761404f613e5e565b97806140616127c16127bb8387611d57565b93611d90565b91613842565b614079879592956138c1565b52169081036140b757501561408a57565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7614031614024846138c1565b613f61576102235760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b6001600160a01b0316908115801561414d575b61283157821561240c576001600160f81b0319813581161461412e57505050565b826001116102135761267e92612b4a9136916000190190600101612a4c565b506001821461410d565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b848461421a926142059796949895604051916141b283611183565b61421460009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614ec3565b60ff8061423361422d6139808786613947565b60f81c90565b16036142795761426261424d8461425d9561427294611d73565b9490955163ffffffff60e01b1690565b611ffb565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c169283156001146142ac575b5060d01c92565b9250386142a5565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614341575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220614322565b919290926143d4612c1f565b906143df9085611d57565b6143e8916126f9565b60601c602082018190526000805160206154e98339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d84369061445992612a4c565b80519060200120913661446d908888612a4c565b8051906020012036614480908b8d612a4c565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e0808401929092529082529061450c6101008261119f565b519020614518906142b4565b607489013589018d8b820135910161452f92615115565b9a61453a9488613543565b61454481836152b2565b61454d91611d1b565b61455691611e4e565b61455f91613bf1565b6094810135019293830192013590565b805482101561240c5760005260206000200190600090565b6001600160c01b031990358181169392600881106145a457505050565b60080360031b82901b16169150565b6040906120489392815281602082015201906131ad565b6000949391600186816145dc85611ffb565b016000835b614629575b5050505060ff806145fd61422d6139808789613947565b16036142795761010061462161461a856142629661204898611d73565b3691612a4c565b910152611ffb565b81979697548110156147c25761465a614652614645838561456f565b90549060031b1c60501b90565b908160501c90565b98909761467661467061422d6139808585613947565b60ff1690565b80840361479157509081816146af6146a361469d614697846146cc98611dad565b90614587565b60c01c90565b6001600160401b031690565b600901916146c161461a848484611dbe565b6101008b0152611e36565b989098975b600160f01b16156146e6575b508301836145e1565b9986614723929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d84016145b3565b0393165af19586156107c5578896614772575b5050841661475857505061474e8594939285926147ca565b9a919293506146dd565b51631f24c1fb60e11b81529081018c815281906020010390fd5b614789929650803d1061333e5761332f818361119f565b933880614736565b90999198908311156147af57604051630760bdcf60e11b8152600490fd5b6147b761241f565b6101008801526146d1565b9695966145e6565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146147fb57505050600190565b65ffffffffffff60a01b80831693906001600160d01b03198481169190831690861561485d575b8381168015614856575b87811090881802808818971461484e575b508181119082180218921716171790565b95503861483d565b508061482c565b955085614822565b805490600090600081558261487957505050565b6000526020600020918201915b82811061489257505050565b818155600101614886565b6001600160501b031990358181169392601681106148ba57505050565b60160360031b82901b16169150565b80546801000000000000000081101561112d576148eb9160018201815561456f565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b0319903581811693926002811061493d57505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015614ba4575b614b925760018061497385611ffb565b0154614b79575b60001982019260005b848110614a9c5750614a619594614a6f949093614a459350614a3e92506149de614a2f614a16612179614a10614a0a87878e614a058e6149d6611f6f6127c16127bb6149d08989896123f5565b90611de9565b9a8b91611ffb565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6123f5565b90611e17565b90614920565b614a1f88611ffb565b9060f01c61ffff19825416179055565b6001600160a01b0316966123f5565b8091611dfa565b6040519586939092906001600160e01b0319166020850161490a565b03601f19810184528361119f565b803b15610213576040516306d61fe760e41b815291600091839182908490829061266f9060048301612306565b614af3611f6f611f6f6127c16127bb6149d0868a8e614a058f614abf8e91611ffb565b01614aed614ae0614ada614ad48888886123f5565b90611ddb565b9061489d565b6001600160501b03191690565b906148c9565b90614b02614a3e82878b6123f5565b90614b23604091614a6183519485928d63ffffffff60e01b168a850161490a565b833b15610213576000938492614b4d92519586809481936306d61fe760e41b835260048301612306565b03925af19182156107c5578492614b66575b5001614983565b806107bf614b739261111a565b38614b5f565b614b8d6001614b8786611ffb565b01614865565b61497a565b60405163b62d956d60e01b8152600490fd5b508015614963565b91908035019160209060208401933590614bc581611ffb565b92600190600185019060018254018503614caf57906000835b614c41575b50505050614c3091614c2b82614a456102239798614c086001614b87614a6198611ffb565b8754614c1f9060101c6001600160a01b0316611f6f565b946000198101916123f5565b613c56565b5080546001600160b01b0319169055565b8154811015614caa57908382614ca0614a618c614c928a614c77868e614c6f6146526146458c9f9e8e61456f565b9690506123f5565b6040519586939092906001600160e01b0319168c850161490a565b6001600160a01b0316613c56565b5001909192614bde565b614be3565b60405163013dcc8d60e31b8152600490fd5b908060141161021357813560601c928160341161021357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af115614d41573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b919081101561240c5760051b81013590605e1981360301821215610213570190565b919091614d7983613e93565b9260005b818110614d8957505050565b80614d976001928486614d4b565b8035614da281610202565b614dc360208093604093614db885830183612207565b939092013590614ce9565b614dcd858b6138ce565b5215614ddc575b505001614d7d565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb791614e20614e0b858b6138ce565b51838051948594888652850152830190610f05565b0390a13880614dd4565b919091614e3683613e93565b9260005b818110614e4657505050565b80614e7c6020614e596001948688614d4b565b8035614e6481610202565b614e716040830183612207565b939092013590614d12565b614e8682886138ce565b52614e9181876138ce565b5001614e3a565b90926080926120489594835260018060a01b0316602083015260408201528160608201520190610f05565b9190606083016001936001614ee261425d845163ffffffff60e01b1690565b01936000936000958054965b878110614f0057505050505050505050565b80614f126146526146458c948661456f565b6001600160a01b031660a0880190815260808801959091614f3b906001600160f01b0319168752565b614f55614f4e61422d6139808a85613947565b60ff168952565b614f63614670895160ff1690565b8084036150dd5750868181614f886146a361469d614697614fdc9c9d614faf98611dad565b60208c018181528c60c0614fa461461a60099586018789611dbe565b910152510191611e36565b959095965b51600160f11b90614fce906001600160f01b031916612179565b166001600160f01b03191690565b15614fe9575b5001614eee565b51909150614fff906001600160a01b0316611f6f565b865161502390615016906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b0316916150686101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b8601614e98565b03915afa9384156107c5578b946150be575b50506001600160a01b0383166150a35750860180518b939261509b916147ca565b905238614fe2565b9051631f24c1fb60e11b815290810183815281906020010390fd5b6150d5929450803d1061333e5761332f818361119f565b91388061507a565b8391969450106000146150fc57604051630760bdcf60e11b8152600490fd5b614fdc8b9361510b3688612a29565b60c08a0152614fb4565b6000805160206154e98339815191525460009493929060581b916001600160f81b03198316600160f81b81036151d85750604051637aa8f17760e11b815293602093859390928492839261516d92306004860161206c565b039160581c6001600160a01b03165afa9081156107c5576000916151b9575b505b6001600160e01b0319166374eca2c160e11b016151a757565b6040516362467c7760e11b8152600490fd5b6151d2915060203d60201161215157612149818361119f565b3861518c565b919550929190600160f91b0361250c576020916151fb9160081b95843088614197565b60405163392dffaf60e01b8152929792958694938593849361522e93909230906001600160e01b03191660048701612f6e565b03916001600160a01b03165afa9081156107c557600091615250575b5061518e565b615269915060203d60201161215157612149818361119f565b3861524a565b1561527657565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6152bf6104fe8383611d1b565b9060048310156152ce57505050565b602c831061545e576152e9611f6f6127c16127bb8685611d46565b602c8201358201602c604c820191013591604c84013584019461532361531561398e6139808787613947565b6001600160f81b0319161590565b806153cd575b9461536a61293a95611f6f9561536f956102239b956127c19a61537f575b61535a611f6f6127c16127bb8a8a611e25565b916001600160a01b031690613950565b611e25565b602c86013595604c0194916126f9565b6153c8606c87013587016153c2602c604c8301920135806153a9611f6f6127c16127bb8488611d57565b936153bd856001600160a01b038a1661546c565b611d90565b91613a9b565b615347565b5091939092956040519163ecd0596160e01b8352602083806153f760048201906002602083019252565b03816001600160a01b0389165afa9283156107c557610223986127c19761293a97611f6f9761536f9761536a9560009161543f575b50959a50959b5095509550955050615329565b615458915060203d60201161082d5761081f818361119f565b3861542c565b50506004610223911461526f565b61022391906001600160a01b0390818316156154bf575b166000526000805160206154c983398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b6001925061548356fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x53", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x558b5b7a9a087a8e1a15c3062b939a50cd9f3ddc1807d3d1a6fd6294c6f88662", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x3f95901ca906b541303048213dd5e5184462922b", + "function": null, + "arguments": [ + "0xcA6E20D0ba4cc864f6160DC165A0a477581B594B" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x600f4", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61046c38819003918201601f19168301916001600160401b03831184841017607857808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103dd908161008f823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000ca6e20d0ba4cc864f6160dc165a0a477581b594b", + "nonce": "0x54", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa461ec70b705f3614dcd7a760c7cb728de1011c6803bce226647842eaf2720c1", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x3F95901CA906B541303048213Dd5E5184462922b", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000003f95901ca906b541303048213dd5e5184462922b0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x55", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x133a75a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x5476e320d4a6d399f6b2efc50a95cba1ee44d36cd5973d7b4866eb4bbc2ac1fd", + "transactionIndex": "0x85", + "blockHash": "0x94600f6735327cd52abc0c861c6e3d7e60c9bc81d32ef6df9e466ebb85fd05c7", + "blockNumber": "0x5cc598", + "gasUsed": "0x492720", + "effectiveGasPrice": "0x2925be3b1", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xca6e20d0ba4cc864f6160dc165a0a477581b594b" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x137c28d", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x558b5b7a9a087a8e1a15c3062b939a50cd9f3ddc1807d3d1a6fd6294c6f88662", + "transactionIndex": "0x86", + "blockHash": "0x94600f6735327cd52abc0c861c6e3d7e60c9bc81d32ef6df9e466ebb85fd05c7", + "blockNumber": "0x5cc598", + "gasUsed": "0x41b33", + "effectiveGasPrice": "0x2925be3b1", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x3f95901ca906b541303048213dd5e5184462922b" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x13877a0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xa461ec70b705f3614dcd7a760c7cb728de1011c6803bce226647842eaf2720c1", + "transactionIndex": "0x87", + "blockHash": "0x94600f6735327cd52abc0c861c6e3d7e60c9bc81d32ef6df9e466ebb85fd05c7", + "blockNumber": "0x5cc598", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x2925be3b1", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1718039506, + "chain": 11155111, + "commit": "0e1c950" +} \ No newline at end of file diff --git a/broadcast/DeployKernel.s.sol/11155111/run-latest.json b/broadcast/DeployKernel.s.sol/11155111/run-latest.json index 2894b62..12e71c0 100644 --- a/broadcast/DeployKernel.s.sol/11155111/run-latest.json +++ b/broadcast/DeployKernel.s.sol/11155111/run-latest.json @@ -1,10 +1,10 @@ { "transactions": [ { - "hash": "0x952bfd07525fd91a68340bf2e3cac2f78b7ae26109c0bdfe787953c56e51c6e8", + "hash": "0x5476e320d4a6d399f6b2efc50a95cba1ee44d36cd5973d7b4866eb4bbc2ac1fd", "transactionType": "CREATE2", "contractName": "Kernel", - "contractAddress": "0xdc4cfd181a721a047ee48a55393b25258b27ecb0", + "contractAddress": "0xca6e20d0ba4cc864f6160dc165a0a477581b594b", "function": null, "arguments": [ "0x0000000071727De22E5E9d8BAf0edAc6f37da032" @@ -12,44 +12,44 @@ "transaction": { "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x6678bb", + "gas": "0x650349", "value": "0x0", - "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346101fd57601f61539d38819003918201601f191683019291906001600160401b038411838510176102025781602092849260409687528339810103126101fd57516001600160a01b03811681036101fd57306080524660a05260a0825161006981610218565b600681526005602082016512d95c9b995b60d21b81526020865161008c81610218565b838152019264302e332e3160d81b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b82526004815261011081610218565b5190516001600160581b0319918282169190601581106101e8575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b031982541617905551906151699283610234843960805183614296015260a051836142b9015260c0518361432b015260e051836143510152518261427501525181818161050301528181610827015281816109dd01528181610d74015281816110d901528181611241015281816112a1015281816117c901528181611938015281816121d70152612a880152f35b8391925060150360031b1b161680388061012b565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176102025760405256fe6080604052600436101561001d575b366129485761001b612917565b005b60003560e01c8063112d3a7d146101ed57806312af322c146101e8578063150b7a02146101e35780631626ba7e146101de57806319822f7c146101d95780631f1b92e3146101d45780633659cfe6146101cf57806357b3a5f4146101ca5780636e6fa0c6146101c5578063721e67f4146101c057806384b0196e146101bb5780638dd7712f146101b657806390ef8862146101b15780639198bdf5146101ac5780639517e29f146101a75780639cfd7cff146101a2578063a65d69d41461019d578063a71763a814610198578063adb610a314610193578063b8afe17d1461018e578063bc197c8114610189578063c3e5897814610184578063d03c79141461017f578063d691c9641461017a578063e6f3d50a14610175578063e9ae5c5314610170578063f1f7f0f91461016b578063f23a6e61146101665763f2dc691d0361000e57611ac5565b611a6b565b611a33565b611907565b61174e565b61166a565b61161d565b611541565b61143a565b6113d0565b61139c565b611270565b61122b565b6111d4565b6110a8565b610fa1565b610e50565b610d3f565b610c9d565b610bf1565b610b94565b610ae6565b61099d565b6107e5565b6104c5565b610465565b61040b565b6102b9565b610281565b6001600160a01b0381160361020357565b600080fd5b3590610213826101f2565b565b9181601f84011215610203578235916001600160401b038311610203576020838186019501011161020357565b6060600319820112610203576004359160243561025e816101f2565b91604435906001600160401b0382116102035761027d91600401610215565b9091565b3461020357602061029d61029436610242565b92919091611cc5565b6040519015158152f35b6001600160581b031981160361020357565b34610203576080366003190112610203576004356102d6816102a7565b6024356102e2816101f2565b6001600160401b039060443582811161020357610303903690600401610215565b90926064359081116102035761031d903690600401610215565b9390926001600160581b031961035d816103566103496000805160206151498339815191525460581b90565b6001600160581b03191690565b1615611d8f565b8616156103f9576001600160f81b03198616600160f81b81141590816103ea575b506103d8578561039061001b97612af1565b6103b061039b610f70565b60018152926001600160a01b03166020840152565b600080516020615149833981519152805463ffffffff60a81b1916600160a81b179055612b4c565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861037e565b604051631a0a9b9f60e21b8152600490fd5b34610203576080366003190112610203576104276004356101f2565b6104326024356101f2565b6064356001600160401b03811161020357610451903690600401610215565b5050604051630a85bd0160e11b8152602090f35b34610203576040366003190112610203576024356001600160401b038111610203576104a361049a6020923690600401610215565b90600435611eaa565b6040516001600160e01b03199091168152f35b90816101209103126102035790565b606036600319011261020357600480356001600160401b038111610203576104f090369083016104b6565b60243590604435906001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036107b05780849261053a6020830135612eb8565b6001600160f81b031990911615959093909186610786575b908461055e939261309d565b9561057061056b84611c53565b611fd7565b9415948580610744575b61073357602001516001600160a01b0316918216908115610722576001926105af6105ce926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036106815782610623575b5050610612576105fc9250805b610600575b506040519081529081906020820190565b0390f35b3490349034903490335af150386105eb565b604051631a0a9b9f60e21b81528390fd5b61067a92506106769161065861065261064c61064161066f95611c8c565b936060810190612003565b90611af4565b90611c27565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b38806105d9565b829192916106ef575b506106de5761064c8160606106a0930190612003565b638dd7712f60e01b916001600160e01b0319916106bc91611c27565b16036106cd576105fc9250806105e6565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61071c915061066f61070361067692611c8c565b6106586106526107166060880188612003565b90611ae3565b3861068a565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff61077e6107756000805160206151498339815191525463ffffffff9060c81c1690565b63ffffffff1690565b91161061057a565b93509061055e916107a66000805160206151498339815191525460581b90565b9490919250610552565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff8216820361020357565b359063ffffffff8216820361020357565b6020366003190112610203576107f96107c1565b61081b6108156000805160206151498339815191525460581b90565b60581c90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610993575b156109885760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561091957600091610959575b50156109475760405163d68f602560e01b815291600083806108aa363433600485016120c6565b038183865af19283156109195760009361091e575b506108c990613244565b803b1561020357604051630b9dfbed60e11b81529160009183918290849082906108f69060048301612102565b03925af180156109195761090657005b8061091361001b92610eca565b80610c4a565b611e9e565b6108c9919350610940903d806000833e6109388183610f4f565b810190612068565b92906108bf565b6040516348f5c3ed60e01b8152600490fd5b61097b915060203d602011610981575b6109738183610f4f565b810190612035565b38610883565b503d610969565b505061001b90613244565b5030331415610850565b6020366003190112610203576004356109b5816101f2565b6109d16108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610aca575b15610abf5760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561091957600091610aa0575b50156109475760405163d68f602560e01b81529160008380610a60363433600485016120c6565b038183865af192831561091957600093610a7f575b506108c990612113565b6108c9919350610a99903d806000833e6109388183610f4f565b9290610a75565b610ab9915060203d602011610981576109738183610f4f565b38610a39565b505061001b90612113565b5030331415610a06565b6001600160e01b031981160361020357565b34610203576020366003190112610203576105fc610b28600435610b0981610ad4565b600060408051610b1881610ee2565b8281528260208201520152611dd1565b60405190610b3582610ee2565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b3461020357604036600319011261020357602060ff610be5600435610bb8816102a7565b610bcd60243591610bc883610ad4565b611c8c565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b34610203576020366003190112610203576020610c27600435610c13816101f2565b6000604051610c2181610efd565b52612aca565b60405190610c3482610efd565b546001600160a01b031690819052604051908152f35b600091031261020357565b60005b838110610c685750506000910152565b8181015183820152602001610c58565b90602091610c9181518092818552858086019101610c55565b601f01601f1916010190565b3461020357600036600319011261020357610cec610cb9613324565b90604051928392600f60f81b8452610cde60209360e0602087015260e0860190610c78565b908482036040860152610c78565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610d2857505050500390f35b835185528695509381019392810192600101610d19565b6040366003190112610203576004356001600160401b03811161020357610d6a9036906004016104b6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081163303610947576060906001610dc6610db96024356000526000602052604060002090565b546001600160a01b031690565b91821614159283610e20575b610ded610de6826060610df4940190612003565b8091611b02565b903061346b565b509215610e055761001b9250613492565b505015610e0e57005b60405163f21e646b60e01b8152600490fd5b9150610df4610ded610de6610e46610e3e610de66060880188612003565b9034876133e9565b9492505050610dd2565b3461020357600036600319011261020357602063ffffffff6000805160206151498339815191525460c81c16604051908152f35b9181601f84011215610203578235916001600160401b038311610203576020808501948460051b01011161020357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610edd57604052565b610eb4565b606081019081106001600160401b03821117610edd57604052565b602081019081106001600160401b03821117610edd57604052565b604081019081106001600160401b03821117610edd57604052565b61012081019081106001600160401b03821117610edd57604052565b90601f801991011681019081106001600160401b03821117610edd57604052565b6040519061021382610f18565b6040519061021382610f33565b6001600160401b038111610edd5760051b60200190565b6080366003190112610203576001600160401b0360043581811161020357610fcd903690600401610e84565b906024358381116102035736602382011215610203578060040135610ff181610f8a565b916040916110026040519485610f4f565b8084526020906024602086019160061b8401019236841161020357602401905b83821061106a57505050505060443584811161020357611046903690600401610e84565b916064359586116102035761106261001b963690600401610e84565b9590946121a8565b848236031261020357828591825161108181610f18565b61108a856107d4565b815282850135611099816101f2565b83820152815201910190611022565b6110b136610242565b6110cd6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806111ca575b156111be5760405163ecd0596160e01b815260048082015291169290602081602481875afa9081156109195760009161119f575b50156109475760405163d68f602560e01b8152936000858061115d363433600485016120c6565b038183885af19485156109195760009561117e575b506108c9939495612364565b6108c9949550611198903d806000833e6109388183610f4f565b9493611172565b6111b8915060203d602011610981576109738183610f4f565b38611136565b50509161001b93612364565b5030331415611102565b34610203576000366003190112610203576105fc6040516111f481610f18565b60168152756b65726e656c2e616476616e6365642e76302e332e3160501b6020820152604051918291602083526020830190610c78565b34610203576000366003190112610203576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b61127936610242565b6112956108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611392575b156113865760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561091957600091611367575b50156109475760405163d68f602560e01b81529360008580611325363433600485016120c6565b038183885af194851561091957600095611346575b506108c9939495612673565b6108c9949550611360903d806000833e6109388183610f4f565b949361133a565b611380915060203d602011610981576109738183610f4f565b386112fe565b50509161001b93612673565b50303314156112ca565b3461020357600036600319011261020357602063ffffffff6000805160206151498339815191525460a81c16604051908152f35b346102035760203660031901126102035760406114006004356113f2816102a7565b6113fa61280f565b50611c53565b602082519161140e83610f18565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b346102035760a0366003190112610203576114566004356101f2565b6114616024356101f2565b6001600160401b0360443581811161020357611481903690600401610e84565b50506064358181116102035761149b903690600401610e84565b5050608435908111610203576114b5903690600401610215565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611523575050505090565b83516001600160501b03191685529381019392810192600101611515565b34610203576020806003193601126102035760043561155f81610ad4565b611584604091606083805161157381610ee2565b600081526000878201520152611e09565b9080519161159183610ee2565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106115fb576105fc8888886115ed818e0382610f4f565b8183015251918291826114c9565b845460501b6001600160501b03191689529788019793830193908301906115d4565b3461020357602036600319011261020357602061029d600435612828565b9060406003198301126102035760043591602435906001600160401b0382116102035761027d91600401610215565b6116733661163b565b916001600160a01b0361168533612aca565b541690811561173c57606060019460018414159485611725575b6116a99293613b55565b92611715575b5050906040519060208083016020845284518091526040840191602060408360051b8701019601926000905b8382106116e85786880387f35b90919293948380611704839a603f198b82030186528951610c78565b9997019594939190910191016116db565b61171e91613492565b38806116af565b6116a99250611735363487613365565b925061169f565b60405163710c949760e01b8152600490fd5b6060366003190112610203576004803590611768826102a7565b6001600160401b0391602435838111610203576117889036908401610215565b93604435908111610203576117a09036908501610215565b906117bd6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806118fd575b156118ed57169560405163ecd0596160e01b81526020818061181b8a8201906004602083019252565b03818b5afa908115610919576000916118ce575b50156118bd5760405163d68f602560e01b815293600085806118553634338d85016120c6565b0381838c5af19485156109195760009561189e575b5061187594956128ea565b823b15610203576108f69260009283604051809681958294630b9dfbed60e11b84528301612102565b61187595506118b7903d806000833e6109388183610f4f565b9461186a565b6040516348f5c3ed60e01b81528690fd5b6118e7915060203d602011610981576109738183610f4f565b3861182f565b50509261001b95929194506128ea565b50303314156117f2565b6119103661163b565b61192c6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611a29575b15611a1d5760405163ecd0596160e01b815260048082015291169190602081602481865afa908115610919576000916119fe575b50156109475760405163d68f602560e01b815292600084806119bc363433600485016120c6565b038183875af1938415610919576000946119dd575b506108c99293946128ff565b6108c99394506119f7903d806000833e6109388183610f4f565b93926119d1565b611a17915060203d602011610981576109738183610f4f565b38611995565b50509061001b926128ff565b5030331415611961565b346102035760003660031901126102035760206000805160206151498339815191525460581b604051906001600160581b0319168152f35b346102035760a036600319011261020357611a876004356101f2565b611a926024356101f2565b6084356001600160401b03811161020357611ab1903690600401610215565b505060405163f23a6e6160e01b8152602090f35b3461020357602036600319011261020357602061029d60043561290a565b906008116102035760040190600490565b906004116102035790600490565b909291928360041161020357831161020357600401916003190190565b906018116102035760040190601490565b906014116102035790601490565b906020116102035790602090565b909291928360011161020357831161020357600101916000190190565b909291928360141161020357831161020357601401916013190190565b906016116102035790601690565b906016116102035760020190601490565b909291928360161161020357831161020357601601916015190190565b906002116102035790600290565b906009116102035760010190600890565b909291928360091161020357831161020357600901916008190190565b90602c116102035760180190601490565b90939293848311610203578411610203578101920390565b6001600160e01b03199035818116939260048110611c4457505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611d1457506001600160a01b0392611d0e9250611cfe915060581b600160581b600160f81b0316600160f81b17611c53565b5460201c6001600160a01b031690565b16151590565b60028103611d4757506001600160a01b0392611d0e9250611d3b9150610db9908416612aca565b6001600160a01b031690565b600303611d8757611d68611d63610652600193611d7695611af4565b611dd1565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611d9657565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126102035751611e5681610ad4565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611e56949260609260018060a01b0316825260208201528160408201520191611e59565b6040513d6000823e3d90fd5b91611eb491612d3d565b91906001600160f81b031980831615611fb6575b6001600160a01b039081611ee1611d3b611cfe87611c53565b16156103f9578316600160f81b03611f6657906020939291611f05611f2396612e6f565b604051637aa8f17760e11b8152968795869485933360048601611e7a565b039260581c165afa90811561091957600091611f3d575090565b611e56915060203d602011611f5f575b611f578183610f4f565b810190611e41565b503d611f4d565b509060081b92600160f11b611f94611f87611f8087611e09565b5460f01b90565b6001600160f01b03191690565b16611fa457611e56933390612dbe565b604051635b71057960e01b8152600490fd5b9150611fd16000805160206151498339815191525460581b90565b91611ec8565b90604051611fe481610f18565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561020357018035906001600160401b0382116102035760200191813603831361020357565b90816020910312610203575180151581036102035790565b6001600160401b038111610edd57601f01601f191660200190565b602081830312610203578051906001600160401b038211610203570181601f8201121561020357805161209a8161204d565b926120a86040519485610f4f565b8184526020828401011161020357611e569160208085019101610c55565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b906020611e56928181520190610c78565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b9060405161217481610ee2565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946121cb6108156000805160206151498339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612318575b156123085760405163ecd0596160e01b8152600480820152911695906020816024818a5afa908115610919576000916122e9575b50156109475760405163d68f602560e01b8152966000888061225b363433600485016120c6565b0381838b5af1978815610919576000986122c8575b5061227c96979861353d565b803b1561020357604051630b9dfbed60e11b81529160009183918290849082906122a99060048301612102565b03925af18015610919576122bb575b50565b8061091361021392610eca565b61227c9798506122e2903d806000833e6109388183610f4f565b9796612270565b612302915060203d602011610981576109738183610f4f565b38612234565b505091939092946102139661353d565b5030331415612200565b916020611e56938181520191611e59565b6bffffffffffffffffffffffff19903581811693926014811061235557505050565b60140360031b82901b16169150565b6001810361244057506106526102139361242c61243a93600160581b600160f81b039060581b16600160f81b17946123fb6123d4611d3b6123ce6123c86123c16000805160206151498339815191525463ffffffff9060a81c1690565b9786611b30565b90612333565b60601c90565b6123eb6123df610f70565b63ffffffff9096168652565b6001600160a01b03166020850152565b6014810135810192603482013582019160548101350193603460148401359301916034601483013592019089612b4c565b603460148201359101611af4565b90613851565b6002810361249c57509161248d61021393612472611d3b6123ce6123c860148801358801966034890135890198611b30565b928391601482013591603401906001600160a01b03166137c3565b603460148301359201906136f6565b9091906003810361251c5750612517611d3b612507610213958461250260186123ce97013582016123ce60388401358401996124db6106528787611af4565b906124fc611d3b6124ec8989611b1f565b6018880135976038019691612333565b916135ab565b611b1f565b6018860135956038019491612333565b6136f6565b9091906004810361255d57506001600160a01b031691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b6005810361259b57506001600160a01b031691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b6006036125d7576001600160a01b031691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b604051631092ef5760e11b8152600490fd5b604051906125f682610efd565b60008252565b35906020811061260a575090565b6000199060200360031b1b1690565b91906040519061262882610efd565b819360008352116102035760206000910152565b9291926126488261204d565b916126566040519384610f4f565b829481845281830111610203578281602093846000960137010152565b9291906001840361269d576122b8935060581b600160581b600160f81b0316600160f81b17613a09565b600284036126b8576122b893506001600160a01b03166139bf565b909190600384036126e757506122b8925080806126db6106526126e19486611af4565b93611b02565b91613965565b91926004810361276d57506122b89261273a916127136000805160206151498339815191525460581b90565b61271f611cfe82611c53565b6001600160a01b03868116911614612740575b50369161263c565b906138b6565b61274c61276791611c53565b8054640100000000600160c01b031916640100000000179055565b38612732565b600581036127f057506000805160206151498339815191525460581b5b61279d6127978386611b3e565b906125fc565b906001600160f81b03198116600160f91b146127c5575b50506122b89261273a91369161263c565b60081b6001600160e01b031916146127de5738806127b4565b6040516313002bdd60e31b8152600490fd5b6006036125d7576000805160206151498339815191525460581b61278a565b6040519061281c82610f18565b60006020838281520152565b61283c818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816128e0575b816128d5575b816128c6575b506128bc57169081141590816128b2575b506128ab576001600160e01b0319166128a5576001600160501b0319166128a057600190565b600090565b50600090565b5050600090565b905015153861287a565b5050505050600090565b607f60f91b1415905038612869565b838114159150612863565b801515915061285d565b916128fa91610213959493613a09565b613d5a565b906122b89291613b55565b600711156128a057600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6129656129606000356001600160e01b031916611dd1565b612167565b80516001600160a01b039190829061297e908216611d3b565b168061299657604051631cd4b64760e21b8152600490fd5b606090600181141580612ac0575b15612a7c57505080516129c3906001600160a01b031636903490613365565b915b60408201516001600160f81b031990811680612a3c5750506020820151612a0d93906001906129fc906001600160a01b0316613db7565b9590945b516001600160a01b031690565b92831603612a2c575b5050612a2457602081519101fd5b602081519101f35b612a3591613492565b3880612a16565b03612a6a576020820151612a0d9390600190612a62906001600160a01b03163690613444565b959094612a00565b604051632d6a6bb760e01b8152600490fd5b92809193036129c557337f00000000000000000000000000000000000000000000000000000000000000008216146129c5576040516348f5c3ed60e01b8152600490fd5b50838114156129a4565b6001600160a01b031660009081526000805160206151298339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88916000805160206151498339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612b67612b5d84611c53565b5463ffffffff1690565b9360008051602061514983398151915294612b8a865463ffffffff9060a81c1690565b63ffffffff809281808416911614612cff575b50506020820180516001600160a01b0397919291612bca91891615612cf6575b5460a81c63ffffffff1690565b81612bdc610775865163ffffffff1690565b91161490811591612ccc575b50612cba57612a00612c3792612bfd87611c53565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612ca9575b5050506001600160f81b03198116600160f81b8103612c8d575060581c1691823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b909350600160f91b141590506103d8576102139160081b613ef6565b612cb2926136f6565b388080612c43565b604051633ab3447f60e11b8152600490fd5b9050612cda612b5d87611c53565b90612cec610775855163ffffffff1690565b9116101538612be8565b60018452612bbd565b600080516020615149833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612b9d565b9182358060f81c80600014612d835780600114612d7657600214612d6057600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611e569694835260018060a01b0316602083015260408201528160608201520191611e59565b909192612ddd94612dd191858585614156565b9492939196909661424a565b509065ffffffffffff8091164210918215612e63575b5050612e5057612e31612e07602096612e6f565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612d93565b03916001600160a01b03165afa90811561091957600091611f3d575090565b506001600160e01b031995945050505050565b16421190503880612df3565b611e569060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612eb081610ee2565b519020614273565b90818060081b9160ff839260f01c16600214612ed057565b6001600160d81b031983169150565b9080601f8301121561020357816020611e569335910161263c565b91906101208382031261020357612f0f610f7d565b92612f1981610208565b8452602081013560208501526040810135916001600160401b03928381116102035781612f47918401612edf565b604086015260608201358381116102035781612f64918401612edf565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116102035781612f9f918401612edf565b60e0860152610100928383013590811161020357612fbd9201612edf565b90830152565b90816020910312610203575190565b80516001600160a01b03168252611e56919061305061302061300e61012060208501516020870152604085015190806040880152860190610c78565b60608401518582036060870152610c78565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610c78565b916101008092015191818403910152610c78565b939291613081906040928652606060208701526060860190612fd2565b930152565b929190613081602091604086526040860190612fd2565b9290926000926130ad3682612efa565b9161010091828101916130c08383612003565b90949093600160f81b936001600160f81b03199384168514613209575b50505087160361316a575050604051639700320360e01b8152936020928592839160009183916131109160048401613086565b039260581c6001600160a01b03165af190811561091957611e5692600092613139575b50614771565b61315c91925060203d602011613163575b6131548183610f4f565b810190612fc3565b9038613133565b503d61314a565b909460081b93909291600160f01b613187611f87611f8088611e09565b166131f75760006131a86131a26020966131d299858a614571565b94614771565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501613064565b03926001600160a01b03165af190811561091957611e56926000926131395750614771565b6040516314b9743f60e01b8152600490fd5b9091955061322593985061321e929450612003565b9088614387565b969192909361323885899599369161263c565b908601523880806130dd565b60008051602061514983398151915280549163ffffffff92600a848260a81c16019084821161330e5782851691851682116132fc5760c81c84161015612cba57600080516020615149833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106132ca5750565b600080516020615149833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b60405161333081610f18565b600681526512d95c9b995b60d21b60208201529060405161335081610f18565b6005815264302e332e3160d81b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156109195780926133d557505090565b611e5692503d8091833e6109388183610f4f565b6000928361341095936040519687958694859363d68f602560e01b85523360048601611e7a565b03926001600160a01b03165af19081156109195760009161342f575090565b611e5691503d806000833e6109388183610f4f565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b6001600160a01b0316803b1561020357604051630b9dfbed60e11b8152602060048201529160009183918290849082906134d0906024830190610c78565b03925af18015610919576134e15750565b61021390610eca565b634e487b7160e01b600052603260045260246000fd5b80511561350d5760200190565b6134ea565b805182101561350d5760209160051b010190565b9082101561350d5761027d9160051b810190612003565b96959192939694909460005b86811061355b57505050505050509050565b8061359c8a60019360051b850135613572816102a7565b61358884613580818c613512565b51938c613526565b90613594868b8b613526565b949093612b4c565b01613549565b901561350d5790565b6001600160a01b039391929190848316156136ee575b6135ca90611dd1565b946135f66135e96135db83856135a2565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806136cf575050908061361892861693611b4c565b823b156102035761364392600092836040518096819582946306d61fe760e41b845260048401612322565b03925af19485156109195761367f61369f93600193610213986136bc575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806109136136c992610eca565b38613661565b925092505094919403612a6a57600161369f9161367f61021396613663565b8492506135c1565b6001600160a01b031691821580156137b9575b6137b45760405163d60b347f60e01b8152306004820152602081602481875afa90811561091957600091613795575b5015613760576001600160f81b0319806137556135db84866135a2565b161461376057505050565b8061376a92611b4c565b823b15610203576122a992600092836040518096819582946306d61fe760e41b845260048401612322565b6137ae915060203d602011610981576109738183610f4f565b38613738565b505050565b5060018314613709565b919392916001600160a01b039081841615613848575b1660008181526000805160206151298339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613844576134d09394836040518096819582946306d61fe760e41b8452602060048501526024840191611e59565b8280fd5b600193506137d9565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a9160609161388382610bcd83611c8c565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a825195613916876139086020820193638a91b0e360e01b8552602060248401526044830190610c78565b03601f198101895288610f4f565b6000918291828587519a6139298c610efd565b828c525193f1943d908161395c575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b60009150613938565b6139756139a89194939294611dd1565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161273a9136919061263c565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b0390811660008181526000805160206151298339815191526020526040902080546001600160a01b0319811690915590911693926122b89261273a91369161263c565b90929192613a3b613a296000805160206151498339815191525460581b90565b6001600160581b031980851691161490565b6127de57613a4b611cfe83611c53565b93613a6c613a5884611c53565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b8103613aa557506122b89291613a9391369161263c565b9060581c6001600160a01b03166138b6565b600160f91b141590506103d8576102139160081b61480c565b604051613aca81610f18565b600181528060005b602080821015613aed57906060602092828501015201613ad2565b50505090565b90613afd82610f8a565b613b0a6040519182610f4f565b8281528092613b1b601f1991610f8a565b019060005b828110613b2c57505050565b806060602080938501015201613b20565b906040611e5692600081528160208201520190610c78565b613b69818060081b918160301b9160501b90565b5090936001600160f81b031993600160f81b939092508416838103613bf4575050613b9b908035019060208201913590565b929093168015600014613bb3575050611e5691614a8a565b03613bc157611e56916149cd565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b94959490919080613c96575090613c0a91614921565b93909294613c16613abe565b971680613c3b575050613c2893614972565b613c3183613500565b526122b882613500565b03613bc157613c4993614949565b613c5284613500565b52610213577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613c91613c8484613500565b5160405191829182613b3d565b0390a1565b919593918203613bc157613ccd90613cc7613caf613abe565b9780613cc16123ce6123c88387611b30565b93611b69565b9161346b565b613cd987959295613500565b5216908103613d17575015613cea57565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613c91613c8484613500565b613bc1576102135760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b6001600160a01b03169081158015613dad575b6137b457821561350d576001600160f81b03198135811614613d8e57505050565b82600111610203576122b89261273a913691600019019060010161263c565b5060018214613d6d565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613e0b57505050565b6000526020600020918201915b828110613e2457505050565b818155600101613e18565b6001600160501b03199035818116939260168110613e4c57505050565b60160360031b82901b16169150565b805482101561350d5760005260206000200190600090565b805468010000000000000000811015610edd57613e9591600182018155613e5b565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ee757505050565b60020360031b82901b16169150565b90803501906020808301923560fe8111801561414e575b61413c57600180613f1d85611e09565b0154614123575b60001982019260005b848110614046575061400b9594614019949093613fef9350613fe89250613f88613fd9613fc0611f87613fba613fb487878e613faf8e613f80611d3b6123ce6123c8613f7a898989613526565b90611b94565b9a8b91611e09565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613526565b90611bc2565b90613eca565b613fc988611e09565b9060f01c61ffff19825416179055565b6001600160a01b031696613526565b8091611ba5565b6040519586939092906001600160e01b03191660208501613eb4565b03601f198101845283610f4f565b803b15610203576040516306d61fe760e41b81529160009183918290849082906122a99060048301612102565b61409d611d3b611d3b6123ce6123c8613f7a868a8e613faf8f6140698e91611e09565b0161409761408a61408461407e888888613526565b90611b86565b90613e2f565b6001600160501b03191690565b90613e73565b906140ac613fe882878b613526565b906140cd60409161400b83519485928d63ffffffff60e01b168a8501613eb4565b833b156102035760009384926140f792519586809481936306d61fe760e41b835260048301612102565b03925af1918215610919578492614110575b5001613f2d565b8061091361411d92610eca565b38614109565b614137600161413186611e09565b01613df7565b613f24565b60405163b62d956d60e01b8152600490fd5b508015613f0d565b84846141d9926141c497969498956040519161417183610f33565b6141d360009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614b23565b60ff806141f26141ec6135db87866135a2565b60f81c90565b16036142385761422161420c8461421c9561423194611b4c565b9490955163ffffffff60e01b1690565b611e09565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c1692831560011461426b575b5060d01c92565b925038614264565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614300575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206142e1565b9192909261439361280f565b9061439e9085611b30565b6143a791612333565b60601c602082018190526000805160206151498339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906144189261263c565b80519060200120913661442c90888861263c565b805190602001203661443f908b8d61263c565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906144cb61010082610f4f565b5190206144d790614273565b607489013589018d8b82013591016144ee92614d75565b9a6144f99488612b4c565b6145038183614f12565b61450c91611af4565b61451591611c27565b61451e91613851565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061454b57505050565b60080360031b82901b16169150565b604090611e56939281528160208201520190612fd2565b60009493916001868161458385611e09565b016000835b6145d0575b5050505060ff806145a46141ec6135db87896135a2565b1603614238576101006145c86145c18561422196611e5698611b4c565b369161263c565b910152611e09565b8197969754811015614769576146016145f96145ec8385613e5b565b90549060031b1c60501b90565b908160501c90565b98909761461d6146176141ec6135db85856135a2565b60ff1690565b808403614738575090818161465661464a61464461463e8461467398611bd0565b9061452e565b60c01c90565b6001600160401b031690565b600901916146686145c1848484611be1565b6101008b0152611c0f565b989098975b600160f01b161561468d575b50830183614588565b99866146ca929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d840161455a565b0393165af1958615610919578896614719575b505084166146ff5750506146f5859493928592614771565b9a91929350614684565b51631f24c1fb60e11b81529081018c815281906020010390fd5b614730929650803d10613163576131548183610f4f565b9338806146dd565b909991989083111561475657604051630760bdcf60e11b8152600490fd5b61475e6125e9565b610100880152614678565b96959661458d565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146147a257505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614804575b83811680156147fd575b8781109088180280881897146147f5575b508181119082180218921716171790565b9550386147e4565b50806147d3565b9550856147c9565b9190803501916020906020840193359061482581611e09565b9260019060018501906001825401850361490f57906000835b6148a1575b505050506148909161488b82613fef6102139798614868600161413161400b98611e09565b875461487f9060101c6001600160a01b0316611d3b565b94600019810191613526565b6138b6565b5080546001600160b01b0319169055565b815481101561490a5790838261490061400b8c6148f28a6148d7868e6148cf6145f96145ec8c9f9e8e613e5b565b969050613526565b6040519586939092906001600160e01b0319168c8501613eb4565b6001600160a01b03166138b6565b500190919261483e565b614843565b60405163013dcc8d60e31b8152600490fd5b908060141161020357813560601c928160341161020357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af1156149a1573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b919081101561350d5760051b81013590605e1981360301821215610203570190565b9190916149d983613af3565b9260005b8181106149e957505050565b806149f760019284866149ab565b8035614a02816101f2565b614a2360208093604093614a1885830183612003565b939092013590614949565b614a2d858b613512565b5215614a3c575b5050016149dd565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb791614a80614a6b858b613512565b51838051948594888652850152830190610c78565b0390a13880614a34565b919091614a9683613af3565b9260005b818110614aa657505050565b80614adc6020614ab960019486886149ab565b8035614ac4816101f2565b614ad16040830183612003565b939092013590614972565b614ae68288613512565b52614af18187613512565b5001614a9a565b9092608092611e569594835260018060a01b0316602083015260408201528160608201520190610c78565b9190606083016001936001614b4261421c845163ffffffff60e01b1690565b01936000936000958054965b878110614b6057505050505050505050565b80614b726145f96145ec8c9486613e5b565b6001600160a01b031660a0880190815260808801959091614b9b906001600160f01b0319168752565b614bb5614bae6141ec6135db8a856135a2565b60ff168952565b614bc3614617895160ff1690565b808403614d3d5750868181614be861464a61464461463e614c3c9c9d614c0f98611bd0565b60208c018181528c60c0614c046145c160099586018789611be1565b910152510191611c0f565b959095965b51600160f11b90614c2e906001600160f01b031916611f87565b166001600160f01b03191690565b15614c49575b5001614b4e565b51909150614c5f906001600160a01b0316611d3b565b8651614c8390614c76906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614cc86101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b8601614af8565b03915afa938415610919578b94614d1e575b50506001600160a01b038316614d035750860180518b9392614cfb91614771565b905238614c42565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614d35929450803d10613163576131548183610f4f565b913880614cda565b839196945010600014614d5c57604051630760bdcf60e11b8152600490fd5b614c3c8b93614d6b3688612619565b60c08a0152614c14565b6000805160206151498339815191525460009493929060581b916001600160f81b03198316600160f81b8103614e385750604051637aa8f17760e11b8152936020938593909284928392614dcd923060048601611e7a565b039160581c6001600160a01b03165afa90811561091957600091614e19575b505b6001600160e01b0319166374eca2c160e11b01614e0757565b6040516362467c7760e11b8152600490fd5b614e32915060203d602011611f5f57611f578183610f4f565b38614dec565b919550929190600160f91b036103d857602091614e5b9160081b95843088614156565b60405163392dffaf60e01b81529297929586949385938493614e8e93909230906001600160e01b03191660048701612d93565b03916001600160a01b03165afa90811561091957600091614eb0575b50614dee565b614ec9915060203d602011611f5f57611f578183610f4f565b38614eaa565b15614ed657565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614f1f6106528383611af4565b906004831015614f2e57505050565b602c83106150be57614f49611d3b6123ce6123c88685611b1f565b602c8201358201602c604c820191013591604c840135840194614f83614f756135e96135db87876135a2565b6001600160f81b0319161590565b8061502d575b94614fca61251795611d3b95614fcf956102139b956123ce9a614fdf575b614fba611d3b6123ce6123c88a8a611bfe565b916001600160a01b0316906135ab565b611bfe565b602c86013595604c019491612333565b615028606c8701358701615022602c604c830192013580615009611d3b6123ce6123c88488611b30565b9361501d856001600160a01b038a166150cc565b611b69565b916136f6565b614fa7565b5091939092956040519163ecd0596160e01b83526020838061505760048201906002602083019252565b03816001600160a01b0389165afa92831561091957610213986123ce9761251797611d3b97614fcf97614fca9560009161509f575b50959a50959b5095509550955050614f89565b6150b8915060203d602011610981576109738183610f4f565b3861508c565b505060046102139114614ecf565b61021391906001600160a01b03908183161561511f575b1660005260008051602061512983398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b600192506150e356fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", - "nonce": "0x46", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006101403461020457601f61574438819003918201601f191683019291906001600160401b0384118385101761020957816020928492604096875283398101031261020457516001600160a01b038116810361020457306080524660a05260a082516100698161021f565b600681526005602082016512d95c9b995b60d21b81526020865161008c8161021f565b838152019264302e332e3160d81b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b8252600481526101108161021f565b5190516001600160581b0319918282169190601581106101ef575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190615509928361023b8439608051836142d7015260a051836142fa015260c0518361436c015260e05183614392015251826142b60152518181816103af015281816106d30152818161088901528181610c22015281816110020152818161132901528181611491015281816114f101528181611a1901528181611b5f0152818161259d0152612e9d0152f35b8391925060150360031b1b161680388061012b565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176102095760405256fe6080604052600436101561001d575b36612d585761001b612d27565b005b60003560e01c8063112d3a7d146101fd578063150b7a02146101f85780631626ba7e146101f357806319822f7c146101ee5780631f1b92e3146101e95780633659cfe6146101e45780633c3b752b146101df57806352141cd9146101da57806357b3a5f4146101d55780636e6fa0c6146101d0578063721e67f4146101cb57806384b0196e146101c65780638dd7712f146101c157806390ef8862146101bc5780639198bdf5146101b75780639517e29f146101b25780639cfd7cff146101ad578063a65d69d4146101a8578063a71763a8146101a3578063adb610a31461019e578063b8afe17d14610199578063bc197c8114610194578063c3e589781461018f578063d03c79141461018a578063d691c96414610185578063e6f3d50a14610180578063e9ae5c531461017b578063f1f7f0f914610176578063f23a6e61146101715763f2dc691d0361000e57611cec565b611c92565b611c5a565b611b2e565b61199e565b6118ba565b61186d565b611791565b61168a565b611620565b6115ec565b6114c0565b61147b565b611424565b6112f8565b6111f1565b6110d0565b610fcc565b610f2a565b610e7e565b610e21565b610d73565b610b99565b6109c2565b610849565b610691565b610371565b610311565b6102b7565b610291565b6001600160a01b0381160361021357565b600080fd5b359061022382610202565b565b9181601f84011215610213578235916001600160401b038311610213576020838186019501011161021357565b6060600319820112610213576004359160243561026e81610202565b91604435906001600160401b0382116102135761028d91600401610225565b9091565b346102135760206102ad6102a436610252565b92919091611eec565b6040519015158152f35b34610213576080366003190112610213576102d3600435610202565b6102de602435610202565b6064356001600160401b038111610213576102fd903690600401610225565b5050604051630a85bd0160e11b8152602090f35b34610213576040366003190112610213576024356001600160401b0381116102135761034f6103466020923690600401610225565b9060043561209c565b6040516001600160e01b03199091168152f35b90816101209103126102135790565b606036600319011261021357600480356001600160401b0381116102135761039c9036908301610362565b60243590604435906001600160a01b03907f00000000000000000000000000000000000000000000000000000000000000008216330361065c578084926103e66020830135613093565b6001600160f81b031990911615959093909186610632575b908461040a9392613278565b9561041c61041784611e7a565b6121db565b94159485806105f0575b6105df57602001516001600160a01b03169182169081156105ce5760019261045b61047a926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361052d57826104cf575b50506104be576104a89250805b6104ac575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610497565b604051631a0a9b9f60e21b81528390fd5b6105269250610522916105046104fe6104f86104ed61051b95611eb3565b936060810190612207565b90611d1b565b90611e4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610485565b8291929161059b575b5061058a576104f881606061054c930190612207565b638dd7712f60e01b916001600160e01b03199161056891611e4e565b1603610579576104a8925080610492565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b6105c8915061051b6105af61052292611eb3565b6105046104fe6105c26060880188612207565b90611d0a565b38610536565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff61062a6106216000805160206154e98339815191525463ffffffff9060c81c1690565b63ffffffff1690565b911610610426565b93509061040a916106526000805160206154e98339815191525460581b90565b94909192506103fe565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff8216820361021357565b359063ffffffff8216820361021357565b6020366003190112610213576106a561066d565b6106c76106c16000805160206154e98339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061083f575b156108345760405163ecd0596160e01b8152600480820152911690602081602481855afa9081156107c557600091610805575b50156107f35760405163d68f602560e01b81529160008380610756363433600485016122ca565b038183865af19283156107c5576000936107ca575b506107759061341f565b803b1561021357604051630b9dfbed60e11b81529160009183918290849082906107a29060048301612306565b03925af180156107c5576107b257005b806107bf61001b9261111a565b80610ed7565b612090565b6107759193506107ec903d806000833e6107e4818361119f565b81019061226c565b929061076b565b6040516348f5c3ed60e01b8152600490fd5b610827915060203d60201161082d575b61081f818361119f565b810190612239565b3861072f565b503d610815565b505061001b9061341f565b50303314156106fc565b60203660031901126102135760043561086181610202565b61087d6106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610976575b1561096b5760405163ecd0596160e01b8152600480820152911690602081602481855afa9081156107c55760009161094c575b50156107f35760405163d68f602560e01b8152916000838061090c363433600485016122ca565b038183865af19283156107c55760009361092b575b5061077590612317565b610775919350610945903d806000833e6107e4818361119f565b9290610921565b610965915060203d60201161082d5761081f818361119f565b386108e5565b505061001b90612317565b50303314156108b2565b6001600160581b031981160361021357565b9181601f84011215610213578235916001600160401b038311610213576020808501948460051b01011161021357565b346102135760a03660031901126102135760048035906109e182610980565b602435906109ee82610202565b6001600160401b0360443581811161021357610a0d9036908401610225565b909160643581811161021357610a269036908601610225565b92909160843590811161021357610a409036908701610992565b9490966001600160581b0319610a8081610a79610a6c6000805160206154e98339815191525460581b90565b6001600160581b03191690565b161561236b565b891615610b88576001600160f81b03198916600160f81b8114159081610b79575b50610b685788610ab6610b049798999a6134e8565b610ad7610ac16111c0565b60018152925b6001600160a01b03166020840152565b6000805160206154e9833981519152805463ffffffff60a81b1916600160a81b179055613543565b613543565b60005b818110610b1057005b600080610b1e8385886123f5565b60409391610b30855180938193612411565b039082305af1610b3e612432565b5015610b4d5750600101610b07565b51636534eae560e11b81528084019182529081906020010390fd5b6040516361c4e91b60e11b81528790fd5b600160f91b1415905038610aa1565b604051631a0a9b9f60e21b81528790fd5b6080366003190112610213576004803590610bb382610980565b60243591610bc083610202565b6001600160401b039260443584811161021357610be09036908501610225565b909460643590811161021357610bf99036908601610225565b91610c166106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610d57575b15610d4657169660405163ecd0596160e01b815260208180610c748b8201906004602083019252565b03818c5afa9081156107c557600091610d27575b5015610d165760405163d68f602560e01b81529460008680610cae3634338e85016122ca565b0381838d5af19586156107c557600096610cf7575b50610cce9596612462565b823b15610213576107a29260009283604051809681958294630b9dfbed60e11b84528301612306565b610cce9650610d10903d806000833e6107e4818361119f565b95610cc3565b6040516348f5c3ed60e01b81528790fd5b610d40915060203d60201161082d5761081f818361119f565b38610c88565b505092909361001b96929550612462565b5030331415610c4b565b6001600160e01b031981160361021357565b34610213576020366003190112610213576104a8610db5600435610d9681610d61565b600060408051610da581611132565b8281528260208201520152611fc3565b60405190610dc282611132565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b3461021357604036600319011261021357602060ff610e72600435610e4581610980565b610e5a60243591610e5583610d61565b611eb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b34610213576020366003190112610213576020610eb4600435610ea081610202565b6000604051610eae8161114d565b52612ef1565b60405190610ec18261114d565b546001600160a01b031690819052604051908152f35b600091031261021357565b60005b838110610ef55750506000910152565b8181015183820152602001610ee5565b90602091610f1e81518092818552858086019101610ee2565b601f01601f1916010190565b3461021357600036600319011261021357610f79610f466136fb565b90604051928392600f60f81b8452610f6b60209360e0602087015260e0860190610f05565b908482036040860152610f05565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610fb557505050500390f35b835185528695509381019392810192600101610fa6565b6040366003190112610213576004356001600160401b03811161021357610ff7903690600401610362565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036107f357602435600090815260208190526040902054606091906001906001600160a01b0316938416141590816110a0575b61107261106b826060611079940190612207565b8091611d29565b9030613842565b501561108e5761108557005b61001b91613869565b60405163f21e646b60e01b8152600490fd5b915061107961107261106b6110c66110be61106b6060880188612207565b9034896137c0565b9492505050611057565b3461021357600036600319011261021357602063ffffffff6000805160206154e98339815191525460c81c16604051908152f35b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161112d57604052565b611104565b606081019081106001600160401b0382111761112d57604052565b602081019081106001600160401b0382111761112d57604052565b604081019081106001600160401b0382111761112d57604052565b61012081019081106001600160401b0382111761112d57604052565b90601f801991011681019081106001600160401b0382111761112d57604052565b6040519061022382611168565b6040519061022382611183565b6001600160401b03811161112d5760051b60200190565b6080366003190112610213576001600160401b036004358181116102135761121d903690600401610992565b906024358381116102135736602382011215610213578060040135611241816111da565b91604091611252604051948561119f565b8084526020906024602086019160061b8401019236841161021357602401905b8382106112ba57505050505060443584811161021357611296903690600401610992565b91606435958611610213576112b261001b963690600401610992565b95909461256e565b84823603126102135782859182516112d181611168565b6112da85610680565b8152828501356112e981610202565b83820152815201910190611272565b61130136610252565b61131d6106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061141a575b1561140e5760405163ecd0596160e01b815260048082015291169290602081602481875afa9081156107c5576000916113ef575b50156107f35760405163d68f602560e01b815293600085806113ad363433600485016122ca565b038183885af19485156107c5576000956113ce575b5061077593949561272a565b6107759495506113e8903d806000833e6107e4818361119f565b94936113c2565b611408915060203d60201161082d5761081f818361119f565b38611386565b50509161001b9361272a565b5030331415611352565b34610213576000366003190112610213576104a860405161144481611168565b60168152756b65726e656c2e616476616e6365642e76302e332e3160501b6020820152604051918291602083526020830190610f05565b34610213576000366003190112610213576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6114c936610252565b6114e56106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806115e2575b156115d65760405163ecd0596160e01b815260048082015291169290602081602481875afa9081156107c5576000916115b7575b50156107f35760405163d68f602560e01b81529360008580611575363433600485016122ca565b038183885af19485156107c557600095611596575b50610775939495612a83565b6107759495506115b0903d806000833e6107e4818361119f565b949361158a565b6115d0915060203d60201161082d5761081f818361119f565b3861154e565b50509161001b93612a83565b503033141561151a565b3461021357600036600319011261021357602063ffffffff6000805160206154e98339815191525460a81c16604051908152f35b3461021357602036600319011261021357604061165060043561164281610980565b61164a612c1f565b50611e7a565b602082519161165e83611168565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b346102135760a0366003190112610213576116a6600435610202565b6116b1602435610202565b6001600160401b03604435818111610213576116d1903690600401610992565b5050606435818111610213576116eb903690600401610992565b505060843590811161021357611705903690600401610225565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611773575050505090565b83516001600160501b03191685529381019392810192600101611765565b3461021357602080600319360112610213576004356117af81610d61565b6117d460409160608380516117c381611132565b600081526000878201520152611ffb565b908051916117e183611132565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b82821061184b576104a888888861183d818e038261119f565b818301525191829182611719565b845460501b6001600160501b0319168952978801979383019390830190611824565b346102135760203660031901126102135760206102ad600435612c38565b9060406003198301126102135760043591602435906001600160401b0382116102135761028d91600401610225565b6118c33661188b565b916001600160a01b036118d533612ef1565b541690811561198c57606060019460018414159485611975575b6118f99293613ef5565b92611965575b5050906040519060208083016020845284518091526040840191602060408360051b8701019601926000905b8382106119385786880387f35b90919293948380611954839a603f198b82030186528951610f05565b99970195949391909101910161192b565b61196e91613869565b38806118ff565b6118f9925061198536348761373c565b92506118ef565b60405163710c949760e01b8152600490fd5b60603660031901126102135760048035906119b882610980565b6001600160401b0391602435838111610213576119d89036908401610225565b93604435908111610213576119f09036908501610225565b90611a0d6106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611b24575b15611b1457169560405163ecd0596160e01b815260208180611a6b8a8201906004602083019252565b03818b5afa9081156107c557600091611af5575b5015611ae45760405163d68f602560e01b81529360008580611aa53634338d85016122ca565b0381838c5af19485156107c557600095611ac5575b50610cce9495612cfa565b610cce9550611ade903d806000833e6107e4818361119f565b94611aba565b6040516348f5c3ed60e01b81528690fd5b611b0e915060203d60201161082d5761081f818361119f565b38611a7f565b50509261001b9592919450612cfa565b5030331415611a42565b611b373661188b565b611b536106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611c50575b15611c445760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156107c557600091611c25575b50156107f35760405163d68f602560e01b81529260008480611be3363433600485016122ca565b038183875af19384156107c557600094611c04575b50610775929394612d0f565b610775939450611c1e903d806000833e6107e4818361119f565b9392611bf8565b611c3e915060203d60201161082d5761081f818361119f565b38611bbc565b50509061001b92612d0f565b5030331415611b88565b346102135760003660031901126102135760206000805160206154e98339815191525460581b604051906001600160581b0319168152f35b346102135760a036600319011261021357611cae600435610202565b611cb9602435610202565b6084356001600160401b03811161021357611cd8903690600401610225565b505060405163f23a6e6160e01b8152602090f35b346102135760203660031901126102135760206102ad600435612d1a565b906008116102135760040190600490565b906004116102135790600490565b909291928360041161021357831161021357600401916003190190565b906018116102135760040190601490565b906014116102135790601490565b906020116102135790602090565b909291928360011161021357831161021357600101916000190190565b909291928360141161021357831161021357601401916013190190565b906009116102135760010190600890565b909291928360091161021357831161021357600901916008190190565b906016116102135790601690565b906016116102135760020190601490565b909291928360161161021357831161021357601601916015190190565b906002116102135790600290565b90602c116102135760180190601490565b90939293848311610213578411610213578101920390565b6001600160e01b03199035818116939260048110611e6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611f3b57506001600160a01b0392611f359250611f25915060581b600160581b600160f81b0316600160f81b17611e7a565b5460201c6001600160a01b031690565b16151590565b60028103611f7b57506001600160a01b0392611f359250611f6f9150611f62908416612ef1565b546001600160a01b031690565b6001600160a01b031690565b600303611fbb57611f9c611f976104fe600193611faa95611d1b565b611fc3565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b90816020910312610213575161204881610d61565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b612048949260609260018060a01b031682526020820152816040820152019161204b565b6040513d6000823e3d90fd5b916120a691612f18565b91906001600160f81b0319808316156121ba575b6001600160a01b0390816120d3611f6f611f2587611e7a565b16156121a8578316600160f81b03612158579060209392916120f76121159661304a565b604051637aa8f17760e11b815296879586948593336004860161206c565b039260581c165afa9081156107c55760009161212f575090565b612048915060203d602011612151575b612149818361119f565b810190612033565b503d61213f565b509060081b92600160f11b61218661217961217287611ffb565b5460f01b90565b6001600160f01b03191690565b1661219657612048933390612f99565b604051635b71057960e01b8152600490fd5b604051631a0a9b9f60e21b8152600490fd5b91506121d56000805160206154e98339815191525460581b90565b916120ba565b906040516121e881611168565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561021357018035906001600160401b0382116102135760200191813603831361021357565b90816020910312610213575180151581036102135790565b6001600160401b03811161112d57601f01601f191660200190565b602081830312610213578051906001600160401b038211610213570181601f8201121561021357805161229e81612251565b926122ac604051948561119f565b81845260208284010111610213576120489160208085019101610ee2565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b906020612048928181520190610f05565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b1561237257565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b6000805160206154e9833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b600052603260045260246000fd5b9082101561240c5761028d9160051b810190612207565b6123df565b908092918237016000815290565b6040519061242c8261114d565b60008252565b3d1561245d573d9061244382612251565b91612451604051938461119f565b82523d6000602084013e565b606090565b94939291906001600160581b03198616156121a8576001600160f81b03198616600160f81b811415908161251e575b5061250c5761249f866134e8565b6001600160a01b036124b3611f2588611e7a565b16156124c2575b505050505050565b61250195610aff6124e96000805160206154e98339815191525463ffffffff9060a81c1690565b92610ac76124f56111c0565b63ffffffff9095168552565b3880808080806124ba565b6040516361c4e91b60e11b8152600490fd5b600160f91b1415905038612491565b9060405161253a81611132565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125916106c16000805160206154e98339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806126de575b156126ce5760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156107c5576000916126af575b50156107f35760405163d68f602560e01b81529660008880612621363433600485016122ca565b0381838b5af19788156107c55760009861268e575b506126429697986138e2565b803b1561021357604051630b9dfbed60e11b815291600091839182908490829061266f9060048301612306565b03925af180156107c557612681575b50565b806107bf6102239261111a565b6126429798506126a8903d806000833e6107e4818361119f565b9796612636565b6126c8915060203d60201161082d5761081f818361119f565b386125fa565b50509193909294610223966138e2565b50303314156125c6565b91602061204893818152019161204b565b6bffffffffffffffffffffffff19903581811693926014811061271b57505050565b60140360031b82901b16169150565b60018103612863575060581b600160581b600160f81b0316600160f81b17906127ee6127c7611f6f6127c16127bb6127b461277161276789611e7a565b5463ffffffff1690565b6000805160206154e983398151915290612793825463ffffffff9060a81c1690565b9063ffffffff9081168183161461284f575b50505460a81c63ffffffff1690565b9786611d57565b906126f9565b60601c90565b6127de6127d26111c0565b63ffffffff9096168652565b6001600160a01b03166020850152565b6128286014820135820191603481013581019060548101350194601486013593603460148401359301916034601483013592019087613543565b60048114612836575b505050565b6104fe6128499160346102239501611d1b565b90613bf1565b600161285c9201166123ad565b38806127a5565b600281036128bf5750916128b061022393612895611f6f6127c16127bb60148801358801966034890135890198611d57565b928391601482013591603401906001600160a01b0316613b63565b60346014830135920190613a9b565b9091906003810361293f575061293a611f6f61292a610223958461292560186127c197013582016127c160388401358401996128fe6104fe8787611d1b565b9061291f611f6f61290f8989611d46565b60188801359760380196916126f9565b91613950565b611d46565b60188601359560380194916126f9565b613a9b565b9091906004810361298057506001600160a01b031691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b600581036129be57506001600160a01b031691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b6006036129fa576001600160a01b031691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b604051631092ef5760e11b8152600490fd5b359060208110612a1a575090565b6000199060200360031b1b1690565b919060405190612a388261114d565b819360008352116102135760206000910152565b929192612a5882612251565b91612a66604051938461119f565b829481845281830111610213578281602093846000960137010152565b92919060018403612aad5761267e935060581b600160581b600160f81b0316600160f81b17613da9565b60028403612ac85761267e93506001600160a01b0316613d5f565b90919060038403612af7575061267e92508080612aeb6104fe612af19486611d1b565b93611d29565b91613d05565b919260048103612b7d575061267e92612b4a91612b236000805160206154e98339815191525460581b90565b612b2f611f2582611e7a565b6001600160a01b03868116911614612b50575b503691612a4c565b90613c56565b612b5c612b7791611e7a565b8054640100000000600160c01b031916640100000000179055565b38612b42565b60058103612c0057506000805160206154e98339815191525460581b5b612bad612ba78386611d65565b90612a0c565b906001600160f81b03198116600160f91b14612bd5575b505061267e92612b4a913691612a4c565b60081b6001600160e01b03191614612bee573880612bc4565b6040516313002bdd60e31b8152600490fd5b6006036129fa576000805160206154e98339815191525460581b612b9a565b60405190612c2c82611168565b60006020838281520152565b612c4c818060081b918160301b9160501b90565b929091600160f81b916001600160f81b031991908216838114159081612cf0575b81612ce5575b81612cd6575b50612ccc5716908114159081612cc2575b50612cbb576001600160e01b031916612cb5576001600160501b031916612cb057600190565b600090565b50600090565b5050600090565b9050151538612c8a565b5050505050600090565b607f60f91b1415905038612c79565b838114159150612c73565b8015159150612c6d565b91612d0a91610223959493613da9565b6140fa565b9061267e9291613ef5565b60071115612cb057600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612d75612d706000356001600160e01b031916611fc3565b61252d565b80516001600160a01b03908190612d8d908216611f6f565b1615612edf57815160609082908190612dae906001600160a01b0316611f6f565b16600181141580612ed5575b15612e955750508251612dda91506001600160a01b03163690349061373c565b60408301516001600160f81b031990811680612e5e5750506020830151612e09906001600160a01b0316614157565b93905b15612e5657516001600160a01b0316918083169060018214159182612e4b575b5050612e3b575b825160208401f35b612e4491613869565b3880612e33565b141590503880612e2c565b835160208501fd5b03612e83576020830151612e7c906001600160a01b0316369061381b565b9390612e0c565b604051632d6a6bb760e01b8152600490fd5b03612dda57337f0000000000000000000000000000000000000000000000000000000000000000831614612dda576040516348f5c3ed60e01b8152600490fd5b5081811415612dba565b604051631cd4b64760e21b8152600490fd5b6001600160a01b031660009081526000805160206154c98339815191526020526040902090565b9182358060f81c80600014612f5e5780600114612f5157600214612f3b57600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b90926080926120489694835260018060a01b031660208301526040820152816060820152019161204b565b909192612fb894612fac91858585614197565b9492939196909661428b565b509065ffffffffffff809116421091821561303e575b505061302b5761300c612fe260209661304a565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612f6e565b03916001600160a01b03165afa9081156107c55760009161212f575090565b506001600160e01b031995945050505050565b16421190503880612fce565b6120489060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83835260408201526040815261308b81611132565b5190206142b4565b90818060081b9160ff839260f01c166002146130ab57565b6001600160d81b031983169150565b9080601f830112156102135781602061204893359101612a4c565b919061012083820312610213576130ea6111cd565b926130f481610218565b8452602081013560208501526040810135916001600160401b039283811161021357816131229184016130ba565b60408601526060820135838111610213578161313f9184016130ba565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e0820135838111610213578161317a9184016130ba565b60e086015261010092838301359081116102135761319892016130ba565b90830152565b90816020910312610213575190565b80516001600160a01b03168252612048919061322b6131fb6131e961012060208501516020870152604085015190806040880152860190610f05565b60608401518582036060870152610f05565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610f05565b916101008092015191818403910152610f05565b93929161325c9060409286526060602087015260608601906131ad565b930152565b92919061325c6020916040865260408601906131ad565b92909260009261328836826130d5565b91610100918281019161329b8383612207565b90949093600160f81b936001600160f81b031993841685146133e4575b505050871603613345575050604051639700320360e01b8152936020928592839160009183916132eb9160048401613261565b039260581c6001600160a01b03165af19081156107c55761204892600092613314575b506147ca565b61333791925060203d60201161333e575b61332f818361119f565b81019061319e565b903861330e565b503d613325565b909460081b93909291600160f01b61336261217961217288611ffb565b166133d257600061338361337d6020966133ad99858a6145ca565b946147ca565b604051630ccab7a160e01b8152979096889586948593926001600160e01b0319166004850161323f565b03926001600160a01b03165af19081156107c5576120489260009261331457506147ca565b6040516314b9743f60e01b8152600490fd5b909195506134009398506133f9929450612207565b90886143c8565b9691929093613413858995993691612a4c565b908601523880806132b8565b6000805160206154e983398151915280549163ffffffff92600a848260a81c1601908482116134d25782851691851682116134c05760c81c841610156134ae576000805160206154e9833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106134a55750565b610223906123ad565b604051633ab3447f60e11b8152600490fd5b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88916000805160206154e98339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b919390929461355461276784611e7a565b936000805160206154e983398151915294613577865463ffffffff9060a81c1690565b63ffffffff8092818084169116146136e7575b50506020820180516001600160a01b03979192916135b7918916156136de575b5460a81c63ffffffff1690565b816135c9610621865163ffffffff1690565b911614908115916136b4575b506134ae57613624613631926135ea87611e7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b916001858416036136a3575b5050506001600160f81b03198116600160f81b8103613687575060581c1691823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b909350600160f91b1415905061250c576102239160081b61494c565b6136ac92613a9b565b38808061363d565b90506136c261276787611e7a565b906136d4610621855163ffffffff1690565b91161015386135d5565b600184526135aa565b60016136f49201166123ad565b388161358a565b60405161370781611168565b600681526512d95c9b995b60d21b60208201529060405161372781611168565b6005815264302e332e3160d81b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156107c55780926137ac57505090565b61204892503d8091833e6107e4818361119f565b600092836137e795936040519687958694859363d68f602560e01b8552336004860161206c565b03926001600160a01b03165af19081156107c557600091613806575090565b61204891503d806000833e6107e4818361119f565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b6001600160a01b0316803b1561021357604051630b9dfbed60e11b8152602060048201529160009183918290849082906138a7906024830190610f05565b03925af180156107c5576138b85750565b6102239061111a565b80511561240c5760200190565b805182101561240c5760209160051b010190565b96959192939694909460005b86811061390057505050505050509050565b806139418a60019360051b85013561391781610980565b61392d84613925818c6138ce565b51938c6123f5565b90613939868b8b6123f5565b949093613543565b016138ee565b901561240c5790565b6001600160a01b03939192919084831615613a93575b61396f90611fc3565b9461399b61398e6139808385613947565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b031980871680613a7457505090806139bd92861693611d73565b823b15610213576139e892600092836040518096819582946306d61fe760e41b8452600484016126e8565b03925af19485156107c557613a24613a449360019361022398613a61575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107bf613a6e9261111a565b38613a06565b925092505094919403612e83576001613a4491613a2461022396613a08565b849250613966565b6001600160a01b03169182158015613b59575b6128315760405163d60b347f60e01b8152306004820152602081602481875afa9081156107c557600091613b3a575b5015613b05576001600160f81b031980613afa6139808486613947565b1614613b0557505050565b80613b0f92611d73565b823b156102135761266f92600092836040518096819582946306d61fe760e41b8452600484016126e8565b613b53915060203d60201161082d5761081f818361119f565b38613add565b5060018314613aae565b919392916001600160a01b039081841615613be8575b1660008181526000805160206154c98339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613be4576138a79394836040518096819582946306d61fe760e41b845260206004850152602484019161204b565b8280fd5b60019350613b79565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613c2382610e5a83611eb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a825195613cb687613ca86020820193638a91b0e360e01b8552602060248401526044830190610f05565b03601f19810189528861119f565b6000918291828587519a613cc98c61114d565b828c525193f1943d9081613cfc575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b60009150613cd8565b613d15613d489194939294611fc3565b80546001600160a01b031981168255600190910180546001600160a01b03928316969194921691612b4a91369190612a4c565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b0390811660008181526000805160206154c98339815191526020526040902080546001600160a01b03198116909155909116939261267e92612b4a913691612a4c565b90929192613ddb613dc96000805160206154e98339815191525460581b90565b6001600160581b031980851691161490565b612bee57613deb611f2583611e7a565b93613e0c613df884611e7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b8103613e45575061267e9291613e33913691612a4c565b9060581c6001600160a01b0316613c56565b600160f91b1415905061250c576102239160081b614bac565b604051613e6a81611168565b600181528060005b602080821015613e8d57906060602092828501015201613e72565b50505090565b90613e9d826111da565b613eaa604051918261119f565b8281528092613ebb601f19916111da565b019060005b828110613ecc57505050565b806060602080938501015201613ec0565b90604061204892600081528160208201520190610f05565b613f09818060081b918160301b9160501b90565b5090936001600160f81b031993600160f81b939092508416838103613f94575050613f3b908035019060208201913590565b929093168015600014613f5357505061204891614e2a565b03613f615761204891614d6d565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b94959490919080614036575090613faa91614cc1565b93909294613fb6613e5e565b971680613fdb575050613fc893614d12565b613fd1836138c1565b5261267e826138c1565b03613f6157613fe993614ce9565b613ff2846138c1565b52610223577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7614031614024846138c1565b5160405191829182613edd565b0390a1565b919593918203613f615761406d9061406761404f613e5e565b97806140616127c16127bb8387611d57565b93611d90565b91613842565b614079879592956138c1565b52169081036140b757501561408a57565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7614031614024846138c1565b613f61576102235760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b6001600160a01b0316908115801561414d575b61283157821561240c576001600160f81b0319813581161461412e57505050565b826001116102135761267e92612b4a9136916000190190600101612a4c565b506001821461410d565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b848461421a926142059796949895604051916141b283611183565b61421460009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614ec3565b60ff8061423361422d6139808786613947565b60f81c90565b16036142795761426261424d8461425d9561427294611d73565b9490955163ffffffff60e01b1690565b611ffb565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c169283156001146142ac575b5060d01c92565b9250386142a5565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614341575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220614322565b919290926143d4612c1f565b906143df9085611d57565b6143e8916126f9565b60601c602082018190526000805160206154e98339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d84369061445992612a4c565b80519060200120913661446d908888612a4c565b8051906020012036614480908b8d612a4c565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e0808401929092529082529061450c6101008261119f565b519020614518906142b4565b607489013589018d8b820135910161452f92615115565b9a61453a9488613543565b61454481836152b2565b61454d91611d1b565b61455691611e4e565b61455f91613bf1565b6094810135019293830192013590565b805482101561240c5760005260206000200190600090565b6001600160c01b031990358181169392600881106145a457505050565b60080360031b82901b16169150565b6040906120489392815281602082015201906131ad565b6000949391600186816145dc85611ffb565b016000835b614629575b5050505060ff806145fd61422d6139808789613947565b16036142795761010061462161461a856142629661204898611d73565b3691612a4c565b910152611ffb565b81979697548110156147c25761465a614652614645838561456f565b90549060031b1c60501b90565b908160501c90565b98909761467661467061422d6139808585613947565b60ff1690565b80840361479157509081816146af6146a361469d614697846146cc98611dad565b90614587565b60c01c90565b6001600160401b031690565b600901916146c161461a848484611dbe565b6101008b0152611e36565b989098975b600160f01b16156146e6575b508301836145e1565b9986614723929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d84016145b3565b0393165af19586156107c5578896614772575b5050841661475857505061474e8594939285926147ca565b9a919293506146dd565b51631f24c1fb60e11b81529081018c815281906020010390fd5b614789929650803d1061333e5761332f818361119f565b933880614736565b90999198908311156147af57604051630760bdcf60e11b8152600490fd5b6147b761241f565b6101008801526146d1565b9695966145e6565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146147fb57505050600190565b65ffffffffffff60a01b80831693906001600160d01b03198481169190831690861561485d575b8381168015614856575b87811090881802808818971461484e575b508181119082180218921716171790565b95503861483d565b508061482c565b955085614822565b805490600090600081558261487957505050565b6000526020600020918201915b82811061489257505050565b818155600101614886565b6001600160501b031990358181169392601681106148ba57505050565b60160360031b82901b16169150565b80546801000000000000000081101561112d576148eb9160018201815561456f565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b0319903581811693926002811061493d57505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015614ba4575b614b925760018061497385611ffb565b0154614b79575b60001982019260005b848110614a9c5750614a619594614a6f949093614a459350614a3e92506149de614a2f614a16612179614a10614a0a87878e614a058e6149d6611f6f6127c16127bb6149d08989896123f5565b90611de9565b9a8b91611ffb565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6123f5565b90611e17565b90614920565b614a1f88611ffb565b9060f01c61ffff19825416179055565b6001600160a01b0316966123f5565b8091611dfa565b6040519586939092906001600160e01b0319166020850161490a565b03601f19810184528361119f565b803b15610213576040516306d61fe760e41b815291600091839182908490829061266f9060048301612306565b614af3611f6f611f6f6127c16127bb6149d0868a8e614a058f614abf8e91611ffb565b01614aed614ae0614ada614ad48888886123f5565b90611ddb565b9061489d565b6001600160501b03191690565b906148c9565b90614b02614a3e82878b6123f5565b90614b23604091614a6183519485928d63ffffffff60e01b168a850161490a565b833b15610213576000938492614b4d92519586809481936306d61fe760e41b835260048301612306565b03925af19182156107c5578492614b66575b5001614983565b806107bf614b739261111a565b38614b5f565b614b8d6001614b8786611ffb565b01614865565b61497a565b60405163b62d956d60e01b8152600490fd5b508015614963565b91908035019160209060208401933590614bc581611ffb565b92600190600185019060018254018503614caf57906000835b614c41575b50505050614c3091614c2b82614a456102239798614c086001614b87614a6198611ffb565b8754614c1f9060101c6001600160a01b0316611f6f565b946000198101916123f5565b613c56565b5080546001600160b01b0319169055565b8154811015614caa57908382614ca0614a618c614c928a614c77868e614c6f6146526146458c9f9e8e61456f565b9690506123f5565b6040519586939092906001600160e01b0319168c850161490a565b6001600160a01b0316613c56565b5001909192614bde565b614be3565b60405163013dcc8d60e31b8152600490fd5b908060141161021357813560601c928160341161021357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af115614d41573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b919081101561240c5760051b81013590605e1981360301821215610213570190565b919091614d7983613e93565b9260005b818110614d8957505050565b80614d976001928486614d4b565b8035614da281610202565b614dc360208093604093614db885830183612207565b939092013590614ce9565b614dcd858b6138ce565b5215614ddc575b505001614d7d565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb791614e20614e0b858b6138ce565b51838051948594888652850152830190610f05565b0390a13880614dd4565b919091614e3683613e93565b9260005b818110614e4657505050565b80614e7c6020614e596001948688614d4b565b8035614e6481610202565b614e716040830183612207565b939092013590614d12565b614e8682886138ce565b52614e9181876138ce565b5001614e3a565b90926080926120489594835260018060a01b0316602083015260408201528160608201520190610f05565b9190606083016001936001614ee261425d845163ffffffff60e01b1690565b01936000936000958054965b878110614f0057505050505050505050565b80614f126146526146458c948661456f565b6001600160a01b031660a0880190815260808801959091614f3b906001600160f01b0319168752565b614f55614f4e61422d6139808a85613947565b60ff168952565b614f63614670895160ff1690565b8084036150dd5750868181614f886146a361469d614697614fdc9c9d614faf98611dad565b60208c018181528c60c0614fa461461a60099586018789611dbe565b910152510191611e36565b959095965b51600160f11b90614fce906001600160f01b031916612179565b166001600160f01b03191690565b15614fe9575b5001614eee565b51909150614fff906001600160a01b0316611f6f565b865161502390615016906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b0316916150686101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b8601614e98565b03915afa9384156107c5578b946150be575b50506001600160a01b0383166150a35750860180518b939261509b916147ca565b905238614fe2565b9051631f24c1fb60e11b815290810183815281906020010390fd5b6150d5929450803d1061333e5761332f818361119f565b91388061507a565b8391969450106000146150fc57604051630760bdcf60e11b8152600490fd5b614fdc8b9361510b3688612a29565b60c08a0152614fb4565b6000805160206154e98339815191525460009493929060581b916001600160f81b03198316600160f81b81036151d85750604051637aa8f17760e11b815293602093859390928492839261516d92306004860161206c565b039160581c6001600160a01b03165afa9081156107c5576000916151b9575b505b6001600160e01b0319166374eca2c160e11b016151a757565b6040516362467c7760e11b8152600490fd5b6151d2915060203d60201161215157612149818361119f565b3861518c565b919550929190600160f91b0361250c576020916151fb9160081b95843088614197565b60405163392dffaf60e01b8152929792958694938593849361522e93909230906001600160e01b03191660048701612f6e565b03916001600160a01b03165afa9081156107c557600091615250575b5061518e565b615269915060203d60201161215157612149818361119f565b3861524a565b1561527657565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6152bf6104fe8383611d1b565b9060048310156152ce57505050565b602c831061545e576152e9611f6f6127c16127bb8685611d46565b602c8201358201602c604c820191013591604c84013584019461532361531561398e6139808787613947565b6001600160f81b0319161590565b806153cd575b9461536a61293a95611f6f9561536f956102239b956127c19a61537f575b61535a611f6f6127c16127bb8a8a611e25565b916001600160a01b031690613950565b611e25565b602c86013595604c0194916126f9565b6153c8606c87013587016153c2602c604c8301920135806153a9611f6f6127c16127bb8488611d57565b936153bd856001600160a01b038a1661546c565b611d90565b91613a9b565b615347565b5091939092956040519163ecd0596160e01b8352602083806153f760048201906002602083019252565b03816001600160a01b0389165afa9283156107c557610223986127c19761293a97611f6f9761536f9761536a9560009161543f575b50959a50959b5095509550955050615329565b615458915060203d60201161082d5761081f818361119f565b3861542c565b50506004610223911461526f565b61022391906001600160a01b0390818316156154bf575b166000526000805160206154c983398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b6001925061548356fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x53", "chainId": "0xaa36a7" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x244a50f193b593c6083a1b45b7a32ff092076f421612d413f435b89660b4bf29", + "hash": "0x558b5b7a9a087a8e1a15c3062b939a50cd9f3ddc1807d3d1a6fd6294c6f88662", "transactionType": "CREATE2", "contractName": "KernelFactory", - "contractAddress": "0x8134d811e37c7c3c88e6fba5322808c6871d58a5", + "contractAddress": "0x3f95901ca906b541303048213dd5e5184462922b", "function": null, "arguments": [ - "0xDC4CfD181a721A047EE48A55393b25258B27ECB0" + "0xcA6E20D0ba4cc864f6160DC165A0a477581B594B" ], "transaction": { "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "gas": "0x600f4", "value": "0x0", - "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61046c38819003918201601f19168301916001600160401b03831184841017607857808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103dd908161008f823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000dc4cfd181a721a047ee48a55393b25258b27ecb0", - "nonce": "0x47", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61046c38819003918201601f19168301916001600160401b03831184841017607857808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103dd908161008f823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000ca6e20d0ba4cc864f6160dc165a0a477581b594b", + "nonce": "0x54", "chainId": "0xaa36a7" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xa7c6b6633c4b26acb79ec12954dac829e9b4c4d2169964f2623c2c814f27ff71", + "hash": "0xa461ec70b705f3614dcd7a760c7cb728de1011c6803bce226647842eaf2720c1", "transactionType": "CALL", "contractName": "FactoryStaker", "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", "function": "approveFactory(address,bool)", "arguments": [ - "0x8134d811E37C7c3C88e6fBA5322808c6871D58A5", + "0x3F95901CA906B541303048213Dd5E5184462922b", "true" ], "transaction": { @@ -57,8 +57,8 @@ "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", "gas": "0x108d1", "value": "0x0", - "input": "0x6e7dbabb0000000000000000000000008134d811e37c7c3c88e6fba5322808c6871d58a50000000000000000000000000000000000000000000000000000000000000001", - "nonce": "0x48", + "input": "0x6e7dbabb0000000000000000000000003f95901ca906b541303048213dd5e5184462922b0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x55", "chainId": "0xaa36a7" }, "additionalContracts": [], @@ -68,48 +68,48 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0xac75b9", + "cumulativeGasUsed": "0x133a75a", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x952bfd07525fd91a68340bf2e3cac2f78b7ae26109c0bdfe787953c56e51c6e8", - "transactionIndex": "0x42", - "blockHash": "0xe3a090ce8595f1d8a8b4614da7e626d4539fd884046c2478eda58fe45d47bc20", - "blockNumber": "0x58db6a", - "gasUsed": "0x461625", - "effectiveGasPrice": "0x74362dc8a", + "type": "0x0", + "transactionHash": "0x5476e320d4a6d399f6b2efc50a95cba1ee44d36cd5973d7b4866eb4bbc2ac1fd", + "transactionIndex": "0x85", + "blockHash": "0x94600f6735327cd52abc0c861c6e3d7e60c9bc81d32ef6df9e466ebb85fd05c7", + "blockNumber": "0x5cc598", + "gasUsed": "0x492720", + "effectiveGasPrice": "0x2925be3b1", "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0xdc4cfd181a721a047ee48a55393b25258b27ecb0" + "contractAddress": "0xca6e20d0ba4cc864f6160dc165a0a477581b594b" }, { "status": "0x1", - "cumulativeGasUsed": "0xb090ec", + "cumulativeGasUsed": "0x137c28d", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x244a50f193b593c6083a1b45b7a32ff092076f421612d413f435b89660b4bf29", - "transactionIndex": "0x43", - "blockHash": "0xe3a090ce8595f1d8a8b4614da7e626d4539fd884046c2478eda58fe45d47bc20", - "blockNumber": "0x58db6a", + "type": "0x0", + "transactionHash": "0x558b5b7a9a087a8e1a15c3062b939a50cd9f3ddc1807d3d1a6fd6294c6f88662", + "transactionIndex": "0x86", + "blockHash": "0x94600f6735327cd52abc0c861c6e3d7e60c9bc81d32ef6df9e466ebb85fd05c7", + "blockNumber": "0x5cc598", "gasUsed": "0x41b33", - "effectiveGasPrice": "0x74362dc8a", + "effectiveGasPrice": "0x2925be3b1", "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0x8134d811e37c7c3c88e6fba5322808c6871d58a5" + "contractAddress": "0x3f95901ca906b541303048213dd5e5184462922b" }, { "status": "0x1", - "cumulativeGasUsed": "0xb145ff", + "cumulativeGasUsed": "0x13877a0", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0xa7c6b6633c4b26acb79ec12954dac829e9b4c4d2169964f2623c2c814f27ff71", - "transactionIndex": "0x44", - "blockHash": "0xe3a090ce8595f1d8a8b4614da7e626d4539fd884046c2478eda58fe45d47bc20", - "blockNumber": "0x58db6a", + "type": "0x0", + "transactionHash": "0xa461ec70b705f3614dcd7a760c7cb728de1011c6803bce226647842eaf2720c1", + "transactionIndex": "0x87", + "blockHash": "0x94600f6735327cd52abc0c861c6e3d7e60c9bc81d32ef6df9e466ebb85fd05c7", + "blockNumber": "0x5cc598", "gasUsed": "0xb513", - "effectiveGasPrice": "0x74362dc8a", + "effectiveGasPrice": "0x2925be3b1", "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", "contractAddress": null @@ -118,7 +118,7 @@ "libraries": [], "pending": [], "returns": {}, - "timestamp": 1714676485, + "timestamp": 1718039506, "chain": 11155111, - "commit": "8f7fd99" + "commit": "0e1c950" } \ No newline at end of file diff --git a/src/Kernel.sol b/src/Kernel.sol index 787dd47..0b69295 100644 --- a/src/Kernel.sol +++ b/src/Kernel.sol @@ -398,18 +398,21 @@ contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager // NOTE: for hook, kernel does not support independent hook install, // hook is expected to be paired with proper validator/executor/selector IHook(module).onInstall(initData); + emit ModuleInstalled(moduleType, module); } else if (moduleType == MODULE_TYPE_POLICY) { // force call onInstall for policy // NOTE: for policy, kernel does not support independent policy install, // policy is expected to be paired with proper permissionId // to "ADD" permission, use "installValidations()" function IPolicy(module).onInstall(initData); + emit ModuleInstalled(moduleType, module); } else if (moduleType == MODULE_TYPE_SIGNER) { // force call onInstall for signer // NOTE: for signer, kernel does not support independent signer install, // signer is expected to be paired with proper permissionId // to "ADD" permission, use "installValidations()" function ISigner(module).onInstall(initData); + emit ModuleInstalled(moduleType, module); } else { revert InvalidModuleType(); } @@ -458,10 +461,11 @@ contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager // remove hook on root validator to prevent kernel from being locked _validationStorage().validationConfig[vId].hook = IHook(address(1)); } - // force call onInstall for hook + // force call onUninstall for hook // NOTE: for hook, kernel does not support independent hook install, // hook is expected to be paired with proper validator/executor/selector ModuleLib.uninstallModule(module, deInitData); + emit ModuleUninstalled(moduleType, module); } else if (moduleType == 5) { ValidationId rootValidator = _validationStorage().rootValidator; bytes32 permissionId = bytes32(deInitData[0:32]); @@ -470,11 +474,12 @@ contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager revert RootValidatorCannotBeRemoved(); } } - // force call onInstall for policy + // force call onUninstall for policy // NOTE: for policy, kernel does not support independent policy install, // policy is expected to be paired with proper permissionId // to "REMOVE" permission, use "uninstallValidation()" function ModuleLib.uninstallModule(module, deInitData); + emit ModuleUninstalled(moduleType, module); } else if (moduleType == 6) { ValidationId rootValidator = _validationStorage().rootValidator; bytes32 permissionId = bytes32(deInitData[0:32]); @@ -483,11 +488,12 @@ contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager revert RootValidatorCannotBeRemoved(); } } - // force call onInstall for signer + // force call onUninstall for signer // NOTE: for signer, kernel does not support independent signer install, // signer is expected to be paired with proper permissionId // to "REMOVE" permission, use "uninstallValidation()" function ModuleLib.uninstallModule(module, deInitData); + emit ModuleUninstalled(moduleType, module); } else { revert InvalidModuleType(); } diff --git a/src/core/ExecutorManager.sol b/src/core/ExecutorManager.sol index 074ec72..ef2158f 100644 --- a/src/core/ExecutorManager.sol +++ b/src/core/ExecutorManager.sol @@ -3,8 +3,9 @@ pragma solidity ^0.8.0; import {IHook, IExecutor} from "../interfaces/IERC7579Modules.sol"; +import {IERC7579Account} from "../interfaces/IERC7579Account.sol"; import {ModuleLib} from "../utils/ModuleLib.sol"; -import {EXECUTOR_MANAGER_STORAGE_SLOT} from "../types/Constants.sol"; +import {EXECUTOR_MANAGER_STORAGE_SLOT, MODULE_TYPE_EXECUTOR} from "../types/Constants.sol"; abstract contract ExecutorManager { struct ExecutorConfig { @@ -29,11 +30,7 @@ abstract contract ExecutorManager { } function _installExecutor(IExecutor executor, bytes calldata executorData, IHook hook) internal { - if (address(hook) == address(0)) { - hook = IHook(address(1)); - } - ExecutorConfig storage config = _executorConfig(executor); - config.hook = hook; + _installExecutorWithoutInit(executor, hook); executor.onInstall(executorData); } @@ -43,6 +40,7 @@ abstract contract ExecutorManager { } ExecutorConfig storage config = _executorConfig(executor); config.hook = hook; + emit IERC7579Account.ModuleInstalled(MODULE_TYPE_EXECUTOR, address(executor)); } function _uninstallExecutor(IExecutor executor, bytes calldata executorData) internal returns (IHook hook) { @@ -50,5 +48,6 @@ abstract contract ExecutorManager { hook = config.hook; config.hook = IHook(address(0)); ModuleLib.uninstallModule(address(executor), executorData); + emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_EXECUTOR, address(executor)); } } diff --git a/src/core/HookManager.sol b/src/core/HookManager.sol index 2e5a587..73122a9 100644 --- a/src/core/HookManager.sol +++ b/src/core/HookManager.sol @@ -4,6 +4,8 @@ pragma solidity ^0.8.0; import {IHook} from "../interfaces/IERC7579Modules.sol"; import {ModuleLib} from "../utils/ModuleLib.sol"; +import {IERC7579Account} from "../interfaces/IERC7579Account.sol"; +import {MODULE_TYPE_HOOK} from "../types/Constants.sol"; abstract contract HookManager { // NOTE: currently, all install/uninstall calls onInstall/onUninstall @@ -32,12 +34,11 @@ abstract contract HookManager { if (!hook.isInitialized(address(this))) { // if hook is not installed, it should call onInstall hook.onInstall(hookData[1:]); - return; - } - if (bytes1(hookData[0]) == bytes1(0xff)) { + } else if (bytes1(hookData[0]) == bytes1(0xff)) { // 0xff means you want to explicitly call install hook hook.onInstall(hookData[1:]); } + emit IERC7579Account.ModuleInstalled(MODULE_TYPE_HOOK, address(hook)); } // @param hookData encoded as (1bytes flag + actual hookdata) flag is for identifying if the hook has to be initialized or not @@ -49,5 +50,6 @@ abstract contract HookManager { // 0xff means you want to call uninstall hook ModuleLib.uninstallModule(address(hook), hookData[1:]); } + emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_HOOK, address(hook)); } } diff --git a/src/core/SelectorManager.sol b/src/core/SelectorManager.sol index 428a0c0..4327f1b 100644 --- a/src/core/SelectorManager.sol +++ b/src/core/SelectorManager.sol @@ -3,8 +3,14 @@ pragma solidity ^0.8.0; import {IHook, IFallback, IModule} from "../interfaces/IERC7579Modules.sol"; +import {IERC7579Account} from "../interfaces/IERC7579Account.sol"; import {CallType} from "../utils/ExecLib.sol"; -import {SELECTOR_MANAGER_STORAGE_SLOT, CALLTYPE_DELEGATECALL, CALLTYPE_SINGLE} from "../types/Constants.sol"; +import { + SELECTOR_MANAGER_STORAGE_SLOT, + CALLTYPE_DELEGATECALL, + CALLTYPE_SINGLE, + MODULE_TYPE_FALLBACK +} from "../types/Constants.sol"; import {ModuleLib} from "../utils/ModuleLib.sol"; abstract contract SelectorManager { @@ -44,6 +50,7 @@ abstract contract SelectorManager { CallType callType = CallType.wrap(bytes1(selectorData[0])); if (callType == CALLTYPE_SINGLE) { IModule(target).onInstall(selectorData[1:]); + emit IERC7579Account.ModuleInstalled(MODULE_TYPE_FALLBACK, target); } else if (callType != CALLTYPE_DELEGATECALL) { // NOTE : we are not going to call onInstall for delegatecall, and we support only CALL & DELEGATECALL revert NotSupportedCallType(); @@ -57,8 +64,11 @@ abstract contract SelectorManager { SelectorConfig storage ss = _selectorConfig(selector); hook = ss.hook; ss.hook = IHook(address(0)); - ModuleLib.uninstallModule(ss.target, selectorDeinitData); + if (ss.callType == CALLTYPE_SINGLE) { + ModuleLib.uninstallModule(ss.target, selectorDeinitData); + emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_FALLBACK, ss.target); + } ss.target = address(0); - ss.callType = CallType.wrap(bytes1(0xff)); + ss.callType = CallType.wrap(bytes1(0x00)); } } diff --git a/src/core/ValidationManager.sol b/src/core/ValidationManager.sol index a00e1f0..f54758a 100644 --- a/src/core/ValidationManager.sol +++ b/src/core/ValidationManager.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.0; import {IValidator, IModule, IExecutor, IHook, IPolicy, ISigner, IFallback} from "../interfaces/IERC7579Modules.sol"; +import {IERC7579Account} from "../interfaces/IERC7579Account.sol"; import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol"; import {SelectorManager} from "./SelectorManager.sol"; import {HookManager} from "./HookManager.sol"; @@ -20,7 +21,7 @@ import { } from "../utils/ValidationTypeLib.sol"; import {CallType} from "../utils/ExecLib.sol"; -import {CALLTYPE_SINGLE} from "../types/Constants.sol"; +import {CALLTYPE_SINGLE, MODULE_TYPE_POLICY, MODULE_TYPE_SIGNER, MODULE_TYPE_VALIDATOR} from "../types/Constants.sol"; import {PermissionId, getValidationResult} from "../types/Types.sol"; import {_intersectValidationData} from "../utils/KernelValidationResult.sol"; @@ -173,6 +174,7 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe if (vType == VALIDATION_TYPE_VALIDATOR) { IValidator validator = ValidatorLib.getValidator(vId); ModuleLib.uninstallModule(address(validator), validatorData); + emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_VALIDATOR, address(validator)); } else if (vType == VALIDATION_TYPE_PERMISSION) { PermissionId permission = ValidatorLib.getPermissionId(vId); _uninstallPermission(permission, validatorData); @@ -198,6 +200,7 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe ModuleLib.uninstallModule( address(policy), abi.encodePacked(bytes32(PermissionId.unwrap(pId)), permissionDisableData[i]) ); + emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_POLICY, address(policy)); } delete _validationStorage().permissionConfig[pId].policyData; ModuleLib.uninstallModule( @@ -206,6 +209,7 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe bytes32(PermissionId.unwrap(pId)), permissionDisableData[permissionDisableData.length - 1] ) ); + emit IERC7579Account.ModuleUninstalled(MODULE_TYPE_SIGNER, address(config.signer)); } config.signer = ISigner(address(0)); config.permissionFlag = PassFlag.wrap(bytes2(0)); @@ -238,6 +242,7 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe if (vType == VALIDATION_TYPE_VALIDATOR) { IValidator validator = ValidatorLib.getValidator(vId); validator.onInstall(validatorData); + emit IERC7579Account.ModuleInstalled(MODULE_TYPE_VALIDATOR, address(validator)); } else if (vType == VALIDATION_TYPE_PERMISSION) { PermissionId permission = ValidatorLib.getPermissionId(vId); _installPermission(permission, validatorData); @@ -270,6 +275,9 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe IPolicy(address(bytes20(permissionEnableData[i][2:22]))).onInstall( abi.encodePacked(bytes32(PermissionId.unwrap(permission)), permissionEnableData[i][22:]) ); + emit IERC7579Account.ModuleInstalled( + MODULE_TYPE_POLICY, address(bytes20(permissionEnableData[i][2:22])) + ); } // last permission data will be signer ISigner signer = ISigner(address(bytes20(permissionEnableData[permissionEnableData.length - 1][2:22]))); @@ -281,6 +289,7 @@ abstract contract ValidationManager is EIP712, SelectorManager, HookManager, Exe bytes32(PermissionId.unwrap(permission)), permissionEnableData[permissionEnableData.length - 1][22:] ) ); + emit IERC7579Account.ModuleInstalled(MODULE_TYPE_SIGNER, address(signer)); } }