diff --git a/src/artifacts/contracts/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json b/src/artifacts/contracts/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json index a27982c2..4c56228d 100644 --- a/src/artifacts/contracts/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json +++ b/src/artifacts/contracts/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json @@ -521,8 +521,8 @@ "type": "receive" } ], - "bytecode": "0x608060405234801561001057600080fd5b50612cf0806100206000396000f3fe6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124dd565b610486565b60405161022191906126f4565b60405180910390f35b34801561023657600080fd5b5061024a61024536600461222a565b610491565b005b34801561025857600080fd5b5061026c6102673660046122fb565b6105b2565b6040516102219190612721565b34801561028557600080fd5b5061026c610294366004612493565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124dd565b610655565b60405161022191906126d3565b3480156102d257600080fd5b5061026c6102e1366004612529565b610660565b3480156102f257600080fd5b5061024a61030136600461247b565b6106ba565b34801561031257600080fd5b5061024a6103213660046124dd565b6107c8565b34801561033257600080fd5b5061033b6108a6565b60405161022191906126ff565b34801561035457600080fd5b5061024a6103633660046123de565b6108d6565b34801561037457600080fd5b5061024a610383366004612411565b61096f565b34801561039457600080fd5b5061033b6103a336600461247b565b6109eb565b6102b96103b6366004612592565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb3660046124f7565b610ad7565b3480156103fc57600080fd5b5061026c61040b366004612244565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612368565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b7a6039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129a16037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129d8602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061095f82604051602001610944919061283f565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b60006109908385604051602001610944929190612886565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127e2565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612aec602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111d2565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a84611313565b909250905061ffff821660005b8551831015610ed15760008080610d2e8987611381565b975060ff91821694501691506001831415610d5657610d4d8987611402565b96509050610e7a565b82610d82576060610d678a8861147a565b97509050610d758b8261152b565b9150828501945050610e7a565b6002831415610e2957610d958987611402565b965090506000610da58a886118b5565b975061ffff1690506060610dba8b8984611926565b98509050610dc98c8483611a15565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612aba6032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612975602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c5d565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611ca3565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612785565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126b7565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126b7565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b8115611113578560405161110691906126ff565b60405180910390a061111e565b61111e838783611cd1565b505050600101610f62565b505050565b60008061113a83611d21565b915091506000611149836109eb565b9050808214611184576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061274e565b600182016111928482611d3a565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111c392919061289f565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126557507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112b157507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b806112fd57507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561130a57506001610481565b61047e82611d65565b6020810151815160f09190911c9060029081111561137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a266027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113a157fe5b84518111156113fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bef6026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161141957fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a036023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114d157fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b576023913960400191505060405180910390fd5b60008151604214611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061293b603a913960400191505060405180910390fd5b60008260018451038151811061159957fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115bb57fe5b016020015160f81c905060006115d18582611dc2565b905060006115e0866020611dc2565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a081111561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806128fe603d913960400191505060405180910390fd5b8260ff16601b1415801561167357508260ff16601c14155b156116c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a4d603d913960400191505060405180910390fd5b600184141561173d5760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b50505060206040510351945061183f565b60028414156117ee5760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bb3603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a8a6030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118cc57fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c366022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194157600080fd5b506040519080825280601f01601f19166020018201604052801561196c576020820181803683370190505b509150838501602001600060205b858110156119935790820151848201526020810161197a565b84860160200180519390920151908501525250828201838110156119b357fe5b8451811115611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c156021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a2857fe5b016020015160f81c90506001811480611a415750600281145b15611a85578373ffffffffffffffffffffffffffffffffffffffff16611a67868561152b565b73ffffffffffffffffffffffffffffffffffffffff16149150611c55565b6003811415611c045782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b3f578181015183820152602001611b27565b50505050905090810190601f168015611b6c5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b8a57600080fd5b505afa158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c55565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b18603f913960400191505060405180910390fd5b509392505050565b60008115801590611c955750611c927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611ce357805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d14929190612708565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611ca3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611db957506001610481565b61047e82611e2a565b60008160200183511015611e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c58603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e7e57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611ed657506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f4c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f5957506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fd7578081fd5b8135602067ffffffffffffffff80831115611fee57fe5b611ffb82838502016128ad565b83815282810190868401865b868110156120d7578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204557898afd5b604080518281018181108a8211171561205a57fe5b8252612067848b01612127565b8152612074828501612127565b8a8201526060808501358383015260809250612091838601611fa3565b9082015260a084810135838301529284013592898411156120b0578c8dfd5b6120be8f8c868801016121a7565b9082015287525050509285019290850190600101612007565b509098975050505050505050565b60008083601f8401126120f6578182fd5b50813567ffffffffffffffff81111561210d578182fd5b602083019150836020808302850101111561147357600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612178578182fd5b50813567ffffffffffffffff81111561218f578182fd5b60208301915083602082850101111561147357600080fd5b600082601f8301126121b7578081fd5b813567ffffffffffffffff8111156121cb57fe5b6121fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128ad565b818152846020838601011115612210578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121561223b578081fd5b61064e82611fa3565b60008060008060008060008060a0898b03121561225f578384fd5b61226889611fa3565b975061227660208a01611fa3565b9650604089013567ffffffffffffffff80821115612292578586fd5b61229e8c838d016120e5565b909850965060608b01359150808211156122b6578586fd5b6122c28c838d016120e5565b909650945060808b01359150808211156122da578384fd5b506122e78b828c01612167565b999c989b5096995094979396929594505050565b600080600080600060808688031215612312578081fd5b61231b86611fa3565b945061232960208701611fa3565b935060408601359250606086013567ffffffffffffffff81111561234b578182fd5b61235788828901612167565b969995985093965092949392505050565b60008060008060008060a08789031215612380578182fd5b61238987611fa3565b955061239760208801611fa3565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c0578283fd5b6123cc89828a01612167565b979a9699509497509295939492505050565b6000602082840312156123ef578081fd5b813567ffffffffffffffff811115612405578182fd5b6106b284828501611fc7565b600080600060608486031215612425578283fd5b833567ffffffffffffffff8082111561243c578485fd5b61244887838801611fc7565b9450602086013593506040860135915080821115612464578283fd5b50612471868287016121a7565b9150509250925092565b60006020828403121561248c578081fd5b5035919050565b6000806000604084860312156124a7578283fd5b83359250602084013567ffffffffffffffff8111156124c4578283fd5b6124d086828701612167565b9497909650939450505050565b6000602082840312156124ee578081fd5b61064e82612137565b60008060408385031215612509578182fd5b61251283612137565b915061252060208401611fa3565b90509250929050565b6000806000806040858703121561253e578182fd5b843567ffffffffffffffff80821115612555578384fd5b61256188838901612167565b90965094506020870135915080821115612579578384fd5b5061258687828801612167565b95989497509550505050565b6000602082840312156125a3578081fd5b813567ffffffffffffffff8111156125b9578182fd5b6106b2848285016121a7565b6000815180845260208085019450848183028601828601855b858110156126605783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061264c8186018361266d565b9a87019a94505050908401906001016125de565b5090979650505050505050565b600081518084526126858160208601602086016128d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126c98184602087016128d1565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b2604083018461266d565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125c5565b6000838252604060208301526106b260408301846125c5565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128c957fe5b604052919050565b60005b838110156128ec5781810151838201526020016128d4565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a264697066735822122059e2080d36ec3f00d744d42e6b594c766aa973969434d6915824a8f2ea17e47964736f6c63430007060033", - "deployedBytecode": "0x6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124dd565b610486565b60405161022191906126f4565b60405180910390f35b34801561023657600080fd5b5061024a61024536600461222a565b610491565b005b34801561025857600080fd5b5061026c6102673660046122fb565b6105b2565b6040516102219190612721565b34801561028557600080fd5b5061026c610294366004612493565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124dd565b610655565b60405161022191906126d3565b3480156102d257600080fd5b5061026c6102e1366004612529565b610660565b3480156102f257600080fd5b5061024a61030136600461247b565b6106ba565b34801561031257600080fd5b5061024a6103213660046124dd565b6107c8565b34801561033257600080fd5b5061033b6108a6565b60405161022191906126ff565b34801561035457600080fd5b5061024a6103633660046123de565b6108d6565b34801561037457600080fd5b5061024a610383366004612411565b61096f565b34801561039457600080fd5b5061033b6103a336600461247b565b6109eb565b6102b96103b6366004612592565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb3660046124f7565b610ad7565b3480156103fc57600080fd5b5061026c61040b366004612244565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612368565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b7a6039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129a16037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129d8602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061095f82604051602001610944919061283f565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b60006109908385604051602001610944929190612886565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127e2565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612aec602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111d2565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a84611313565b909250905061ffff821660005b8551831015610ed15760008080610d2e8987611381565b975060ff91821694501691506001831415610d5657610d4d8987611402565b96509050610e7a565b82610d82576060610d678a8861147a565b97509050610d758b8261152b565b9150828501945050610e7a565b6002831415610e2957610d958987611402565b965090506000610da58a886118b5565b975061ffff1690506060610dba8b8984611926565b98509050610dc98c8483611a15565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612aba6032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612975602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c5d565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611ca3565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612785565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126b7565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126b7565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b8115611113578560405161110691906126ff565b60405180910390a061111e565b61111e838783611cd1565b505050600101610f62565b505050565b60008061113a83611d21565b915091506000611149836109eb565b9050808214611184576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061274e565b600182016111928482611d3a565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111c392919061289f565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126557507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112b157507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b806112fd57507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561130a57506001610481565b61047e82611d65565b6020810151815160f09190911c9060029081111561137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a266027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113a157fe5b84518111156113fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bef6026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161141957fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a036023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114d157fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b576023913960400191505060405180910390fd5b60008151604214611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061293b603a913960400191505060405180910390fd5b60008260018451038151811061159957fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115bb57fe5b016020015160f81c905060006115d18582611dc2565b905060006115e0866020611dc2565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a081111561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806128fe603d913960400191505060405180910390fd5b8260ff16601b1415801561167357508260ff16601c14155b156116c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a4d603d913960400191505060405180910390fd5b600184141561173d5760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b50505060206040510351945061183f565b60028414156117ee5760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bb3603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a8a6030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118cc57fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c366022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194157600080fd5b506040519080825280601f01601f19166020018201604052801561196c576020820181803683370190505b509150838501602001600060205b858110156119935790820151848201526020810161197a565b84860160200180519390920151908501525250828201838110156119b357fe5b8451811115611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c156021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a2857fe5b016020015160f81c90506001811480611a415750600281145b15611a85578373ffffffffffffffffffffffffffffffffffffffff16611a67868561152b565b73ffffffffffffffffffffffffffffffffffffffff16149150611c55565b6003811415611c045782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b3f578181015183820152602001611b27565b50505050905090810190601f168015611b6c5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b8a57600080fd5b505afa158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c55565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b18603f913960400191505060405180910390fd5b509392505050565b60008115801590611c955750611c927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611ce357805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d14929190612708565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611ca3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611db957506001610481565b61047e82611e2a565b60008160200183511015611e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c58603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e7e57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611ed657506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f4c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f5957506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fd7578081fd5b8135602067ffffffffffffffff80831115611fee57fe5b611ffb82838502016128ad565b83815282810190868401865b868110156120d7578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204557898afd5b604080518281018181108a8211171561205a57fe5b8252612067848b01612127565b8152612074828501612127565b8a8201526060808501358383015260809250612091838601611fa3565b9082015260a084810135838301529284013592898411156120b0578c8dfd5b6120be8f8c868801016121a7565b9082015287525050509285019290850190600101612007565b509098975050505050505050565b60008083601f8401126120f6578182fd5b50813567ffffffffffffffff81111561210d578182fd5b602083019150836020808302850101111561147357600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612178578182fd5b50813567ffffffffffffffff81111561218f578182fd5b60208301915083602082850101111561147357600080fd5b600082601f8301126121b7578081fd5b813567ffffffffffffffff8111156121cb57fe5b6121fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128ad565b818152846020838601011115612210578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121561223b578081fd5b61064e82611fa3565b60008060008060008060008060a0898b03121561225f578384fd5b61226889611fa3565b975061227660208a01611fa3565b9650604089013567ffffffffffffffff80821115612292578586fd5b61229e8c838d016120e5565b909850965060608b01359150808211156122b6578586fd5b6122c28c838d016120e5565b909650945060808b01359150808211156122da578384fd5b506122e78b828c01612167565b999c989b5096995094979396929594505050565b600080600080600060808688031215612312578081fd5b61231b86611fa3565b945061232960208701611fa3565b935060408601359250606086013567ffffffffffffffff81111561234b578182fd5b61235788828901612167565b969995985093965092949392505050565b60008060008060008060a08789031215612380578182fd5b61238987611fa3565b955061239760208801611fa3565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c0578283fd5b6123cc89828a01612167565b979a9699509497509295939492505050565b6000602082840312156123ef578081fd5b813567ffffffffffffffff811115612405578182fd5b6106b284828501611fc7565b600080600060608486031215612425578283fd5b833567ffffffffffffffff8082111561243c578485fd5b61244887838801611fc7565b9450602086013593506040860135915080821115612464578283fd5b50612471868287016121a7565b9150509250925092565b60006020828403121561248c578081fd5b5035919050565b6000806000604084860312156124a7578283fd5b83359250602084013567ffffffffffffffff8111156124c4578283fd5b6124d086828701612167565b9497909650939450505050565b6000602082840312156124ee578081fd5b61064e82612137565b60008060408385031215612509578182fd5b61251283612137565b915061252060208401611fa3565b90509250929050565b6000806000806040858703121561253e578182fd5b843567ffffffffffffffff80821115612555578384fd5b61256188838901612167565b90965094506020870135915080821115612579578384fd5b5061258687828801612167565b95989497509550505050565b6000602082840312156125a3578081fd5b813567ffffffffffffffff8111156125b9578182fd5b6106b2848285016121a7565b6000815180845260208085019450848183028601828601855b858110156126605783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061264c8186018361266d565b9a87019a94505050908401906001016125de565b5090979650505050505050565b600081518084526126858160208601602086016128d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126c98184602087016128d1565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b2604083018461266d565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125c5565b6000838252604060208301526106b260408301846125c5565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128c957fe5b604052919050565b60005b838110156128ec5781810151838201526020016128d4565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a264697066735822122059e2080d36ec3f00d744d42e6b594c766aa973969434d6915824a8f2ea17e47964736f6c63430007060033", + "bytecode": "0x608060405234801561001057600080fd5b50612cf9806100206000396000f3fe6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124e6565b610486565b60405161022191906126fd565b60405180910390f35b34801561023657600080fd5b5061024a610245366004612233565b610491565b005b34801561025857600080fd5b5061026c610267366004612304565b6105b2565b604051610221919061272a565b34801561028557600080fd5b5061026c61029436600461249c565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124e6565b610655565b60405161022191906126dc565b3480156102d257600080fd5b5061026c6102e1366004612532565b610660565b3480156102f257600080fd5b5061024a610301366004612484565b6106ba565b34801561031257600080fd5b5061024a6103213660046124e6565b6107c8565b34801561033257600080fd5b5061033b6108a6565b6040516102219190612708565b34801561035457600080fd5b5061024a6103633660046123e7565b6108d6565b34801561037457600080fd5b5061024a61038336600461241a565b61096f565b34801561039457600080fd5b5061033b6103a3366004612484565b6109eb565b6102b96103b636600461259b565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb366004612500565b610ad7565b3480156103fc57600080fd5b5061026c61040b36600461224d565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612371565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b836039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129aa6037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129e1602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061095f826040516020016109449190612848565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b6000610990838560405160200161094492919061288f565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127eb565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612af5602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111db565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a8461131c565b909250905061ffff821660005b8551831015610ed15760008080610d2e898761138a565b975060ff91821694501691506001831415610d5657610d4d898761140b565b96509050610e7a565b82610d82576060610d678a88611483565b97509050610d758b82611534565b9150828501945050610e7a565b6002831415610e2957610d95898761140b565b965090506000610da58a886118be565b975061ffff1690506060610dba8b898461192f565b98509050610dc98c8483611a1e565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612ac36032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061297e602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c66565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611cac565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061278e565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126c0565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126c0565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b811561111357856040516111069190612708565b60405180910390a061111e565b61111e838783611cda565b505050600101610f62565b505050565b60008061113a83611d2a565b915091506000611149836109eb565b905080821480611157575060015b61118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612757565b6001820161119b8482611d43565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111cc9291906128a8565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112ba57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061130657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561131357506001610481565b61047e82611d6e565b6020810151815160f09190911c90600290811115611385576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a2f6027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113aa57fe5b8451811115611404576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bf86026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161142257fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a0c6023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114da57fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b606023913960400191505060405180910390fd5b60008151604214611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612944603a913960400191505060405180910390fd5b6000826001845103815181106115a257fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115c457fe5b016020015160f81c905060006115da8582611dcb565b905060006115e9866020611dcb565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612907603d913960400191505060405180910390fd5b8260ff16601b1415801561167c57508260ff16601c14155b156116d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a56603d913960400191505060405180910390fd5b60018414156117465760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b505050602060405103519450611848565b60028414156117f75760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bbc603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a936030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118d557fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c3f6022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194a57600080fd5b506040519080825280601f01601f191660200182016040528015611975576020820181803683370190505b509150838501602001600060205b8581101561199c57908201518482015260208101611983565b84860160200180519390920151908501525250828201838110156119bc57fe5b8451811115611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c1e6021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a3157fe5b016020015160f81c90506001811480611a4a5750600281145b15611a8e578373ffffffffffffffffffffffffffffffffffffffff16611a708685611534565b73ffffffffffffffffffffffffffffffffffffffff16149150611c5e565b6003811415611c0d5782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b48578181015183820152602001611b30565b50505050905090810190601f168015611b755780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b9357600080fd5b505afa158015611ba7573d6000803e3d6000fd5b505050506040513d6020811015611bbd57600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c5e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b21603f913960400191505060405180910390fd5b509392505050565b60008115801590611c9e5750611c9b7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611cec57805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d1d929190612711565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611cac565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611dc257506001610481565b61047e82611e33565b60008160200183511015611e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c61603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e8757506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611edf57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f5557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f6257506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fe0578081fd5b8135602067ffffffffffffffff80831115611ff757fe5b61200482838502016128b6565b83815282810190868401865b868110156120e0578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204e57898afd5b604080518281018181108a8211171561206357fe5b8252612070848b01612130565b815261207d828501612130565b8a820152606080850135838301526080925061209a838601611fac565b9082015260a084810135838301529284013592898411156120b9578c8dfd5b6120c78f8c868801016121b0565b9082015287525050509285019290850190600101612010565b509098975050505050505050565b60008083601f8401126120ff578182fd5b50813567ffffffffffffffff811115612116578182fd5b602083019150836020808302850101111561147c57600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612181578182fd5b50813567ffffffffffffffff811115612198578182fd5b60208301915083602082850101111561147c57600080fd5b600082601f8301126121c0578081fd5b813567ffffffffffffffff8111156121d457fe5b61220560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128b6565b818152846020838601011115612219578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215612244578081fd5b61064e82611fac565b60008060008060008060008060a0898b031215612268578384fd5b61227189611fac565b975061227f60208a01611fac565b9650604089013567ffffffffffffffff8082111561229b578586fd5b6122a78c838d016120ee565b909850965060608b01359150808211156122bf578586fd5b6122cb8c838d016120ee565b909650945060808b01359150808211156122e3578384fd5b506122f08b828c01612170565b999c989b5096995094979396929594505050565b60008060008060006080868803121561231b578081fd5b61232486611fac565b945061233260208701611fac565b935060408601359250606086013567ffffffffffffffff811115612354578182fd5b61236088828901612170565b969995985093965092949392505050565b60008060008060008060a08789031215612389578182fd5b61239287611fac565b95506123a060208801611fac565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c9578283fd5b6123d589828a01612170565b979a9699509497509295939492505050565b6000602082840312156123f8578081fd5b813567ffffffffffffffff81111561240e578182fd5b6106b284828501611fd0565b60008060006060848603121561242e578283fd5b833567ffffffffffffffff80821115612445578485fd5b61245187838801611fd0565b945060208601359350604086013591508082111561246d578283fd5b5061247a868287016121b0565b9150509250925092565b600060208284031215612495578081fd5b5035919050565b6000806000604084860312156124b0578283fd5b83359250602084013567ffffffffffffffff8111156124cd578283fd5b6124d986828701612170565b9497909650939450505050565b6000602082840312156124f7578081fd5b61064e82612140565b60008060408385031215612512578182fd5b61251b83612140565b915061252960208401611fac565b90509250929050565b60008060008060408587031215612547578182fd5b843567ffffffffffffffff8082111561255e578384fd5b61256a88838901612170565b90965094506020870135915080821115612582578384fd5b5061258f87828801612170565b95989497509550505050565b6000602082840312156125ac578081fd5b813567ffffffffffffffff8111156125c2578182fd5b6106b2848285016121b0565b6000815180845260208085019450848183028601828601855b858110156126695783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061265581860183612676565b9a87019a94505050908401906001016125e7565b5090979650505050505050565b6000815180845261268e8160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126d28184602087016128da565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b26040830184612676565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125ce565b6000838252604060208301526106b260408301846125ce565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128d257fe5b604052919050565b60005b838110156128f55781810151838201526020016128dd565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a2646970667358221220baddbc40c489c69946d531c32b82135e8191d8a6f39630fb87f2b3f55afaf85464736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124e6565b610486565b60405161022191906126fd565b60405180910390f35b34801561023657600080fd5b5061024a610245366004612233565b610491565b005b34801561025857600080fd5b5061026c610267366004612304565b6105b2565b604051610221919061272a565b34801561028557600080fd5b5061026c61029436600461249c565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124e6565b610655565b60405161022191906126dc565b3480156102d257600080fd5b5061026c6102e1366004612532565b610660565b3480156102f257600080fd5b5061024a610301366004612484565b6106ba565b34801561031257600080fd5b5061024a6103213660046124e6565b6107c8565b34801561033257600080fd5b5061033b6108a6565b6040516102219190612708565b34801561035457600080fd5b5061024a6103633660046123e7565b6108d6565b34801561037457600080fd5b5061024a61038336600461241a565b61096f565b34801561039457600080fd5b5061033b6103a3366004612484565b6109eb565b6102b96103b636600461259b565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb366004612500565b610ad7565b3480156103fc57600080fd5b5061026c61040b36600461224d565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612371565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b836039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129aa6037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129e1602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061095f826040516020016109449190612848565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b6000610990838560405160200161094492919061288f565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127eb565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612af5602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111db565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a8461131c565b909250905061ffff821660005b8551831015610ed15760008080610d2e898761138a565b975060ff91821694501691506001831415610d5657610d4d898761140b565b96509050610e7a565b82610d82576060610d678a88611483565b97509050610d758b82611534565b9150828501945050610e7a565b6002831415610e2957610d95898761140b565b965090506000610da58a886118be565b975061ffff1690506060610dba8b898461192f565b98509050610dc98c8483611a1e565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612ac36032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061297e602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c66565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611cac565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061278e565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126c0565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126c0565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b811561111357856040516111069190612708565b60405180910390a061111e565b61111e838783611cda565b505050600101610f62565b505050565b60008061113a83611d2a565b915091506000611149836109eb565b905080821480611157575060015b61118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612757565b6001820161119b8482611d43565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111cc9291906128a8565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112ba57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061130657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561131357506001610481565b61047e82611d6e565b6020810151815160f09190911c90600290811115611385576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a2f6027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113aa57fe5b8451811115611404576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bf86026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161142257fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a0c6023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114da57fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b606023913960400191505060405180910390fd5b60008151604214611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612944603a913960400191505060405180910390fd5b6000826001845103815181106115a257fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115c457fe5b016020015160f81c905060006115da8582611dcb565b905060006115e9866020611dcb565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612907603d913960400191505060405180910390fd5b8260ff16601b1415801561167c57508260ff16601c14155b156116d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a56603d913960400191505060405180910390fd5b60018414156117465760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b505050602060405103519450611848565b60028414156117f75760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bbc603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a936030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118d557fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c3f6022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194a57600080fd5b506040519080825280601f01601f191660200182016040528015611975576020820181803683370190505b509150838501602001600060205b8581101561199c57908201518482015260208101611983565b84860160200180519390920151908501525250828201838110156119bc57fe5b8451811115611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c1e6021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a3157fe5b016020015160f81c90506001811480611a4a5750600281145b15611a8e578373ffffffffffffffffffffffffffffffffffffffff16611a708685611534565b73ffffffffffffffffffffffffffffffffffffffff16149150611c5e565b6003811415611c0d5782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b48578181015183820152602001611b30565b50505050905090810190601f168015611b755780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b9357600080fd5b505afa158015611ba7573d6000803e3d6000fd5b505050506040513d6020811015611bbd57600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c5e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b21603f913960400191505060405180910390fd5b509392505050565b60008115801590611c9e5750611c9b7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611cec57805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d1d929190612711565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611cac565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611dc257506001610481565b61047e82611e33565b60008160200183511015611e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c61603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e8757506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611edf57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f5557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f6257506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fe0578081fd5b8135602067ffffffffffffffff80831115611ff757fe5b61200482838502016128b6565b83815282810190868401865b868110156120e0578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204e57898afd5b604080518281018181108a8211171561206357fe5b8252612070848b01612130565b815261207d828501612130565b8a820152606080850135838301526080925061209a838601611fac565b9082015260a084810135838301529284013592898411156120b9578c8dfd5b6120c78f8c868801016121b0565b9082015287525050509285019290850190600101612010565b509098975050505050505050565b60008083601f8401126120ff578182fd5b50813567ffffffffffffffff811115612116578182fd5b602083019150836020808302850101111561147c57600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612181578182fd5b50813567ffffffffffffffff811115612198578182fd5b60208301915083602082850101111561147c57600080fd5b600082601f8301126121c0578081fd5b813567ffffffffffffffff8111156121d457fe5b61220560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128b6565b818152846020838601011115612219578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215612244578081fd5b61064e82611fac565b60008060008060008060008060a0898b031215612268578384fd5b61227189611fac565b975061227f60208a01611fac565b9650604089013567ffffffffffffffff8082111561229b578586fd5b6122a78c838d016120ee565b909850965060608b01359150808211156122bf578586fd5b6122cb8c838d016120ee565b909650945060808b01359150808211156122e3578384fd5b506122f08b828c01612170565b999c989b5096995094979396929594505050565b60008060008060006080868803121561231b578081fd5b61232486611fac565b945061233260208701611fac565b935060408601359250606086013567ffffffffffffffff811115612354578182fd5b61236088828901612170565b969995985093965092949392505050565b60008060008060008060a08789031215612389578182fd5b61239287611fac565b95506123a060208801611fac565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c9578283fd5b6123d589828a01612170565b979a9699509497509295939492505050565b6000602082840312156123f8578081fd5b813567ffffffffffffffff81111561240e578182fd5b6106b284828501611fd0565b60008060006060848603121561242e578283fd5b833567ffffffffffffffff80821115612445578485fd5b61245187838801611fd0565b945060208601359350604086013591508082111561246d578283fd5b5061247a868287016121b0565b9150509250925092565b600060208284031215612495578081fd5b5035919050565b6000806000604084860312156124b0578283fd5b83359250602084013567ffffffffffffffff8111156124cd578283fd5b6124d986828701612170565b9497909650939450505050565b6000602082840312156124f7578081fd5b61064e82612140565b60008060408385031215612512578182fd5b61251b83612140565b915061252960208401611fac565b90509250929050565b60008060008060408587031215612547578182fd5b843567ffffffffffffffff8082111561255e578384fd5b61256a88838901612170565b90965094506020870135915080821115612582578384fd5b5061258f87828801612170565b95989497509550505050565b6000602082840312156125ac578081fd5b813567ffffffffffffffff8111156125c2578182fd5b6106b2848285016121b0565b6000815180845260208085019450848183028601828601855b858110156126695783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061265581860183612676565b9a87019a94505050908401906001016125e7565b5090979650505050505050565b6000815180845261268e8160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126d28184602087016128da565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b26040830184612676565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125ce565b6000838252604060208301526106b260408301846125ce565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128d257fe5b604052919050565b60005b838110156128f55781810151838201526020016128dd565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a2646970667358221220baddbc40c489c69946d531c32b82135e8191d8a6f39630fb87f2b3f55afaf85464736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/src/artifacts/contracts/modules/commons/ModuleIgnoreNonceCalls.sol/ModuleIgnoreNonceCalls.json b/src/artifacts/contracts/modules/commons/ModuleIgnoreNonceCalls.sol/ModuleIgnoreNonceCalls.json new file mode 100644 index 00000000..912f4240 --- /dev/null +++ b/src/artifacts/contracts/modules/commons/ModuleIgnoreNonceCalls.sol/ModuleIgnoreNonceCalls.json @@ -0,0 +1,213 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ModuleIgnoreNonceCalls", + "sourceName": "contracts/modules/commons/ModuleIgnoreNonceCalls.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_newNonce", + "type": "uint256" + } + ], + "name": "NonceChange", + "type": "event" + }, + { + "anonymous": true, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_tx", + "type": "bytes32" + } + ], + "name": "TxExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_tx", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_reason", + "type": "bytes" + } + ], + "name": "TxFailed", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "revertOnError", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct IModuleCalls.Transaction[]", + "name": "_txs", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + } + ], + "name": "readNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "revertOnError", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct IModuleCalls.Transaction[]", + "name": "_txs", + "type": "tuple[]" + } + ], + "name": "selfExecute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceID", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/contracts/modules/MainModuleGasEstimation.sol b/src/contracts/modules/MainModuleGasEstimation.sol index f86b72d8..a6dac06b 100644 --- a/src/contracts/modules/MainModuleGasEstimation.sol +++ b/src/contracts/modules/MainModuleGasEstimation.sol @@ -3,8 +3,8 @@ pragma solidity 0.7.6; pragma experimental ABIEncoderV2; import "./commons/ModuleIgnoreAuthUpgradable.sol"; +import "./commons/ModuleIgnoreNonceCalls.sol"; import "./commons/ModuleHooks.sol"; -import "./commons/ModuleCalls.sol"; import "./commons/ModuleUpdate.sol"; import "./commons/ModuleCreator.sol"; @@ -17,7 +17,7 @@ import "./commons/ModuleCreator.sol"; */ contract MainModuleGasEstimation is ModuleIgnoreAuthUpgradable, - ModuleCalls, + ModuleIgnoreNonceCalls, ModuleUpdate, ModuleHooks, ModuleCreator @@ -35,7 +35,7 @@ contract MainModuleGasEstimation is bytes4 _interfaceID ) public override( ModuleIgnoreAuthUpgradable, - ModuleCalls, + ModuleIgnoreNonceCalls, ModuleUpdate, ModuleHooks, ModuleCreator diff --git a/src/contracts/modules/commons/ModuleIgnoreNonceCalls.sol b/src/contracts/modules/commons/ModuleIgnoreNonceCalls.sol new file mode 100644 index 00000000..f14696cf --- /dev/null +++ b/src/contracts/modules/commons/ModuleIgnoreNonceCalls.sol @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.7.6; +pragma experimental ABIEncoderV2; + +import "./ModuleSelfAuth.sol"; +import "./ModuleStorage.sol"; +import "./ModuleERC165.sol"; + +import "./interfaces/IModuleCalls.sol"; +import "./interfaces/IModuleAuth.sol"; + +/** + @notice Implements ModuleCalls but ignores the validity of the nonce + should only be used during gas estimation. +*/ +abstract contract ModuleIgnoreNonceCalls is IModuleCalls, IModuleAuth, ModuleERC165, ModuleSelfAuth { + // NONCE_KEY = keccak256("org.arcadeum.module.calls.nonce"); + bytes32 private constant NONCE_KEY = bytes32(0x8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e); + + uint256 private constant NONCE_BITS = 96; + bytes32 private constant NONCE_MASK = bytes32((1 << NONCE_BITS) - 1); + + /** + * @notice Returns the next nonce of the default nonce space + * @dev The default nonce space is 0x00 + * @return The next nonce + */ + function nonce() external override virtual view returns (uint256) { + return readNonce(0); + } + + /** + * @notice Returns the next nonce of the given nonce space + * @param _space Nonce space, each space keeps an independent nonce count + * @return The next nonce + */ + function readNonce(uint256 _space) public override virtual view returns (uint256) { + return uint256(ModuleStorage.readBytes32Map(NONCE_KEY, bytes32(_space))); + } + + /** + * @notice Changes the next nonce of the given nonce space + * @param _space Nonce space, each space keeps an independent nonce count + * @param _nonce Nonce to write on the space + */ + function _writeNonce(uint256 _space, uint256 _nonce) private { + ModuleStorage.writeBytes32Map(NONCE_KEY, bytes32(_space), bytes32(_nonce)); + } + + /** + * @notice Allow wallet owner to execute an action + * @dev Relayers must ensure that the gasLimit specified for each transaction + * is acceptable to them. A user could specify large enough that it could + * consume all the gas available. + * @param _txs Transactions to process + * @param _nonce Signature nonce (may contain an encoded space) + * @param _signature Encoded signature + */ + function execute( + Transaction[] memory _txs, + uint256 _nonce, + bytes memory _signature + ) public override virtual { + // Validate and update nonce + _validateNonce(_nonce); + + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode(_nonce, _txs))); + + // Verify that signatures are valid + require( + _signatureValidation(txHash, _signature), + "ModuleCalls#execute: INVALID_SIGNATURE" + ); + + // Execute the transactions + _execute(txHash, _txs); + } + + /** + * @notice Allow wallet to execute an action + * without signing the message + * @param _txs Transactions to execute + */ + function selfExecute( + Transaction[] memory _txs + ) public override virtual onlySelf { + // Hash transaction bundle + bytes32 txHash = _subDigest(keccak256(abi.encode('self:', _txs))); + + // Execute the transactions + _execute(txHash, _txs); + } + + /** + * @notice Executes a list of transactions + * @param _txHash Hash of the batch of transactions + * @param _txs Transactions to execute + */ + function _execute( + bytes32 _txHash, + Transaction[] memory _txs + ) private { + // Execute transaction + for (uint256 i = 0; i < _txs.length; i++) { + Transaction memory transaction = _txs[i]; + + bool success; + bytes memory result; + + require(gasleft() >= transaction.gasLimit, "ModuleCalls#_execute: NOT_ENOUGH_GAS"); + + if (transaction.delegateCall) { + (success, result) = transaction.target.delegatecall{ + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + } else { + (success, result) = transaction.target.call{ + value: transaction.value, + gas: transaction.gasLimit == 0 ? gasleft() : transaction.gasLimit + }(transaction.data); + } + + if (success) { + emit TxExecuted(_txHash); + } else { + _revertBytes(transaction, _txHash, result); + } + } + } + + /** + * @notice Verify if a nonce is valid + * @param _rawNonce Nonce to validate (may contain an encoded space) + * @dev A valid nonce must be above the last one used + * with a maximum delta of 100 + */ + function _validateNonce(uint256 _rawNonce) private { + // Retrieve current nonce for this wallet + (uint256 space, uint256 providedNonce) = _decodeNonce(_rawNonce); + uint256 currentNonce = readNonce(space); + + // Verify if nonce is valid + // Skip nonce validation for gas estimation + require( + (providedNonce == currentNonce) || true, + "MainModule#_auth: INVALID_NONCE" + ); + + // Update signature nonce + uint256 newNonce = providedNonce + 1; + _writeNonce(space, newNonce); + emit NonceChange(space, newNonce); + } + + /** + * @notice Logs a failed transaction, reverts if the transaction is not optional + * @param _tx Transaction that is reverting + * @param _txHash Hash of the transaction + * @param _reason Encoded revert message + */ + function _revertBytes( + Transaction memory _tx, + bytes32 _txHash, + bytes memory _reason + ) internal { + if (_tx.revertOnError) { + assembly { revert(add(_reason, 0x20), mload(_reason)) } + } else { + emit TxFailed(_txHash, _reason); + } + } + + /** + * @notice Decodes a raw nonce + * @dev A raw nonce is encoded using the first 160 bits for the space + * and the last 96 bits for the nonce + * @param _rawNonce Nonce to be decoded + * @return _space The nonce space of the raw nonce + * @return _nonce The nonce of the raw nonce + */ + function _decodeNonce(uint256 _rawNonce) private pure returns (uint256 _space, uint256 _nonce) { + _nonce = uint256(bytes32(_rawNonce) & NONCE_MASK); + _space = _rawNonce >> NONCE_BITS; + } + + /** + * @notice Query if a contract implements an interface + * @param _interfaceID The interface identifier, as specified in ERC-165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { + if (_interfaceID == type(IModuleCalls).interfaceId) { + return true; + } + + return super.supportsInterface(_interfaceID); + } +} diff --git a/src/gen/adapter/factories/MainModuleGasEstimation__factory.js b/src/gen/adapter/factories/MainModuleGasEstimation__factory.js index 9d80c75b..fbe14474 100644 --- a/src/gen/adapter/factories/MainModuleGasEstimation__factory.js +++ b/src/gen/adapter/factories/MainModuleGasEstimation__factory.js @@ -562,4 +562,4 @@ var _abi = [ type: "receive" }, ]; -var _bytecode = "0x608060405234801561001057600080fd5b50612cf0806100206000396000f3fe6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124dd565b610486565b60405161022191906126f4565b60405180910390f35b34801561023657600080fd5b5061024a61024536600461222a565b610491565b005b34801561025857600080fd5b5061026c6102673660046122fb565b6105b2565b6040516102219190612721565b34801561028557600080fd5b5061026c610294366004612493565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124dd565b610655565b60405161022191906126d3565b3480156102d257600080fd5b5061026c6102e1366004612529565b610660565b3480156102f257600080fd5b5061024a61030136600461247b565b6106ba565b34801561031257600080fd5b5061024a6103213660046124dd565b6107c8565b34801561033257600080fd5b5061033b6108a6565b60405161022191906126ff565b34801561035457600080fd5b5061024a6103633660046123de565b6108d6565b34801561037457600080fd5b5061024a610383366004612411565b61096f565b34801561039457600080fd5b5061033b6103a336600461247b565b6109eb565b6102b96103b6366004612592565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb3660046124f7565b610ad7565b3480156103fc57600080fd5b5061026c61040b366004612244565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612368565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b7a6039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129a16037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129d8602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061095f82604051602001610944919061283f565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b60006109908385604051602001610944929190612886565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127e2565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612aec602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111d2565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a84611313565b909250905061ffff821660005b8551831015610ed15760008080610d2e8987611381565b975060ff91821694501691506001831415610d5657610d4d8987611402565b96509050610e7a565b82610d82576060610d678a8861147a565b97509050610d758b8261152b565b9150828501945050610e7a565b6002831415610e2957610d958987611402565b965090506000610da58a886118b5565b975061ffff1690506060610dba8b8984611926565b98509050610dc98c8483611a15565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612aba6032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612975602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c5d565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611ca3565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612785565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126b7565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126b7565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b8115611113578560405161110691906126ff565b60405180910390a061111e565b61111e838783611cd1565b505050600101610f62565b505050565b60008061113a83611d21565b915091506000611149836109eb565b9050808214611184576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061274e565b600182016111928482611d3a565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111c392919061289f565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126557507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112b157507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b806112fd57507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561130a57506001610481565b61047e82611d65565b6020810151815160f09190911c9060029081111561137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a266027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113a157fe5b84518111156113fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bef6026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161141957fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a036023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114d157fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b576023913960400191505060405180910390fd5b60008151604214611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061293b603a913960400191505060405180910390fd5b60008260018451038151811061159957fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115bb57fe5b016020015160f81c905060006115d18582611dc2565b905060006115e0866020611dc2565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a081111561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806128fe603d913960400191505060405180910390fd5b8260ff16601b1415801561167357508260ff16601c14155b156116c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a4d603d913960400191505060405180910390fd5b600184141561173d5760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b50505060206040510351945061183f565b60028414156117ee5760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bb3603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a8a6030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118cc57fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c366022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194157600080fd5b506040519080825280601f01601f19166020018201604052801561196c576020820181803683370190505b509150838501602001600060205b858110156119935790820151848201526020810161197a565b84860160200180519390920151908501525250828201838110156119b357fe5b8451811115611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c156021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a2857fe5b016020015160f81c90506001811480611a415750600281145b15611a85578373ffffffffffffffffffffffffffffffffffffffff16611a67868561152b565b73ffffffffffffffffffffffffffffffffffffffff16149150611c55565b6003811415611c045782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b3f578181015183820152602001611b27565b50505050905090810190601f168015611b6c5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b8a57600080fd5b505afa158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c55565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b18603f913960400191505060405180910390fd5b509392505050565b60008115801590611c955750611c927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611ce357805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d14929190612708565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611ca3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611db957506001610481565b61047e82611e2a565b60008160200183511015611e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c58603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e7e57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611ed657506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f4c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f5957506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fd7578081fd5b8135602067ffffffffffffffff80831115611fee57fe5b611ffb82838502016128ad565b83815282810190868401865b868110156120d7578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204557898afd5b604080518281018181108a8211171561205a57fe5b8252612067848b01612127565b8152612074828501612127565b8a8201526060808501358383015260809250612091838601611fa3565b9082015260a084810135838301529284013592898411156120b0578c8dfd5b6120be8f8c868801016121a7565b9082015287525050509285019290850190600101612007565b509098975050505050505050565b60008083601f8401126120f6578182fd5b50813567ffffffffffffffff81111561210d578182fd5b602083019150836020808302850101111561147357600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612178578182fd5b50813567ffffffffffffffff81111561218f578182fd5b60208301915083602082850101111561147357600080fd5b600082601f8301126121b7578081fd5b813567ffffffffffffffff8111156121cb57fe5b6121fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128ad565b818152846020838601011115612210578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121561223b578081fd5b61064e82611fa3565b60008060008060008060008060a0898b03121561225f578384fd5b61226889611fa3565b975061227660208a01611fa3565b9650604089013567ffffffffffffffff80821115612292578586fd5b61229e8c838d016120e5565b909850965060608b01359150808211156122b6578586fd5b6122c28c838d016120e5565b909650945060808b01359150808211156122da578384fd5b506122e78b828c01612167565b999c989b5096995094979396929594505050565b600080600080600060808688031215612312578081fd5b61231b86611fa3565b945061232960208701611fa3565b935060408601359250606086013567ffffffffffffffff81111561234b578182fd5b61235788828901612167565b969995985093965092949392505050565b60008060008060008060a08789031215612380578182fd5b61238987611fa3565b955061239760208801611fa3565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c0578283fd5b6123cc89828a01612167565b979a9699509497509295939492505050565b6000602082840312156123ef578081fd5b813567ffffffffffffffff811115612405578182fd5b6106b284828501611fc7565b600080600060608486031215612425578283fd5b833567ffffffffffffffff8082111561243c578485fd5b61244887838801611fc7565b9450602086013593506040860135915080821115612464578283fd5b50612471868287016121a7565b9150509250925092565b60006020828403121561248c578081fd5b5035919050565b6000806000604084860312156124a7578283fd5b83359250602084013567ffffffffffffffff8111156124c4578283fd5b6124d086828701612167565b9497909650939450505050565b6000602082840312156124ee578081fd5b61064e82612137565b60008060408385031215612509578182fd5b61251283612137565b915061252060208401611fa3565b90509250929050565b6000806000806040858703121561253e578182fd5b843567ffffffffffffffff80821115612555578384fd5b61256188838901612167565b90965094506020870135915080821115612579578384fd5b5061258687828801612167565b95989497509550505050565b6000602082840312156125a3578081fd5b813567ffffffffffffffff8111156125b9578182fd5b6106b2848285016121a7565b6000815180845260208085019450848183028601828601855b858110156126605783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061264c8186018361266d565b9a87019a94505050908401906001016125de565b5090979650505050505050565b600081518084526126858160208601602086016128d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126c98184602087016128d1565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b2604083018461266d565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125c5565b6000838252604060208301526106b260408301846125c5565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128c957fe5b604052919050565b60005b838110156128ec5781810151838201526020016128d4565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a264697066735822122059e2080d36ec3f00d744d42e6b594c766aa973969434d6915824a8f2ea17e47964736f6c63430007060033"; +var _bytecode = "0x608060405234801561001057600080fd5b50612cf9806100206000396000f3fe6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124e6565b610486565b60405161022191906126fd565b60405180910390f35b34801561023657600080fd5b5061024a610245366004612233565b610491565b005b34801561025857600080fd5b5061026c610267366004612304565b6105b2565b604051610221919061272a565b34801561028557600080fd5b5061026c61029436600461249c565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124e6565b610655565b60405161022191906126dc565b3480156102d257600080fd5b5061026c6102e1366004612532565b610660565b3480156102f257600080fd5b5061024a610301366004612484565b6106ba565b34801561031257600080fd5b5061024a6103213660046124e6565b6107c8565b34801561033257600080fd5b5061033b6108a6565b6040516102219190612708565b34801561035457600080fd5b5061024a6103633660046123e7565b6108d6565b34801561037457600080fd5b5061024a61038336600461241a565b61096f565b34801561039457600080fd5b5061033b6103a3366004612484565b6109eb565b6102b96103b636600461259b565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb366004612500565b610ad7565b3480156103fc57600080fd5b5061026c61040b36600461224d565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612371565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b836039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129aa6037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129e1602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061095f826040516020016109449190612848565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b6000610990838560405160200161094492919061288f565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127eb565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612af5602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111db565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a8461131c565b909250905061ffff821660005b8551831015610ed15760008080610d2e898761138a565b975060ff91821694501691506001831415610d5657610d4d898761140b565b96509050610e7a565b82610d82576060610d678a88611483565b97509050610d758b82611534565b9150828501945050610e7a565b6002831415610e2957610d95898761140b565b965090506000610da58a886118be565b975061ffff1690506060610dba8b898461192f565b98509050610dc98c8483611a1e565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612ac36032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061297e602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c66565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611cac565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061278e565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126c0565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126c0565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b811561111357856040516111069190612708565b60405180910390a061111e565b61111e838783611cda565b505050600101610f62565b505050565b60008061113a83611d2a565b915091506000611149836109eb565b905080821480611157575060015b61118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612757565b6001820161119b8482611d43565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111cc9291906128a8565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112ba57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061130657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561131357506001610481565b61047e82611d6e565b6020810151815160f09190911c90600290811115611385576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a2f6027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113aa57fe5b8451811115611404576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bf86026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161142257fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a0c6023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114da57fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b606023913960400191505060405180910390fd5b60008151604214611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612944603a913960400191505060405180910390fd5b6000826001845103815181106115a257fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115c457fe5b016020015160f81c905060006115da8582611dcb565b905060006115e9866020611dcb565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612907603d913960400191505060405180910390fd5b8260ff16601b1415801561167c57508260ff16601c14155b156116d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a56603d913960400191505060405180910390fd5b60018414156117465760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b505050602060405103519450611848565b60028414156117f75760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bbc603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a936030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118d557fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c3f6022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194a57600080fd5b506040519080825280601f01601f191660200182016040528015611975576020820181803683370190505b509150838501602001600060205b8581101561199c57908201518482015260208101611983565b84860160200180519390920151908501525250828201838110156119bc57fe5b8451811115611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c1e6021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a3157fe5b016020015160f81c90506001811480611a4a5750600281145b15611a8e578373ffffffffffffffffffffffffffffffffffffffff16611a708685611534565b73ffffffffffffffffffffffffffffffffffffffff16149150611c5e565b6003811415611c0d5782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b48578181015183820152602001611b30565b50505050905090810190601f168015611b755780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b9357600080fd5b505afa158015611ba7573d6000803e3d6000fd5b505050506040513d6020811015611bbd57600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c5e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b21603f913960400191505060405180910390fd5b509392505050565b60008115801590611c9e5750611c9b7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611cec57805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d1d929190612711565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611cac565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611dc257506001610481565b61047e82611e33565b60008160200183511015611e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c61603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e8757506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611edf57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f5557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f6257506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fe0578081fd5b8135602067ffffffffffffffff80831115611ff757fe5b61200482838502016128b6565b83815282810190868401865b868110156120e0578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204e57898afd5b604080518281018181108a8211171561206357fe5b8252612070848b01612130565b815261207d828501612130565b8a820152606080850135838301526080925061209a838601611fac565b9082015260a084810135838301529284013592898411156120b9578c8dfd5b6120c78f8c868801016121b0565b9082015287525050509285019290850190600101612010565b509098975050505050505050565b60008083601f8401126120ff578182fd5b50813567ffffffffffffffff811115612116578182fd5b602083019150836020808302850101111561147c57600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612181578182fd5b50813567ffffffffffffffff811115612198578182fd5b60208301915083602082850101111561147c57600080fd5b600082601f8301126121c0578081fd5b813567ffffffffffffffff8111156121d457fe5b61220560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128b6565b818152846020838601011115612219578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215612244578081fd5b61064e82611fac565b60008060008060008060008060a0898b031215612268578384fd5b61227189611fac565b975061227f60208a01611fac565b9650604089013567ffffffffffffffff8082111561229b578586fd5b6122a78c838d016120ee565b909850965060608b01359150808211156122bf578586fd5b6122cb8c838d016120ee565b909650945060808b01359150808211156122e3578384fd5b506122f08b828c01612170565b999c989b5096995094979396929594505050565b60008060008060006080868803121561231b578081fd5b61232486611fac565b945061233260208701611fac565b935060408601359250606086013567ffffffffffffffff811115612354578182fd5b61236088828901612170565b969995985093965092949392505050565b60008060008060008060a08789031215612389578182fd5b61239287611fac565b95506123a060208801611fac565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c9578283fd5b6123d589828a01612170565b979a9699509497509295939492505050565b6000602082840312156123f8578081fd5b813567ffffffffffffffff81111561240e578182fd5b6106b284828501611fd0565b60008060006060848603121561242e578283fd5b833567ffffffffffffffff80821115612445578485fd5b61245187838801611fd0565b945060208601359350604086013591508082111561246d578283fd5b5061247a868287016121b0565b9150509250925092565b600060208284031215612495578081fd5b5035919050565b6000806000604084860312156124b0578283fd5b83359250602084013567ffffffffffffffff8111156124cd578283fd5b6124d986828701612170565b9497909650939450505050565b6000602082840312156124f7578081fd5b61064e82612140565b60008060408385031215612512578182fd5b61251b83612140565b915061252960208401611fac565b90509250929050565b60008060008060408587031215612547578182fd5b843567ffffffffffffffff8082111561255e578384fd5b61256a88838901612170565b90965094506020870135915080821115612582578384fd5b5061258f87828801612170565b95989497509550505050565b6000602082840312156125ac578081fd5b813567ffffffffffffffff8111156125c2578182fd5b6106b2848285016121b0565b6000815180845260208085019450848183028601828601855b858110156126695783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061265581860183612676565b9a87019a94505050908401906001016125e7565b5090979650505050505050565b6000815180845261268e8160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126d28184602087016128da565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b26040830184612676565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125ce565b6000838252604060208301526106b260408301846125ce565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128d257fe5b604052919050565b60005b838110156128f55781810151838201526020016128dd565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a2646970667358221220baddbc40c489c69946d531c32b82135e8191d8a6f39630fb87f2b3f55afaf85464736f6c63430007060033"; diff --git a/src/gen/adapter/factories/ModuleIgnoreNonceCalls__factory.js b/src/gen/adapter/factories/ModuleIgnoreNonceCalls__factory.js new file mode 100644 index 00000000..9183c063 --- /dev/null +++ b/src/gen/adapter/factories/ModuleIgnoreNonceCalls__factory.js @@ -0,0 +1,220 @@ +"use strict"; +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +exports.__esModule = true; +exports.ModuleIgnoreNonceCalls__factory = void 0; +var ethers_1 = require("ethers"); +var ModuleIgnoreNonceCalls__factory = /** @class */ (function () { + function ModuleIgnoreNonceCalls__factory() { + } + ModuleIgnoreNonceCalls__factory.connect = function (address, signerOrProvider) { + return new ethers_1.Contract(address, _abi, signerOrProvider); + }; + return ModuleIgnoreNonceCalls__factory; +}()); +exports.ModuleIgnoreNonceCalls__factory = ModuleIgnoreNonceCalls__factory; +var _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "_space", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "_newNonce", + type: "uint256" + }, + ], + name: "NonceChange", + type: "event" + }, + { + anonymous: true, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "_tx", + type: "bytes32" + }, + ], + name: "TxExecuted", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "_tx", + type: "bytes32" + }, + { + indexed: false, + internalType: "bytes", + name: "_reason", + type: "bytes" + }, + ], + name: "TxFailed", + type: "event" + }, + { + inputs: [ + { + components: [ + { + internalType: "bool", + name: "delegateCall", + type: "bool" + }, + { + internalType: "bool", + name: "revertOnError", + type: "bool" + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + }, + ], + internalType: "struct IModuleCalls.Transaction[]", + name: "_txs", + type: "tuple[]" + }, + { + internalType: "uint256", + name: "_nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes" + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + }, + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "_space", + type: "uint256" + }, + ], + name: "readNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + }, + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "bool", + name: "delegateCall", + type: "bool" + }, + { + internalType: "bool", + name: "revertOnError", + type: "bool" + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + }, + ], + internalType: "struct IModuleCalls.Transaction[]", + name: "_txs", + type: "tuple[]" + }, + ], + name: "selfExecute", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes4", + name: "_interfaceID", + type: "bytes4" + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + }, + ], + stateMutability: "pure", + type: "function" + }, +]; diff --git a/src/gen/adapter/index.js b/src/gen/adapter/index.js index 535aa2b5..464638b0 100644 --- a/src/gen/adapter/index.js +++ b/src/gen/adapter/index.js @@ -7,7 +7,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi o[k2] = m[k]; })); exports.__esModule = true; -exports.SequenceUtils__factory = exports.RequireUtils__factory = exports.MultiCallUtils__factory = exports.GasEstimator__factory = exports.MainModuleUpgradable__factory = exports.MainModuleGasEstimation__factory = exports.MainModule__factory = exports.GuestModule__factory = exports.ModuleUpdate__factory = exports.ModuleIgnoreAuthUpgradable__factory = exports.ModuleHooks__factory = exports.ModuleERC165__factory = exports.ModuleCreator__factory = exports.ModuleCalls__factory = exports.ModuleAuthUpgradable__factory = exports.ModuleAuth__factory = exports.IModuleUpdate__factory = exports.IModuleHooks__factory = exports.IModuleCreator__factory = exports.IModuleCalls__factory = exports.IModuleAuthUpgradable__factory = exports.ModuleMock__factory = exports.LibBytesImpl__factory = exports.HookMock__factory = exports.HookCallerMock__factory = exports.GasBurnerMock__factory = exports.ERC165CheckerMock__factory = exports.DelegateCallMock__factory = exports.CallReceiverMock__factory = exports.Migrations__factory = exports.IERC721Receiver__factory = exports.IERC223Receiver__factory = exports.IERC1155Receiver__factory = exports.IERC1271Wallet__factory = exports.Factory__factory = void 0; +exports.SequenceUtils__factory = exports.RequireUtils__factory = exports.MultiCallUtils__factory = exports.GasEstimator__factory = exports.MainModuleUpgradable__factory = exports.MainModuleGasEstimation__factory = exports.MainModule__factory = exports.GuestModule__factory = exports.ModuleUpdate__factory = exports.ModuleIgnoreNonceCalls__factory = exports.ModuleIgnoreAuthUpgradable__factory = exports.ModuleHooks__factory = exports.ModuleERC165__factory = exports.ModuleCreator__factory = exports.ModuleCalls__factory = exports.ModuleAuthUpgradable__factory = exports.ModuleAuth__factory = exports.IModuleUpdate__factory = exports.IModuleHooks__factory = exports.IModuleCreator__factory = exports.IModuleCalls__factory = exports.IModuleAuthUpgradable__factory = exports.ModuleMock__factory = exports.LibBytesImpl__factory = exports.HookMock__factory = exports.HookCallerMock__factory = exports.GasBurnerMock__factory = exports.ERC165CheckerMock__factory = exports.DelegateCallMock__factory = exports.CallReceiverMock__factory = exports.Migrations__factory = exports.IERC721Receiver__factory = exports.IERC223Receiver__factory = exports.IERC1155Receiver__factory = exports.IERC1271Wallet__factory = exports.Factory__factory = void 0; var Factory__factory_1 = require("./factories/Factory__factory"); __createBinding(exports, Factory__factory_1, "Factory__factory"); var IERC1271Wallet__factory_1 = require("./factories/IERC1271Wallet__factory"); @@ -60,6 +60,8 @@ var ModuleHooks__factory_1 = require("./factories/ModuleHooks__factory"); __createBinding(exports, ModuleHooks__factory_1, "ModuleHooks__factory"); var ModuleIgnoreAuthUpgradable__factory_1 = require("./factories/ModuleIgnoreAuthUpgradable__factory"); __createBinding(exports, ModuleIgnoreAuthUpgradable__factory_1, "ModuleIgnoreAuthUpgradable__factory"); +var ModuleIgnoreNonceCalls__factory_1 = require("./factories/ModuleIgnoreNonceCalls__factory"); +__createBinding(exports, ModuleIgnoreNonceCalls__factory_1, "ModuleIgnoreNonceCalls__factory"); var ModuleUpdate__factory_1 = require("./factories/ModuleUpdate__factory"); __createBinding(exports, ModuleUpdate__factory_1, "ModuleUpdate__factory"); var GuestModule__factory_1 = require("./factories/GuestModule__factory"); diff --git a/src/gen/typechain/ModuleIgnoreNonceCalls.d.ts b/src/gen/typechain/ModuleIgnoreNonceCalls.d.ts new file mode 100644 index 00000000..ad91b6fb --- /dev/null +++ b/src/gen/typechain/ModuleIgnoreNonceCalls.d.ts @@ -0,0 +1,539 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { + ethers, + EventFilter, + Signer, + BigNumber, + BigNumberish, + PopulatedTransaction, + Contract, + ContractTransaction, + Overrides, + CallOverrides, +} from "ethers"; +import { BytesLike } from "@ethersproject/bytes"; +import { Listener, Provider } from "@ethersproject/providers"; +import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; + +interface ModuleIgnoreNonceCallsInterface extends ethers.utils.Interface { + functions: { + "execute(tuple[],uint256,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "readNonce(uint256)": FunctionFragment; + "selfExecute(tuple[])": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "execute", + values: [ + { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + BigNumberish, + BytesLike + ] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "readNonce", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "selfExecute", + values: [ + { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[] + ] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [BytesLike] + ): string; + + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "readNonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "selfExecute", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + + events: { + "NonceChange(uint256,uint256)": EventFragment; + "TxExecuted(bytes32)": EventFragment; + "TxFailed(bytes32,bytes)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "NonceChange"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TxExecuted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TxFailed"): EventFragment; +} + +export class ModuleIgnoreNonceCalls extends Contract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter + ): this; + + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + queryFilter, EventArgsObject>( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + interface: ModuleIgnoreNonceCallsInterface; + + functions: { + execute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "execute(tuple[],uint256,bytes)"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + "nonce()"(overrides?: CallOverrides): Promise<[BigNumber]>; + + readNonce( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + "readNonce(uint256)"( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + selfExecute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "selfExecute(tuple[])"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; + + "supportsInterface(bytes4)"( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + execute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "execute(tuple[],uint256,bytes)"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + "nonce()"(overrides?: CallOverrides): Promise; + + readNonce( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "readNonce(uint256)"( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + selfExecute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "selfExecute(tuple[])"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + + "supportsInterface(bytes4)"( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + + callStatic: { + execute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: CallOverrides + ): Promise; + + "execute(tuple[],uint256,bytes)"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + "nonce()"(overrides?: CallOverrides): Promise; + + readNonce( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "readNonce(uint256)"( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + selfExecute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: CallOverrides + ): Promise; + + "selfExecute(tuple[])"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: CallOverrides + ): Promise; + + supportsInterface( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + + "supportsInterface(bytes4)"( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + NonceChange( + _space: null, + _newNonce: null + ): TypedEventFilter< + [BigNumber, BigNumber], + { _space: BigNumber; _newNonce: BigNumber } + >; + + TxExecuted(_tx: null): TypedEventFilter<[string], { _tx: string }>; + + TxFailed( + _tx: null, + _reason: null + ): TypedEventFilter<[string, string], { _tx: string; _reason: string }>; + }; + + estimateGas: { + execute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "execute(tuple[],uint256,bytes)"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + "nonce()"(overrides?: CallOverrides): Promise; + + readNonce( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "readNonce(uint256)"( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + selfExecute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "selfExecute(tuple[])"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + + "supportsInterface(bytes4)"( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + execute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "execute(tuple[],uint256,bytes)"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + _nonce: BigNumberish, + _signature: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + "nonce()"(overrides?: CallOverrides): Promise; + + readNonce( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "readNonce(uint256)"( + _space: BigNumberish, + overrides?: CallOverrides + ): Promise; + + selfExecute( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "selfExecute(tuple[])"( + _txs: { + delegateCall: boolean; + revertOnError: boolean; + gasLimit: BigNumberish; + target: string; + value: BigNumberish; + data: BytesLike; + }[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + + "supportsInterface(bytes4)"( + _interfaceID: BytesLike, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/gen/typechain/factories/MainModuleGasEstimation__factory.ts b/src/gen/typechain/factories/MainModuleGasEstimation__factory.ts index 1550dacd..b91e9d84 100644 --- a/src/gen/typechain/factories/MainModuleGasEstimation__factory.ts +++ b/src/gen/typechain/factories/MainModuleGasEstimation__factory.ts @@ -561,4 +561,4 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50612cf0806100206000396000f3fe6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124dd565b610486565b60405161022191906126f4565b60405180910390f35b34801561023657600080fd5b5061024a61024536600461222a565b610491565b005b34801561025857600080fd5b5061026c6102673660046122fb565b6105b2565b6040516102219190612721565b34801561028557600080fd5b5061026c610294366004612493565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124dd565b610655565b60405161022191906126d3565b3480156102d257600080fd5b5061026c6102e1366004612529565b610660565b3480156102f257600080fd5b5061024a61030136600461247b565b6106ba565b34801561031257600080fd5b5061024a6103213660046124dd565b6107c8565b34801561033257600080fd5b5061033b6108a6565b60405161022191906126ff565b34801561035457600080fd5b5061024a6103633660046123de565b6108d6565b34801561037457600080fd5b5061024a610383366004612411565b61096f565b34801561039457600080fd5b5061033b6103a336600461247b565b6109eb565b6102b96103b6366004612592565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb3660046124f7565b610ad7565b3480156103fc57600080fd5b5061026c61040b366004612244565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612368565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b7a6039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129a16037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129d8602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b600061095f82604051602001610944919061283f565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b60006109908385604051602001610944929190612886565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127e2565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c946027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612aec602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111d2565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a84611313565b909250905061ffff821660005b8551831015610ed15760008080610d2e8987611381565b975060ff91821694501691506001831415610d5657610d4d8987611402565b96509050610e7a565b82610d82576060610d678a8861147a565b97509050610d758b8261152b565b9150828501945050610e7a565b6002831415610e2957610d958987611402565b965090506000610da58a886118b5565b975061ffff1690506060610dba8b8984611926565b98509050610dc98c8483611a15565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612aba6032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612975602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c5d565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611ca3565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612785565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126b7565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126b7565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b8115611113578560405161110691906126ff565b60405180910390a061111e565b61111e838783611cd1565b505050600101610f62565b505050565b60008061113a83611d21565b915091506000611149836109eb565b9050808214611184576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061274e565b600182016111928482611d3a565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111c392919061289f565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126557507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112b157507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b806112fd57507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561130a57506001610481565b61047e82611d65565b6020810151815160f09190911c9060029081111561137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a266027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113a157fe5b84518111156113fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bef6026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161141957fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a036023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114d157fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b576023913960400191505060405180910390fd5b60008151604214611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061293b603a913960400191505060405180910390fd5b60008260018451038151811061159957fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115bb57fe5b016020015160f81c905060006115d18582611dc2565b905060006115e0866020611dc2565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a081111561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806128fe603d913960400191505060405180910390fd5b8260ff16601b1415801561167357508260ff16601c14155b156116c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a4d603d913960400191505060405180910390fd5b600184141561173d5760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b50505060206040510351945061183f565b60028414156117ee5760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561172c573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bb3603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a8a6030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118cc57fe5b8351811115611473576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c366022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194157600080fd5b506040519080825280601f01601f19166020018201604052801561196c576020820181803683370190505b509150838501602001600060205b858110156119935790820151848201526020810161197a565b84860160200180519390920151908501525250828201838110156119b357fe5b8451811115611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c156021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a2857fe5b016020015160f81c90506001811480611a415750600281145b15611a85578373ffffffffffffffffffffffffffffffffffffffff16611a67868561152b565b73ffffffffffffffffffffffffffffffffffffffff16149150611c55565b6003811415611c045782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b3f578181015183820152602001611b27565b50505050905090810190601f168015611b6c5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b8a57600080fd5b505afa158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c55565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b18603f913960400191505060405180910390fd5b509392505050565b60008115801590611c955750611c927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611ce357805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d14929190612708565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611ca3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611db957506001610481565b61047e82611e2a565b60008160200183511015611e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c58603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e7e57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611ed657506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f4c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f5957506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fd7578081fd5b8135602067ffffffffffffffff80831115611fee57fe5b611ffb82838502016128ad565b83815282810190868401865b868110156120d7578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204557898afd5b604080518281018181108a8211171561205a57fe5b8252612067848b01612127565b8152612074828501612127565b8a8201526060808501358383015260809250612091838601611fa3565b9082015260a084810135838301529284013592898411156120b0578c8dfd5b6120be8f8c868801016121a7565b9082015287525050509285019290850190600101612007565b509098975050505050505050565b60008083601f8401126120f6578182fd5b50813567ffffffffffffffff81111561210d578182fd5b602083019150836020808302850101111561147357600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612178578182fd5b50813567ffffffffffffffff81111561218f578182fd5b60208301915083602082850101111561147357600080fd5b600082601f8301126121b7578081fd5b813567ffffffffffffffff8111156121cb57fe5b6121fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128ad565b818152846020838601011115612210578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121561223b578081fd5b61064e82611fa3565b60008060008060008060008060a0898b03121561225f578384fd5b61226889611fa3565b975061227660208a01611fa3565b9650604089013567ffffffffffffffff80821115612292578586fd5b61229e8c838d016120e5565b909850965060608b01359150808211156122b6578586fd5b6122c28c838d016120e5565b909650945060808b01359150808211156122da578384fd5b506122e78b828c01612167565b999c989b5096995094979396929594505050565b600080600080600060808688031215612312578081fd5b61231b86611fa3565b945061232960208701611fa3565b935060408601359250606086013567ffffffffffffffff81111561234b578182fd5b61235788828901612167565b969995985093965092949392505050565b60008060008060008060a08789031215612380578182fd5b61238987611fa3565b955061239760208801611fa3565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c0578283fd5b6123cc89828a01612167565b979a9699509497509295939492505050565b6000602082840312156123ef578081fd5b813567ffffffffffffffff811115612405578182fd5b6106b284828501611fc7565b600080600060608486031215612425578283fd5b833567ffffffffffffffff8082111561243c578485fd5b61244887838801611fc7565b9450602086013593506040860135915080821115612464578283fd5b50612471868287016121a7565b9150509250925092565b60006020828403121561248c578081fd5b5035919050565b6000806000604084860312156124a7578283fd5b83359250602084013567ffffffffffffffff8111156124c4578283fd5b6124d086828701612167565b9497909650939450505050565b6000602082840312156124ee578081fd5b61064e82612137565b60008060408385031215612509578182fd5b61251283612137565b915061252060208401611fa3565b90509250929050565b6000806000806040858703121561253e578182fd5b843567ffffffffffffffff80821115612555578384fd5b61256188838901612167565b90965094506020870135915080821115612579578384fd5b5061258687828801612167565b95989497509550505050565b6000602082840312156125a3578081fd5b813567ffffffffffffffff8111156125b9578182fd5b6106b2848285016121a7565b6000815180845260208085019450848183028601828601855b858110156126605783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061264c8186018361266d565b9a87019a94505050908401906001016125de565b5090979650505050505050565b600081518084526126858160208601602086016128d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126c98184602087016128d1565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b2604083018461266d565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125c5565b6000838252604060208301526106b260408301846125c5565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128c957fe5b604052919050565b60005b838110156128ec5781810151838201526020016128d4565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a264697066735822122059e2080d36ec3f00d744d42e6b594c766aa973969434d6915824a8f2ea17e47964736f6c63430007060033"; + "0x608060405234801561001057600080fd5b50612cf9806100206000396000f3fe6080604052600436106101125760003560e01c806351605d80116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad146103d0578063bc197c81146103f0578063f23a6e611461041057610119565b806390042baf146103a8578063affed0e0146103bb57610119565b806351605d801461032657806361c2926c146103485780637a9a1628146103685780638c3f55631461038857610119565b80631a9b2337116100e15780631a9b23371461029957806320c13b0b146102c657806329561426146102e65780634fcf3eca1461030657610119565b806301ffc9a7146101f4578063025b22bc1461022a578063150b7a021461024c5780631626ba7e1461027957610119565b3661011957005b60006101486000357fffffffff0000000000000000000000000000000000000000000000000000000016610430565b905073ffffffffffffffffffffffffffffffffffffffff8116156101f1576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101d2576040519150601f19603f3d011682016040523d82523d6000602084013e6101d7565b606091505b5091509150816101e957805160208201fd5b805160208201f35b50005b34801561020057600080fd5b5061021461020f3660046124e6565b610486565b60405161022191906126fd565b60405180910390f35b34801561023657600080fd5b5061024a610245366004612233565b610491565b005b34801561025857600080fd5b5061026c610267366004612304565b6105b2565b604051610221919061272a565b34801561028557600080fd5b5061026c61029436600461249c565b6105dc565b3480156102a557600080fd5b506102b96102b43660046124e6565b610655565b60405161022191906126dc565b3480156102d257600080fd5b5061026c6102e1366004612532565b610660565b3480156102f257600080fd5b5061024a610301366004612484565b6106ba565b34801561031257600080fd5b5061024a6103213660046124e6565b6107c8565b34801561033257600080fd5b5061033b6108a6565b6040516102219190612708565b34801561035457600080fd5b5061024a6103633660046123e7565b6108d6565b34801561037457600080fd5b5061024a61038336600461241a565b61096f565b34801561039457600080fd5b5061033b6103a3366004612484565b6109eb565b6102b96103b636600461259b565b610a17565b3480156103c757600080fd5b5061033b610acb565b3480156103dc57600080fd5b5061024a6103eb366004612500565b610ad7565b3480156103fc57600080fd5b5061026c61040b36600461224d565b610bb0565b34801561041c57600080fd5b5061026c61042b366004612371565b610bdd565b600061047e7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610c08565b90505b919050565b600061047e82610c35565b3330146104e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6105088173ffffffffffffffffffffffffffffffffffffffff16610c92565b61055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b836039913960400191505060405180910390fd5b61056681610c98565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60006106266105ea85610c9c565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cfc92505050565b1561064e57507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b600061047e82610430565b600061068a6105ea86866040518083838082843760405192018290039091209350610c9c92505050565b156106b257507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b333014610712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b80610768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806129aa6037913960400191505060405180910390fd5b6107927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882610ef4565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061082b82610430565b73ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806129e1602b913960400191505060405180910390fd5b6108a3816000610ef8565b50565b60006108d17fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b905090565b33301461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b600061095f826040516020016109449190612848565b60405160208183030381529060405280519060200120610c9c565b905061096b8183610f5f565b5050565b6109788261112e565b6000610990838560405160200161094492919061288f565b905061099c8183610cfc565b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906127eb565b60405180910390fd5b6109e58185610f5f565b50505050565b600061047e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610c08565b6000333014610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006108d160006109eb565b333014610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c9d6027913960400191505060405180910390fd5b6000610b3a83610430565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612af5602c913960400191505060405180910390fd5b61096b8282610ef8565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415610c8957506001610481565b61047e826111db565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b6000806000610d0a8461131c565b909250905061ffff821660005b8551831015610ed15760008080610d2e898761138a565b975060ff91821694501691506001831415610d5657610d4d898761140b565b96509050610e7a565b82610d82576060610d678a88611483565b97509050610d758b82611534565b9150828501945050610e7a565b6002831415610e2957610d95898761140b565b965090506000610da58a886118be565b975061ffff1690506060610dba8b898461192f565b98509050610dc98c8483611a1e565b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612ac36032913960400191505060405180910390fd5b505092810192610e7a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061297e602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050610d17565b8361ffff168110158015610ee95750610ee982611c66565b979650505050505050565b9055565b61096b7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416611cac565b5490565b60005b8151811015611129576000828281518110610f7957fe5b602002602001015190506000606082604001515a1015610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d29061278e565b82511561105d57826060015173ffffffffffffffffffffffffffffffffffffffff168360400151600014610ffd578360400151610fff565b5a5b8460a0015160405161101191906126c0565b6000604051808303818686f4925050503d806000811461104d576040519150601f19603f3d011682016040523d82523d6000602084013e611052565b606091505b5090925090506110f2565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611093578460400151611095565b5a5b908560a001516040516110a891906126c0565b600060405180830381858888f193505050503d80600081146110e6576040519150601f19603f3d011682016040523d82523d6000602084013e6110eb565b606091505b5090925090505b811561111357856040516111069190612708565b60405180910390a061111e565b61111e838783611cda565b505050600101610f62565b505050565b60008061113a83611d2a565b915091506000611149836109eb565b905080821480611157575060015b61118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d290612757565b6001820161119b8482611d43565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f88184826040516111cc9291906128a8565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba5000000000000000000000000000000000000000000000000000000000148061126e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b806112ba57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061130657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b1561131357506001610481565b61047e82611d6e565b6020810151815160f09190911c90600290811115611385576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a2f6027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff16600283018381116113aa57fe5b8451811115611404576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bf86026913960400191505060405180910390fd5b9250925092565b8082016020015160601c6014820182811161142257fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612a0c6023913960400191505060405180910390fd5b9250929050565b6040805160428082526080820190925260609160009190602082018180368337019050509150828401602001805160208401526020810151604084015260228101516042840152506042830190508281116114da57fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b606023913960400191505060405180910390fd5b60008151604214611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612944603a913960400191505060405180910390fd5b6000826001845103815181106115a257fe5b602001015160f81c60f81b60f81c60ff1690506000836040815181106115c457fe5b016020015160f81c905060006115da8582611dcb565b905060006115e9866020611dcb565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612907603d913960400191505060405180910390fd5b8260ff16601b1415801561167c57508260ff16601c14155b156116d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a56603d913960400191505060405180910390fd5b60018414156117465760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b505050602060405103519450611848565b60028414156117f75760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611735573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612bbc603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166118b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612a936030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c600282018281116118d557fe5b835181111561147c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c3f6022913960400191505060405180910390fd5b606060008267ffffffffffffffff8111801561194a57600080fd5b506040519080825280601f01601f191660200182016040528015611975576020820181803683370190505b509150838501602001600060205b8581101561199c57908201518482015260208101611983565b84860160200180519390920151908501525250828201838110156119bc57fe5b8451811115611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c1e6021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611a3157fe5b016020015160f81c90506001811480611a4a5750600281145b15611a8e578373ffffffffffffffffffffffffffffffffffffffff16611a708685611534565b73ffffffffffffffffffffffffffffffffffffffff16149150611c5e565b6003811415611c0d5782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611b48578181015183820152602001611b30565b50505050905090810190601f168015611b755780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611b9357600080fd5b505afa158015611ba7573d6000803e3d6000fd5b505050506040513d6020811015611bbd57600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150611c5e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180612b21603f913960400191505060405180910390fd5b509392505050565b60008115801590611c9e5750611c9b7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8610f5b565b82145b8061047e5750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b826020015115611cec57805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051611d1d929190612711565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b61096b7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383611cac565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc000000000000000000000000000000000000000000000000000000001415611dc257506001610481565b61047e82611e33565b60008160200183511015611e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612c61603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c7000000000000000000000000000000000000000000000000000000001415611e8757506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415611edf57506001610481565b61047e8260007fffffffff0000000000000000000000000000000000000000000000000000000082161580611f5557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b15611f6257506001610481565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461047e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461048157600080fd5b600082601f830112611fe0578081fd5b8135602067ffffffffffffffff80831115611ff757fe5b61200482838502016128b6565b83815282810190868401865b868110156120e0578135890160c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838e0301121561204e57898afd5b604080518281018181108a8211171561206357fe5b8252612070848b01612130565b815261207d828501612130565b8a820152606080850135838301526080925061209a838601611fac565b9082015260a084810135838301529284013592898411156120b9578c8dfd5b6120c78f8c868801016121b0565b9082015287525050509285019290850190600101612010565b509098975050505050505050565b60008083601f8401126120ff578182fd5b50813567ffffffffffffffff811115612116578182fd5b602083019150836020808302850101111561147c57600080fd5b8035801515811461048157600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461048157600080fd5b60008083601f840112612181578182fd5b50813567ffffffffffffffff811115612198578182fd5b60208301915083602082850101111561147c57600080fd5b600082601f8301126121c0578081fd5b813567ffffffffffffffff8111156121d457fe5b61220560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128b6565b818152846020838601011115612219578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215612244578081fd5b61064e82611fac565b60008060008060008060008060a0898b031215612268578384fd5b61227189611fac565b975061227f60208a01611fac565b9650604089013567ffffffffffffffff8082111561229b578586fd5b6122a78c838d016120ee565b909850965060608b01359150808211156122bf578586fd5b6122cb8c838d016120ee565b909650945060808b01359150808211156122e3578384fd5b506122f08b828c01612170565b999c989b5096995094979396929594505050565b60008060008060006080868803121561231b578081fd5b61232486611fac565b945061233260208701611fac565b935060408601359250606086013567ffffffffffffffff811115612354578182fd5b61236088828901612170565b969995985093965092949392505050565b60008060008060008060a08789031215612389578182fd5b61239287611fac565b95506123a060208801611fac565b94506040870135935060608701359250608087013567ffffffffffffffff8111156123c9578283fd5b6123d589828a01612170565b979a9699509497509295939492505050565b6000602082840312156123f8578081fd5b813567ffffffffffffffff81111561240e578182fd5b6106b284828501611fd0565b60008060006060848603121561242e578283fd5b833567ffffffffffffffff80821115612445578485fd5b61245187838801611fd0565b945060208601359350604086013591508082111561246d578283fd5b5061247a868287016121b0565b9150509250925092565b600060208284031215612495578081fd5b5035919050565b6000806000604084860312156124b0578283fd5b83359250602084013567ffffffffffffffff8111156124cd578283fd5b6124d986828701612170565b9497909650939450505050565b6000602082840312156124f7578081fd5b61064e82612140565b60008060408385031215612512578182fd5b61251b83612140565b915061252960208401611fac565b90509250929050565b60008060008060408587031215612547578182fd5b843567ffffffffffffffff8082111561255e578384fd5b61256a88838901612170565b90965094506020870135915080821115612582578384fd5b5061258f87828801612170565b95989497509550505050565b6000602082840312156125ac578081fd5b813567ffffffffffffffff8111156125c2578182fd5b6106b2848285016121b0565b6000815180845260208085019450848183028601828601855b858110156126695783830389528151805115158452858101511515868501526040808201519085015260608082015173ffffffffffffffffffffffffffffffffffffffff16908501526080808201519085015260a09081015160c09185018290529061265581860183612676565b9a87019a94505050908401906001016125e7565b5090979650505050505050565b6000815180845261268e8160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516126d28184602087016128da565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b6000838252604060208301526106b26040830184612676565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261064e60808301846125ce565b6000838252604060208301526106b260408301846125ce565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156128d257fe5b604052919050565b60005b838110156128f55781810151838201526020016128dd565b838111156109e5575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a2646970667358221220baddbc40c489c69946d531c32b82135e8191d8a6f39630fb87f2b3f55afaf85464736f6c63430007060033"; diff --git a/src/gen/typechain/factories/ModuleIgnoreNonceCalls__factory.ts b/src/gen/typechain/factories/ModuleIgnoreNonceCalls__factory.ts new file mode 100644 index 00000000..72950a07 --- /dev/null +++ b/src/gen/typechain/factories/ModuleIgnoreNonceCalls__factory.ts @@ -0,0 +1,226 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer } from "ethers"; +import { Provider } from "@ethersproject/providers"; + +import type { ModuleIgnoreNonceCalls } from "../ModuleIgnoreNonceCalls"; + +export class ModuleIgnoreNonceCalls__factory { + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ModuleIgnoreNonceCalls { + return new Contract( + address, + _abi, + signerOrProvider + ) as ModuleIgnoreNonceCalls; + } +} + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "_space", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "_newNonce", + type: "uint256", + }, + ], + name: "NonceChange", + type: "event", + }, + { + anonymous: true, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "_tx", + type: "bytes32", + }, + ], + name: "TxExecuted", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "_tx", + type: "bytes32", + }, + { + indexed: false, + internalType: "bytes", + name: "_reason", + type: "bytes", + }, + ], + name: "TxFailed", + type: "event", + }, + { + inputs: [ + { + components: [ + { + internalType: "bool", + name: "delegateCall", + type: "bool", + }, + { + internalType: "bool", + name: "revertOnError", + type: "bool", + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256", + }, + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + internalType: "struct IModuleCalls.Transaction[]", + name: "_txs", + type: "tuple[]", + }, + { + internalType: "uint256", + name: "_nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_space", + type: "uint256", + }, + ], + name: "readNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bool", + name: "delegateCall", + type: "bool", + }, + { + internalType: "bool", + name: "revertOnError", + type: "bool", + }, + { + internalType: "uint256", + name: "gasLimit", + type: "uint256", + }, + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + internalType: "struct IModuleCalls.Transaction[]", + name: "_txs", + type: "tuple[]", + }, + ], + name: "selfExecute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "_interfaceID", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "pure", + type: "function", + }, +]; diff --git a/src/gen/typechain/index.ts b/src/gen/typechain/index.ts index 2e8f9e85..bb2858a7 100644 --- a/src/gen/typechain/index.ts +++ b/src/gen/typechain/index.ts @@ -27,6 +27,7 @@ export type { ModuleCreator } from "./ModuleCreator"; export type { ModuleERC165 } from "./ModuleERC165"; export type { ModuleHooks } from "./ModuleHooks"; export type { ModuleIgnoreAuthUpgradable } from "./ModuleIgnoreAuthUpgradable"; +export type { ModuleIgnoreNonceCalls } from "./ModuleIgnoreNonceCalls"; export type { ModuleUpdate } from "./ModuleUpdate"; export type { GuestModule } from "./GuestModule"; export type { MainModule } from "./MainModule"; @@ -63,6 +64,7 @@ export { ModuleCreator__factory } from "./factories/ModuleCreator__factory"; export { ModuleERC165__factory } from "./factories/ModuleERC165__factory"; export { ModuleHooks__factory } from "./factories/ModuleHooks__factory"; export { ModuleIgnoreAuthUpgradable__factory } from "./factories/ModuleIgnoreAuthUpgradable__factory"; +export { ModuleIgnoreNonceCalls__factory } from "./factories/ModuleIgnoreNonceCalls__factory"; export { ModuleUpdate__factory } from "./factories/ModuleUpdate__factory"; export { GuestModule__factory } from "./factories/GuestModule__factory"; export { MainModule__factory } from "./factories/MainModule__factory"; diff --git a/tests/GasEstimation.spec.ts b/tests/GasEstimation.spec.ts index 73d0623e..2144f641 100644 --- a/tests/GasEstimation.spec.ts +++ b/tests/GasEstimation.spec.ts @@ -273,6 +273,30 @@ contract('Estimate gas usage', (accounts: string[]) => { expect(estimated + txBaseCost(txDataNoSignature)).to.approximately(gasUsed, 4000) }) + it('Should estimate multiple transactions with bad nonce', async () => { + const transaction = [{ + delegateCall: false, + revertOnError: true, + gasLimit: 0, + target: callReceiver.address, + value: ethers.constants.Zero, + data: callReceiver.contract.methods.testCall(1, ethers.utils.hexlify(ethers.utils.randomBytes(299))).encodeABI() + }, { + delegateCall: false, + revertOnError: true, + gasLimit: 0, + target: callReceiver.address, + value: ethers.constants.Zero, + data: callReceiver.contract.methods.testCall(1, ethers.utils.hexlify(ethers.utils.randomBytes(2299))).encodeABI() + }] + + const txDataNoSignature = await multiSignAndEncodeMetaTxn(mainModule as any, fakeAccounts, threshold, transaction, networkId, 999999999) + + const estimated = ethers.BigNumber.from((await estimate(address, txDataNoSignature).call()).gas).toNumber() + const gasUsed = (await multiSignAndExecuteMetaTx(wallet, accounts, threshold, transaction, networkId, 0) as any).receipt.gasUsed + + expect(estimated + txBaseCost(txDataNoSignature)).to.approximately(gasUsed, 4000) + }) it('Should estimate multiple transactions with failing transactions', async () => { const altCallReceiver = (await CallReceiverMockArtifact.new()) as CallReceiverMock await altCallReceiver.setRevertFlag(true)