From 3748bb63826f9db73597339680ad776960691772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Crist=C3=B3v=C3=A3o=20Honorato?= Date: Tue, 30 Jul 2024 00:17:23 +0200 Subject: [PATCH] Add mastercopy artifact for contract version 1.1.0 --- mastercopies.json | 1050 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1045 insertions(+), 5 deletions(-) diff --git a/mastercopies.json b/mastercopies.json index 1093b2c..15f087b 100644 --- a/mastercopies.json +++ b/mastercopies.json @@ -3,7 +3,13 @@ "contractAddress": "0xD62129BF40CD1694b3d9D9847367783a1A4d5cB4", "bytecode": "0x60806040523480156200001157600080fd5b5060405162004e2138038062004e21833981810160405281019062000037919062000a30565b600085858585856040516020016200005495949392919062000d57565b604051602081830303815290604052905062000076816200008260201b60201c565b50505050505062000f53565b600080600080600085806020019051810190620000a09190620009ae565b94509450945094509450620000ba6200032a60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200012d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001249062000e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001979062000dd6565b60405180910390fd5b6000811480620001b15750603c8110155b620001f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ea9062000e3c565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606a819055508160698190555062000294856200042960201b60201c565b620002a46200053f60201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffd805e12a6d02f83d7029c03fdfcf3f226ebcd409af51b3095237015eae50300866040516200031a919062000d3a565b60405180910390a4505050505050565b600060019054906101000a900460ff168062000351575060008054906101000a900460ff16155b62000393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038a9062000df8565b60405180910390fd5b60008060019054906101000a900460ff161590508015620003e4576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620003f46200069360201b60201c565b620004046200077260201b60201c565b8015620004265760008060016101000a81548160ff0219169083151502179055505b50565b620004396200087160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200045f6200087960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004af9062000e1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200052b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005229062000db4565b60405180910390fd5b6200053c81620008a360201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff1660686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006089062000e80565b60405180910390fd5b600160686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900460ff1680620006ba575060008054906101000a900460ff16155b620006fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f39062000df8565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200074d576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156200076f5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000799575060008054906101000a900460ff16155b620007db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d29062000df8565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200082c576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200084c620008406200087160201b60201c565b620008a360201b60201c565b80156200086e5760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200097a8162000f05565b92915050565b600081519050620009918162000f1f565b92915050565b600081519050620009a88162000f39565b92915050565b600080600080600060a08688031215620009c757600080fd5b6000620009d78882890162000980565b9550506020620009ea8882890162000980565b9450506040620009fd8882890162000980565b935050606062000a108882890162000997565b925050608062000a238882890162000997565b9150509295509295909350565b600080600080600060a0868803121562000a4957600080fd5b600062000a598882890162000969565b955050602062000a6c8882890162000969565b945050604062000a7f8882890162000969565b935050606062000a928882890162000997565b925050608062000aa58882890162000997565b9150509295509295909350565b62000abd8162000eb3565b82525050565b600062000ad260268362000ea2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000b3a601e8362000ea2565b91507f5461726765742063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b600062000b7c602e8362000ea2565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b600062000be460208362000ea2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600062000c26602d8362000ea2565b91507f457870697261746974696f6e206d7573742062652030206f72206174206c656160008301527f7374203630207365636f6e6473000000000000000000000000000000000000006020830152604082019050919050565b600062000c8e601e8362000ea2565b91507f4176617461722063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b600062000cd060248362000ea2565b91507f73657455704d6f64756c65732068617320616c7265616479206265656e20636160008301527f6c6c6564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b62000d348162000efb565b82525050565b600060208201905062000d51600083018462000ab2565b92915050565b600060a08201905062000d6e600083018862000ab2565b62000d7d602083018762000ab2565b62000d8c604083018662000ab2565b62000d9b606083018562000d29565b62000daa608083018462000d29565b9695505050505050565b6000602082019050818103600083015262000dcf8162000ac3565b9050919050565b6000602082019050818103600083015262000df18162000b2b565b9050919050565b6000602082019050818103600083015262000e138162000b6d565b9050919050565b6000602082019050818103600083015262000e358162000bd5565b9050919050565b6000602082019050818103600083015262000e578162000c17565b9050919050565b6000602082019050818103600083015262000e798162000c7f565b9050919050565b6000602082019050818103600083015262000e9b8162000cc1565b9050919050565b600082825260208201905092915050565b600062000ec08262000edb565b9050919050565b600062000ed48262000edb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b62000f108162000eb3565b811462000f1c57600080fd5b50565b62000f2a8162000ec7565b811462000f3657600080fd5b50565b62000f448162000efb565b811462000f5057600080fd5b50565b613ebe8062000f636000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637ceab3b11161010f578063d4b83992116100a2578063e19a9dd911610071578063e19a9dd914610582578063ebb2b4a21461059e578063ee072baf146105ba578063f2fde38b146105d6576101e5565b8063d4b839921461050c578063dcafac091461052a578063de8dd91d14610548578063e009cfde14610566576101e5565b8063b19d4758116100de578063b19d475814610495578063c66323e51461049f578063c9106389146104bd578063cc2f8452146104db576101e5565b80637ceab3b1146104215780638da5cb5b1461043f5780639b56d5be1461045d578063a4f9edbf14610479576101e5565b806346ba230711610187578063610b592511610156578063610b5925146103af5780636b0a4cf6146103cb578063715018a6146103fb578063776d1a0114610405576101e5565b806346ba2307146103265780635229073f146103425780635aef7de614610373578063605df59c14610391576101e5565b8063300c661f116101c3578063300c661f146102665780633aa7690614610296578063427e232f146102c6578063468721a7146102f6576101e5565b8063086cfca8146101ea578063258148cc146102065780632d9ad53d14610236575b600080fd5b61020460048036038101906101ff9190612b58565b6105f2565b005b610220600480360381019061021b9190612dd5565b610734565b60405161022d9190613a47565b60405180910390f35b610250600480360381019061024b9190612b58565b61074c565b60405161025d919061373d565b60405180910390f35b610280600480360381019061027b9190612cf0565b61081e565b60405161028d9190613788565b60405180910390f35b6102b060048036038101906102ab9190612dd5565b610857565b6040516102bd9190613a47565b60405180910390f35b6102e060048036038101906102db9190612dd5565b610874565b6040516102ed9190613788565b60405180910390f35b610310600480360381019061030b9190612c70565b61088c565b60405161031d919061373d565b60405180910390f35b610340600480360381019061033b9190612dd5565b610a5c565b005b61035c60048036038101906103579190612c70565b610b6b565b60405161036a929190613758565b60405180910390f35b61037b610c48565b604051610388919061359f565b60405180910390f35b610399610c6e565b6040516103a69190613a47565b60405180910390f35b6103c960048036038101906103c49190612b58565b610c74565b005b6103e560048036038101906103e09190612dd5565b610ffe565b6040516103f29190613788565b60405180910390f35b61040361101b565b005b61041f600480360381019061041a9190612b58565b6110a3565b005b6104296111e5565b604051610436919061359f565b60405180910390f35b61044761120b565b604051610454919061359f565b60405180910390f35b61047760048036038101906104729190612dd5565b611235565b005b610493600480360381019061048e9190612d94565b61130a565b005b61049d61158c565b005b6104a7611601565b6040516104b49190613a47565b60405180910390f35b6104c5611607565b6040516104d2919061359f565b60405180910390f35b6104f560048036038101906104f09190612c34565b611631565b60405161050392919061370d565b60405180910390f35b61051461187e565b604051610521919061359f565b60405180910390f35b6105326118a4565b60405161053f9190613a47565b60405180910390f35b6105506118aa565b60405161055d9190613a47565b60405180910390f35b610580600480360381019061057b9190612bf8565b6118b0565b005b61059c60048036038101906105979190612b58565b611c39565b005b6105b860048036038101906105b39190612dd5565b611e6f565b005b6105d460048036038101906105cf9190612c70565b611ef5565b005b6105f060048036038101906105eb9190612b58565b612171565b005b6105fa612269565b73ffffffffffffffffffffffffffffffffffffffff1661061861120b565b73ffffffffffffffffffffffffffffffffffffffff161461066e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610665906138c7565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b606e6020528060005260406000206000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156108175750600073ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000848484846040516020016108379493929190613555565b604051602081830303815290604052805190602001209050949350505050565b6000606e6000838152602001908152602001600020549050919050565b606d6020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390613947565b60405180910390fd5b6109ac868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508561081e565b606d6000606c5481526020019081526020016000208190555042606e6000606c54815260200190815260200160002081905550606d6000606c54815260200190815260200160002054606c547f4c8a9c748e976c17c2eb2c2bc50da76eac9cd90ff529f0fe900e0c10a179f0318888888888604051610a2f9594939291906135ba565b60405180910390a3606c6000815480929190610a4a90613cc7565b91905055506001905095945050505050565b610a64612269565b73ffffffffffffffffffffffffffffffffffffffff16610a8261120b565b73ffffffffffffffffffffffffffffffffffffffff1614610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf906138c7565b60405180910390fd5b606b548111610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b13906138a7565b60405180910390fd5b606c54811115610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b58906138e7565b60405180910390fd5b80606b8190555050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613947565b60405180910390fd5b9550959350505050565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606a5481565b610c7c612269565b73ffffffffffffffffffffffffffffffffffffffff16610c9a61120b565b73ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce7906138c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610d5a5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613a07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e906139a7565b60405180910390fd5b60686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051610ff3919061359f565b60405180910390a150565b6000606d6000838152602001908152602001600020549050919050565b611023612269565b73ffffffffffffffffffffffffffffffffffffffff1661104161120b565b73ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906138c7565b60405180910390fd5b6110a16000612271565b565b6110ab612269565b73ffffffffffffffffffffffffffffffffffffffff166110c961120b565b73ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611116906138c7565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61123d612269565b73ffffffffffffffffffffffffffffffffffffffff1661125b61120b565b73ffffffffffffffffffffffffffffffffffffffff16146112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a8906138c7565b60405180910390fd5b60008114806112c15750603c8110155b611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f790613907565b60405180910390fd5b80606a8190555050565b6000806000806000858060200190518101906113269190612b81565b94509450945094509450611338612337565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613927565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613867565b60405180910390fd5b60008114806114285750603c8110155b611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90613907565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606a819055508160698190555061150085612171565b611508612420565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffd805e12a6d02f83d7029c03fdfcf3f226ebcd409af51b3095237015eae503008660405161157c919061359f565b60405180910390a4505050505050565b5b6000606a54141580156115ce575042606a54606954606e6000606b548152602001908152602001600020546115c29190613b34565b6115cc9190613b34565b105b80156115dd5750606c54606b54105b156115ff57606b60008154809291906115f590613cc7565b919050555061158d565b565b606b5481565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008267ffffffffffffffff811115611675577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156116a35781602001602082028036833780820191505090505b509150600080606860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156117765750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561178157508482105b1561186f57808483815181106117c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818061186790613cc7565b92505061170c565b80925081845250509250929050565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60695481565b606c5481565b6118b8612269565b73ffffffffffffffffffffffffffffffffffffffff166118d661120b565b73ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611923906138c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156119965750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90613a07565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a99906137e7565b60405180910390fd5b606860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051611c2d919061359f565b60405180910390a15050565b611c41612269565b73ffffffffffffffffffffffffffffffffffffffff16611c5f61120b565b73ffffffffffffffffffffffffffffffffffffffff1614611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac906138c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611dd2578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611d4291906137cc565b60206040518083038186803b158015611d5a57600080fd5b505afa158015611d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d929190612d6b565b611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc890613967565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611e64919061359f565b60405180910390a150565b611e77612269565b73ffffffffffffffffffffffffffffffffffffffff16611e9561120b565b73ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee2906138c7565b60405180910390fd5b8060698190555050565b606c54606b5410611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f32906139e7565b60405180910390fd5b606954606e6000606b5481526020019081526020016000205442611f5f9190613b8a565b1015611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9790613987565b60405180910390fd5b6000606a541461201d5742606a54606954606e6000606b54815260200190815260200160002054611fd19190613b34565b611fdb9190613b34565b101561201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390613827565b60405180910390fd5b5b61206d858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508461081e565b606d6000606b54815260200190815260200160002054146120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90613847565b60405180910390fd5b606b60008154809291906120d690613cc7565b919050555061212b858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505084612571565b61216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190613a27565b60405180910390fd5b5050505050565b612179612269565b73ffffffffffffffffffffffffffffffffffffffff1661219761120b565b73ffffffffffffffffffffffffffffffffffffffff16146121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e4906138c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561225d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225490613807565b60405180910390fd5b61226681612271565b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff168061235d575060008054906101000a900460ff16155b61239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390613887565b60405180910390fd5b60008060019054906101000a900460ff1615905080156123ec576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6123f4612866565b6123fc61293f565b801561241d5760008060016101000a81548160ff0219169083151502179055505b50565b600073ffffffffffffffffffffffffffffffffffffffff1660686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e6906139c7565b60405180910390fd5b600160686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a357606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b81526004016126709b9a99989796959493929190613654565b600060405180830381600087803b15801561268a57600080fd5b505af115801561269e573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016127049493929190613608565b602060405180830381600087803b15801561271e57600080fd5b505af1158015612732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127569190612d6b565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285e57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b815260040161282b9291906137a3565b600060405180830381600087803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b505050505b949350505050565b600060019054906101000a900460ff168061288c575060008054906101000a900460ff16155b6128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c290613887565b60405180910390fd5b60008060019054906101000a900460ff16159050801561291b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801561293c5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612965575060008054906101000a900460ff16155b6129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299b90613887565b60405180910390fd5b60008060019054906101000a900460ff1615905080156129f4576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612a046129ff612269565b612271565b8015612a255760008060016101000a81548160ff0219169083151502179055505b50565b6000612a3b612a3684613a93565b613a62565b905082815260208101848484011115612a5357600080fd5b612a5e848285613c85565b509392505050565b600081359050612a7581613e1c565b92915050565b600081519050612a8a81613e33565b92915050565b600081519050612a9f81613e4a565b92915050565b60008083601f840112612ab757600080fd5b8235905067ffffffffffffffff811115612ad057600080fd5b602083019150836001820283011115612ae857600080fd5b9250929050565b600082601f830112612b0057600080fd5b8135612b10848260208601612a28565b91505092915050565b600081359050612b2881613e61565b92915050565b600081359050612b3d81613e71565b92915050565b600081519050612b5281613e71565b92915050565b600060208284031215612b6a57600080fd5b6000612b7884828501612a66565b91505092915050565b600080600080600060a08688031215612b9957600080fd5b6000612ba788828901612a7b565b9550506020612bb888828901612a7b565b9450506040612bc988828901612a7b565b9350506060612bda88828901612b43565b9250506080612beb88828901612b43565b9150509295509295909350565b60008060408385031215612c0b57600080fd5b6000612c1985828601612a66565b9250506020612c2a85828601612a66565b9150509250929050565b60008060408385031215612c4757600080fd5b6000612c5585828601612a66565b9250506020612c6685828601612b2e565b9150509250929050565b600080600080600060808688031215612c8857600080fd5b6000612c9688828901612a66565b9550506020612ca788828901612b2e565b945050604086013567ffffffffffffffff811115612cc457600080fd5b612cd088828901612aa5565b93509350506060612ce388828901612b19565b9150509295509295909350565b60008060008060808587031215612d0657600080fd5b6000612d1487828801612a66565b9450506020612d2587828801612b2e565b935050604085013567ffffffffffffffff811115612d4257600080fd5b612d4e87828801612aef565b9250506060612d5f87828801612b19565b91505092959194509250565b600060208284031215612d7d57600080fd5b6000612d8b84828501612a90565b91505092915050565b600060208284031215612da657600080fd5b600082013567ffffffffffffffff811115612dc057600080fd5b612dcc84828501612aef565b91505092915050565b600060208284031215612de757600080fd5b6000612df584828501612b2e565b91505092915050565b6000612e0a8383612e25565b60208301905092915050565b612e1f81613bd0565b82525050565b612e2e81613bbe565b82525050565b612e3d81613bbe565b82525050565b612e54612e4f82613bbe565b613d10565b82525050565b6000612e6582613ad3565b612e6f8185613af6565b9350612e7a83613ac3565b8060005b83811015612eab578151612e928882612dfe565b9750612e9d83613ae9565b925050600181019050612e7e565b5085935050505092915050565b612ec181613be2565b82525050565b612ed081613bee565b82525050565b612edf81613bf8565b82525050565b6000612ef18385613b07565b9350612efe838584613c85565b612f0783613ddd565b840190509392505050565b6000612f1d82613ade565b612f278185613b07565b9350612f37818560208601613c94565b612f4081613ddd565b840191505092915050565b6000612f5682613ade565b612f608185613b18565b9350612f70818560208601613c94565b80840191505092915050565b612f8581613c61565b82525050565b612f9c612f9782613c61565b613d3e565b82525050565b612fab81613c73565b82525050565b6000612fbe601783613b23565b91507f4d6f64756c6520616c72656164792064697361626c65640000000000000000006000830152602082019050919050565b6000612ffe602683613b23565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613064601383613b23565b91507f5472616e73616374696f6e2065787069726564000000000000000000000000006000830152602082019050919050565b60006130a4601f83613b23565b91507f5472616e73616374696f6e2068617368657320646f206e6f74206d61746368006000830152602082019050919050565b60006130e4601e83613b23565b91507f5461726765742063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613124602e83613b23565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b600061318a602d83613b23565b91507f4e6577206e6f6e6365206d75737420626520686967686572207468616e20637560008301527f7272656e742074784e6f6e6365000000000000000000000000000000000000006020830152604082019050919050565b60006131f0602083613b23565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613230602083613b23565b91507f43616e6e6f7420626520686967686572207468616e2071756575654e6f6e63656000830152602082019050919050565b6000613270602d83613b23565b91507f457870697261746974696f6e206d7573742062652030206f72206174206c656160008301527f7374203630207365636f6e6473000000000000000000000000000000000000006020830152604082019050919050565b60006132d6601e83613b23565b91507f4176617461722063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613316601583613b23565b91507f4d6f64756c65206e6f7420617574686f72697a656400000000000000000000006000830152602082019050919050565b6000613356602083613b23565b91507f477561726420646f6573206e6f7420696d706c656d656e7420494552433136356000830152602082019050919050565b6000613396602083613b23565b91507f5472616e73616374696f6e206973207374696c6c20696e20636f6f6c646f776e6000830152602082019050919050565b60006133d6601683613b23565b91507f4d6f64756c6520616c726561647920656e61626c6564000000000000000000006000830152602082019050919050565b6000613416602483613b23565b91507f73657455704d6f64756c65732068617320616c7265616479206265656e20636160008301527f6c6c6564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061347c601a83613b23565b91507f5472616e73616374696f6e20717565756520697320656d7074790000000000006000830152602082019050919050565b60006134bc600e83613b23565b91507f496e76616c6964206d6f64756c650000000000000000000000000000000000006000830152602082019050919050565b60006134fc601983613b23565b91507f4d6f64756c65207472616e73616374696f6e206661696c6564000000000000006000830152602082019050919050565b61353881613c57565b82525050565b61354f61354a82613c57565b613d34565b82525050565b60006135618287612e43565b601482019150613571828661353e565b6020820191506135818285612f4b565b915061358d8284612f8b565b60018201915081905095945050505050565b60006020820190506135b46000830184612e34565b92915050565b60006080820190506135cf6000830188612e34565b6135dc602083018761352f565b81810360408301526135ef818587612ee5565b90506135fe6060830184612f7c565b9695505050505050565b600060808201905061361d6000830187612e34565b61362a602083018661352f565b818103604083015261363c8185612f12565b905061364b6060830184612f7c565b95945050505050565b60006101608201905061366a600083018e612e34565b613677602083018d61352f565b8181036040830152613689818c612f12565b9050613698606083018b612f7c565b6136a5608083018a612fa2565b6136b260a0830189612fa2565b6136bf60c0830188612fa2565b6136cc60e0830187612e34565b6136da610100830186612e16565b8181036101208301526136ed8185612f12565b90506136fd610140830184612e34565b9c9b505050505050505050505050565b600060408201905081810360008301526137278185612e5a565b90506137366020830184612e34565b9392505050565b60006020820190506137526000830184612eb8565b92915050565b600060408201905061376d6000830185612eb8565b818103602083015261377f8184612f12565b90509392505050565b600060208201905061379d6000830184612ec7565b92915050565b60006040820190506137b86000830185612ec7565b6137c56020830184612eb8565b9392505050565b60006020820190506137e16000830184612ed6565b92915050565b6000602082019050818103600083015261380081612fb1565b9050919050565b6000602082019050818103600083015261382081612ff1565b9050919050565b6000602082019050818103600083015261384081613057565b9050919050565b6000602082019050818103600083015261386081613097565b9050919050565b60006020820190508181036000830152613880816130d7565b9050919050565b600060208201905081810360008301526138a081613117565b9050919050565b600060208201905081810360008301526138c08161317d565b9050919050565b600060208201905081810360008301526138e0816131e3565b9050919050565b6000602082019050818103600083015261390081613223565b9050919050565b6000602082019050818103600083015261392081613263565b9050919050565b60006020820190508181036000830152613940816132c9565b9050919050565b6000602082019050818103600083015261396081613309565b9050919050565b6000602082019050818103600083015261398081613349565b9050919050565b600060208201905081810360008301526139a081613389565b9050919050565b600060208201905081810360008301526139c0816133c9565b9050919050565b600060208201905081810360008301526139e081613409565b9050919050565b60006020820190508181036000830152613a008161346f565b9050919050565b60006020820190508181036000830152613a20816134af565b9050919050565b60006020820190508181036000830152613a40816134ef565b9050919050565b6000602082019050613a5c600083018461352f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a8957613a88613dae565b5b8060405250919050565b600067ffffffffffffffff821115613aae57613aad613dae565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613b3f82613c57565b9150613b4a83613c57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b7f57613b7e613d50565b5b828201905092915050565b6000613b9582613c57565b9150613ba083613c57565b925082821015613bb357613bb2613d50565b5b828203905092915050565b6000613bc982613c37565b9050919050565b6000613bdb82613c37565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050613c3282613e08565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c6c82613c24565b9050919050565b6000613c7e82613c57565b9050919050565b82818337600083830152505050565b60005b83811015613cb2578082015181840152602081019050613c97565b83811115613cc1576000848401525b50505050565b6000613cd282613c57565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d0557613d04613d50565b5b600182019050919050565b6000613d1b82613d22565b9050919050565b6000613d2d82613dfb565b9050919050565b6000819050919050565b6000613d4982613dee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60028110613e1957613e18613d7f565b5b50565b613e2581613bbe565b8114613e3057600080fd5b50565b613e3c81613bd0565b8114613e4757600080fd5b50565b613e5381613be2565b8114613e5e57600080fd5b50565b60028110613e6e57600080fd5b50565b613e7a81613c57565b8114613e8557600080fd5b5056fea26469706673582212206f4de68ccc61e36655459f9fb9c07003c20f8e19b2a434ed1a757de2d8dc3f8e64736f6c63430008000033", "constructorArgs": { - "types": ["address", "address", "address", "uint256", "uint256"], + "types": [ + "address", + "address", + "address", + "uint256", + "uint256" + ], "values": [ "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000001", @@ -798,7 +804,9 @@ "evm.methodIdentifiers", "metadata" ], - "": ["ast"] + "": [ + "ast" + ] } } } @@ -811,7 +819,13 @@ "contractAddress": "0xd54895B1121A2eE3f37b502F507631FA1331BED6", "bytecode": "0x60806040523480156200001157600080fd5b5060405162004f4a38038062004f4a833981810160405281019062000037919062000a30565b600085858585856040516020016200005495949392919062000d57565b604051602081830303815290604052905062000076816200008260201b60201c565b50505050505062000f53565b600080600080600085806020019051810190620000a09190620009ae565b94509450945094509450620000ba6200032a60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200012d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001249062000e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001979062000dd6565b60405180910390fd5b6000811480620001b15750603c8110155b620001f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ea9062000e3c565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606a819055508160698190555062000294856200042960201b60201c565b620002a46200053f60201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffd805e12a6d02f83d7029c03fdfcf3f226ebcd409af51b3095237015eae50300866040516200031a919062000d3a565b60405180910390a4505050505050565b600060019054906101000a900460ff168062000351575060008054906101000a900460ff16155b62000393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038a9062000df8565b60405180910390fd5b60008060019054906101000a900460ff161590508015620003e4576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620003f46200069360201b60201c565b620004046200077260201b60201c565b8015620004265760008060016101000a81548160ff0219169083151502179055505b50565b620004396200087160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200045f6200087960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004af9062000e1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200052b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005229062000db4565b60405180910390fd5b6200053c81620008a360201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff1660686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006089062000e80565b60405180910390fd5b600160686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900460ff1680620006ba575060008054906101000a900460ff16155b620006fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f39062000df8565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200074d576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156200076f5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000799575060008054906101000a900460ff16155b620007db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d29062000df8565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200082c576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200084c620008406200087160201b60201c565b620008a360201b60201c565b80156200086e5760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200097a8162000f05565b92915050565b600081519050620009918162000f1f565b92915050565b600081519050620009a88162000f39565b92915050565b600080600080600060a08688031215620009c757600080fd5b6000620009d78882890162000980565b9550506020620009ea8882890162000980565b9450506040620009fd8882890162000980565b935050606062000a108882890162000997565b925050608062000a238882890162000997565b9150509295509295909350565b600080600080600060a0868803121562000a4957600080fd5b600062000a598882890162000969565b955050602062000a6c8882890162000969565b945050604062000a7f8882890162000969565b935050606062000a928882890162000997565b925050608062000aa58882890162000997565b9150509295509295909350565b62000abd8162000eb3565b82525050565b600062000ad260268362000ea2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000b3a601e8362000ea2565b91507f5461726765742063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b600062000b7c602e8362000ea2565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b600062000be460208362000ea2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600062000c26602d8362000ea2565b91507f457870697261746974696f6e206d7573742062652030206f72206174206c656160008301527f7374203630207365636f6e6473000000000000000000000000000000000000006020830152604082019050919050565b600062000c8e601e8362000ea2565b91507f4176617461722063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b600062000cd060248362000ea2565b91507f73657455704d6f64756c65732068617320616c7265616479206265656e20636160008301527f6c6c6564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b62000d348162000efb565b82525050565b600060208201905062000d51600083018462000ab2565b92915050565b600060a08201905062000d6e600083018862000ab2565b62000d7d602083018762000ab2565b62000d8c604083018662000ab2565b62000d9b606083018562000d29565b62000daa608083018462000d29565b9695505050505050565b6000602082019050818103600083015262000dcf8162000ac3565b9050919050565b6000602082019050818103600083015262000df18162000b2b565b9050919050565b6000602082019050818103600083015262000e138162000b6d565b9050919050565b6000602082019050818103600083015262000e358162000bd5565b9050919050565b6000602082019050818103600083015262000e578162000c17565b9050919050565b6000602082019050818103600083015262000e798162000c7f565b9050919050565b6000602082019050818103600083015262000e9b8162000cc1565b9050919050565b600082825260208201905092915050565b600062000ec08262000edb565b9050919050565b600062000ed48262000edb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b62000f108162000eb3565b811462000f1c57600080fd5b50565b62000f2a8162000ec7565b811462000f3657600080fd5b50565b62000f448162000efb565b811462000f5057600080fd5b50565b613fe78062000f636000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637ceab3b11161010f578063d4b83992116100a2578063e19a9dd911610071578063e19a9dd914610582578063ebb2b4a21461059e578063ee072baf146105ba578063f2fde38b146105d6576101e5565b8063d4b839921461050c578063dcafac091461052a578063de8dd91d14610548578063e009cfde14610566576101e5565b8063b19d4758116100de578063b19d475814610495578063c66323e51461049f578063c9106389146104bd578063cc2f8452146104db576101e5565b80637ceab3b1146104215780638da5cb5b1461043f5780639b56d5be1461045d578063a4f9edbf14610479576101e5565b806346ba230711610187578063610b592511610156578063610b5925146103af5780636b0a4cf6146103cb578063715018a6146103fb578063776d1a0114610405576101e5565b806346ba2307146103265780635229073f146103425780635aef7de614610373578063605df59c14610391576101e5565b8063300c661f116101c3578063300c661f146102665780633aa7690614610296578063427e232f146102c6578063468721a7146102f6576101e5565b8063086cfca8146101ea578063258148cc146102065780632d9ad53d14610236575b600080fd5b61020460048036038101906101ff9190612c4a565b6105f2565b005b610220600480360381019061021b9190612ec7565b610734565b60405161022d9190613b39565b60405180910390f35b610250600480360381019061024b9190612c4a565b61074c565b60405161025d919061382f565b60405180910390f35b610280600480360381019061027b9190612de2565b61081e565b60405161028d919061387a565b60405180910390f35b6102b060048036038101906102ab9190612ec7565b610857565b6040516102bd9190613b39565b60405180910390f35b6102e060048036038101906102db9190612ec7565b610874565b6040516102ed919061387a565b60405180910390f35b610310600480360381019061030b9190612d62565b61088c565b60405161031d919061382f565b60405180910390f35b610340600480360381019061033b9190612ec7565b610a4d565b005b61035c60048036038101906103579190612d62565b610b5c565b60405161036a92919061384a565b60405180910390f35b61037b610d49565b6040516103889190613691565b60405180910390f35b610399610d6f565b6040516103a69190613b39565b60405180910390f35b6103c960048036038101906103c49190612c4a565b610d75565b005b6103e560048036038101906103e09190612ec7565b6110ff565b6040516103f2919061387a565b60405180910390f35b61040361111c565b005b61041f600480360381019061041a9190612c4a565b6111a4565b005b6104296112e6565b6040516104369190613691565b60405180910390f35b61044761130c565b6040516104549190613691565b60405180910390f35b61047760048036038101906104729190612ec7565b611336565b005b610493600480360381019061048e9190612e86565b61140b565b005b61049d61168d565b005b6104a7611702565b6040516104b49190613b39565b60405180910390f35b6104c5611708565b6040516104d29190613691565b60405180910390f35b6104f560048036038101906104f09190612d26565b611732565b6040516105039291906137ff565b60405180910390f35b61051461197f565b6040516105219190613691565b60405180910390f35b6105326119a5565b60405161053f9190613b39565b60405180910390f35b6105506119ab565b60405161055d9190613b39565b60405180910390f35b610580600480360381019061057b9190612cea565b6119b1565b005b61059c60048036038101906105979190612c4a565b611d3a565b005b6105b860048036038101906105b39190612ec7565b611f70565b005b6105d460048036038101906105cf9190612d62565b611ff6565b005b6105f060048036038101906105eb9190612c4a565b612263565b005b6105fa61235b565b73ffffffffffffffffffffffffffffffffffffffff1661061861130c565b73ffffffffffffffffffffffffffffffffffffffff161461066e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610665906139b9565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b606e6020528060005260406000206000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156108175750600073ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000848484846040516020016108379493929190613647565b604051602081830303815290604052805190602001209050949350505050565b6000606e6000838152602001908152602001600020549050919050565b606d6020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390613a39565b60405180910390fd5b60006109ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508661081e565b905080606d6000606c5481526020019081526020016000208190555042606e6000606c5481526020019081526020016000208190555080606c547f4c8a9c748e976c17c2eb2c2bc50da76eac9cd90ff529f0fe900e0c10a179f0318989898989604051610a1f9594939291906136ac565b60405180910390a3606c6000815480929190610a3a90613df0565b9190505550600191505095945050505050565b610a5561235b565b73ffffffffffffffffffffffffffffffffffffffff16610a7361130c565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906139b9565b60405180910390fd5b606b548111610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0490613999565b60405180910390fd5b606c54811115610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b49906139d9565b60405180910390fd5b80606b8190555050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690613a39565b60405180910390fd5b6000610c81888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508761081e565b905080606d6000606c5481526020019081526020016000208190555042606e6000606c5481526020019081526020016000208190555080606c547f4c8a9c748e976c17c2eb2c2bc50da76eac9cd90ff529f0fe900e0c10a179f0318a8a8a8a8a604051610cf29594939291906136ac565b60405180910390a360019250606c548142604051602001610d1593929190613b54565b6040516020818303038152906040529150606c6000815480929190610d3990613df0565b9190505550509550959350505050565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606a5481565b610d7d61235b565b73ffffffffffffffffffffffffffffffffffffffff16610d9b61130c565b73ffffffffffffffffffffffffffffffffffffffff1614610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de8906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610e5b5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613af9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613a99565b60405180910390fd5b60686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440816040516110f49190613691565b60405180910390a150565b6000606d6000838152602001908152602001600020549050919050565b61112461235b565b73ffffffffffffffffffffffffffffffffffffffff1661114261130c565b73ffffffffffffffffffffffffffffffffffffffff1614611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906139b9565b60405180910390fd5b6111a26000612363565b565b6111ac61235b565b73ffffffffffffffffffffffffffffffffffffffff166111ca61130c565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906139b9565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133e61235b565b73ffffffffffffffffffffffffffffffffffffffff1661135c61130c565b73ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a9906139b9565b60405180910390fd5b60008114806113c25750603c8110155b611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906139f9565b60405180910390fd5b80606a8190555050565b6000806000806000858060200190518101906114279190612c73565b94509450945094509450611439612429565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a090613a19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613959565b60405180910390fd5b60008114806115295750603c8110155b611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f906139f9565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606a819055508160698190555061160185612263565b611609612512565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffd805e12a6d02f83d7029c03fdfcf3f226ebcd409af51b3095237015eae503008660405161167d9190613691565b60405180910390a4505050505050565b5b6000606a54141580156116cf575042606a54606954606e6000606b548152602001908152602001600020546116c39190613c5d565b6116cd9190613c5d565b105b80156116de5750606c54606b54105b1561170057606b60008154809291906116f690613df0565b919050555061168e565b565b606b5481565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008267ffffffffffffffff811115611776577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117a45781602001602082028036833780820191505090505b509150600080606860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156118775750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561188257508482105b1561197057808483815181106118c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818061196890613df0565b92505061180d565b80925081845250509250929050565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60695481565b606c5481565b6119b961235b565b73ffffffffffffffffffffffffffffffffffffffff166119d761130c565b73ffffffffffffffffffffffffffffffffffffffff1614611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a24906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611a975750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613af9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a906138d9565b60405180910390fd5b606860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051611d2e9190613691565b60405180910390a15050565b611d4261235b565b73ffffffffffffffffffffffffffffffffffffffff16611d6061130c565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ed3578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611e4391906138be565b60206040518083038186803b158015611e5b57600080fd5b505afa158015611e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e939190612e5d565b611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990613a59565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611f659190613691565b60405180910390a150565b611f7861235b565b73ffffffffffffffffffffffffffffffffffffffff16611f9661130c565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe3906139b9565b60405180910390fd5b8060698190555050565b606c54606b541061203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390613ad9565b60405180910390fd5b6000606e6000606b54815260200190815260200160002054905060695481426120659190613cb3565b10156120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613a79565b60405180910390fd5b6000606a541461210e5742606a54606954836120c29190613c5d565b6120cc9190613c5d565b101561210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490613919565b60405180910390fd5b5b61215e868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508561081e565b606d6000606b54815260200190815260200160002054146121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab90613939565b60405180910390fd5b606b60008154809291906121c790613df0565b919050555061221c868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085612663565b61225b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225290613b19565b60405180910390fd5b505050505050565b61226b61235b565b73ffffffffffffffffffffffffffffffffffffffff1661228961130c565b73ffffffffffffffffffffffffffffffffffffffff16146122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561234f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612346906138f9565b60405180910390fd5b61235881612363565b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff168061244f575060008054906101000a900460ff16155b61248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590613979565b60405180910390fd5b60008060019054906101000a900460ff1615905080156124de576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6124e6612958565b6124ee612a31565b801561250f5760008060016101000a81548160ff0219169083151502179055505b50565b600073ffffffffffffffffffffffffffffffffffffffff1660686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d890613ab9565b60405180910390fd5b600160686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461279557606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b81526004016127629b9a99989796959493929190613746565b600060405180830381600087803b15801561277c57600080fd5b505af1158015612790573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016127f694939291906136fa565b602060405180830381600087803b15801561281057600080fd5b505af1158015612824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128489190612e5d565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461295057606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b815260040161291d929190613895565b600060405180830381600087803b15801561293757600080fd5b505af115801561294b573d6000803e3d6000fd5b505050505b949350505050565b600060019054906101000a900460ff168061297e575060008054906101000a900460ff16155b6129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490613979565b60405180910390fd5b60008060019054906101000a900460ff161590508015612a0d576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015612a2e5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612a57575060008054906101000a900460ff16155b612a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8d90613979565b60405180910390fd5b60008060019054906101000a900460ff161590508015612ae6576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612af6612af161235b565b612363565b8015612b175760008060016101000a81548160ff0219169083151502179055505b50565b6000612b2d612b2884613bbc565b613b8b565b905082815260208101848484011115612b4557600080fd5b612b50848285613dae565b509392505050565b600081359050612b6781613f45565b92915050565b600081519050612b7c81613f5c565b92915050565b600081519050612b9181613f73565b92915050565b60008083601f840112612ba957600080fd5b8235905067ffffffffffffffff811115612bc257600080fd5b602083019150836001820283011115612bda57600080fd5b9250929050565b600082601f830112612bf257600080fd5b8135612c02848260208601612b1a565b91505092915050565b600081359050612c1a81613f8a565b92915050565b600081359050612c2f81613f9a565b92915050565b600081519050612c4481613f9a565b92915050565b600060208284031215612c5c57600080fd5b6000612c6a84828501612b58565b91505092915050565b600080600080600060a08688031215612c8b57600080fd5b6000612c9988828901612b6d565b9550506020612caa88828901612b6d565b9450506040612cbb88828901612b6d565b9350506060612ccc88828901612c35565b9250506080612cdd88828901612c35565b9150509295509295909350565b60008060408385031215612cfd57600080fd5b6000612d0b85828601612b58565b9250506020612d1c85828601612b58565b9150509250929050565b60008060408385031215612d3957600080fd5b6000612d4785828601612b58565b9250506020612d5885828601612c20565b9150509250929050565b600080600080600060808688031215612d7a57600080fd5b6000612d8888828901612b58565b9550506020612d9988828901612c20565b945050604086013567ffffffffffffffff811115612db657600080fd5b612dc288828901612b97565b93509350506060612dd588828901612c0b565b9150509295509295909350565b60008060008060808587031215612df857600080fd5b6000612e0687828801612b58565b9450506020612e1787828801612c20565b935050604085013567ffffffffffffffff811115612e3457600080fd5b612e4087828801612be1565b9250506060612e5187828801612c0b565b91505092959194509250565b600060208284031215612e6f57600080fd5b6000612e7d84828501612b82565b91505092915050565b600060208284031215612e9857600080fd5b600082013567ffffffffffffffff811115612eb257600080fd5b612ebe84828501612be1565b91505092915050565b600060208284031215612ed957600080fd5b6000612ee784828501612c20565b91505092915050565b6000612efc8383612f17565b60208301905092915050565b612f1181613cf9565b82525050565b612f2081613ce7565b82525050565b612f2f81613ce7565b82525050565b612f46612f4182613ce7565b613e39565b82525050565b6000612f5782613bfc565b612f618185613c1f565b9350612f6c83613bec565b8060005b83811015612f9d578151612f848882612ef0565b9750612f8f83613c12565b925050600181019050612f70565b5085935050505092915050565b612fb381613d0b565b82525050565b612fc281613d17565b82525050565b612fd181613d21565b82525050565b6000612fe38385613c30565b9350612ff0838584613dae565b612ff983613f06565b840190509392505050565b600061300f82613c07565b6130198185613c30565b9350613029818560208601613dbd565b61303281613f06565b840191505092915050565b600061304882613c07565b6130528185613c41565b9350613062818560208601613dbd565b80840191505092915050565b61307781613d8a565b82525050565b61308e61308982613d8a565b613e67565b82525050565b61309d81613d9c565b82525050565b60006130b0601783613c4c565b91507f4d6f64756c6520616c72656164792064697361626c65640000000000000000006000830152602082019050919050565b60006130f0602683613c4c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613156601383613c4c565b91507f5472616e73616374696f6e2065787069726564000000000000000000000000006000830152602082019050919050565b6000613196601f83613c4c565b91507f5472616e73616374696f6e2068617368657320646f206e6f74206d61746368006000830152602082019050919050565b60006131d6601e83613c4c565b91507f5461726765742063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613216602e83613c4c565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b600061327c602d83613c4c565b91507f4e6577206e6f6e6365206d75737420626520686967686572207468616e20637560008301527f7272656e742074784e6f6e6365000000000000000000000000000000000000006020830152604082019050919050565b60006132e2602083613c4c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613322602083613c4c565b91507f43616e6e6f7420626520686967686572207468616e2071756575654e6f6e63656000830152602082019050919050565b6000613362602d83613c4c565b91507f457870697261746974696f6e206d7573742062652030206f72206174206c656160008301527f7374203630207365636f6e6473000000000000000000000000000000000000006020830152604082019050919050565b60006133c8601e83613c4c565b91507f4176617461722063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613408601583613c4c565b91507f4d6f64756c65206e6f7420617574686f72697a656400000000000000000000006000830152602082019050919050565b6000613448602083613c4c565b91507f477561726420646f6573206e6f7420696d706c656d656e7420494552433136356000830152602082019050919050565b6000613488602083613c4c565b91507f5472616e73616374696f6e206973207374696c6c20696e20636f6f6c646f776e6000830152602082019050919050565b60006134c8601683613c4c565b91507f4d6f64756c6520616c726561647920656e61626c6564000000000000000000006000830152602082019050919050565b6000613508602483613c4c565b91507f73657455704d6f64756c65732068617320616c7265616479206265656e20636160008301527f6c6c6564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061356e601a83613c4c565b91507f5472616e73616374696f6e20717565756520697320656d7074790000000000006000830152602082019050919050565b60006135ae600e83613c4c565b91507f496e76616c6964206d6f64756c650000000000000000000000000000000000006000830152602082019050919050565b60006135ee601983613c4c565b91507f4d6f64756c65207472616e73616374696f6e206661696c6564000000000000006000830152602082019050919050565b61362a81613d80565b82525050565b61364161363c82613d80565b613e5d565b82525050565b60006136538287612f35565b6014820191506136638286613630565b602082019150613673828561303d565b915061367f828461307d565b60018201915081905095945050505050565b60006020820190506136a66000830184612f26565b92915050565b60006080820190506136c16000830188612f26565b6136ce6020830187613621565b81810360408301526136e1818587612fd7565b90506136f0606083018461306e565b9695505050505050565b600060808201905061370f6000830187612f26565b61371c6020830186613621565b818103604083015261372e8185613004565b905061373d606083018461306e565b95945050505050565b60006101608201905061375c600083018e612f26565b613769602083018d613621565b818103604083015261377b818c613004565b905061378a606083018b61306e565b613797608083018a613094565b6137a460a0830189613094565b6137b160c0830188613094565b6137be60e0830187612f26565b6137cc610100830186612f08565b8181036101208301526137df8185613004565b90506137ef610140830184612f26565b9c9b505050505050505050505050565b600060408201905081810360008301526138198185612f4c565b90506138286020830184612f26565b9392505050565b60006020820190506138446000830184612faa565b92915050565b600060408201905061385f6000830185612faa565b81810360208301526138718184613004565b90509392505050565b600060208201905061388f6000830184612fb9565b92915050565b60006040820190506138aa6000830185612fb9565b6138b76020830184612faa565b9392505050565b60006020820190506138d36000830184612fc8565b92915050565b600060208201905081810360008301526138f2816130a3565b9050919050565b60006020820190508181036000830152613912816130e3565b9050919050565b6000602082019050818103600083015261393281613149565b9050919050565b6000602082019050818103600083015261395281613189565b9050919050565b60006020820190508181036000830152613972816131c9565b9050919050565b6000602082019050818103600083015261399281613209565b9050919050565b600060208201905081810360008301526139b28161326f565b9050919050565b600060208201905081810360008301526139d2816132d5565b9050919050565b600060208201905081810360008301526139f281613315565b9050919050565b60006020820190508181036000830152613a1281613355565b9050919050565b60006020820190508181036000830152613a32816133bb565b9050919050565b60006020820190508181036000830152613a52816133fb565b9050919050565b60006020820190508181036000830152613a728161343b565b9050919050565b60006020820190508181036000830152613a928161347b565b9050919050565b60006020820190508181036000830152613ab2816134bb565b9050919050565b60006020820190508181036000830152613ad2816134fb565b9050919050565b60006020820190508181036000830152613af281613561565b9050919050565b60006020820190508181036000830152613b12816135a1565b9050919050565b60006020820190508181036000830152613b32816135e1565b9050919050565b6000602082019050613b4e6000830184613621565b92915050565b6000606082019050613b696000830186613621565b613b766020830185612fb9565b613b836040830184613621565b949350505050565b6000604051905081810181811067ffffffffffffffff82111715613bb257613bb1613ed7565b5b8060405250919050565b600067ffffffffffffffff821115613bd757613bd6613ed7565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613c6882613d80565b9150613c7383613d80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ca857613ca7613e79565b5b828201905092915050565b6000613cbe82613d80565b9150613cc983613d80565b925082821015613cdc57613cdb613e79565b5b828203905092915050565b6000613cf282613d60565b9050919050565b6000613d0482613d60565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050613d5b82613f31565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613d9582613d4d565b9050919050565b6000613da782613d80565b9050919050565b82818337600083830152505050565b60005b83811015613ddb578082015181840152602081019050613dc0565b83811115613dea576000848401525b50505050565b6000613dfb82613d80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e2e57613e2d613e79565b5b600182019050919050565b6000613e4482613e4b565b9050919050565b6000613e5682613f24565b9050919050565b6000819050919050565b6000613e7282613f17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60028110613f4257613f41613ea8565b5b50565b613f4e81613ce7565b8114613f5957600080fd5b50565b613f6581613cf9565b8114613f7057600080fd5b50565b613f7c81613d0b565b8114613f8757600080fd5b50565b60028110613f9757600080fd5b50565b613fa381613d80565b8114613fae57600080fd5b5056fea26469706673582212208b3a304c932203e860004264f50bdb0a6590ff171440793f5990e271f0f91f9c64736f6c63430008000033", "constructorArgs": { - "types": ["address", "address", "address", "uint256", "uint256"], + "types": [ + "address", + "address", + "address", + "uint256", + "uint256" + ], "values": [ "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000001", @@ -1606,7 +1620,9 @@ "evm.methodIdentifiers", "metadata" ], - "": ["ast"] + "": [ + "ast" + ] } } } @@ -1614,5 +1630,1029 @@ "contractName": "Delay", "sourceName": "contracts/Delay.sol", "compilerVersion": "v0.8.0+commit.c7dfd78e" + }, + "1.1.0": { + "contractAddress": "0x4A97E65188A950Dd4b0f21F9b5434dAeE0BBF9f5", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620050303803806200503083398181016040528101906200003791906200087d565b600085858585856040516020016200005495949392919062000927565b604051602081830303815290604052905062000076816200008260201b60201c565b50505050505062000c79565b6000620000946200056060201b60201c565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015620000e35750825b9050600060018367ffffffffffffffff1614801562000119575060003073ffffffffffffffffffffffffffffffffffffffff163b145b90508115801562000128575080155b1562000160576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315620001b15760018560000160086101000a81548160ff0219169083151502179055505b60008060008060008a806020019051810190620001cf9190620009c9565b94509450945094509450600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036200024b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002429062000ab2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620002bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b49062000b24565b60405180910390fd5b6000811480620002ce5750603c8110155b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000bbc565b60405180910390fd5b62000321856200058860201b60201c565b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060058190555081600481905550620003c06200066760201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffd805e12a6d02f83d7029c03fdfcf3f226ebcd409af51b3095237015eae503008660405162000436919062000bde565b60405180910390a48373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a38273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a350505050508315620005585760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516200054f919062000c5c565b60405180910390a15b505050505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b60006200059a620007b060201b60201c565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff1660036000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200072e576040517fdfd49ebd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160036000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200080a82620007dd565b9050919050565b6200081c81620007fd565b81146200082857600080fd5b50565b6000815190506200083c8162000811565b92915050565b6000819050919050565b620008578162000842565b81146200086357600080fd5b50565b60008151905062000877816200084c565b92915050565b600080600080600060a086880312156200089c576200089b620007d8565b5b6000620008ac888289016200082b565b9550506020620008bf888289016200082b565b9450506040620008d2888289016200082b565b9350506060620008e58882890162000866565b9250506080620008f88882890162000866565b9150509295509295909350565b6200091081620007fd565b82525050565b620009218162000842565b82525050565b600060a0820190506200093e600083018862000905565b6200094d602083018762000905565b6200095c604083018662000905565b6200096b606083018562000916565b6200097a608083018462000916565b9695505050505050565b60006200099182620007dd565b9050919050565b620009a38162000984565b8114620009af57600080fd5b50565b600081519050620009c38162000998565b92915050565b600080600080600060a08688031215620009e857620009e7620007d8565b5b6000620009f888828901620009b2565b955050602062000a0b88828901620009b2565b945050604062000a1e88828901620009b2565b935050606062000a318882890162000866565b925050608062000a448882890162000866565b9150509295509295909350565b600082825260208201905092915050565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b600062000a9a601e8362000a51565b915062000aa78262000a62565b602082019050919050565b6000602082019050818103600083015262000acd8162000a8b565b9050919050565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b600062000b0c601e8362000a51565b915062000b198262000ad4565b602082019050919050565b6000602082019050818103600083015262000b3f8162000afd565b9050919050565b7f45787069726174696f6e206d7573742062652030206f72206174206c6561737460008201527f203630207365636f6e6473000000000000000000000000000000000000000000602082015250565b600062000ba4602b8362000a51565b915062000bb18262000b46565b604082019050919050565b6000602082019050818103600083015262000bd78162000b95565b9050919050565b600060208201905062000bf5600083018462000905565b92915050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b600062000c4462000c3e62000c388462000bfb565b62000c19565b62000c05565b9050919050565b62000c568162000c23565b82525050565b600060208201905062000c73600083018462000c4b565b92915050565b6143a78062000c896000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063776d1a011161010f578063d8afba76116100a2578063e29dfba811610071578063e29dfba814610592578063ebb2b4a2146105c2578063ee072baf146105de578063f2fde38b146105fa576101e5565b8063d8afba761461050a578063dcafac091461053a578063de8dd91d14610558578063e009cfde14610576576101e5565b8063b19d4758116100de578063b19d475814610493578063c66323e51461049d578063cc2f8452146104bb578063d4b83992146104ec576101e5565b8063776d1a01146104215780638da5cb5b1461043d5780639b56d5be1461045b578063a4f9edbf14610477576101e5565b806346ba230711610187578063610b592511610156578063610b5925146103af57806369ecc3cf146103cb5780636b0a4cf6146103e7578063715018a614610417576101e5565b806346ba2307146103265780635229073f146103425780635aef7de614610373578063605df59c14610391576101e5565b8063300c661f116101c3578063300c661f146102665780633aa7690614610296578063427e232f146102c6578063468721a7146102f6576101e5565b8063086cfca8146101ea578063258148cc146102065780632d9ad53d14610236575b600080fd5b61020460048036038101906101ff9190612ddc565b610616565b005b610220600480360381019061021b9190612e3f565b6106e2565b60405161022d9190612e7b565b60405180910390f35b610250600480360381019061024b9190612ddc565b6106fa565b60405161025d9190612eb1565b60405180910390f35b610280600480360381019061027b9190613037565b6107cc565b60405161028d91906130d3565b60405180910390f35b6102b060048036038101906102ab9190612e3f565b610805565b6040516102bd9190612e7b565b60405180910390f35b6102e060048036038101906102db9190612e3f565b610822565b6040516102ed91906130d3565b60405180910390f35b610310600480360381019061030b919061314e565b61083a565b60405161031d9190612eb1565b60405180910390f35b610340600480360381019061033b9190612e3f565b610be1565b005b61035c6004803603810190610357919061314e565b610cb3565b60405161036a929190613255565b60405180910390f35b61037b611086565b6040516103889190613294565b60405180910390f35b6103996110aa565b6040516103a69190612e7b565b60405180910390f35b6103c960048036038101906103c49190612ddc565b6110b0565b005b6103e560048036038101906103e091906132db565b6113c8565b005b61040160048036038101906103fc9190612e3f565b61146b565b60405161040e91906130d3565b60405180910390f35b61041f611488565b005b61043b60048036038101906104369190612ddc565b61149c565b005b61044561156a565b6040516104529190613294565b60405180910390f35b61047560048036038101906104709190612e3f565b6115a2565b005b610491600480360381019061048c9190613308565b61163a565b005b61049b611aea565b005b6104a5611b5f565b6040516104b29190612e7b565b60405180910390f35b6104d560048036038101906104d09190613351565b611b65565b6040516104e392919061344f565b60405180910390f35b6104f4611e7e565b6040516105019190613294565b60405180910390f35b610524600480360381019061051f919061347f565b611ea4565b60405161053191906130d3565b60405180910390f35b610542611fa0565b60405161054f9190612e7b565b60405180910390f35b610560611fa6565b60405161056d9190612e7b565b60405180910390f35b610590600480360381019061058b91906134df565b611fac565b005b6105ac60048036038101906105a7919061351f565b6122c3565b6040516105b99190612eb1565b60405180910390f35b6105dc60048036038101906105d79190612e3f565b6122f2565b005b6105f860048036038101906105f3919061314e565b61233b565b005b610614600480360381019061060f9190612ddc565b6125a8565b005b61061e61262e565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b60096020528060005260406000206000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff16141580156107c55750600073ffffffffffffffffffffffffffffffffffffffff16600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000848484846040516020016107e594939291906136a2565b604051602081830303815290604052805190602001209050949350505050565b600060096000838152602001908152602001600020549050919050565b60086020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff16600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610af0576000806108d96126b5565b91509150600073ffffffffffffffffffffffffffffffffffffffff16600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109ad57336040517f4a0bfec10000000000000000000000000000000000000000000000000000000081526004016109a49190613294565b60405180910390fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1615610a4d57816040517f9e1dc0c5000000000000000000000000000000000000000000000000000000008152600401610a4491906130d3565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8c8e19e7e8e193118a05465d7676e82215052d3cb150628fbf598105dc2bb6ab82604051610ae591906130d3565b60405180910390a150505b6000610b42878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050866107cc565b905080600860006007548152602001908152602001600020819055504260096000600754815260200190815260200160002081905550806007547f4c8a9c748e976c17c2eb2c2bc50da76eac9cd90ff529f0fe900e0c10a179f0318989898989604051610bb3959493929190613728565b60405180910390a360076000815480929190610bce906137a5565b9190505550600191505095945050505050565b610be961262e565b6006548111610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2490613870565b60405180910390fd5b600754811115610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c69906138dc565b60405180910390fd5b806006819055507fb80aa44b2e3f25cf4fbdf2a6c561d9a3d961528ccfc2097da3741fdf941d6d1381604051610ca89190612e7b565b60405180910390a150565b60006060600073ffffffffffffffffffffffffffffffffffffffff16600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f6c57600080610d556126b5565b91509150600073ffffffffffffffffffffffffffffffffffffffff16600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e2957336040517f4a0bfec1000000000000000000000000000000000000000000000000000000008152600401610e209190613294565b60405180910390fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1615610ec957816040517f9e1dc0c5000000000000000000000000000000000000000000000000000000008152600401610ec091906130d3565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8c8e19e7e8e193118a05465d7676e82215052d3cb150628fbf598105dc2bb6ab82604051610f6191906130d3565b60405180910390a150505b6000610fbe888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050876107cc565b905080600860006007548152602001908152602001600020819055504260096000600754815260200190815260200160002081905550806007547f4c8a9c748e976c17c2eb2c2bc50da76eac9cd90ff529f0fe900e0c10a179f0318a8a8a8a8a60405161102f959493929190613728565b60405180910390a3600192506007548142604051602001611052939291906138fc565b604051602081830303815290604052915060076000815480929190611076906137a5565b9190505550509550959350505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6110b861262e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061111f5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561116157806040517fb927fe5e0000000000000000000000000000000000000000000000000000000081526004016111589190613294565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123157806040517f206189730000000000000000000000000000000000000000000000000000000081526004016112289190613294565b60405180910390fd5b60036000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060036000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440816040516113bd9190613294565b60405180910390a150565b6001600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f89a77869d7b8125ba16e08a92ddc8cc26fb1fa47241971167954489a5e66c2558160405161146091906130d3565b60405180910390a150565b600060086000838152602001908152602001600020549050919050565b61149061262e565b61149a600061284f565b565b6114a461262e565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b600080611575612926565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6115aa61262e565b60008114806115ba5750603c8110155b6115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906139a5565b60405180910390fd5b806005819055507f3dc4b742ac9e7885cc04b3b050add4727dd89dec6825e39fb55265a5a3be39f68160405161162f9190612e7b565b60405180910390a150565b600061164461294e565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156116925750825b9050600060018367ffffffffffffffff161480156116c7575060003073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156116d5575080155b1561170c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550831561175c5760018560000160086101000a81548160ff0219169083151502179055505b60008060008060008a8060200190518101906117789190613a18565b94509450945094509450600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e890613adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790613b4b565b60405180910390fd5b60008114806118705750603c8110155b6118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a6906139a5565b60405180910390fd5b6118b88561284f565b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806005819055508160048190555061194f612976565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffd805e12a6d02f83d7029c03fdfcf3f226ebcd409af51b3095237015eae50300866040516119c39190613294565b60405180910390a48373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a38273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a350505050508315611ae25760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051611ad99190613bc4565b60405180910390a15b505050505050565b5b600060055414158015611b2c57504260055460045460096000600654815260200190815260200160002054611b209190613bdf565b611b2a9190613bdf565b105b8015611b3b5750600754600654105b15611b5d5760066000815480929190611b53906137a5565b9190505550611aeb565b565b60065481565b60606000600173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611bac5750611baa846106fa565b155b15611bee57836040517fb927fe5e000000000000000000000000000000000000000000000000000000008152600401611be59190613294565b60405180910390fd5b60008303611c28576040517fe5b7db2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff811115611c4257611c41612ee7565b5b604051908082528060200260200182016040528015611c705781602001602082028036833780820191505090505b5091506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611d425750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d4d57508381105b15611e155781838281518110611d6657611d65613c13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508080611e0d906137a5565b915050611cd8565b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e735782600182611e579190613c42565b81518110611e6857611e67613c13565b5b602002602001015191505b808352509250929050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000807f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b4630604051602001611edf93929190613ccb565b6040516020818303038152906040528051906020012090506000601960f81b600160f81b837f2939aeeda3ca260200c9f7b436b19e13207547ccc65cfedc857751c5ea6d91d460001b8989604051611f38929190613d27565b604051809103902088604051602001611f5393929190613d40565b60405160208183030381529060405280519060200120604051602001611f7c9493929190613de5565b60405160208183030381529060405290508080519060200120925050509392505050565b60045481565b60075481565b611fb461262e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061201b5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561205d57806040517fb927fe5e0000000000000000000000000000000000000000000000000000000081526004016120549190613294565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212c57806040517f8b4189ff0000000000000000000000000000000000000000000000000000000081526004016121239190613294565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276816040516122b79190613294565b60405180910390a15050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6122fa61262e565b806004819055507f3239d60f6914d8c19e95a27197b95d16742b9dc4470c79a1001412607f1ea4ae816040516123309190612e7b565b60405180910390a150565b60075460065410612381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237890613e7f565b60405180910390fd5b600060096000600654815260200190815260200160002054905060045481426123aa9190613c42565b10156123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290613eeb565b60405180910390fd5b6000600554146124535742600554600454836124079190613bdf565b6124119190613bdf565b1015612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990613f57565b60405180910390fd5b5b6124a3868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050856107cc565b60086000600654815260200190815260200160002054146124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f090613fc3565b60405180910390fd5b6006600081548092919061250c906137a5565b9190505550612561868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085612abe565b6125a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125979061402f565b60405180910390fd5b505050505050565b6125b061262e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126225760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126199190613294565b60405180910390fd5b61262b8161284f565b50565b612636612b6e565b73ffffffffffffffffffffffffffffffffffffffff1661265461156a565b73ffffffffffffffffffffffffffffffffffffffff16146126b357612677612b6e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016126aa9190613294565b60405180910390fd5b565b60008036600080369150915060658282905010156126de576000801b600093509350505061284b565b60008060006126ed8585612b76565b92509250925060006061868690506127059190613c42565b9050600086868390809261271b93929190614059565b9061272691906140ac565b905060008560ff16036127ce5760008360001c9050600481108061274957508281115b15612765576000801b600099509950505050505050505061284b565b60008560001c9050600061278b8a8a600090869261278593929190614059565b86611ea4565b90506127a982828c8c87908a926127a493929190614059565b612c0f565b6127b8576000801b60006127bb565b80825b9b509b505050505050505050505061284b565b60006127ec888860009086926127e693929190614059565b84611ea4565b905080600182888888604051600081526020016040526040516128129493929190614127565b6020604051602081039080840390855afa158015612834573d6000803e3d6000fd5b505050602060405103519950995050505050505050505b9091565b6000612859612926565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b600073ffffffffffffffffffffffffffffffffffffffff1660036000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a3c576040517fdfd49ebd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160036000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b8152600401612b21949392919061416c565b6020604051808303816000875af1158015612b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6491906141e4565b9050949350505050565b600033905090565b60008060008484600187879050612b8d9190613c42565b908092612b9c93929190614059565b90612ba79190614211565b60f81c92508484604187879050612bbe9190613c42565b908092612bcd93929190614059565b90612bd891906140ac565b91508484602187879050612bec9190613c42565b908092612bfb93929190614059565b90612c0691906140ac565b90509250925092565b600080853b905060008103612c28576000915050612d62565b60008673ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b878787604051602401612c5e93929190614270565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612cc891906142a2565b600060405180830381855afa9150503d8060008114612d03576040519150601f19603f3d011682016040523d82523d6000602084013e612d08565b606091505b50915050631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681612d3d9061430a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612da982612d7e565b9050919050565b612db981612d9e565b8114612dc457600080fd5b50565b600081359050612dd681612db0565b92915050565b600060208284031215612df257612df1612d74565b5b6000612e0084828501612dc7565b91505092915050565b6000819050919050565b612e1c81612e09565b8114612e2757600080fd5b50565b600081359050612e3981612e13565b92915050565b600060208284031215612e5557612e54612d74565b5b6000612e6384828501612e2a565b91505092915050565b612e7581612e09565b82525050565b6000602082019050612e906000830184612e6c565b92915050565b60008115159050919050565b612eab81612e96565b82525050565b6000602082019050612ec66000830184612ea2565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f1f82612ed6565b810181811067ffffffffffffffff82111715612f3e57612f3d612ee7565b5b80604052505050565b6000612f51612d6a565b9050612f5d8282612f16565b919050565b600067ffffffffffffffff821115612f7d57612f7c612ee7565b5b612f8682612ed6565b9050602081019050919050565b82818337600083830152505050565b6000612fb5612fb084612f62565b612f47565b905082815260208101848484011115612fd157612fd0612ed1565b5b612fdc848285612f93565b509392505050565b600082601f830112612ff957612ff8612ecc565b5b8135613009848260208601612fa2565b91505092915050565b6002811061301f57600080fd5b50565b60008135905061303181613012565b92915050565b6000806000806080858703121561305157613050612d74565b5b600061305f87828801612dc7565b945050602061307087828801612e2a565b935050604085013567ffffffffffffffff81111561309157613090612d79565b5b61309d87828801612fe4565b92505060606130ae87828801613022565b91505092959194509250565b6000819050919050565b6130cd816130ba565b82525050565b60006020820190506130e860008301846130c4565b92915050565b600080fd5b600080fd5b60008083601f84011261310e5761310d612ecc565b5b8235905067ffffffffffffffff81111561312b5761312a6130ee565b5b602083019150836001820283011115613147576131466130f3565b5b9250929050565b60008060008060006080868803121561316a57613169612d74565b5b600061317888828901612dc7565b955050602061318988828901612e2a565b945050604086013567ffffffffffffffff8111156131aa576131a9612d79565b5b6131b6888289016130f8565b935093505060606131c988828901613022565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156132105780820151818401526020810190506131f5565b60008484015250505050565b6000613227826131d6565b61323181856131e1565b93506132418185602086016131f2565b61324a81612ed6565b840191505092915050565b600060408201905061326a6000830185612ea2565b818103602083015261327c818461321c565b90509392505050565b61328e81612d9e565b82525050565b60006020820190506132a96000830184613285565b92915050565b6132b8816130ba565b81146132c357600080fd5b50565b6000813590506132d5816132af565b92915050565b6000602082840312156132f1576132f0612d74565b5b60006132ff848285016132c6565b91505092915050565b60006020828403121561331e5761331d612d74565b5b600082013567ffffffffffffffff81111561333c5761333b612d79565b5b61334884828501612fe4565b91505092915050565b6000806040838503121561336857613367612d74565b5b600061337685828601612dc7565b925050602061338785828601612e2a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133c681612d9e565b82525050565b60006133d883836133bd565b60208301905092915050565b6000602082019050919050565b60006133fc82613391565b613406818561339c565b9350613411836133ad565b8060005b8381101561344257815161342988826133cc565b9750613434836133e4565b925050600181019050613415565b5085935050505092915050565b6000604082019050818103600083015261346981856133f1565b90506134786020830184613285565b9392505050565b60008060006040848603121561349857613497612d74565b5b600084013567ffffffffffffffff8111156134b6576134b5612d79565b5b6134c2868287016130f8565b935093505060206134d5868287016132c6565b9150509250925092565b600080604083850312156134f6576134f5612d74565b5b600061350485828601612dc7565b925050602061351585828601612dc7565b9150509250929050565b6000806040838503121561353657613535612d74565b5b600061354485828601612dc7565b9250506020613555858286016132c6565b9150509250929050565b60008160601b9050919050565b60006135778261355f565b9050919050565b60006135898261356c565b9050919050565b6135a161359c82612d9e565b61357e565b82525050565b6000819050919050565b6135c26135bd82612e09565b6135a7565b82525050565b600081905092915050565b60006135de826131d6565b6135e881856135c8565b93506135f88185602086016131f2565b80840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061364457613643613604565b5b50565b600081905061365582613633565b919050565b600061366582613647565b9050919050565b60008160f81b9050919050565b60006136848261366c565b9050919050565b61369c6136978261365a565b613679565b82525050565b60006136ae8287613590565b6014820191506136be82866135b1565b6020820191506136ce82856135d3565b91506136da828461368b565b60018201915081905095945050505050565b60006136f883856131e1565b9350613705838584612f93565b61370e83612ed6565b840190509392505050565b6137228161365a565b82525050565b600060808201905061373d6000830188613285565b61374a6020830187612e6c565b818103604083015261375d8185876136ec565b905061376c6060830184613719565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137b082612e09565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137e2576137e1613776565b5b600182019050919050565b600082825260208201905092915050565b7f4e6577206e6f6e6365206d75737420626520686967686572207468616e20637560008201527f7272656e742074784e6f6e636500000000000000000000000000000000000000602082015250565b600061385a602d836137ed565b9150613865826137fe565b604082019050919050565b600060208201905081810360008301526138898161384d565b9050919050565b7f43616e6e6f7420626520686967686572207468616e2071756575654e6f6e6365600082015250565b60006138c66020836137ed565b91506138d182613890565b602082019050919050565b600060208201905081810360008301526138f5816138b9565b9050919050565b60006060820190506139116000830186612e6c565b61391e60208301856130c4565b61392b6040830184612e6c565b949350505050565b7f45787069726174696f6e206d7573742062652030206f72206174206c6561737460008201527f203630207365636f6e6473000000000000000000000000000000000000000000602082015250565b600061398f602b836137ed565b915061399a82613933565b604082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b60006139d082612d7e565b9050919050565b6139e0816139c5565b81146139eb57600080fd5b50565b6000815190506139fd816139d7565b92915050565b600081519050613a1281612e13565b92915050565b600080600080600060a08688031215613a3457613a33612d74565b5b6000613a42888289016139ee565b9550506020613a53888289016139ee565b9450506040613a64888289016139ee565b9350506060613a7588828901613a03565b9250506080613a8688828901613a03565b9150509295509295909350565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b6000613ac9601e836137ed565b9150613ad482613a93565b602082019050919050565b60006020820190508181036000830152613af881613abc565b9050919050565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b6000613b35601e836137ed565b9150613b4082613aff565b602082019050919050565b60006020820190508181036000830152613b6481613b28565b9050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b6000613bae613ba9613ba484613b6b565b613b89565b613b75565b9050919050565b613bbe81613b93565b82525050565b6000602082019050613bd96000830184613bb5565b92915050565b6000613bea82612e09565b9150613bf583612e09565b9250828201905080821115613c0d57613c0c613776565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613c4d82612e09565b9150613c5883612e09565b9250828203905081811115613c7057613c6f613776565b5b92915050565b6000613c91613c8c613c8784612d7e565b613b89565b612d7e565b9050919050565b6000613ca382613c76565b9050919050565b6000613cb582613c98565b9050919050565b613cc581613caa565b82525050565b6000606082019050613ce060008301866130c4565b613ced6020830185612e6c565b613cfa6040830184613cbc565b949350505050565b6000613d0e83856135c8565b9350613d1b838584612f93565b82840190509392505050565b6000613d34828486613d02565b91508190509392505050565b6000606082019050613d5560008301866130c4565b613d6260208301856130c4565b613d6f60408301846130c4565b949350505050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b613dbe613db982613d77565b613da3565b82525050565b6000819050919050565b613ddf613dda826130ba565b613dc4565b82525050565b6000613df18287613dad565b600182019150613e018286613dad565b600182019150613e118285613dce565b602082019150613e218284613dce565b60208201915081905095945050505050565b7f5472616e73616374696f6e20717565756520697320656d707479000000000000600082015250565b6000613e69601a836137ed565b9150613e7482613e33565b602082019050919050565b60006020820190508181036000830152613e9881613e5c565b9050919050565b7f5472616e73616374696f6e206973207374696c6c20696e20636f6f6c646f776e600082015250565b6000613ed56020836137ed565b9150613ee082613e9f565b602082019050919050565b60006020820190508181036000830152613f0481613ec8565b9050919050565b7f5472616e73616374696f6e206578706972656400000000000000000000000000600082015250565b6000613f416013836137ed565b9150613f4c82613f0b565b602082019050919050565b60006020820190508181036000830152613f7081613f34565b9050919050565b7f5472616e73616374696f6e2068617368657320646f206e6f74206d6174636800600082015250565b6000613fad601f836137ed565b9150613fb882613f77565b602082019050919050565b60006020820190508181036000830152613fdc81613fa0565b9050919050565b7f4d6f64756c65207472616e73616374696f6e206661696c656400000000000000600082015250565b60006140196019836137ed565b915061402482613fe3565b602082019050919050565b600060208201905081810360008301526140488161400c565b9050919050565b600080fd5b600080fd5b6000808585111561406d5761406c61404f565b5b8386111561407e5761407d614054565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006140b88383614094565b826140c381356130ba565b92506020821015614103576140fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261409f565b831692505b505092915050565b600060ff82169050919050565b6141218161410b565b82525050565b600060808201905061413c60008301876130c4565b6141496020830186614118565b61415660408301856130c4565b61416360608301846130c4565b95945050505050565b60006080820190506141816000830187613285565b61418e6020830186612e6c565b81810360408301526141a0818561321c565b90506141af6060830184613719565b95945050505050565b6141c181612e96565b81146141cc57600080fd5b50565b6000815190506141de816141b8565b92915050565b6000602082840312156141fa576141f9612d74565b5b6000614208848285016141cf565b91505092915050565b600061421d8383614094565b826142288135613d77565b92506001821015614268576142637fff000000000000000000000000000000000000000000000000000000000000008360010360080261409f565b831692505b505092915050565b600060408201905061428560008301866130c4565b81810360208301526142988184866136ec565b9050949350505050565b60006142ae82846135d3565b915081905092915050565b6000819050602082019050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061430182516142c9565b80915050919050565b6000614315826131d6565b8261431f846142b9565b905061432a816142f5565b9250600482101561436a576143657fffffffff000000000000000000000000000000000000000000000000000000008360040360080261409f565b831692505b505091905056fea2646970667358221220c1e0a80467115d5f16f098c90f6d43c136561a0920ea337a46bdb766eaee58e064736f6c63430008140033", + "constructorArgs": { + "types": [ + "address", + "address", + "address", + "uint256", + "uint256" + ], + "values": [ + "0x0000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000001", + 0, + 0 + ] + }, + "salt": "0x0000000000000000000000000000000000000000000000000000000000000000", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_avatar", + "type": "address" + }, + { + "internalType": "address", + "name": "_target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_cooldown", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_expiration", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "AlreadyDisabledModule", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "AlreadyEnabledModule", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "HashAlreadyConsumed", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "InvalidModule", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPageSize", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "NotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [], + "name": "SetupModulesAlreadyCalled", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousAvatar", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAvatar", + "type": "address" + } + ], + "name": "AvatarSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "initiator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "avatar", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "DelaySetup", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "DisabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "EnabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "HashExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "HashInvalidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousTarget", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newTarget", + "type": "address" + } + ], + "name": "TargetSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "queueNonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "TransactionAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cooldown", + "type": "uint256" + } + ], + "name": "TxCooldownSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + } + ], + "name": "TxExpirationSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "TxNonceSet", + "type": "event" + }, + { + "inputs": [], + "name": "avatar", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "consumed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "prevModule", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "disableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "enableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModule", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModuleReturnData", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "executeNextTx", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "start", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + } + ], + "name": "getModulesPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { + "internalType": "address", + "name": "next", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "getTransactionHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "getTxCreatedAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "getTxHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "invalidate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_module", + "type": "address" + } + ], + "name": "isModuleEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "moduleTxHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "queueNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_avatar", + "type": "address" + } + ], + "name": "setAvatar", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_target", + "type": "address" + } + ], + "name": "setTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_txCooldown", + "type": "uint256" + } + ], + "name": "setTxCooldown", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_txExpiration", + "type": "uint256" + } + ], + "name": "setTxExpiration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_txNonce", + "type": "uint256" + } + ], + "name": "setTxNonce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "initParams", + "type": "bytes" + } + ], + "name": "setUp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "skipExpired", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "target", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "txCooldown", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "txCreatedAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "txExpiration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "txHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "txNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "compilerInput": { + "language": "Solidity", + "sources": { + "@gnosis.pm/safe-contracts/contracts/common/Enum.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\n/// @title Enum - Collection of enums\n/// @author Richard Meissner - \ncontract Enum {\n enum Operation {Call, DelegateCall}\n}\n" + }, + "@gnosis.pm/zodiac/contracts/core/Modifier.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport {Enum} from \"@gnosis.pm/safe-contracts/contracts/common/Enum.sol\";\nimport {ExecutionTracker} from \"../signature/ExecutionTracker.sol\";\nimport {IAvatar} from \"../interfaces/IAvatar.sol\";\nimport {Module} from \"./Module.sol\";\nimport {SignatureChecker} from \"../signature/SignatureChecker.sol\";\n\n/// @title Modifier Interface - A contract that sits between a Module and an Avatar and enforce some additional logic.\nabstract contract Modifier is\n Module,\n ExecutionTracker,\n SignatureChecker,\n IAvatar\n{\n address internal constant SENTINEL_MODULES = address(0x1);\n /// Mapping of modules.\n mapping(address => address) internal modules;\n\n /// `sender` is not an authorized module.\n /// @param sender The address of the sender.\n error NotAuthorized(address sender);\n\n /// `module` is invalid.\n error InvalidModule(address module);\n\n /// `pageSize` is invalid.\n error InvalidPageSize();\n\n /// `module` is already disabled.\n error AlreadyDisabledModule(address module);\n\n /// `module` is already enabled.\n error AlreadyEnabledModule(address module);\n\n /// @dev `setModules()` was already called.\n error SetupModulesAlreadyCalled();\n\n /*\n --------------------------------------------------\n You must override both of the following virtual functions,\n execTransactionFromModule() and execTransactionFromModuleReturnData().\n It is recommended that implementations of both functions make use the \n onlyModule modifier.\n */\n\n /// @dev Passes a transaction to the modifier.\n /// @notice Can only be called by enabled modules.\n /// @param to Destination address of module transaction.\n /// @param value Ether value of module transaction.\n /// @param data Data payload of module transaction.\n /// @param operation Operation type of module transaction.\n function execTransactionFromModule(\n address to,\n uint256 value,\n bytes calldata data,\n Enum.Operation operation\n ) public virtual returns (bool success);\n\n /// @dev Passes a transaction to the modifier, expects return data.\n /// @notice Can only be called by enabled modules.\n /// @param to Destination address of module transaction.\n /// @param value Ether value of module transaction.\n /// @param data Data payload of module transaction.\n /// @param operation Operation type of module transaction.\n function execTransactionFromModuleReturnData(\n address to,\n uint256 value,\n bytes calldata data,\n Enum.Operation operation\n ) public virtual returns (bool success, bytes memory returnData);\n\n /*\n --------------------------------------------------\n */\n\n modifier moduleOnly() {\n if (modules[msg.sender] == address(0)) {\n (bytes32 hash, address signer) = moduleTxSignedBy();\n\n // is the signer a module?\n if (modules[signer] == address(0)) {\n revert NotAuthorized(msg.sender);\n }\n\n // is the provided signature fresh?\n if (consumed[signer][hash]) {\n revert HashAlreadyConsumed(hash);\n }\n\n consumed[signer][hash] = true;\n emit HashExecuted(hash);\n }\n\n _;\n }\n\n function sentOrSignedByModule() internal view returns (address) {\n if (modules[msg.sender] != address(0)) {\n return msg.sender;\n }\n\n (, address signer) = moduleTxSignedBy();\n if (modules[signer] != address(0)) {\n return signer;\n }\n\n return address(0);\n }\n\n /// @dev Disables a module on the modifier.\n /// @notice This can only be called by the owner.\n /// @param prevModule Module that pointed to the module to be removed in the linked list.\n /// @param module Module to be removed.\n function disableModule(\n address prevModule,\n address module\n ) public override onlyOwner {\n if (module == address(0) || module == SENTINEL_MODULES)\n revert InvalidModule(module);\n if (modules[prevModule] != module) revert AlreadyDisabledModule(module);\n modules[prevModule] = modules[module];\n modules[module] = address(0);\n emit DisabledModule(module);\n }\n\n /// @dev Enables a module that can add transactions to the queue\n /// @param module Address of the module to be enabled\n /// @notice This can only be called by the owner\n function enableModule(address module) public override onlyOwner {\n if (module == address(0) || module == SENTINEL_MODULES)\n revert InvalidModule(module);\n if (modules[module] != address(0)) revert AlreadyEnabledModule(module);\n modules[module] = modules[SENTINEL_MODULES];\n modules[SENTINEL_MODULES] = module;\n emit EnabledModule(module);\n }\n\n /// @dev Returns if an module is enabled\n /// @return True if the module is enabled\n function isModuleEnabled(\n address _module\n ) public view override returns (bool) {\n return SENTINEL_MODULES != _module && modules[_module] != address(0);\n }\n\n /// @dev Returns array of modules.\n /// If all entries fit into a single page, the next pointer will be 0x1.\n /// If another page is present, next will be the last element of the returned array.\n /// @param start Start of the page. Has to be a module or start pointer (0x1 address)\n /// @param pageSize Maximum number of modules that should be returned. Has to be > 0\n /// @return array Array of modules.\n /// @return next Start of the next page.\n function getModulesPaginated(\n address start,\n uint256 pageSize\n ) external view override returns (address[] memory array, address next) {\n if (start != SENTINEL_MODULES && !isModuleEnabled(start)) {\n revert InvalidModule(start);\n }\n if (pageSize == 0) {\n revert InvalidPageSize();\n }\n\n // Init array with max page size\n array = new address[](pageSize);\n\n // Populate return array\n uint256 moduleCount = 0;\n next = modules[start];\n while (\n next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize\n ) {\n array[moduleCount] = next;\n next = modules[next];\n moduleCount++;\n }\n\n // Because of the argument validation we can assume that\n // the `currentModule` will always be either a module address\n // or sentinel address (aka the end). If we haven't reached the end\n // inside the loop, we need to set the next pointer to the last element\n // because it skipped over to the next module which is neither included\n // in the current page nor won't be included in the next one\n // if you pass it as a start.\n if (next != SENTINEL_MODULES) {\n next = array[moduleCount - 1];\n }\n // Set correct size of returned array\n // solhint-disable-next-line no-inline-assembly\n assembly {\n mstore(array, moduleCount)\n }\n }\n\n /// @dev Initializes the modules linked list.\n /// @notice Should be called as part of the `setUp` / initializing function and can only be called once.\n function setupModules() internal {\n if (modules[SENTINEL_MODULES] != address(0))\n revert SetupModulesAlreadyCalled();\n modules[SENTINEL_MODULES] = SENTINEL_MODULES;\n }\n}\n" + }, + "@gnosis.pm/zodiac/contracts/core/Module.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.7.0 <0.9.0;\n\nimport {Enum} from \"@gnosis.pm/safe-contracts/contracts/common/Enum.sol\";\n\nimport {FactoryFriendly} from \"../factory/FactoryFriendly.sol\";\nimport {IAvatar} from \"../interfaces/IAvatar.sol\";\n\n/// @title Module Interface - A contract that can pass messages to a Module Manager contract if enabled by that contract.\nabstract contract Module is FactoryFriendly {\n /// @dev Address that will ultimately execute function calls.\n address public avatar;\n /// @dev Address that this module will pass transactions to.\n address public target;\n\n /// @dev Emitted each time the avatar is set.\n event AvatarSet(address indexed previousAvatar, address indexed newAvatar);\n /// @dev Emitted each time the Target is set.\n event TargetSet(address indexed previousTarget, address indexed newTarget);\n\n /// @dev Sets the avatar to a new avatar (`newAvatar`).\n /// @notice Can only be called by the current owner.\n function setAvatar(address _avatar) public onlyOwner {\n address previousAvatar = avatar;\n avatar = _avatar;\n emit AvatarSet(previousAvatar, _avatar);\n }\n\n /// @dev Sets the target to a new target (`newTarget`).\n /// @notice Can only be called by the current owner.\n function setTarget(address _target) public onlyOwner {\n address previousTarget = target;\n target = _target;\n emit TargetSet(previousTarget, _target);\n }\n\n /// @dev Passes a transaction to be executed by the avatar.\n /// @notice Can only be called by this contract.\n /// @param to Destination address of module transaction.\n /// @param value Ether value of module transaction.\n /// @param data Data payload of module transaction.\n /// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.\n function exec(\n address to,\n uint256 value,\n bytes memory data,\n Enum.Operation operation\n ) internal virtual returns (bool success) {\n return\n IAvatar(target).execTransactionFromModule(to, value, data, operation);\n }\n\n /// @dev Passes a transaction to be executed by the target and returns data.\n /// @notice Can only be called by this contract.\n /// @param to Destination address of module transaction.\n /// @param value Ether value of module transaction.\n /// @param data Data payload of module transaction.\n /// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.\n function execAndReturnData(\n address to,\n uint256 value,\n bytes memory data,\n Enum.Operation operation\n ) internal virtual returns (bool success, bytes memory returnData) {\n return\n IAvatar(target).execTransactionFromModuleReturnData(\n to,\n value,\n data,\n operation\n );\n }\n}\n" + }, + "@gnosis.pm/zodiac/contracts/factory/FactoryFriendly.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\n\n/// @title Zodiac FactoryFriendly - A contract that allows other contracts to be initializable and pass bytes as arguments to define contract state\npragma solidity >=0.7.0 <0.9.0;\n\nimport {OwnableUpgradeable} from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract FactoryFriendly is OwnableUpgradeable {\n function setUp(bytes memory initializeParams) public virtual;\n}\n" + }, + "@gnosis.pm/zodiac/contracts/interfaces/IAvatar.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\n\n/// @title Zodiac Avatar - A contract that manages modules that can execute transactions via this contract.\npragma solidity >=0.7.0 <0.9.0;\n\nimport {Enum} from \"@gnosis.pm/safe-contracts/contracts/common/Enum.sol\";\n\ninterface IAvatar {\n event EnabledModule(address module);\n event DisabledModule(address module);\n event ExecutionFromModuleSuccess(address indexed module);\n event ExecutionFromModuleFailure(address indexed module);\n\n /// @dev Enables a module on the avatar.\n /// @notice Can only be called by the avatar.\n /// @notice Modules should be stored as a linked list.\n /// @notice Must emit EnabledModule(address module) if successful.\n /// @param module Module to be enabled.\n function enableModule(address module) external;\n\n /// @dev Disables a module on the avatar.\n /// @notice Can only be called by the avatar.\n /// @notice Must emit DisabledModule(address module) if successful.\n /// @param prevModule Address that pointed to the module to be removed in the linked list\n /// @param module Module to be removed.\n function disableModule(address prevModule, address module) external;\n\n /// @dev Allows a Module to execute a transaction.\n /// @notice Can only be called by an enabled module.\n /// @notice Must emit ExecutionFromModuleSuccess(address module) if successful.\n /// @notice Must emit ExecutionFromModuleFailure(address module) if unsuccessful.\n /// @param to Destination address of module transaction.\n /// @param value Ether value of module transaction.\n /// @param data Data payload of module transaction.\n /// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.\n function execTransactionFromModule(\n address to,\n uint256 value,\n bytes memory data,\n Enum.Operation operation\n ) external returns (bool success);\n\n /// @dev Allows a Module to execute a transaction and return data\n /// @notice Can only be called by an enabled module.\n /// @notice Must emit ExecutionFromModuleSuccess(address module) if successful.\n /// @notice Must emit ExecutionFromModuleFailure(address module) if unsuccessful.\n /// @param to Destination address of module transaction.\n /// @param value Ether value of module transaction.\n /// @param data Data payload of module transaction.\n /// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.\n function execTransactionFromModuleReturnData(\n address to,\n uint256 value,\n bytes memory data,\n Enum.Operation operation\n ) external returns (bool success, bytes memory returnData);\n\n /// @dev Returns if an module is enabled\n /// @return True if the module is enabled\n function isModuleEnabled(address module) external view returns (bool);\n\n /// @dev Returns array of modules.\n /// @param start Start of the page.\n /// @param pageSize Maximum number of modules that should be returned.\n /// @return array Array of modules.\n /// @return next Start of the next page.\n function getModulesPaginated(\n address start,\n uint256 pageSize\n ) external view returns (address[] memory array, address next);\n}\n" + }, + "@gnosis.pm/zodiac/contracts/signature/ExecutionTracker.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.0 <0.9.0;\n\n/// @title ExecutionTracker - A contract that keeps track of executed and invalidated hashes\ncontract ExecutionTracker {\n error HashAlreadyConsumed(bytes32);\n\n event HashExecuted(bytes32);\n event HashInvalidated(bytes32);\n\n mapping(address => mapping(bytes32 => bool)) public consumed;\n\n function invalidate(bytes32 hash) external {\n consumed[msg.sender][hash] = true;\n emit HashInvalidated(hash);\n }\n}\n" + }, + "@gnosis.pm/zodiac/contracts/signature/IERC1271.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\n/* solhint-disable one-contract-per-file */\npragma solidity >=0.7.0 <0.9.0;\n\ninterface IERC1271 {\n /**\n * @notice EIP1271 method to validate a signature.\n * @param hash Hash of the data signed on the behalf of address(this).\n * @param signature Signature byte array associated with _data.\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(\n bytes32 hash,\n bytes memory signature\n ) external view returns (bytes4);\n}\n" + }, + "@gnosis.pm/zodiac/contracts/signature/SignatureChecker.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.0 <0.9.0;\n\nimport {IERC1271} from \"./IERC1271.sol\";\n\n/// @title SignatureChecker - A contract that retrieves and validates signatures appended to transaction calldata.\n/// @dev currently supports eip-712 and eip-1271 signatures\nabstract contract SignatureChecker {\n /**\n * @notice Searches for a signature, validates it, and returns the signer's address.\n * @dev When signature not found or invalid, zero address is returned\n * @return The address of the signer.\n */\n function moduleTxSignedBy() internal view returns (bytes32, address) {\n bytes calldata data = msg.data;\n\n /*\n * The idea is to extend `onlyModule` and provide signature checking\n * without code changes to inheriting contracts (Modifiers).\n *\n * Since it's a generic mechanism, there is no way to conclusively\n * identify the trailing bytes as a signature. We simply slice those\n * and recover signer.\n *\n * As a result, we impose a minimum calldata length equal to a function\n * selector plus salt, plus a signature (i.e., 4 + 32 + 65 bytes), any\n * shorter and calldata it guaranteed to not contain a signature.\n */\n if (data.length < 4 + 32 + 65) {\n return (bytes32(0), address(0));\n }\n\n (uint8 v, bytes32 r, bytes32 s) = _splitSignature(data);\n\n uint256 end = data.length - (32 + 65);\n bytes32 salt = bytes32(data[end:]);\n\n /*\n * When handling contract signatures:\n * v - is zero\n * r - contains the signer\n * s - contains the offset within calldata where the signer specific\n * signature is located\n *\n * We detect contract signatures by checking:\n * 1- `v` is zero\n * 2- `s` points within the buffer, is after selector, is before\n * salt and delimits a non-zero length buffer\n */\n if (v == 0) {\n uint256 start = uint256(s);\n if (start < 4 || start > end) {\n return (bytes32(0), address(0));\n }\n address signer = address(uint160(uint256(r)));\n\n bytes32 hash = moduleTxHash(data[:start], salt);\n return\n _isValidContractSignature(signer, hash, data[start:end])\n ? (hash, signer)\n : (bytes32(0), address(0));\n } else {\n bytes32 hash = moduleTxHash(data[:end], salt);\n return (hash, ecrecover(hash, v, r, s));\n }\n }\n\n /**\n * @notice Hashes the transaction EIP-712 data structure.\n * @dev The produced hash is intended to be signed.\n * @param data The current transaction's calldata.\n * @param salt The salt value.\n * @return The 32-byte hash that is to be signed.\n */\n function moduleTxHash(\n bytes calldata data,\n bytes32 salt\n ) public view returns (bytes32) {\n bytes32 domainSeparator = keccak256(\n abi.encode(DOMAIN_SEPARATOR_TYPEHASH, block.chainid, this)\n );\n bytes memory moduleTxData = abi.encodePacked(\n bytes1(0x19),\n bytes1(0x01),\n domainSeparator,\n keccak256(abi.encode(MODULE_TX_TYPEHASH, keccak256(data), salt))\n );\n return keccak256(moduleTxData);\n }\n\n /**\n * @dev Extracts signature from calldata, and divides it into `uint8 v, bytes32 r, bytes32 s`.\n * @param data The current transaction's calldata.\n * @return v The ECDSA v value\n * @return r The ECDSA r value\n * @return s The ECDSA s value\n */\n function _splitSignature(\n bytes calldata data\n ) private pure returns (uint8 v, bytes32 r, bytes32 s) {\n v = uint8(bytes1(data[data.length - 1:]));\n r = bytes32(data[data.length - 65:]);\n s = bytes32(data[data.length - 33:]);\n }\n\n /**\n * @dev Calls the signer contract, and validates the contract signature.\n * @param signer The address of the signer contract.\n * @param hash Hash of the data signed\n * @param signature The contract signature.\n * @return result Indicates whether the signature is valid.\n */\n function _isValidContractSignature(\n address signer,\n bytes32 hash,\n bytes calldata signature\n ) internal view returns (bool result) {\n uint256 size;\n // eslint-disable-line no-inline-assembly\n assembly {\n size := extcodesize(signer)\n }\n if (size == 0) {\n return false;\n }\n\n (, bytes memory returnData) = signer.staticcall(\n abi.encodeWithSelector(\n IERC1271.isValidSignature.selector,\n hash,\n signature\n )\n );\n\n return bytes4(returnData) == EIP1271_MAGIC_VALUE;\n }\n\n // keccak256(\n // \"EIP712Domain(uint256 chainId,address verifyingContract)\"\n // );\n bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH =\n 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218;\n\n // keccak256(\n // \"ModuleTx(bytes data,bytes32 salt)\"\n // );\n bytes32 private constant MODULE_TX_TYPEHASH =\n 0x2939aeeda3ca260200c9f7b436b19e13207547ccc65cfedc857751c5ea6d91d4;\n\n // bytes4(keccak256(\n // \"isValidSignature(bytes32,bytes)\"\n // ));\n bytes4 private constant EIP1271_MAGIC_VALUE = 0x1626ba7e;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n struct OwnableStorage {\n address _owner;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n assembly {\n $.slot := OwnableStorageLocation\n }\n }\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n function __Ownable_init(address initialOwner) internal onlyInitializing {\n __Ownable_init_unchained(initialOwner);\n }\n\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n OwnableStorage storage $ = _getOwnableStorage();\n return $._owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n OwnableStorage storage $ = _getOwnableStorage();\n address oldOwner = $._owner;\n $._owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Storage of the initializable contract.\n *\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n * when using with upgradeable contracts.\n *\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n */\n struct InitializableStorage {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n uint64 _initialized;\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool _initializing;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n /**\n * @dev The contract is already initialized.\n */\n error InvalidInitialization();\n\n /**\n * @dev The contract is not initializing.\n */\n error NotInitializing();\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint64 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n * production.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n // Cache values to avoid duplicated sloads\n bool isTopLevelCall = !$._initializing;\n uint64 initialized = $._initialized;\n\n // Allowed calls:\n // - initialSetup: the contract is not in the initializing state and no previous version was\n // initialized\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\n // current contract is just being deployed\n bool initialSetup = initialized == 0 && isTopLevelCall;\n bool construction = initialized == 1 && address(this).code.length == 0;\n\n if (!initialSetup && !construction) {\n revert InvalidInitialization();\n }\n $._initialized = 1;\n if (isTopLevelCall) {\n $._initializing = true;\n }\n _;\n if (isTopLevelCall) {\n $._initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint64 version) {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing || $._initialized >= version) {\n revert InvalidInitialization();\n }\n $._initialized = version;\n $._initializing = true;\n _;\n $._initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n _checkInitializing();\n _;\n }\n\n /**\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n */\n function _checkInitializing() internal view virtual {\n if (!_isInitializing()) {\n revert NotInitializing();\n }\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing) {\n revert InvalidInitialization();\n }\n if ($._initialized != type(uint64).max) {\n $._initialized = type(uint64).max;\n emit Initialized(type(uint64).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint64) {\n return _getInitializableStorage()._initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _getInitializableStorage()._initializing;\n }\n\n /**\n * @dev Returns a pointer to the storage namespace.\n */\n // solhint-disable-next-line var-name-mixedcase\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n assembly {\n $.slot := INITIALIZABLE_STORAGE\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "contracts/Delay.sol": { + "content": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity >=0.8.0;\n\nimport {Enum, Modifier} from \"@gnosis.pm/zodiac/contracts/core/Modifier.sol\";\n\ncontract Delay is Modifier {\n event DelaySetup(\n address indexed initiator,\n address indexed owner,\n address indexed avatar,\n address target\n );\n event TxCooldownSet(uint256 cooldown);\n event TxExpirationSet(uint256 expiration);\n event TxNonceSet(uint256 nonce);\n event TransactionAdded(\n uint256 indexed queueNonce,\n bytes32 indexed txHash,\n address to,\n uint256 value,\n bytes data,\n Enum.Operation operation\n );\n\n uint256 public txCooldown;\n uint256 public txExpiration;\n uint256 public txNonce;\n uint256 public queueNonce;\n // Mapping of queue nonce to transaction hash.\n mapping(uint256 => bytes32) public txHash;\n // Mapping of queue nonce to creation timestamp.\n mapping(uint256 => uint256) public txCreatedAt;\n\n /// @param _owner Address of the owner\n /// @param _avatar Address of the avatar (e.g. a Gnosis Safe)\n /// @param _target Address of the contract that will call exec function\n /// @param _cooldown Cooldown in seconds that should be required after a transaction is proposed\n /// @param _expiration Duration that a proposed transaction is valid for after the cooldown, in seconds (or 0 if valid forever)\n /// @notice There need to be at least 60 seconds between end of cooldown and expiration\n constructor(\n address _owner,\n address _avatar,\n address _target,\n uint256 _cooldown,\n uint256 _expiration\n ) {\n bytes memory initParams = abi.encode(\n _owner,\n _avatar,\n _target,\n _cooldown,\n _expiration\n );\n setUp(initParams);\n }\n\n function setUp(bytes memory initParams) public override initializer {\n (\n address _owner,\n address _avatar,\n address _target,\n uint256 _cooldown,\n uint256 _expiration\n ) = abi.decode(\n initParams,\n (address, address, address, uint256, uint256)\n );\n require(_avatar != address(0), \"Avatar can not be zero address\");\n require(_target != address(0), \"Target can not be zero address\");\n require(\n _expiration == 0 || _expiration >= 60,\n \"Expiration must be 0 or at least 60 seconds\"\n );\n\n _transferOwnership(_owner);\n avatar = _avatar;\n target = _target;\n txExpiration = _expiration;\n txCooldown = _cooldown;\n setupModules();\n\n emit DelaySetup(msg.sender, _owner, _avatar, _target);\n emit AvatarSet(address(0), _avatar);\n emit TargetSet(address(0), _target);\n }\n\n /// @dev Sets the cooldown before a transaction can be executed.\n /// @param _txCooldown Cooldown in seconds that should be required before the transaction can be executed\n /// @notice This can only be called by the owner\n function setTxCooldown(uint256 _txCooldown) public onlyOwner {\n txCooldown = _txCooldown;\n emit TxCooldownSet(_txCooldown);\n }\n\n /// @dev Sets the duration for which a transaction is valid.\n /// @param _txExpiration Duration that a transaction is valid in seconds (or 0 if valid forever) after the cooldown\n /// @notice There need to be at least 60 seconds between end of cooldown and expiration\n /// @notice This can only be called by the owner\n function setTxExpiration(uint256 _txExpiration) public onlyOwner {\n require(\n _txExpiration == 0 || _txExpiration >= 60,\n \"Expiration must be 0 or at least 60 seconds\"\n );\n txExpiration = _txExpiration;\n emit TxExpirationSet(_txExpiration);\n }\n\n /// @dev Sets transaction nonce. Used to invalidate or skip transactions in queue.\n /// @param _txNonce New transaction nonce\n /// @notice This can only be called by the owner\n function setTxNonce(uint256 _txNonce) public onlyOwner {\n require(\n _txNonce > txNonce,\n \"New nonce must be higher than current txNonce\"\n );\n require(_txNonce <= queueNonce, \"Cannot be higher than queueNonce\");\n txNonce = _txNonce;\n emit TxNonceSet(_txNonce);\n }\n\n /// @dev Adds a transaction to the queue (same as avatar interface so that this can be placed between other modules and the avatar).\n /// @param to Destination address of module transaction\n /// @param value Ether value of module transaction\n /// @param data Data payload of module transaction\n /// @param operation Operation type of module transaction\n /// @return success Whether or not the call was successfully queued for execution\n /// @notice Can only be called by enabled modules\n function execTransactionFromModule(\n address to,\n uint256 value,\n bytes calldata data,\n Enum.Operation operation\n ) public override moduleOnly returns (bool success) {\n bytes32 hash = getTransactionHash(to, value, data, operation);\n txHash[queueNonce] = hash;\n txCreatedAt[queueNonce] = block.timestamp;\n emit TransactionAdded(queueNonce, hash, to, value, data, operation);\n queueNonce++;\n success = true;\n }\n\n /// @dev Adds a transaction to the queue (same as avatar interface so that this can be placed between other modules and the avatar).\n /// @param to Destination address of module transaction\n /// @param value Ether value of module transaction\n /// @param data Data payload of module transaction\n /// @param operation Operation type of module transaction\n /// @return success Whether or not the call was successfully queued for execution\n /// @return returnData ABI encoded queue nonce (uint256), transaction hash (bytes32), and block.timestamp (uint256)\n /// @notice Can only be called by enabled modules\n function execTransactionFromModuleReturnData(\n address to,\n uint256 value,\n bytes calldata data,\n Enum.Operation operation\n )\n public\n override\n moduleOnly\n returns (bool success, bytes memory returnData)\n {\n bytes32 hash = getTransactionHash(to, value, data, operation);\n txHash[queueNonce] = hash;\n txCreatedAt[queueNonce] = block.timestamp;\n emit TransactionAdded(queueNonce, hash, to, value, data, operation);\n success = true;\n returnData = abi.encode(queueNonce, hash, block.timestamp);\n queueNonce++;\n }\n\n /// @dev Executes the next transaction only if the cooldown has passed and the transaction has not expired\n /// @param to Destination address of module transaction\n /// @param value Ether value of module transaction\n /// @param data Data payload of module transaction\n /// @param operation Operation type of module transaction\n /// @notice The txIndex used by this function is always 0\n function executeNextTx(\n address to,\n uint256 value,\n bytes calldata data,\n Enum.Operation operation\n ) public {\n require(txNonce < queueNonce, \"Transaction queue is empty\");\n uint256 txCreationTimestamp = txCreatedAt[txNonce];\n require(\n block.timestamp - txCreationTimestamp >= txCooldown,\n \"Transaction is still in cooldown\"\n );\n if (txExpiration != 0) {\n require(\n txCreationTimestamp + txCooldown + txExpiration >=\n block.timestamp,\n \"Transaction expired\"\n );\n }\n require(\n txHash[txNonce] == getTransactionHash(to, value, data, operation),\n \"Transaction hashes do not match\"\n );\n txNonce++;\n require(exec(to, value, data, operation), \"Module transaction failed\");\n }\n\n function skipExpired() public {\n while (\n txExpiration != 0 &&\n txCreatedAt[txNonce] + txCooldown + txExpiration <\n block.timestamp &&\n txNonce < queueNonce\n ) {\n txNonce++;\n }\n }\n\n function getTransactionHash(\n address to,\n uint256 value,\n bytes memory data,\n Enum.Operation operation\n ) public pure returns (bytes32) {\n return keccak256(abi.encodePacked(to, value, data, operation));\n }\n\n function getTxHash(uint256 _nonce) public view returns (bytes32) {\n return (txHash[_nonce]);\n }\n\n function getTxCreatedAt(uint256 _nonce) public view returns (uint256) {\n return (txCreatedAt[_nonce]);\n }\n}\n" + } + }, + "settings": { + "evmVersion": "paris", + "optimizer": { + "enabled": false, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "contractName": "Delay", + "sourceName": "contracts/Delay.sol", + "compilerVersion": "v0.8.20+commit.a1b79de6" } -} +} \ No newline at end of file