From 82aecae07656efe30018c2b5d4a3e67673492878 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Fri, 8 Nov 2024 19:23:12 +0200 Subject: [PATCH 01/19] Working version of the public callbacks. --- .../SystemDeployer.sol/SystemDeployer.bin | 2 +- .../PublicCallbacks/PublicCallbacks.go | 450 ++++++++++++++++++ .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 55 +++ contracts/src/system/SystemDeployer.sol | 10 + go/common/types.go | 4 + go/enclave/components/batch_executor.go | 25 + go/enclave/core/utils.go | 15 +- go/enclave/crosschain/message_bus_manager.go | 5 +- go/enclave/evm/evm_facade.go | 8 +- go/enclave/evm/transaction_overlay.go | 7 +- go/enclave/rpc/GetTransaction.go | 2 +- go/enclave/storage/storage.go | 2 +- go/enclave/system/hooks.go | 66 ++- 14 files changed, 624 insertions(+), 29 deletions(-) create mode 100644 contracts/generated/PublicCallbacks/PublicCallbacks.go create mode 100644 contracts/src/system/PublicCallbacks.sol diff --git a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin index 60e075c7e..7772cb182 100644 --- a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin +++ b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162003df238038062003df283398101604081905262000034916200027e565b6200003f8162000051565b6200004a8162000118565b50620003ec565b600060405162000061906200021a565b604051809103906000f0801580156200007e573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016200009e9190620002bc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000e8838584620001d160201b60201c565b905060008051602062003dd2833981519152816040516200010a919062000300565b60405180910390a150505050565b6000604051620001289062000228565b604051809103906000f08015801562000145573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401620001659190620002bc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620001af838584620001d160201b60201c565b905060008051602062003dd2833981519152816040516200010a919062000343565b600080848484604051620001e59062000236565b620001f393929190620003b0565b604051809103906000f08015801562000210573d6000803e3d6000fd5b5095945050505050565b610e61806200043a83390190565b61180b806200129b83390190565b61132c8062002aa683390190565b60006001600160a01b0382165b92915050565b620002628162000244565b81146200026e57600080fd5b50565b8051620002518162000257565b600060208284031215620002955762000295600080fd5b6000620002a3848462000271565b949350505050565b620002b68162000244565b82525050565b60208101620002518284620002ab565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b604080825281016200031281620002cc565b9050620002516020830184620002ab565b600a815260208101694d65737361676542757360b01b81529050620002fa565b60408082528101620003128162000323565b60005b838110156200037257818101518382015260200162000358565b50506000910152565b600062000386825190565b8084526020840193506200039f81856020860162000355565b601f01601f19169290920192915050565b60608101620003c08286620002ab565b620003cf6020830185620002ab565b8181036040830152620003e381846200037b565b95945050505050565b603f80620003fb6000396000f3fe6080604052600080fdfea2646970667358221220244e489330cb1428c356b7e1f8326d45f7128d6d965825901ff4ccdb5baffc5e64736f6c63430008150033608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c6343000815003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69 \ No newline at end of file +60806040523480156200001157600080fd5b5060405162004a2e38038062004a2e83398101604081905262000034916200032c565b6200003f816200005c565b6200004a8162000123565b6200005581620001dc565b50620004d1565b60006040516200006c90620002ba565b604051809103906000f08015801562000089573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401620000a991906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000f38385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003ae565b60405180910390a150505050565b60006040516200013390620002c8565b604051809103906000f08015801562000150573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016200017091906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620001ba8385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003f1565b6000604051620001ec90620002d6565b604051809103906000f08015801562000209573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906200024f908490869085906200027116565b905060008051602062004a0e8339815191528160405162000115919062000428565b6000808484846040516200028590620002e4565b620002939392919062000495565b604051809103906000f080158015620002b0573d6000803e3d6000fd5b5095945050505050565b610e61806200051f83390190565b61180b806200138083390190565b610b578062002b8b83390190565b61132c80620036e283390190565b60006001600160a01b0382165b92915050565b6200031081620002f2565b81146200031c57600080fd5b50565b8051620002ff8162000305565b600060208284031215620003435762000343600080fd5b60006200035184846200031f565b949350505050565b6200036481620002f2565b82525050565b60208101620002ff828462000359565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b60408082528101620003c0816200037a565b9050620002ff602083018462000359565b600a815260208101694d65737361676542757360b01b81529050620003a8565b60408082528101620003c081620003d1565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050620003a8565b60408082528101620003c08162000403565b60005b83811015620004575781810151838201526020016200043d565b50506000910152565b60006200046b825190565b808452602084019350620004848185602086016200043a565b601f01601f19169290920192915050565b60608101620004a5828662000359565b620004b4602083018562000359565b8181036040830152620004c8818462000460565b95945050505050565b603f80620004e06000396000f3fe6080604052600080fdfea2646970667358221220c273fe59a844f09235798ada225f43dc52966aea8ebad34d2f80e332b991792d64736f6c63430008150033608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c63430008150033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610a78806100df6000396000f3fe60806040526004361061003e5760003560e01c8062e0d3b514610043578063349e7eca1461007b5780638129fc1c1461009257806382fbdc9c146100a7575b600080fd5b34801561004f57600080fd5b5061006361005e3660046105f0565b6100ba565b60405161007293929190610695565b60405180910390f35b34801561008757600080fd5b5061009061016f565b005b34801561009e57600080fd5b50610090610378565b6100906100b5366004610716565b6104ba565b600060208190529081526040902080546001820180546001600160a01b0390921692916100e690610774565b80601f016020809104026020016040519081016040528092919081815260200182805461011290610774565b801561015f5780601f106101345761010080835404028352916020019161015f565b820191906000526020600020905b81548152906001019060200180831161014257829003601f168201915b5050505050908060020154905083565b600061017c6001306107b6565b9050336001600160a01b038216146101af5760405162461bcd60e51b81526004016101a69061080d565b60405180910390fd5b600254600154116103755760028054600091826101cb8361081d565b91905055905060025481106101f25760405162461bcd60e51b81526004016101a690610868565b60008181526020818152604080832081516060810190925280546001600160a01b03168252600181018054929391929184019161022e90610774565b80601f016020809104026020016040519081016040528092919081815260200182805461025a90610774565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b0316826040015183602001516040516102e3919061089a565b60006040518083038185875af1925050503d8060008114610320576040519150601f19603f3d011682016040523d82523d6000602084013e610325565b606091505b505090508015610371576000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103666001830182610599565b600282016000905550505b5050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c35750825b905060008267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b15610425576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045957845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104aa906001906108c8565b60405180910390a15b5050505050565b6104c6338383346104ca565b5050565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020909101839052600180548291826105348361081d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105859082610982565b506040820151816002015590505050505050565b5080546105a590610774565b6000825580601f106105b5575050565b601f01602090049060005260206000209081019061037591905b808211156105e357600081556001016105cf565b5090565b80355b92915050565b60006020828403121561060557610605600080fd5b600061061184846105e7565b949350505050565b60006001600160a01b0382166105ea565b61063381610619565b82525050565b60005b8381101561065457818101518382015260200161063c565b50506000910152565b6000610667825190565b80845260208401935061067e818560208601610639565b601f01601f19169290920192915050565b80610633565b606081016106a3828661062a565b81810360208301526106b5818561065d565b9050610611604083018461068f565b60008083601f8401126106d9576106d9600080fd5b50813567ffffffffffffffff8111156106f4576106f4600080fd5b60208301915083600182028301111561070f5761070f600080fd5b9250929050565b6000806020838503121561072c5761072c600080fd5b823567ffffffffffffffff81111561074657610746600080fd5b610752858286016106c4565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061078857607f821691505b60208210810361079a5761079a61075e565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156105ea576105ea6107a0565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105ea816107d9565b60006001820161082f5761082f6107a0565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610807565b602080825281016105ea81610836565b6000610882825190565b610890818560208601610639565b9290920192915050565b6105ea8183610878565b60006105ea826108b2565b90565b67ffffffffffffffff1690565b610633816108a4565b602081016105ea82846108bf565b634e487b7160e01b600052604160045260246000fd5b60006105ea6108af8381565b610901836108ec565b815460001960089490940293841b1916921b91909117905550565b60006109298184846108f8565b505050565b818110156104c65761094160008261091c565b60010161092e565b601f821115610929576000818152602090206020601f850104810160208510156109705750805b6104b36020601f86010483018261092e565b815167ffffffffffffffff81111561099c5761099c6108d6565b6109a68254610774565b6109b1828285610949565b506020601f8211600181146109e657600083156109ce5750848201515b600019600885021c19811660028502178555506104b3565b600084815260208120601f198516915b82811015610a1657878501518255602094850194600190920191016109f6565b5084821015610a335783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220d17e8eed9b79a79400ab369369f2cd2a5f9a78b3253b0346382f1e69c1cf77d864736f6c6343000815003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69 \ No newline at end of file diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go new file mode 100644 index 000000000..9ef2092ec --- /dev/null +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -0,0 +1,450 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package PublicCallbacks + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. +var PublicCallbacksMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"callback\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610a78806100df6000396000f3fe60806040526004361061003e5760003560e01c8062e0d3b514610043578063349e7eca1461007b5780638129fc1c1461009257806382fbdc9c146100a7575b600080fd5b34801561004f57600080fd5b5061006361005e3660046105f0565b6100ba565b60405161007293929190610695565b60405180910390f35b34801561008757600080fd5b5061009061016f565b005b34801561009e57600080fd5b50610090610378565b6100906100b5366004610716565b6104ba565b600060208190529081526040902080546001820180546001600160a01b0390921692916100e690610774565b80601f016020809104026020016040519081016040528092919081815260200182805461011290610774565b801561015f5780601f106101345761010080835404028352916020019161015f565b820191906000526020600020905b81548152906001019060200180831161014257829003601f168201915b5050505050908060020154905083565b600061017c6001306107b6565b9050336001600160a01b038216146101af5760405162461bcd60e51b81526004016101a69061080d565b60405180910390fd5b600254600154116103755760028054600091826101cb8361081d565b91905055905060025481106101f25760405162461bcd60e51b81526004016101a690610868565b60008181526020818152604080832081516060810190925280546001600160a01b03168252600181018054929391929184019161022e90610774565b80601f016020809104026020016040519081016040528092919081815260200182805461025a90610774565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b0316826040015183602001516040516102e3919061089a565b60006040518083038185875af1925050503d8060008114610320576040519150601f19603f3d011682016040523d82523d6000602084013e610325565b606091505b505090508015610371576000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103666001830182610599565b600282016000905550505b5050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c35750825b905060008267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b15610425576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045957845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104aa906001906108c8565b60405180910390a15b5050505050565b6104c6338383346104ca565b5050565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020909101839052600180548291826105348361081d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105859082610982565b506040820151816002015590505050505050565b5080546105a590610774565b6000825580601f106105b5575050565b601f01602090049060005260206000209081019061037591905b808211156105e357600081556001016105cf565b5090565b80355b92915050565b60006020828403121561060557610605600080fd5b600061061184846105e7565b949350505050565b60006001600160a01b0382166105ea565b61063381610619565b82525050565b60005b8381101561065457818101518382015260200161063c565b50506000910152565b6000610667825190565b80845260208401935061067e818560208601610639565b601f01601f19169290920192915050565b80610633565b606081016106a3828661062a565b81810360208301526106b5818561065d565b9050610611604083018461068f565b60008083601f8401126106d9576106d9600080fd5b50813567ffffffffffffffff8111156106f4576106f4600080fd5b60208301915083600182028301111561070f5761070f600080fd5b9250929050565b6000806020838503121561072c5761072c600080fd5b823567ffffffffffffffff81111561074657610746600080fd5b610752858286016106c4565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061078857607f821691505b60208210810361079a5761079a61075e565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156105ea576105ea6107a0565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105ea816107d9565b60006001820161082f5761082f6107a0565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610807565b602080825281016105ea81610836565b6000610882825190565b610890818560208601610639565b9290920192915050565b6105ea8183610878565b60006105ea826108b2565b90565b67ffffffffffffffff1690565b610633816108a4565b602081016105ea82846108bf565b634e487b7160e01b600052604160045260246000fd5b60006105ea6108af8381565b610901836108ec565b815460001960089490940293841b1916921b91909117905550565b60006109298184846108f8565b505050565b818110156104c65761094160008261091c565b60010161092e565b601f821115610929576000818152602090206020601f850104810160208510156109705750805b6104b36020601f86010483018261092e565b815167ffffffffffffffff81111561099c5761099c6108d6565b6109a68254610774565b6109b1828285610949565b506020601f8211600181146109e657600083156109ce5750848201515b600019600885021c19811660028502178555506104b3565b600084815260208120601f198516915b82811015610a1657878501518255602094850194600190920191016109f6565b5084821015610a335783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220d17e8eed9b79a79400ab369369f2cd2a5f9a78b3253b0346382f1e69c1cf77d864736f6c63430008150033", +} + +// PublicCallbacksABI is the input ABI used to generate the binding from. +// Deprecated: Use PublicCallbacksMetaData.ABI instead. +var PublicCallbacksABI = PublicCallbacksMetaData.ABI + +// PublicCallbacksBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PublicCallbacksMetaData.Bin instead. +var PublicCallbacksBin = PublicCallbacksMetaData.Bin + +// DeployPublicCallbacks deploys a new Ethereum contract, binding an instance of PublicCallbacks to it. +func DeployPublicCallbacks(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *PublicCallbacks, error) { + parsed, err := PublicCallbacksMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(PublicCallbacksBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PublicCallbacks{PublicCallbacksCaller: PublicCallbacksCaller{contract: contract}, PublicCallbacksTransactor: PublicCallbacksTransactor{contract: contract}, PublicCallbacksFilterer: PublicCallbacksFilterer{contract: contract}}, nil +} + +// PublicCallbacks is an auto generated Go binding around an Ethereum contract. +type PublicCallbacks struct { + PublicCallbacksCaller // Read-only binding to the contract + PublicCallbacksTransactor // Write-only binding to the contract + PublicCallbacksFilterer // Log filterer for contract events +} + +// PublicCallbacksCaller is an auto generated read-only Go binding around an Ethereum contract. +type PublicCallbacksCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicCallbacksTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PublicCallbacksTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicCallbacksFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PublicCallbacksFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicCallbacksSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PublicCallbacksSession struct { + Contract *PublicCallbacks // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PublicCallbacksCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PublicCallbacksCallerSession struct { + Contract *PublicCallbacksCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PublicCallbacksTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PublicCallbacksTransactorSession struct { + Contract *PublicCallbacksTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PublicCallbacksRaw is an auto generated low-level Go binding around an Ethereum contract. +type PublicCallbacksRaw struct { + Contract *PublicCallbacks // Generic contract binding to access the raw methods on +} + +// PublicCallbacksCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PublicCallbacksCallerRaw struct { + Contract *PublicCallbacksCaller // Generic read-only contract binding to access the raw methods on +} + +// PublicCallbacksTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PublicCallbacksTransactorRaw struct { + Contract *PublicCallbacksTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPublicCallbacks creates a new instance of PublicCallbacks, bound to a specific deployed contract. +func NewPublicCallbacks(address common.Address, backend bind.ContractBackend) (*PublicCallbacks, error) { + contract, err := bindPublicCallbacks(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PublicCallbacks{PublicCallbacksCaller: PublicCallbacksCaller{contract: contract}, PublicCallbacksTransactor: PublicCallbacksTransactor{contract: contract}, PublicCallbacksFilterer: PublicCallbacksFilterer{contract: contract}}, nil +} + +// NewPublicCallbacksCaller creates a new read-only instance of PublicCallbacks, bound to a specific deployed contract. +func NewPublicCallbacksCaller(address common.Address, caller bind.ContractCaller) (*PublicCallbacksCaller, error) { + contract, err := bindPublicCallbacks(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PublicCallbacksCaller{contract: contract}, nil +} + +// NewPublicCallbacksTransactor creates a new write-only instance of PublicCallbacks, bound to a specific deployed contract. +func NewPublicCallbacksTransactor(address common.Address, transactor bind.ContractTransactor) (*PublicCallbacksTransactor, error) { + contract, err := bindPublicCallbacks(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PublicCallbacksTransactor{contract: contract}, nil +} + +// NewPublicCallbacksFilterer creates a new log filterer instance of PublicCallbacks, bound to a specific deployed contract. +func NewPublicCallbacksFilterer(address common.Address, filterer bind.ContractFilterer) (*PublicCallbacksFilterer, error) { + contract, err := bindPublicCallbacks(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PublicCallbacksFilterer{contract: contract}, nil +} + +// bindPublicCallbacks binds a generic wrapper to an already deployed contract. +func bindPublicCallbacks(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PublicCallbacksMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PublicCallbacks *PublicCallbacksRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PublicCallbacks.Contract.PublicCallbacksCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PublicCallbacks *PublicCallbacksRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacks.Contract.PublicCallbacksTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PublicCallbacks *PublicCallbacksRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PublicCallbacks.Contract.PublicCallbacksTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PublicCallbacks *PublicCallbacksCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PublicCallbacks.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PublicCallbacks *PublicCallbacksTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacks.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PublicCallbacks *PublicCallbacksTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PublicCallbacks.Contract.contract.Transact(opts, method, params...) +} + +// Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. +// +// Solidity: function callbacks(uint256 ) view returns(address callback, bytes data, uint256 value) +func (_PublicCallbacks *PublicCallbacksCaller) Callbacks(opts *bind.CallOpts, arg0 *big.Int) (struct { + Callback common.Address + Data []byte + Value *big.Int +}, error) { + var out []interface{} + err := _PublicCallbacks.contract.Call(opts, &out, "callbacks", arg0) + + outstruct := new(struct { + Callback common.Address + Data []byte + Value *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Callback = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Data = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + outstruct.Value = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. +// +// Solidity: function callbacks(uint256 ) view returns(address callback, bytes data, uint256 value) +func (_PublicCallbacks *PublicCallbacksSession) Callbacks(arg0 *big.Int) (struct { + Callback common.Address + Data []byte + Value *big.Int +}, error) { + return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) +} + +// Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. +// +// Solidity: function callbacks(uint256 ) view returns(address callback, bytes data, uint256 value) +func (_PublicCallbacks *PublicCallbacksCallerSession) Callbacks(arg0 *big.Int) (struct { + Callback common.Address + Data []byte + Value *big.Int +}, error) { + return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) +} + +// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// +// Solidity: function executeNextCallback() returns() +func (_PublicCallbacks *PublicCallbacksTransactor) ExecuteNextCallback(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacks.contract.Transact(opts, "executeNextCallback") +} + +// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// +// Solidity: function executeNextCallback() returns() +func (_PublicCallbacks *PublicCallbacksSession) ExecuteNextCallback() (*types.Transaction, error) { + return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) +} + +// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// +// Solidity: function executeNextCallback() returns() +func (_PublicCallbacks *PublicCallbacksTransactorSession) ExecuteNextCallback() (*types.Transaction, error) { + return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_PublicCallbacks *PublicCallbacksTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacks.contract.Transact(opts, "initialize") +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_PublicCallbacks *PublicCallbacksSession) Initialize() (*types.Transaction, error) { + return _PublicCallbacks.Contract.Initialize(&_PublicCallbacks.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_PublicCallbacks *PublicCallbacksTransactorSession) Initialize() (*types.Transaction, error) { + return _PublicCallbacks.Contract.Initialize(&_PublicCallbacks.TransactOpts) +} + +// Register is a paid mutator transaction binding the contract method 0x82fbdc9c. +// +// Solidity: function register(bytes callback) payable returns() +func (_PublicCallbacks *PublicCallbacksTransactor) Register(opts *bind.TransactOpts, callback []byte) (*types.Transaction, error) { + return _PublicCallbacks.contract.Transact(opts, "register", callback) +} + +// Register is a paid mutator transaction binding the contract method 0x82fbdc9c. +// +// Solidity: function register(bytes callback) payable returns() +func (_PublicCallbacks *PublicCallbacksSession) Register(callback []byte) (*types.Transaction, error) { + return _PublicCallbacks.Contract.Register(&_PublicCallbacks.TransactOpts, callback) +} + +// Register is a paid mutator transaction binding the contract method 0x82fbdc9c. +// +// Solidity: function register(bytes callback) payable returns() +func (_PublicCallbacks *PublicCallbacksTransactorSession) Register(callback []byte) (*types.Transaction, error) { + return _PublicCallbacks.Contract.Register(&_PublicCallbacks.TransactOpts, callback) +} + +// PublicCallbacksInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PublicCallbacks contract. +type PublicCallbacksInitializedIterator struct { + Event *PublicCallbacksInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicCallbacksInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicCallbacksInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicCallbacksInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *PublicCallbacksInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicCallbacksInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicCallbacksInitialized represents a Initialized event raised by the PublicCallbacks contract. +type PublicCallbacksInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_PublicCallbacks *PublicCallbacksFilterer) FilterInitialized(opts *bind.FilterOpts) (*PublicCallbacksInitializedIterator, error) { + + logs, sub, err := _PublicCallbacks.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &PublicCallbacksInitializedIterator{contract: _PublicCallbacks.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_PublicCallbacks *PublicCallbacksFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PublicCallbacksInitialized) (event.Subscription, error) { + + logs, sub, err := _PublicCallbacks.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicCallbacksInitialized) + if err := _PublicCallbacks.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_PublicCallbacks *PublicCallbacksFilterer) ParseInitialized(log types.Log) (*PublicCallbacksInitialized, error) { + event := new(PublicCallbacksInitialized) + if err := _PublicCallbacks.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 07cd5882e..e567b546d 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162003df238038062003df283398101604081905262000034916200027e565b6200003f8162000051565b6200004a8162000118565b50620003ec565b600060405162000061906200021a565b604051809103906000f0801580156200007e573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016200009e9190620002bc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000e8838584620001d160201b60201c565b905060008051602062003dd2833981519152816040516200010a919062000300565b60405180910390a150505050565b6000604051620001289062000228565b604051809103906000f08015801562000145573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401620001659190620002bc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620001af838584620001d160201b60201c565b905060008051602062003dd2833981519152816040516200010a919062000343565b600080848484604051620001e59062000236565b620001f393929190620003b0565b604051809103906000f08015801562000210573d6000803e3d6000fd5b5095945050505050565b610e61806200043a83390190565b61180b806200129b83390190565b61132c8062002aa683390190565b60006001600160a01b0382165b92915050565b620002628162000244565b81146200026e57600080fd5b50565b8051620002518162000257565b600060208284031215620002955762000295600080fd5b6000620002a3848462000271565b949350505050565b620002b68162000244565b82525050565b60208101620002518284620002ab565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b604080825281016200031281620002cc565b9050620002516020830184620002ab565b600a815260208101694d65737361676542757360b01b81529050620002fa565b60408082528101620003128162000323565b60005b838110156200037257818101518382015260200162000358565b50506000910152565b600062000386825190565b8084526020840193506200039f81856020860162000355565b601f01601f19169290920192915050565b60608101620003c08286620002ab565b620003cf6020830185620002ab565b8181036040830152620003e381846200037b565b95945050505050565b603f80620003fb6000396000f3fe6080604052600080fdfea2646970667358221220244e489330cb1428c356b7e1f8326d45f7128d6d965825901ff4ccdb5baffc5e64736f6c63430008150033608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c6343000815003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x60806040523480156200001157600080fd5b5060405162004a2e38038062004a2e83398101604081905262000034916200032c565b6200003f816200005c565b6200004a8162000123565b6200005581620001dc565b50620004d1565b60006040516200006c90620002ba565b604051809103906000f08015801562000089573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401620000a991906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000f38385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003ae565b60405180910390a150505050565b60006040516200013390620002c8565b604051809103906000f08015801562000150573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016200017091906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620001ba8385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003f1565b6000604051620001ec90620002d6565b604051809103906000f08015801562000209573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906200024f908490869085906200027116565b905060008051602062004a0e8339815191528160405162000115919062000428565b6000808484846040516200028590620002e4565b620002939392919062000495565b604051809103906000f080158015620002b0573d6000803e3d6000fd5b5095945050505050565b610e61806200051f83390190565b61180b806200138083390190565b610b578062002b8b83390190565b61132c80620036e283390190565b60006001600160a01b0382165b92915050565b6200031081620002f2565b81146200031c57600080fd5b50565b8051620002ff8162000305565b600060208284031215620003435762000343600080fd5b60006200035184846200031f565b949350505050565b6200036481620002f2565b82525050565b60208101620002ff828462000359565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b60408082528101620003c0816200037a565b9050620002ff602083018462000359565b600a815260208101694d65737361676542757360b01b81529050620003a8565b60408082528101620003c081620003d1565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050620003a8565b60408082528101620003c08162000403565b60005b83811015620004575781810151838201526020016200043d565b50506000910152565b60006200046b825190565b808452602084019350620004848185602086016200043a565b601f01601f19169290920192915050565b60608101620004a5828662000359565b620004b4602083018562000359565b8181036040830152620004c8818462000460565b95945050505050565b603f80620004e06000396000f3fe6080604052600080fdfea2646970667358221220c273fe59a844f09235798ada225f43dc52966aea8ebad34d2f80e332b991792d64736f6c63430008150033608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c63430008150033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610a78806100df6000396000f3fe60806040526004361061003e5760003560e01c8062e0d3b514610043578063349e7eca1461007b5780638129fc1c1461009257806382fbdc9c146100a7575b600080fd5b34801561004f57600080fd5b5061006361005e3660046105f0565b6100ba565b60405161007293929190610695565b60405180910390f35b34801561008757600080fd5b5061009061016f565b005b34801561009e57600080fd5b50610090610378565b6100906100b5366004610716565b6104ba565b600060208190529081526040902080546001820180546001600160a01b0390921692916100e690610774565b80601f016020809104026020016040519081016040528092919081815260200182805461011290610774565b801561015f5780601f106101345761010080835404028352916020019161015f565b820191906000526020600020905b81548152906001019060200180831161014257829003601f168201915b5050505050908060020154905083565b600061017c6001306107b6565b9050336001600160a01b038216146101af5760405162461bcd60e51b81526004016101a69061080d565b60405180910390fd5b600254600154116103755760028054600091826101cb8361081d565b91905055905060025481106101f25760405162461bcd60e51b81526004016101a690610868565b60008181526020818152604080832081516060810190925280546001600160a01b03168252600181018054929391929184019161022e90610774565b80601f016020809104026020016040519081016040528092919081815260200182805461025a90610774565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b0316826040015183602001516040516102e3919061089a565b60006040518083038185875af1925050503d8060008114610320576040519150601f19603f3d011682016040523d82523d6000602084013e610325565b606091505b505090508015610371576000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103666001830182610599565b600282016000905550505b5050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c35750825b905060008267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b15610425576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045957845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104aa906001906108c8565b60405180910390a15b5050505050565b6104c6338383346104ca565b5050565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020909101839052600180548291826105348361081d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105859082610982565b506040820151816002015590505050505050565b5080546105a590610774565b6000825580601f106105b5575050565b601f01602090049060005260206000209081019061037591905b808211156105e357600081556001016105cf565b5090565b80355b92915050565b60006020828403121561060557610605600080fd5b600061061184846105e7565b949350505050565b60006001600160a01b0382166105ea565b61063381610619565b82525050565b60005b8381101561065457818101518382015260200161063c565b50506000910152565b6000610667825190565b80845260208401935061067e818560208601610639565b601f01601f19169290920192915050565b80610633565b606081016106a3828661062a565b81810360208301526106b5818561065d565b9050610611604083018461068f565b60008083601f8401126106d9576106d9600080fd5b50813567ffffffffffffffff8111156106f4576106f4600080fd5b60208301915083600182028301111561070f5761070f600080fd5b9250929050565b6000806020838503121561072c5761072c600080fd5b823567ffffffffffffffff81111561074657610746600080fd5b610752858286016106c4565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061078857607f821691505b60208210810361079a5761079a61075e565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156105ea576105ea6107a0565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105ea816107d9565b60006001820161082f5761082f6107a0565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610807565b602080825281016105ea81610836565b6000610882825190565b610890818560208601610639565b9290920192915050565b6105ea8183610878565b60006105ea826108b2565b90565b67ffffffffffffffff1690565b610633816108a4565b602081016105ea82846108bf565b634e487b7160e01b600052604160045260246000fd5b60006105ea6108af8381565b610901836108ec565b815460001960089490940293841b1916921b91909117905550565b60006109298184846108f8565b505050565b818110156104c65761094160008261091c565b60010161092e565b601f821115610929576000818152602090206020601f850104810160208510156109705750805b6104b36020601f86010483018261092e565b815167ffffffffffffffff81111561099c5761099c6108d6565b6109a68254610774565b6109b1828285610949565b506020601f8211600181146109e657600083156109ce5750848201515b600019600885021c19811660028502178555506104b3565b600084815260208120601f198516915b82811015610a1657878501518255602094850194600190920191016109f6565b5084821015610a335783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220d17e8eed9b79a79400ab369369f2cd2a5f9a78b3253b0346382f1e69c1cf77d864736f6c6343000815003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol new file mode 100644 index 000000000..86560542e --- /dev/null +++ b/contracts/src/system/PublicCallbacks.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; + +contract PublicCallbacks is Initializable { + + modifier onlySelf() { + address maskedSelf = address(uint160(address(this)) - 1); + require(msg.sender == maskedSelf, "Not self"); + _; + } + + + constructor() { + _disableInitializers(); + } + + struct Callback { + address callback; + bytes data; + uint256 value; + } + + mapping(uint256 => Callback) public callbacks; + uint256 private nextCallbackId; + uint256 private lastUnusedCallbackId; + + function initialize() external initializer { + nextCallbackId = 0; + lastUnusedCallbackId = 0; + } + + function addCallback(address callback, bytes calldata data, uint256 value) internal { + callbacks[nextCallbackId++] = Callback({callback: callback, data: data, value: value}); + } + + function register(bytes calldata callback) external payable { + addCallback(msg.sender, callback, msg.value); + } + + function executeNextCallback() external onlySelf { + if (nextCallbackId > lastUnusedCallbackId) { + return; // todo: change to revert if possible + } + + uint256 callbackId = lastUnusedCallbackId++; + require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); + Callback memory callback = callbacks[callbackId]; + (bool success, ) = callback.callback.call{value: callback.value}(callback.data); + if (success) { + delete callbacks[callbackId]; + } + } +} \ No newline at end of file diff --git a/contracts/src/system/SystemDeployer.sol b/contracts/src/system/SystemDeployer.sol index 1a5e9ff76..6678a2406 100644 --- a/contracts/src/system/SystemDeployer.sol +++ b/contracts/src/system/SystemDeployer.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {MessageBus} from "../messaging/MessageBus.sol"; import "./TransactionPostProcessor.sol"; +import {PublicCallbacks} from "./PublicCallbacks.sol"; contract SystemDeployer { event SystemContractDeployed(string name, address contractAddress); @@ -11,6 +12,7 @@ contract SystemDeployer { constructor(address eoaAdmin) { deployAnalyzer(eoaAdmin); deployMessageBus(eoaAdmin); + deployPublicCallbacks(eoaAdmin); } function deployAnalyzer(address eoaAdmin) internal { @@ -29,6 +31,14 @@ contract SystemDeployer { emit SystemContractDeployed("MessageBus", messageBusProxy); } + function deployPublicCallbacks(address eoaAdmin) internal { + PublicCallbacks publicCallbacks = new PublicCallbacks(); + bytes memory callData = abi.encodeWithSelector(publicCallbacks.initialize.selector); + address publicCallbacksProxy = deployProxy(address(publicCallbacks), eoaAdmin, callData); + + emit SystemContractDeployed("PublicCallbacks", publicCallbacksProxy); + } + function deployProxy(address _logic, address _admin, bytes memory _data) internal returns (address proxyAddress) { TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( _logic, // Address of the logic contract diff --git a/go/common/types.go b/go/common/types.go index e714082a2..ae293441c 100644 --- a/go/common/types.go +++ b/go/common/types.go @@ -189,3 +189,7 @@ func (cf *ChainFork) String() string { return fmt.Sprintf("ChainFork{NewCanonical: %s, OldCanonical: %s, CommonAncestor: %s, CanonicalPath: %s, NonCanonicalPath: %s}", cf.NewCanonical.Hash(), cf.OldCanonical.Hash(), cf.CommonAncestor.Hash(), cf.CanonicalPath, cf.NonCanonicalPath) } + +func MaskedSender(address L2Address) L2Address { + return L2Address(common.BigToAddress(big.NewInt(0).Sub(address.Big(), big.NewInt(1)))) +} diff --git a/go/enclave/components/batch_executor.go b/go/enclave/components/batch_executor.go index 6ba9f8171..6a8a7bcad 100644 --- a/go/enclave/components/batch_executor.go +++ b/go/enclave/components/batch_executor.go @@ -249,6 +249,31 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE onBatchTxOffset = 1 } + // Create and process public callback transaction if needed + publicCallbackTx, err := executor.systemContracts.CreatePublicCallbackHandlerTransaction(ctx, stateDB) + if err != nil { + return nil, fmt.Errorf("could not create public callback transaction. Cause: %w", err) + } + + if publicCallbackTx != nil { + publicCallbackPricedTxes := common.L2PricedTransactions{ + common.L2PricedTransaction{ + Tx: publicCallbackTx, + PublishingCost: big.NewInt(0), + FromSelf: true, + }, + } + publicCallbackSuccessfulTx, _, publicCallbackTxResult, err := executor.processTransactions(ctx, batch, len(successfulTxs)+onBatchTxOffset, publicCallbackPricedTxes, stateDB, context.ChainConfig, true) + if err != nil { + return nil, fmt.Errorf("could not process public callback transaction. Cause: %w", err) + } + // Ensure the public callback transaction is successful. It should NEVER fail. + if err = executor.verifySyntheticTransactionsSuccess(publicCallbackPricedTxes, publicCallbackSuccessfulTx, publicCallbackTxResult); err != nil { + return nil, fmt.Errorf("batch computation failed due to public callback reverting. Cause: %w", err) + } + onBatchTxOffset++ + } + ccSuccessfulTxs, _, ccTxResults, err := executor.processTransactions(ctx, batch, len(successfulTxs)+onBatchTxOffset, syntheticTransactions, stateDB, context.ChainConfig, true) if err != nil { return nil, err diff --git a/go/enclave/core/utils.go b/go/enclave/core/utils.go index 1cfedf109..494348004 100644 --- a/go/enclave/core/utils.go +++ b/go/enclave/core/utils.go @@ -61,7 +61,7 @@ func LogMethodDuration(logger gethlog.Logger, stopWatch *measure.Stopwatch, msg } // GetTxSigner returns the address that signed a transaction -func GetTxSigner(tx *common.L2Tx) (gethcommon.Address, error) { +func GetExternalTxSigner(tx *types.Transaction) (gethcommon.Address, error) { from, err := types.Sender(types.LatestSignerForChainID(tx.ChainId()), tx) if err != nil { return gethcommon.Address{}, fmt.Errorf("could not recover sender for transaction. Cause: %w", err) @@ -69,3 +69,16 @@ func GetTxSigner(tx *common.L2Tx) (gethcommon.Address, error) { return from, nil } + +func GetTxSigner(tx *common.L2PricedTransaction) (gethcommon.Address, error) { + if tx.FromSelf { + return common.MaskedSender(*tx.Tx.To()), nil + } + + from, err := types.Sender(types.LatestSignerForChainID(tx.Tx.ChainId()), tx.Tx) + if err != nil { + return gethcommon.Address{}, fmt.Errorf("could not recover sender for transaction. Cause: %w", err) + } + + return from, nil +} diff --git a/go/enclave/crosschain/message_bus_manager.go b/go/enclave/crosschain/message_bus_manager.go index 5dd139021..cdf9b5ec9 100644 --- a/go/enclave/crosschain/message_bus_manager.go +++ b/go/enclave/crosschain/message_bus_manager.go @@ -10,7 +10,6 @@ import ( "github.com/holiman/uint256" "github.com/ten-protocol/go-ten/go/enclave/core" - "github.com/ten-protocol/go-ten/go/enclave/evm" "github.com/ten-protocol/go-ten/go/enclave/system" "github.com/ten-protocol/go-ten/go/enclave/storage" @@ -59,7 +58,7 @@ func NewObscuroMessageBusManager( } func (m *MessageBusManager) IsSyntheticTransaction(transaction *common.L2Tx) bool { - sender, err := core.GetTxSigner(transaction) + sender, err := core.GetExternalTxSigner(transaction) if err != nil { return false } @@ -222,7 +221,7 @@ func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, mes // Get current nonce for this stateDB. // There can be forks thus we cannot trust the wallet. - startingNonce := rollupState.GetNonce(evm.MaskedSender(*m.messageBusAddress)) + startingNonce := rollupState.GetNonce(common.MaskedSender(*m.messageBusAddress)) signedTransactions := make(types.Transactions, 0) for idx, message := range messages { diff --git a/go/enclave/evm/evm_facade.go b/go/enclave/evm/evm_facade.go index e6f0c1651..2d23bc239 100644 --- a/go/enclave/evm/evm_facade.go +++ b/go/enclave/evm/evm_facade.go @@ -57,6 +57,9 @@ func ExecuteTransactions( logger gethlog.Logger, ) (map[common.TxHash]*core.TxExecResult, error) { chain, vmCfg := initParams(storage, gethEncodingService, config, noBaseFee, logger) + if noBaseFee { + batchGasLimit = params.MaxGasLimit + } gp := gethcore.GasPool(batchGasLimit) zero := uint64(0) usedGas := &zero @@ -67,6 +70,9 @@ func ExecuteTransactions( logger.Error("Could not convert to eth header", log.ErrKey, err) return nil, err } + if noBaseFee { + ethHeader.GasLimit = batchGasLimit + } hash := header.Hash() @@ -132,7 +138,7 @@ func executeTransaction( ) *core.TxExecResult { var createdContracts []*gethcommon.Address rules := cc.Rules(big.NewInt(0), true, 0) - from, err := core.GetTxSigner(t.Tx) + from, err := core.GetTxSigner(&t) if err != nil { return &core.TxExecResult{Tx: t.Tx, Err: err} } diff --git a/go/enclave/evm/transaction_overlay.go b/go/enclave/evm/transaction_overlay.go index bf4feee3c..c7d850647 100644 --- a/go/enclave/evm/transaction_overlay.go +++ b/go/enclave/evm/transaction_overlay.go @@ -3,7 +3,6 @@ package evm import ( "math/big" - gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" @@ -11,10 +10,6 @@ import ( "github.com/ten-protocol/go-ten/go/common" ) -func MaskedSender(address gethcommon.Address) gethcommon.Address { - return gethcommon.BigToAddress(big.NewInt(0).Sub(address.Big(), big.NewInt(1))) -} - // TransactionToMessageWithOverrides is used to convert a transaction to a message to be applied to the evm. // Overrides can change how stuff in the message is derived, e.g. the sender. This is useful for synthetic transactions, // where we do not want to do signature validation or have a private key. @@ -26,7 +21,7 @@ func TransactionToMessageWithOverrides( // Override from can be used for calling system contracts from underivable addresses like all zeroes if tx.FromSelf { msg := TransactionToMessageNoSender(tx.Tx, header.BaseFee) - msg.From = MaskedSender(*msg.To) + msg.From = common.MaskedSender(*msg.To) return msg, nil } return core.TransactionToMessage(tx.Tx, types.MakeSigner(config, header.Number, header.Time), header.BaseFee) diff --git a/go/enclave/rpc/GetTransaction.go b/go/enclave/rpc/GetTransaction.go index b0e15bd8f..9cbb474a1 100644 --- a/go/enclave/rpc/GetTransaction.go +++ b/go/enclave/rpc/GetTransaction.go @@ -41,7 +41,7 @@ func GetTransactionExecute(builder *CallBuilder[gethcommon.Hash, RpcTransaction] return err } - sender, err := core.GetTxSigner(tx) + sender, err := core.GetExternalTxSigner(tx) if err != nil { return fmt.Errorf("could not recover the tx %s sender. Cause: %w", tx.Hash(), err) } diff --git a/go/enclave/storage/storage.go b/go/enclave/storage/storage.go index 852d1ecc6..4dcf9d942 100644 --- a/go/enclave/storage/storage.go +++ b/go/enclave/storage/storage.go @@ -580,7 +580,7 @@ func (s *storageImpl) handleTxSendersAndReceivers(ctx context.Context, batch *co toContracts := make([]*uint64, len(batch.Transactions)) // insert the tx signers as externally owned accounts for i, tx := range batch.Transactions { - sender, err := core.GetTxSigner(tx) + sender, err := core.GetExternalTxSigner(tx) if err != nil { return nil, nil, fmt.Errorf("could not read tx sender. Cause: %w", err) } diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index 1c0512ac6..6d12f5eb6 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -11,26 +11,35 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" gethlog "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ten-protocol/go-ten/contracts/generated/PublicCallbacks" "github.com/ten-protocol/go-ten/contracts/generated/TransactionPostProcessor" "github.com/ten-protocol/go-ten/contracts/generated/ZenBase" "github.com/ten-protocol/go-ten/go/common" "github.com/ten-protocol/go-ten/go/enclave/core" - "github.com/ten-protocol/go-ten/go/enclave/evm" "github.com/ten-protocol/go-ten/go/enclave/storage" "github.com/ten-protocol/go-ten/go/wallet" ) var ( transactionPostProcessorABI, _ = abi.JSON(strings.NewReader(TransactionPostProcessor.TransactionPostProcessorMetaData.ABI)) + publicCallbacksABI, _ = abi.JSON(strings.NewReader(PublicCallbacks.PublicCallbacksMetaData.ABI)) ErrNoTransactions = fmt.Errorf("no transactions") ) type SystemContractCallbacks interface { + // Getters GetOwner() gethcommon.Address + PublicCallbackHandler() *gethcommon.Address + TransactionPostProcessor() *gethcommon.Address + + // Initialization Initialize(batch *core.Batch, receipts types.Receipts, msgBusManager SystemContractsInitializable) error Load() error + + // Usage CreateOnBatchEndTransaction(ctx context.Context, stateDB *state.StateDB, transactions common.L2Transactions, receipts types.Receipts) (*types.Transaction, error) - TransactionPostProcessor() *gethcommon.Address + CreatePublicCallbackHandlerTransaction(ctx context.Context, stateDB *state.StateDB) (*types.Transaction, error) VerifyOnBlockReceipt(transactions common.L2Transactions, receipt *types.Receipt) (bool, error) } @@ -42,6 +51,7 @@ type systemContractCallbacks struct { transactionsPostProcessorAddress *gethcommon.Address ownerWallet wallet.Wallet storage storage.Storage + systemAddresses SystemContractAddresses logger gethlog.Logger } @@ -52,6 +62,7 @@ func NewSystemContractCallbacks(ownerWallet wallet.Wallet, storage storage.Stora ownerWallet: ownerWallet, logger: logger, storage: storage, + systemAddresses: make(SystemContractAddresses), } } @@ -63,6 +74,10 @@ func (s *systemContractCallbacks) GetOwner() gethcommon.Address { return s.ownerWallet.Address() } +func (s *systemContractCallbacks) PublicCallbackHandler() *gethcommon.Address { + return s.systemAddresses["PublicCallbacks"] +} + func (s *systemContractCallbacks) Load() error { s.logger.Info("Load: Initializing system contracts") @@ -105,6 +120,7 @@ func (s *systemContractCallbacks) initializeRequiredAddresses(addresses SystemCo } s.transactionsPostProcessorAddress = addresses["TransactionsPostProcessor"] + s.systemAddresses = addresses return nil } @@ -138,6 +154,34 @@ func (s *systemContractCallbacks) Initialize(batch *core.Batch, receipts types.R return s.initializeRequiredAddresses(addresses) } +func (s *systemContractCallbacks) CreatePublicCallbackHandlerTransaction(ctx context.Context, l2State *state.StateDB) (*types.Transaction, error) { + if s.PublicCallbackHandler() == nil { + s.logger.Debug("CreatePublicCallbackHandlerTransaction: PublicCallbackHandler is nil, skipping transaction creation") + return nil, nil + } + + nonceForSyntheticTx := l2State.GetNonce(common.MaskedSender(*s.PublicCallbackHandler())) + s.logger.Debug("CreatePublicCallbackHandlerTransaction: Retrieved nonce for synthetic transaction", "nonce", nonceForSyntheticTx) + + data, err := publicCallbacksABI.Pack("executeNextCallback") + if err != nil { + s.logger.Error("CreatePublicCallbackHandlerTransaction: Failed packing executeNextCallback data", "error", err) + return nil, fmt.Errorf("failed packing executeNextCallback() %w", err) + } + + tx := &types.LegacyTx{ + Nonce: nonceForSyntheticTx, + Value: gethcommon.Big0, + Gas: params.MaxGasLimit, + Data: data, + To: s.PublicCallbackHandler(), + } + + formedTx := types.NewTx(tx) + s.logger.Info("CreatePublicCallbackHandlerTransaction: Successfully created transaction", "transactionHash", formedTx.Hash().Hex()) + return formedTx, nil +} + func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Context, l2State *state.StateDB, transactions common.L2Transactions, receipts types.Receipts) (*types.Transaction, error) { if s.transactionsPostProcessorAddress == nil { s.logger.Debug("CreateOnBatchEndTransaction: TransactionsPostProcessorAddress is nil, skipping transaction creation") @@ -149,7 +193,7 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex return nil, ErrNoTransactions } - nonceForSyntheticTx := l2State.GetNonce(evm.MaskedSender(*s.transactionsPostProcessorAddress)) + nonceForSyntheticTx := l2State.GetNonce(common.MaskedSender(*s.transactionsPostProcessorAddress)) s.logger.Debug("CreateOnBatchEndTransaction: Retrieved nonce for synthetic transaction", "nonce", nonceForSyntheticTx) solidityTransactions := make([]TransactionPostProcessor.StructsTransaction, 0) @@ -187,7 +231,7 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex transaction.To = gethcommon.Address{} // Zero address - contract deployment } - sender, err := core.GetTxSigner(tx) + sender, err := core.GetExternalTxSigner(tx) if err != nil { s.logger.Error("CreateOnBatchEndTransaction: Failed to recover sender address", "error", err, "transactionHash", tx.Hash().Hex()) return nil, fmt.Errorf("failed to recover sender address: %w", err) @@ -207,21 +251,15 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex tx := &types.LegacyTx{ Nonce: nonceForSyntheticTx, Value: gethcommon.Big0, - Gas: 500_000_000, + Gas: params.MaxGasLimit, GasPrice: gethcommon.Big0, // Synthetic transactions are on the house. Or the house. Data: data, To: s.transactionsPostProcessorAddress, } - s.logger.Debug("CreateOnBatchEndTransaction: Signing transaction", "to", s.transactionsPostProcessorAddress.Hex(), "nonce", nonceForSyntheticTx) - signedTx, err := s.ownerWallet.SignTransaction(tx) - if err != nil { - s.logger.Error("CreateOnBatchEndTransaction: Failed signing transaction", "error", err) - return nil, fmt.Errorf("failed signing transaction %w", err) - } - - s.logger.Info("CreateOnBatchEndTransaction: Successfully created signed transaction", "transactionHash", signedTx.Hash().Hex()) - return signedTx, nil + formedTx := types.NewTx(tx) + s.logger.Info("CreateOnBatchEndTransaction: Successfully created signed transaction", "transactionHash", formedTx.Hash().Hex()) + return formedTx, nil } func (s *systemContractCallbacks) VerifyOnBlockReceipt(transactions common.L2Transactions, receipt *types.Receipt) (bool, error) { From b70a9ec5beffa99fda036d1970b2824c3ef1d0ad Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 17:17:17 +0200 Subject: [PATCH 02/19] Upgraded contract. --- .../ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin | 2 +- .../ERC1967/ERC1967Utils.sol/ERC1967Utils.bin | 2 +- .../transparent/ProxyAdmin.sol/ProxyAdmin.bin | 2 +- .../TransparentUpgradeableProxy.bin | 2 +- .../ERC20/utils/SafeERC20.sol/SafeERC20.bin | 2 +- .../contracts/utils/Address.sol/Address.bin | 2 +- .../utils/StorageSlot.sol/StorageSlot.bin | 2 +- .../contracts/utils/Strings.sol/Strings.bin | 2 +- .../utils/cryptography/ECDSA.sol/ECDSA.bin | 2 +- .../MerkleProof.sol/MerkleProof.bin | 2 +- .../MessageHashUtils.sol/MessageHashUtils.bin | 2 +- .../contracts/utils/math/Math.sol/Math.bin | 2 +- .../utils/math/SignedMath.sol/SignedMath.bin | 2 +- .../L1/ObscuroBridge.sol/ObscuroBridge.bin | 2 +- .../L2/EthereumBridge.sol/EthereumBridge.bin | 2 +- .../ConstantSupplyERC20.bin | 2 +- .../src/common/ObsERC20.sol/ObsERC20.bin | 2 +- .../common/WrappedERC20.sol/WrappedERC20.bin | 2 +- .../ManagementContract.bin | 2 +- .../MerkleTreeMessageBus.bin | 2 +- .../messaging/MessageBus.sol/MessageBus.bin | 2 +- .../CrossChainMessenger.bin | 2 +- .../exported/src/system/Logger.sol/Logger.bin | 2 +- .../SystemDeployer.sol/SystemDeployer.bin | 2 +- .../src/system/Transaction.sol/Structs.bin | 2 +- .../TransactionPostProcessor.bin | 2 +- .../GasConsumerBalance.bin | 2 +- .../exported/src/zen/ZenBase.sol/ZenBase.bin | 2 +- .../src/zen/ZenTestnet.sol/ZenTestnet.bin | 2 +- contracts/generated/Address/Address.go | 2 +- .../ConstantSupplyERC20.go | 2 +- .../CrossChainMessenger.go | 2 +- contracts/generated/ECDSA/ECDSA.go | 2 +- .../generated/ERC1967Proxy/ERC1967Proxy.go | 2 +- .../generated/ERC1967Utils/ERC1967Utils.go | 2 +- .../EthereumBridge/EthereumBridge.go | 2 +- .../GasConsumerBalance/GasConsumerBalance.go | 2 +- contracts/generated/Logger/Logger.go | 2 +- .../ManagementContract/ManagementContract.go | 2 +- contracts/generated/Math/Math.go | 2 +- .../generated/MerkleProof/MerkleProof.go | 2 +- .../MerkleTreeMessageBus.go | 2 +- contracts/generated/MessageBus/MessageBus.go | 2 +- contracts/generated/ObsERC20/ObsERC20.go | 2 +- .../generated/ObscuroBridge/ObscuroBridge.go | 2 +- contracts/generated/ProxyAdmin/ProxyAdmin.go | 2 +- .../PublicCallbacks/PublicCallbacks.go | 57 +++++++++++++------ contracts/generated/SafeERC20/SafeERC20.go | 2 +- contracts/generated/Strings/Strings.go | 2 +- .../SystemDeployer/SystemDeployer.go | 2 +- .../TransactionPostProcessor.go | 2 +- .../TransparentUpgradeableProxy.go | 2 +- .../generated/WrappedERC20/WrappedERC20.go | 2 +- contracts/generated/ZenBase/ZenBase.go | 2 +- contracts/generated/ZenTestnet/ZenTestnet.go | 2 +- contracts/hardhat.config.ts | 2 +- contracts/src/system/PublicCallbacks.sol | 44 ++++++++++++-- 57 files changed, 133 insertions(+), 78 deletions(-) diff --git a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin index d7bcdbb3f..8c9003d4f 100644 --- a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin +++ b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin @@ -1 +1 @@ -60806040526040516104d53803806104d58339810160408190526100229161036e565b61002c8282610033565b5050610410565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610182565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf91906103d6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516101269190610406565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a3565b925050505b92915050565b34156101a15760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b8576101b3826101f9565b6101f2565b81511580156101cf57506001600160a01b0384163b155b156101ef5783604051639996b31560e01b81526004016100bf91906103d6565b50805b9392505050565b8051156102095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b60006001600160a01b03821661017c565b61023f81610225565b811461022257600080fd5b805161017c81610236565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561029057610290610255565b6040525050565b60006102a260405190565b90506102ae828261026b565b919050565b60006001600160401b038211156102cc576102cc610255565b601f19601f83011660200192915050565b60005b838110156102f85781810151838201526020016102e0565b50506000910152565b600061031461030f846102b3565b610297565b90508281526020810184848401111561032f5761032f600080fd5b61033a8482856102dd565b509392505050565b600082601f83011261035657610356600080fd5b8151610366848260208601610301565b949350505050565b6000806040838503121561038457610384600080fd5b6000610390858561024a565b602085015190935090506001600160401b038111156103b1576103b1600080fd5b6103bd85828601610342565b9150509250929050565b6103d081610225565b82525050565b6020810161017c82846103c7565b60006103ee825190565b6103fc8185602086016102dd565b9290920192915050565b61017c81836103e4565b60b78061041e6000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea2646970667358221220af0ad56f192a7d1bfa60e5538e4a309664aeb1af6cdbcf5ffe7d317ac444c19264736f6c63430008150033 \ No newline at end of file +60806040526040516104c83803806104c883398101604081905261002291610365565b61002c8282610033565b5050610403565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610182565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf91906103c9565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012691906103f9565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a3565b925050505b92915050565b34156101a15760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b8576101b3826101f9565b6101f2565b81511580156101cf57506001600160a01b0384163b155b156101ef5783604051639996b31560e01b81526004016100bf91906103c9565b50805b9392505050565b8051156102095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b60006001600160a01b03821661017c565b61023f81610225565b811461022257600080fd5b805161017c81610236565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561029057610290610255565b6040525050565b60006102a260405190565b90506102ae828261026b565b919050565b60006001600160401b038211156102cc576102cc610255565b601f19601f83011660200192915050565b60005b838110156102f85781810151838201526020016102e0565b50506000910152565b600061031461030f846102b3565b610297565b905082815283838301111561032b5761032b600080fd5b6101f28360208301846102dd565b600082601f83011261034d5761034d600080fd5b815161035d848260208601610301565b949350505050565b6000806040838503121561037b5761037b600080fd5b610385848461024a565b60208401519092506001600160401b038111156103a4576103a4600080fd5b6103b085828601610339565b9150509250929050565b6103c381610225565b82525050565b6020810161017c82846103ba565b60006103e1825190565b6103ef8185602086016102dd565b9290920192915050565b61017c81836103d7565b60b7806104116000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea264697066735822122066d3d78a32860920cee3e1088ebb8679b983ca693d9bf0e5254c68f2d35e4d1364736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin index 4809aae8f..a8f4af4e1 100644 --- a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin +++ b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c8743ddfc5db36f715983637591eefdb90bb3bd861ff75e197f8bfa9b46e10a64736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220119e23d3037aca42a1fe273a94ec7561409ce1c2bff988010f652b59a5870b8864736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin b/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin index c5631d853..a46a2aa45 100644 --- a/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin +++ b/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033 \ No newline at end of file +608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin b/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin index 8ae56908d..4152ad971 100644 --- a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin +++ b/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin @@ -1 +1 @@ -60a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103 \ No newline at end of file +60a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin b/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin index f36348159..f37e6f03c 100644 --- a/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin +++ b/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bfc23a0f53ebed26b1686f1a14e3c95322dd51ff86eb83ade06e6f6cebf9894a64736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220229877c421e9e3124252435a5c43b85b16e5641b8a9e7f324538707dc167719d64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin b/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin index cbb7db0cc..d0749f626 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d74e230a1c3698413be30397c8e30a7647b12e3f7cd265bc7728b971a53935b464736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e6433e77b77d7f243f1afe2a29c6dd689e492ac368400ed7ccecd0f7cdb49c0964736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin b/contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin index 9bd5df46d..d4c3afaaa 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bf78855439f1f7306e2b15b6291a9e9c166caa9d9d9edc46db11645d0428274864736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122018378492121da604a072d6957bb77cff105810cb3788af4f64cdc4144375712d64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin b/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin index fb9e095e4..c8d231930 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203651aa30fb1f5f18cc2014cc59e9e9021d87428d65aa7e6b2376cc1a6bcf85ba64736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c57deb36e4cf781caeca4659dcadf25b73810da016ae9d262073c51b249373d464736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin b/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin index 2e224492f..82c458bee 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207b9be294925ae7a4b046c2ea4eabd9690441e56d3c593a7fa370449ab2dc9acb64736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c608f31ab95dd3b5ce51dc7fda8d8594f29d5172a355d98cbccb0212cf5c103b64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin b/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin index cccf376bd..1d4d2bd59 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b03739715b97b8cd939533363ffa4c21e9ac592f7e17a0f844889d2235c2a21264736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201932f27795b64645664d78ae025beac1daff12570a84e07cd61f85cdc5a46ce864736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin b/contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin index 632b54277..0fa68715c 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122044f7a60e98843713a53f4e1660e640a422f094d824eb001540a39a9c03e622b464736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122080d60d3b8da7a9693a8187b90a6a885a7af674926bcf30e29c04a211e3f2573064736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin b/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin index 8aa0f6ac5..128f3f703 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208055b3213f078c05f41b14d45f592bf02a523f3474c978b794f77f26a61bed6264736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220414fb1f0abf0470c4bfc889731211af53a844ce081ed2010bb259382b2d110fd64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin b/contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin index 74d610a0c..f6262d3db 100644 --- a/contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin +++ b/contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b789ea8d9ba7a194b7d91f3b048352a2c4fd22891cf27790b953ca49a6e4fe3864736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa894d47e0b47753da58c993835c3a10cd9c51f5abc94eade559e96506320e3764736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin b/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin index e09d36b2e..1f76aeaa9 100644 --- a/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin +++ b/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin @@ -1 +1 @@ -60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50611b84806100306000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103b4578063d547741f146103d4578063e4c3ebc7146103f457600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611320565b610428565b6040516101769190611353565b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004611386565b610491565b005b61019f6101af366004611386565b6104eb565b3480156101c057600080fd5b506101e46101cf3660046113b8565b60009081526002602052604090206001015490565b60405161017691906113df565b3480156101fd57600080fd5b5061019f61020c3660046113ed565b6105f6565b34801561021d57600080fd5b5061019f61022c3660046113ed565b610621565b34801561023d57600080fd5b5061019f61024c36600461147c565b610672565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a0366004611386565b610737565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f4366004611386565b61078b565b34801561030557600080fd5b5061019f61031436600461150c565b610866565b34801561032557600080fd5b506101696103343660046113ed565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a366004611386565b610980565b34801561038b57600080fd5b506101e4600081565b3480156103a057600080fd5b5061019f6103af36600461150c565b6109d4565b3480156103c057600080fd5b5061019f6103cf366004611386565b610ac3565b3480156103e057600080fd5b5061019f6103ef3660046113ed565b610c5c565b34801561040057600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061048b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104bb81610c81565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105145760405162461bcd60e51b815260040161050b90611590565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b031681525060405160200161054491906115c8565b60408051601f19818403018152919052600354909150610573906001600160a01b03168260025b600080610c8e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105c090869083906004016115d6565b6000604051808303818588803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461061181610c81565b61061b8383610d9a565b50505050565b6001600160a01b0381163314610663576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066d8282610e48565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069c81610c81565b6106c67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d9a565b50600063458ffd6360e01b87878787876040516024016106ea95949392919061161d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ed906001600160a01b031682600161056b565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561076181610c81565b61066d7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e48565b610793610ecf565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190611669565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108975760405162461bcd60e51b815260040161050b906116e4565b806001600160a01b03166108a9610f38565b6001600160a01b0316146108cf5760405162461bcd60e51b815260040161050b9061174c565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff161561091f5761091a848484610fb5565b61061b565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff16156109685761091a82610fc0565b60405162461bcd60e51b815260040161050b906117b4565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109aa81610c81565b61066d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d9a565b600082116109f45760405162461bcd60e51b815260040161050b906117f6565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a4b5760405162461bcd60e51b815260040161050b90611806565b610a5783333085611032565b60006383bece4d60e01b848484604051602401610a769392919061188d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061061b906001600160a01b031682600061056b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b0e5750825b905060008267ffffffffffffffff166001148015610b2b5750303b155b905081158015610b39575080155b15610b70576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ba457845468ff00000000000000001916680100000000000000001785555b610bad8661078b565b610bd77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d9a565b50610c037fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d9a565b508315610c5457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c4b906001906118d0565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c7781610c81565b61061b8383610e48565b610c8b813361108c565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cc4919061197d565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610d17836119bd565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610d5794939291906119f5565b6020604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611a55565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e405760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610df83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161048b565b50600061048b565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e405760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161048b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f36576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb09190611669565b905090565b61066d8382846110ec565b6040516000906001600160a01b038316908281818181865af19150503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b505090508061102e5760405162461bcd60e51b815260040161050b90611aa8565b5050565b61061b84856001600160a01b03166323b872dd86868660405160240161105a93929190611ab8565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611112565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff1661102e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161050b9291906115d6565b61066d83846001600160a01b031663a9059cbb858560405160240161105a9291906115d6565b60006111276001600160a01b03841683611185565b9050805160001415801561114c57508080602001905181019061114a9190611af3565b155b1561066d57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b60606111938383600061119a565b9392505050565b6060814710156111d857306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b600080856001600160a01b031684866040516111f49190611b44565b60006040518083038185875af1925050503d8060008114611231576040519150601f19603f3d011682016040523d82523d6000602084013e611236565b606091505b5091509150611246868383611250565b9695505050505050565b60608261126557611260826112bc565b611193565b815115801561127c57506001600160a01b0384163b155b156112b557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b5080611193565b8051156112cc5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c8b57600080fd5b803561048b816112fe565b60006020828403121561133557611335600080fd5b60006113418484611315565b949350505050565b8015155b82525050565b6020810161048b8284611349565b60006001600160a01b03821661048b565b61130a81611361565b803561048b81611372565b60006020828403121561139b5761139b600080fd5b6000611341848461137b565b8061130a565b803561048b816113a7565b6000602082840312156113cd576113cd600080fd5b600061134184846113ad565b8061134d565b6020810161048b82846113d9565b6000806040838503121561140357611403600080fd5b600061140f85856113ad565b92505060206114208582860161137b565b9150509250929050565b60008083601f84011261143f5761143f600080fd5b50813567ffffffffffffffff81111561145a5761145a600080fd5b60208301915083600182028301111561147557611475600080fd5b9250929050565b60008060008060006060868803121561149757611497600080fd5b60006114a3888861137b565b955050602086013567ffffffffffffffff8111156114c3576114c3600080fd5b6114cf8882890161142a565b9450945050604086013567ffffffffffffffff8111156114f1576114f1600080fd5b6114fd8882890161142a565b92509250509295509295909350565b60008060006060848603121561152457611524600080fd5b6000611530868661137b565b9350506020611541868287016113ad565b92505060406115528682870161137b565b9150509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161048b8161155c565b61134d81611361565b80516115b583826113d9565b50602081015161066d60208401826115a0565b6040810161048b82846115a9565b604081016115e482856115a0565b61119360208301846113d9565b82818337506000910152565b8183526020830192506116118284836115f1565b50601f01601f19160190565b6060810161162b82886115a0565b818103602083015261163e8186886115fd565b905081810360408301526116538184866115fd565b979650505050505050565b805161048b81611372565b60006020828403121561167e5761167e600080fd5b6000611341848461165e565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161048b8161168a565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116de565b6020808252810161048b816116f4565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116de565b6020808252810161048b8161175c565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061158a565b6020808252810161048b816117c4565b6020808252810161048b81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b6060810161189b82866115a0565b6118a860208301856113d9565b61134160408301846115a0565b600067ffffffffffffffff821661048b565b61134d816118b5565b6020810161048b82846118c7565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b600061190c825190565b8084526020840193506119238185602086016118de565b601f01601f19169290920192915050565b8051600090606084019061194885826115a0565b50602083015184820360208601526119608282611902565b915050604083015161197560408601826113d9565b509392505050565b602080825281016111938184611934565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119d9576119d961198e565b5060010190565b63ffffffff811661134d565b60ff811661134d565b60808101611a0382876119e0565b611a1060208301866119e0565b8181036040830152611a228185611902565b9050611a3160608301846119ec565b95945050505050565b67ffffffffffffffff811661130a565b805161048b81611a3a565b600060208284031215611a6a57611a6a600080fd5b60006113418484611a4a565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061158a565b6020808252810161048b81611a76565b60608101611ac682866115a0565b611ad360208301856115a0565b61134160408301846113d9565b80151561130a565b805161048b81611ae0565b600060208284031215611b0857611b08600080fd5b60006113418484611ae8565b6020810161048b82846115a0565b6000611b2c825190565b611b3a8185602086016118de565b9290920192915050565b61048b8183611b2256fea2646970667358221220d70bea5019f2062e22f351cd0d4cb8d9f734eac087a468eb72bff8b0aa790a6364736f6c63430008150033 \ No newline at end of file +60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611b698061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103b4578063d547741f146103d4578063e4c3ebc7146103f457600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611320565b610428565b6040516101769190611349565b60405180910390f35b34801561018b57600080fd5b5061019f61019a36600461137c565b610491565b005b61019f6101af36600461137c565b6104eb565b3480156101c057600080fd5b506101e46101cf3660046113ac565b60009081526002602052604090206001015490565b60405161017691906113d1565b3480156101fd57600080fd5b5061019f61020c3660046113df565b6105f6565b34801561021d57600080fd5b5061019f61022c3660046113df565b610621565b34801561023d57600080fd5b5061019f61024c366004611469565b610672565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a036600461137c565b610737565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f436600461137c565b61078b565b34801561030557600080fd5b5061019f6103143660046114f6565b610866565b34801561032557600080fd5b506101696103343660046113df565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a36600461137c565b610980565b34801561038b57600080fd5b506101e4600081565b3480156103a057600080fd5b5061019f6103af3660046114f6565b6109d4565b3480156103c057600080fd5b5061019f6103cf36600461137c565b610ac3565b3480156103e057600080fd5b5061019f6103ef3660046113df565b610c5c565b34801561040057600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061048b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104bb81610c81565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105145760405162461bcd60e51b815260040161050b90611573565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b031681525060405160200161054491906115ab565b60408051601f19818403018152919052600354909150610573906001600160a01b03168260025b600080610c8e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105c090869083906004016115b9565b6000604051808303818588803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461061181610c81565b61061b8383610d9a565b50505050565b6001600160a01b0381163314610663576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066d8282610e48565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069c81610c81565b6106c67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d9a565b50600063458ffd6360e01b87878787876040516024016106ea959493929190611600565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ed906001600160a01b031682600161056b565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561076181610c81565b61066d7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e48565b610793610ecf565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610836919061164c565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108975760405162461bcd60e51b815260040161050b906116c5565b806001600160a01b03166108a9610f38565b6001600160a01b0316146108cf5760405162461bcd60e51b815260040161050b9061172d565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff161561091f5761091a848484610fb5565b61061b565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff16156109685761091a82610fc0565b60405162461bcd60e51b815260040161050b90611795565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109aa81610c81565b61066d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d9a565b600082116109f45760405162461bcd60e51b815260040161050b906117d7565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a4b5760405162461bcd60e51b815260040161050b906117e7565b610a5783333085611032565b60006383bece4d60e01b848484604051602401610a769392919061186e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061061b906001600160a01b031682600061056b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b0e5750825b905060008267ffffffffffffffff166001148015610b2b5750303b155b905081158015610b39575080155b15610b70576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ba457845468ff00000000000000001916680100000000000000001785555b610bad8661078b565b610bd77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d9a565b50610c037fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d9a565b508315610c5457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c4b906001906118b9565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c7781610c81565b61061b8383610e48565b610c8b813361108c565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cc49190611966565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610d17836119a6565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610d5794939291906119de565b6020604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611a3e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e405760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610df83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161048b565b50600061048b565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e405760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161048b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f36576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb0919061164c565b905090565b61066d8382846110ec565b6040516000906001600160a01b038316908281818181865af19150503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b505090508061102e5760405162461bcd60e51b815260040161050b90611a8f565b5050565b61061b84856001600160a01b03166323b872dd86868660405160240161105a93929190611a9f565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611112565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff1661102e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161050b9291906115b9565b61066d83846001600160a01b031663a9059cbb858560405160240161105a9291906115b9565b60006111276001600160a01b03841683611185565b9050805160001415801561114c57508080602001905181019061114a9190611ada565b155b1561066d57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b60606111938383600061119a565b9392505050565b6060814710156111d857306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b600080856001600160a01b031684866040516111f49190611b29565b60006040518083038185875af1925050503d8060008114611231576040519150601f19603f3d011682016040523d82523d6000602084013e611236565b606091505b5091509150611246868383611250565b9695505050505050565b60608261126557611260826112bc565b611193565b815115801561127c57506001600160a01b0384163b155b156112b557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b5080611193565b8051156112cc5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c8b57600080fd5b803561048b816112fe565b60006020828403121561133557611335600080fd5b6111938383611315565b8015155b82525050565b6020810161048b828461133f565b60006001600160a01b03821661048b565b61130a81611357565b803561048b81611368565b60006020828403121561139157611391600080fd5b6111938383611371565b8061130a565b803561048b8161139b565b6000602082840312156113c1576113c1600080fd5b61119383836113a1565b80611343565b6020810161048b82846113cb565b600080604083850312156113f5576113f5600080fd5b6113ff84846113a1565b915061140e8460208501611371565b90509250929050565b60008083601f84011261142c5761142c600080fd5b50813567ffffffffffffffff81111561144757611447600080fd5b60208301915083600182028301111561146257611462600080fd5b9250929050565b60008060008060006060868803121561148457611484600080fd5b61148e8787611371565b9450602086013567ffffffffffffffff8111156114ad576114ad600080fd5b6114b988828901611417565b9450945050604086013567ffffffffffffffff8111156114db576114db600080fd5b6114e788828901611417565b92509250509295509295909350565b60008060006060848603121561150e5761150e600080fd5b6115188585611371565b925061152785602086016113a1565b91506115368560408601611371565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161048b8161153f565b61134381611357565b805161159883826113cb565b50602081015161066d6020840182611583565b6040810161048b828461158c565b604081016115c78285611583565b61119360208301846113cb565b82818337506000910152565b8183526020830192506115f48284836115d4565b50601f01601f19160190565b6060810161160e8288611583565b81810360208301526116218186886115e0565b905081810360408301526116368184866115e0565b979650505050505050565b805161048b81611368565b60006020828403121561166157611661600080fd5b6111938383611641565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161048b8161166b565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116bf565b6020808252810161048b816116d5565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116bf565b6020808252810161048b8161173d565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061156d565b6020808252810161048b816117a5565b6020808252810161048b81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b6060810161187c8286611583565b61188960208301856113cb565b6118966040830184611583565b949350505050565b600067ffffffffffffffff821661048b565b6113438161189e565b6020810161048b82846118b0565b60005b838110156118e25781810151838201526020016118ca565b50506000910152565b60006118f5825190565b80845260208401935061190c8185602086016118c7565b601f01601f19169290920192915050565b805160009060608401906119318582611583565b506020830151848203602086015261194982826118eb565b915050604083015161195e60408601826113cb565b509392505050565b60208082528101611193818461191d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119c2576119c2611977565b5060010190565b63ffffffff8116611343565b60ff8116611343565b608081016119ec82876119c9565b6119f960208301866119c9565b8181036040830152611a0b81856118eb565b9050611a1a60608301846119d5565b95945050505050565b67ffffffffffffffff811661130a565b805161048b81611a23565b600060208284031215611a5357611a53600080fd5b6111938383611a33565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061156d565b6020808252810161048b81611a5d565b60608101611aad8286611583565b611aba6020830185611583565b61189660408301846113cb565b80151561130a565b805161048b81611ac7565b600060208284031215611aef57611aef600080fd5b6111938383611acf565b6020810161048b8284611583565b6000611b11825190565b611b1f8185602086016118c7565b9290920192915050565b61048b8183611b0756fea2646970667358221220ab0817204a72d2997c2da18c911ebc59f437a7aa94279d175a683ea0568901c064736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin b/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin index 3fa09d9d3..453dd2d7f 100644 --- a/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin +++ b/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin @@ -1 +1 @@ -60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50612abd806100306000396000f3fe608060405260043610620000c65760003560e01c806383bece4d11620000735780639e405b7111620000555780639e405b711462000256578063a381c8e21462000290578063d5c6b50414620002b557620000ef565b806383bece4d14620001e35780639813c7b2146200020857620000ef565b8063458ffd6311620000a9578063458ffd631462000174578063485cc955146200019957806375cb267214620001be57620000ef565b80628d48e314620001095780631888d712146200015b57620000ef565b36620000ef5760405162461bcd60e51b8152600401620000e69062000d72565b60405180910390fd5b60405162461bcd60e51b8152600401620000e69062000dbe565b3480156200011657600080fd5b50620001436200012836600462000e09565b6004602052600090815260409020546001600160a01b031681565b60405162000152919062000e47565b60405180910390f35b620001726200016c36600462000e09565b620002fe565b005b3480156200018157600080fd5b50620001726200019336600462000eaf565b6200047e565b348015620001a657600080fd5b5062000172620001b836600462000f4b565b620005e7565b348015620001cb57600080fd5b5062000172620001dd36600462000e09565b6200075b565b348015620001f057600080fd5b50620001726200020236600462000fa2565b6200083b565b3480156200021557600080fd5b50620002476200022736600462000e09565b6001600160a01b0390811660009081526002602052604090205416151590565b60405162000152919062001003565b3480156200026357600080fd5b50620001436200027536600462000e09565b6003602052600090815260409020546001600160a01b031681565b3480156200029d57600080fd5b5062000172620002af36600462000fa2565b6200097f565b348015620002c257600080fd5b50620002ef620002d436600462000e09565b6002602052600090815260409020546001600160a01b031681565b60405162000152919062001038565b60003411620003215760405162461bcd60e51b8152600401620000e6906200107b565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b9162000377916001600160a01b03909116903490869060240162001094565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150620003f7906001600160a01b03168260005b60008062000b0b565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb903490620004469086908390600401620010c2565b6000604051808303818588803b1580156200046057600080fd5b505af115801562000475573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b0391821691163314620004b25760405162461bcd60e51b8152600401620000e69062001141565b806001600160a01b0316620004c662000c20565b6001600160a01b031614620004ef5760405162461bcd60e51b8152600401620000e690620011ac565b600085858585604051620005039062000d0a565b620005129493929190620011ec565b604051809103906000f0801580156200052f573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90620005d5908a9084908b908b908b908b9062001221565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620006335750825b905060008267ffffffffffffffff166001148015620006515750303b155b90508115801562000660575080155b1562000698576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315620006cd57845468ff00000000000000001916680100000000000000001785555b620006d8876200075b565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156200047557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906200074a9060019062001296565b60405180910390a150505050505050565b6200076562000ca0565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015620007e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080b9190620012b3565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146200086f5760405162461bcd60e51b8152600401620000e69062001141565b806001600160a01b03166200088362000c20565b6001600160a01b031614620008ac5760405162461bcd60e51b8152600401620000e690620011ac565b6001600160a01b03808516600090815260046020908152604080832054841680845260029092529091205490911680620008fa5760405162461bcd60e51b8152600401620000e69062001331565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad90620009439087908990600401620010c2565b600060405180830381600087803b1580156200095e57600080fd5b505af115801562000973573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0380841660009081526002602052604090205416620009b95760405162461bcd60e51b8152600401620000e69062001376565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb9062000a179033908790600401620010c2565b600060405180830381600087803b15801562000a3257600080fd5b505af115801562000a47573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b9262000a88929116908790879060240162001094565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260055490915062000b04906001600160a01b0316826000620003ee565b5050505050565b60006040518060600160405280876001600160a01b031681526020018681526020018481525060405160200162000b43919062001432565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff1690601462000b988362001474565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b815260040162000bda9493929190620014b1565b6020604051808303816000875af115801562000bfa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047591906200151c565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9b9190620012b3565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000d08576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611546806200154283390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810162000d848162000d18565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b6020808252810162000d848162000d8a565b60006001600160a01b03821662000d84565b62000ded8162000dd0565b811462000df957600080fd5b50565b803562000d848162000de2565b60006020828403121562000e205762000e20600080fd5b600062000e2e848462000dfc565b949350505050565b62000e418162000dd0565b82525050565b6020810162000d84828462000e36565b60008083601f84011262000e6e5762000e6e600080fd5b50813567ffffffffffffffff81111562000e8b5762000e8b600080fd5b60208301915083600182028301111562000ea85762000ea8600080fd5b9250929050565b60008060008060006060868803121562000ecc5762000ecc600080fd5b600062000eda888862000dfc565b955050602086013567ffffffffffffffff81111562000efc5762000efc600080fd5b62000f0a8882890162000e57565b9450945050604086013567ffffffffffffffff81111562000f2e5762000f2e600080fd5b62000f3c8882890162000e57565b92509250509295509295909350565b6000806040838503121562000f635762000f63600080fd5b600062000f71858562000dfc565b925050602062000f848582860162000dfc565b9150509250929050565b8062000ded565b803562000d848162000f8e565b60008060006060848603121562000fbc5762000fbc600080fd5b600062000fca868662000dfc565b935050602062000fdd8682870162000f95565b925050604062000ff08682870162000dfc565b9150509250925092565b80151562000e41565b6020810162000d84828462000ffa565b600062000d848262000dd0565b600062000d848262001013565b62000e418162001020565b6020810162000d8482846200102d565b600d8152602081017f4e6f7468696e672073656e742e000000000000000000000000000000000000008152905062000db8565b6020808252810162000d848162001048565b8062000e41565b60608101620010a4828662000e36565b620010b360208301856200108d565b62000e2e604083018462000e36565b60408101620010d2828562000e36565b620010e160208301846200108d565b9392505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e67657221000000000000000000000000000000006020820152905062000d6c565b6020808252810162000d8481620010e8565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e646572210000000000000000000000000000006020820152905062000d6c565b6020808252810162000d848162001153565b82818337506000910152565b818352602083019250620011e0828483620011be565b50601f01601f19160190565b6040808252810162001200818688620011ca565b9050818103602083015262001217818486620011ca565b9695505050505050565b6080810162001231828962000e36565b62001240602083018862000e36565b818103604083015262001255818688620011ca565b905081810360608301526200126c818486620011ca565b98975050505050505050565b600067ffffffffffffffff821662000d84565b62000e418162001278565b6020810162000d8482846200128b565b805162000d848162000de2565b600060208284031215620012ca57620012ca600080fd5b600062000e2e8484620012a6565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e210000000000000000000000000000000000000000006020820152905062000d6c565b6020808252810162000d8481620012d8565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000008152905062000db8565b6020808252810162000d848162001343565b60005b83811015620013a55781810151838201526020016200138b565b50506000910152565b6000620013b9825190565b808452602084019350620013d281856020860162001388565b601f01601f19169290920192915050565b80516000906060840190620013f9858262000e36565b5060208301518482036020860152620014138282620013ae565b91505060408301516200142a60408601826200108d565b509392505050565b60208082528101620010e18184620013e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820162001493576200149362001445565b5060010190565b63ffffffff811662000e41565b60ff811662000e41565b60808101620014c182876200149a565b620014d060208301866200149a565b8181036040830152620014e48185620013ae565b9050620014f56060830184620014a7565b95945050505050565b67ffffffffffffffff811662000ded565b805162000d8481620014fe565b600060208284031215620015335762001533600080fd5b600062000e2e84846200150f56fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001546380380620015468339810160408190526200005a916200029e565b8181818160036200006c838262000412565b5060046200007b828262000412565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620004de565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620001ac57620001ac6200016e565b6040525050565b6000620001bf60405190565b9050620001cd828262000184565b919050565b60006001600160401b03821115620001ee57620001ee6200016e565b601f19601f83011660200192915050565b60005b838110156200021c57818101518382015260200162000202565b50506000910152565b60006200023c6200023684620001d2565b620001b3565b905082815260208101848484011115620002595762000259600080fd5b62000266848285620001ff565b509392505050565b600082601f830112620002845762000284600080fd5b81516200029684826020860162000225565b949350505050565b60008060408385031215620002b657620002b6600080fd5b82516001600160401b03811115620002d157620002d1600080fd5b620002df858286016200026e565b602085015190935090506001600160401b03811115620003025762000302600080fd5b62000310858286016200026e565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200034557607f821691505b6020821081036200035a576200035a6200031a565b50919050565b6000620001686200036e8381565b90565b6200037c8362000360565b815460001960089490940293841b1916921b91909117905550565b6000620003a681848462000371565b505050565b81811015620003ca57620003c160008262000397565b600101620003ab565b5050565b601f821115620003a6576000818152602090206020601f85010481016020851015620003f75750805b6200040b6020601f860104830182620003ab565b5050505050565b81516001600160401b038111156200042e576200042e6200016e565b6200043a825462000330565b62000447828285620003ce565b506020601f8211600181146200047f5760008315620004665750848201515b600019600885021c19811660028502178555506200040b565b600084815260208120601f198516915b82811015620004b157878501518255602094850194600190920191016200048f565b5084821015620004cf5783870151600019601f87166008021c191681555b50505050600202600101905550565b61105880620004ee6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c7c565b60405180910390f35b6101876103a0565b6040516101769190610ce0565b6101696101a2366004610d27565b610432565b6002545b6040516101769190610d6a565b6101cb6101c6366004610d27565b61044a565b005b6101696101db366004610d78565b6104b4565b6101ab6101ee366004610dc8565b60009081526007602052604090206001015490565b6101cb610211366004610de9565b6104da565b60126040516101769190610e25565b6101cb610233366004610de9565b610505565b6101ab610246366004610e33565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610de9565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d27565b6105d6565b6101ab600081565b6101696102dc366004610d27565b61060a565b6101cb6102ef366004610de9565b610618565b6101ab610302366004610e54565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e8c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e8c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610eec565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f2e565b6060600480546103af90610e8c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f3e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610fa8565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610fa8565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610fa8565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610fa8565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d6a565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fde565b6001600160a01b038316610b0c578060026000828254610b01919061100f565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d6a565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6000610c6a8484610c3e565b949350505050565b8015155b82525050565b6020810161039a8284610c72565b60005b83811015610ca5578181015183820152602001610c8d565b50506000910152565b6000610cb8825190565b808452602084019350610ccf818560208601610c8a565b601f01601f19169290920192915050565b602080825281016104d38184610cae565b60006001600160a01b03821661039a565b610c3381610cf1565b803561039a81610d02565b80610c33565b803561039a81610d16565b60008060408385031215610d3d57610d3d600080fd5b6000610d498585610d0b565b9250506020610d5a85828601610d1c565b9150509250929050565b80610c76565b6020810161039a8284610d64565b600080600060608486031215610d9057610d90600080fd5b6000610d9c8686610d0b565b9350506020610dad86828701610d0b565b9250506040610dbe86828701610d1c565b9150509250925092565b600060208284031215610ddd57610ddd600080fd5b6000610c6a8484610d1c565b60008060408385031215610dff57610dff600080fd5b6000610e0b8585610d1c565b9250506020610d5a85828601610d0b565b60ff8116610c76565b6020810161039a8284610e1c565b600060208284031215610e4857610e48600080fd5b6000610c6a8484610d0b565b60008060408385031215610e6a57610e6a600080fd5b6000610e0b8585610d0b565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610ea057607f821691505b602082108103610eb257610eb2610e76565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610eb8565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ee6565b6020808252810161039a81610efc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c7681610cf1565b6020810161039a8284610f9f565b60608101610fc48286610f9f565b610fd16020830185610d64565b610c6a6040830184610d64565b60408101610fec8285610f9f565b6104d36020830184610d64565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610ff956fea264697066735822122015a37e58522ca26bdd51e6ea23c5953be6e295684d318926ea7d989d6576fe1c64736f6c63430008150033a2646970667358221220f32fa9bbc81033e4c32c93807c57829cac33e49d74d4612615588dff6d00a05564736f6c63430008150033 \ No newline at end of file +60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b5061290f8061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610271576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610cd7565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610d21565b3480156100fe57600080fd5b5061012861010d366004610d64565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610d99565b60405180910390f35b61015161014c366004610d64565b6102b4565b005b34801561015f57600080fd5b5061015161016e366004610df9565b610429565b34801561017f57600080fd5b5061015161018e366004610e86565b610583565b34801561019f57600080fd5b506101516101ae366004610d64565b6106ed565b3480156101bf57600080fd5b506101516101ce366004610ecf565b6107c8565b3480156101df57600080fd5b5061020e6101ee366004610d64565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610f20565b34801561022757600080fd5b50610128610236366004610d64565b6003602052600090815260409020546001600160a01b031681565b34801561025d57600080fd5b5061015161026c366004610ecf565b6108fd565b34801561027d57600080fd5b506102a761028c366004610d64565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610f4d565b600034116102d45760405162461bcd60e51b81526004016100d190610f8d565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b91610328916001600160a01b039091169034908690602401610fa3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526005549091506103a6906001600160a01b03168260005b600080610a7e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103f39086908390600401610fd3565b6000604051808303818588803b15801561040c57600080fd5b505af1158015610420573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b039182169116331461045a5760405162461bcd60e51b81526004016100d190611046565b806001600160a01b031661046c610b8a565b6001600160a01b0316146104925760405162461bcd60e51b81526004016100d1906110ae565b6000858585856040516104a490610c70565b6104b194939291906110ea565b604051809103906000f0801580156104cd573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610571908a9084908b908b908b908b9061111b565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105ce5750825b905060008267ffffffffffffffff1660011480156105eb5750303b155b9050811580156105f9575080155b15610630576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561066457845468ff00000000000000001916680100000000000000001785555b61066d876106ed565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561042057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106dc90600190611185565b60405180910390a150505050505050565b6106f5610c07565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610798919061119e565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146107f95760405162461bcd60e51b81526004016100d190611046565b806001600160a01b031661080b610b8a565b6001600160a01b0316146108315760405162461bcd60e51b81526004016100d1906110ae565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061087c5760405162461bcd60e51b81526004016100d190611215565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906108c39087908990600401610fd3565b600060405180830381600087803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166109345760405162461bcd60e51b81526004016100d190611257565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906109909033908790600401610fd3565b600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b926109fd9291169087908790602401610fa3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610a77906001600160a01b031682600061039e565b5050505050565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610ab49190611306565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610b0783611346565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610b47949392919061137e565b6020604051808303816000875af1158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042091906113de565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c02919061119e565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c6e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114dc806113fe83390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610ce781610c7d565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610ce781610ced565b60006001600160a01b038216610ce7565b610d4b81610d31565b8114610d5657600080fd5b50565b8035610ce781610d42565b600060208284031215610d7957610d79600080fd5b610d838383610d59565b9392505050565b610d9381610d31565b82525050565b60208101610ce78284610d8a565b60008083601f840112610dbc57610dbc600080fd5b50813567ffffffffffffffff811115610dd757610dd7600080fd5b602083019150836001820283011115610df257610df2600080fd5b9250929050565b600080600080600060608688031215610e1457610e14600080fd5b610e1e8787610d59565b9450602086013567ffffffffffffffff811115610e3d57610e3d600080fd5b610e4988828901610da7565b9450945050604086013567ffffffffffffffff811115610e6b57610e6b600080fd5b610e7788828901610da7565b92509250509295509295909350565b60008060408385031215610e9c57610e9c600080fd5b610ea68484610d59565b9150610eb58460208501610d59565b90509250929050565b80610d4b565b8035610ce781610ebe565b600080600060608486031215610ee757610ee7600080fd5b610ef18585610d59565b9250610f008560208601610ec4565b9150610f0f8560408601610d59565b90509250925092565b801515610d93565b60208101610ce78284610f18565b6000610ce782610d31565b6000610ce782610f2e565b610d9381610f39565b60208101610ce78284610f44565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610d1b565b60208082528101610ce781610f5b565b80610d93565b60608101610fb18286610d8a565b610fbe6020830185610f9d565b610fcb6040830184610d8a565b949350505050565b60408101610fe18285610d8a565b610d836020830184610f9d565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610cd1565b60208082528101610ce781610fee565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610cd1565b60208082528101610ce781611056565b82818337506000910152565b8183526020830192506110de8284836110be565b50601f01601f19160190565b604080825281016110fc8186886110ca565b905081810360208301526111118184866110ca565b9695505050505050565b608081016111298289610d8a565b6111366020830188610d8a565b81810360408301526111498186886110ca565b9050818103606083015261115e8184866110ca565b98975050505050505050565b600067ffffffffffffffff8216610ce7565b610d938161116a565b60208101610ce7828461117c565b8051610ce781610d42565b6000602082840312156111b3576111b3600080fd5b610d838383611193565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610cd1565b60208082528101610ce7816111bd565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610d1b565b60208082528101610ce781611225565b60005b8381101561128257818101518382015260200161126a565b50506000910152565b6000611295825190565b8084526020840193506112ac818560208601611267565b601f01601f19169290920192915050565b805160009060608401906112d18582610d8a565b50602083015184820360208601526112e9828261128b565b91505060408301516112fe6040860182610f9d565b509392505050565b60208082528101610d8381846112bd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820161136257611362611317565b5060010190565b63ffffffff8116610d93565b60ff8116610d93565b6080810161138c8287611369565b6113996020830186611369565b81810360408301526113ab818561128b565b90506113ba6060830184611375565b95945050505050565b67ffffffffffffffff8116610d4b565b8051610ce7816113c3565b6000602082840312156113f3576113f3600080fd5b610d8383836113d356fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220be3380d12a8a9c04f488bd6d863b29f9c1ea464ebf1b28b5c552d2e3f79e9fda64736f6c634300081c0033a2646970667358221220d25847c7c6f03a8709a552d0b6870c4d559040f42b2743311507e6b47eb837ea64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin b/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin index d78d48908..a14c7a33b 100644 --- a/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin +++ b/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162000ebb38038062000ebb833981016040819052620000349162000312565b8282600362000044838262000497565b50600462000053828262000497565b5050506200006833826200007160201b60201c565b50505062000607565b6001600160a01b038216620000a757600060405163ec442f0560e01b81526004016200009e919062000586565b60405180910390fd5b620000b560008383620000b9565b5050565b6001600160a01b038316620000e8578060026000828254620000dc9190620005ac565b909155506200014a9050565b6001600160a01b038316600090815260208190526040902054818110156200012b5783818360405163391434e360e21b81526004016200009e93929190620005c9565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001685760028054829003905562000187565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001cc9190620005f7565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620002175762000217620001d9565b6040525050565b60006200022a60405190565b9050620002388282620001ef565b919050565b60006001600160401b03821115620002595762000259620001d9565b601f19601f83011660200192915050565b60005b83811015620002875781810151838201526020016200026d565b50506000910152565b6000620002a7620002a1846200023d565b6200021e565b905082815260208101848484011115620002c457620002c4600080fd5b620002d18482856200026a565b509392505050565b600082601f830112620002ef57620002ef600080fd5b81516200030184826020860162000290565b949350505050565b80515b92915050565b6000806000606084860312156200032c576200032c600080fd5b83516001600160401b03811115620003475762000347600080fd5b6200035586828701620002d9565b602086015190945090506001600160401b03811115620003785762000378600080fd5b6200038686828701620002d9565b9250506040620003998682870162000309565b9150509250925092565b634e487b7160e01b600052602260045260246000fd5b600281046001821680620003ce57607f821691505b602082108103620003e357620003e3620003a3565b50919050565b60006200030c620003f78381565b90565b6200040583620003e9565b815460001960089490940293841b1916921b91909117905550565b60006200042f818484620003fa565b505050565b81811015620000b5576200044a60008262000420565b60010162000434565b601f8211156200042f576000818152602090206020601f850104810160208510156200047c5750805b620004906020601f86010483018262000434565b5050505050565b81516001600160401b03811115620004b357620004b3620001d9565b620004bf8254620003b9565b620004cc82828562000453565b506020601f821160018114620005045760008315620004eb5750848201515b600019600885021c198116600285021785555062000490565b600084815260208120601f198516915b8281101562000536578785015182556020948501946001909201910162000514565b5084821015620005545783870151600019601f87166008021c191681555b50505050600202600101905550565b60006001600160a01b0382166200030c565b620005808162000563565b82525050565b602081016200030c828462000575565b634e487b7160e01b600052601160045260246000fd5b808201808211156200030c576200030c62000596565b8062000580565b60608101620005d9828662000575565b620005e86020830185620005c2565b620003016040830184620005c2565b602081016200030c8284620005c2565b6108a480620006176000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610142578063a9059cbb1461014a578063dd62ed3e1461015d57600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b0610196565b6040516100bd919061063c565b60405180910390f35b6100d96100d4366004610698565b610228565b6040516100bd91906106df565b6002545b6040516100bd91906106f3565b6100d9610105366004610701565b610242565b60126040516100bd919061075a565b6100ea610127366004610768565b6001600160a01b031660009081526020819052604090205490565b6100b0610266565b6100d9610158366004610698565b610275565b6100ea61016b366004610791565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101a5906107da565b80601f01602080910402602001604051908101604052809291908181526020018280546101d1906107da565b801561021e5780601f106101f35761010080835404028352916020019161021e565b820191906000526020600020905b81548152906001019060200180831161020157829003601f168201915b5050505050905090565b600033610236818585610283565b60019150505b92915050565b600033610250858285610295565b61025b858585610322565b506001949350505050565b6060600480546101a5906107da565b600033610236818585610322565b61029083838360016103b3565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461031c578181101561030d578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016103049392919061080f565b60405180910390fd5b61031c848484840360006103b3565b50505050565b6001600160a01b0383166103655760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b0382166103a85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6102908383836104b8565b6001600160a01b0384166103f65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b0383166104395760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561031c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104aa91906106f3565b60405180910390a350505050565b6001600160a01b0383166104e35780600260008282546104d8919061085b565b9091555061055b9050565b6001600160a01b0383166000908152602081905260409020548181101561053c578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016103049392919061080f565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661057757600280548290039055610596565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105d991906106f3565b60405180910390a3505050565b60005b838110156106015781810151838201526020016105e9565b50506000910152565b6000610614825190565b80845260208401935061062b8185602086016105e6565b601f01601f19169290920192915050565b6020808252810161064d818461060a565b9392505050565b60006001600160a01b03821661023c565b61066e81610654565b811461067957600080fd5b50565b803561023c81610665565b8061066e565b803561023c81610687565b600080604083850312156106ae576106ae600080fd5b60006106ba858561067c565b92505060206106cb8582860161068d565b9150509250929050565b8015155b82525050565b6020810161023c82846106d5565b806106d9565b6020810161023c82846106ed565b60008060006060848603121561071957610719600080fd5b6000610725868661067c565b93505060206107368682870161067c565b92505060406107478682870161068d565b9150509250925092565b60ff81166106d9565b6020810161023c8284610751565b60006020828403121561077d5761077d600080fd5b6000610789848461067c565b949350505050565b600080604083850312156107a7576107a7600080fd5b60006107b3858561067c565b92505060206106cb8582860161067c565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107ee57607f821691505b602082108103610800576108006107c4565b50919050565b6106d981610654565b6060810161081d8286610806565b61082a60208301856106ed565b61078960408301846106ed565b6020810161023c8284610806565b634e487b7160e01b600052601160045260246000fd5b8082018082111561023c5761023c61084556fea264697066735822122091ea0ede169de058ccdd3cb7d029ac7763f9230cde51285aac42f1fd73afff7264736f6c63430008150033 \ No newline at end of file +608060405234801561001057600080fd5b50604051610e35380380610e3583398101604081905261002f916102dd565b8282600361003d8382610442565b50600461004a8282610442565b50505061005d338261006560201b60201c565b505050610594565b6001600160a01b03821661009857600060405163ec442f0560e01b815260040161008f9190610521565b60405180910390fd5b6100a4600083836100a8565b5050565b6001600160a01b0383166100d35780600260008282546100c89190610545565b909155506101329050565b6001600160a01b038316600090815260208190526040902054818110156101135783818360405163391434e360e21b815260040161008f9392919061055e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661014e5760028054829003905561016d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101b09190610586565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156101f8576101f86101bd565b6040525050565b600061020a60405190565b905061021682826101d3565b919050565b60006001600160401b03821115610234576102346101bd565b601f19601f83011660200192915050565b60005b83811015610260578181015183820152602001610248565b50506000910152565b600061027c6102778461021b565b6101ff565b905082815283838301111561029357610293600080fd5b6102a1836020830184610245565b9392505050565b600082601f8301126102bc576102bc600080fd5b81516102cc848260208601610269565b949350505050565b80515b92915050565b6000806000606084860312156102f5576102f5600080fd5b83516001600160401b0381111561030e5761030e600080fd5b61031a868287016102a8565b602086015190945090506001600160401b0381111561033b5761033b600080fd5b610347868287016102a8565b92505061035785604086016102d4565b90509250925092565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061038a57607f821691505b60208210810361039c5761039c610360565b50919050565b60006102d76103ae8381565b90565b6103ba836103a2565b815460001960089490940293841b1916921b91909117905550565b60006103e28184846103b1565b505050565b818110156100a4576103fa6000826103d5565b6001016103e7565b601f8211156103e2576000818152602090206020601f850104810160208510156104295750805b61043b6020601f8601048301826103e7565b5050505050565b81516001600160401b0381111561045b5761045b6101bd565b6104658254610376565b610470828285610402565b506020601f8211600181146104a5576000831561048d5750848201515b600019600885021c198116600285021785555061043b565b600084815260208120601f198516915b828110156104d557878501518255602094850194600190920191016104b5565b50848210156104f25783870151600019601f87166008021c191681555b50505050600202600101905550565b60006001600160a01b0382166102d7565b61051b81610501565b82525050565b602081016102d78284610512565b634e487b7160e01b600052601160045260246000fd5b808201808211156102d7576102d761052f565b8061051b565b6060810161056c8286610512565b6105796020830185610558565b6102cc6040830184610558565b602081016102d78284610558565b610892806105a36000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610142578063a9059cbb1461014a578063dd62ed3e1461015d57600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b0610196565b6040516100bd919061063c565b60405180910390f35b6100d96100d4366004610698565b610228565b6040516100bd91906106da565b6002545b6040516100bd91906106ee565b6100d96101053660046106fc565b610242565b60126040516100bd919061074e565b6100ea61012736600461075c565b6001600160a01b031660009081526020819052604090205490565b6100b0610266565b6100d9610158366004610698565b610275565b6100ea61016b36600461077b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101a5906107c0565b80601f01602080910402602001604051908101604052809291908181526020018280546101d1906107c0565b801561021e5780601f106101f35761010080835404028352916020019161021e565b820191906000526020600020905b81548152906001019060200180831161020157829003601f168201915b5050505050905090565b600033610236818585610283565b60019150505b92915050565b600033610250858285610295565b61025b858585610322565b506001949350505050565b6060600480546101a5906107c0565b600033610236818585610322565b61029083838360016103b3565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461031c578181101561030d578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610304939291906107f5565b60405180910390fd5b61031c848484840360006103b3565b50505050565b6001600160a01b0383166103655760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b0382166103a85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6102908383836104b8565b6001600160a01b0384166103f65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b0383166104395760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561031c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104aa91906106ee565b60405180910390a350505050565b6001600160a01b0383166104e35780600260008282546104d89190610849565b9091555061055b9050565b6001600160a01b0383166000908152602081905260409020548181101561053c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610304939291906107f5565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661057757600280548290039055610596565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105d991906106ee565b60405180910390a3505050565b60005b838110156106015781810151838201526020016105e9565b50506000910152565b6000610614825190565b80845260208401935061062b8185602086016105e6565b601f01601f19169290920192915050565b6020808252810161064d818461060a565b9392505050565b60006001600160a01b03821661023c565b61066e81610654565b811461067957600080fd5b50565b803561023c81610665565b8061066e565b803561023c81610687565b600080604083850312156106ae576106ae600080fd5b6106b8848461067c565b91506106c7846020850161068d565b90509250929050565b8015155b82525050565b6020810161023c82846106d0565b806106d4565b6020810161023c82846106e8565b60008060006060848603121561071457610714600080fd5b61071e858561067c565b925061072d856020860161067c565b915061073c856040860161068d565b90509250925092565b60ff81166106d4565b6020810161023c8284610745565b60006020828403121561077157610771600080fd5b61064d838361067c565b6000806040838503121561079157610791600080fd5b61079b848461067c565b91506106c7846020850161067c565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107d457607f821691505b6020821081036107e6576107e66107aa565b50919050565b6106d481610654565b6060810161080382866107ec565b61081060208301856106e8565b61081d60408301846106e8565b949350505050565b6020810161023c82846107ec565b634e487b7160e01b600052601160045260246000fd5b8082018082111561023c5761023c61083356fea2646970667358221220fe5b081ab8295c13082e93f4d009a2615ec46fcb0f111b183ee53af0eaa9513f64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin b/contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin index 0628eab96..500164a5a 100644 --- a/contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin +++ b/contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin @@ -1 +1 @@ -6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162000e2738038062000e278339810160408190526200005a91620001b4565b818160036200006a83826200032e565b5060046200007982826200032e565b5050505050620003fa565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620000c257620000c262000084565b6040525050565b6000620000d560405190565b9050620000e382826200009a565b919050565b60006001600160401b0382111562000104576200010462000084565b601f19601f83011660200192915050565b60005b838110156200013257818101518382015260200162000118565b50506000910152565b6000620001526200014c84620000e8565b620000c9565b9050828152602081018484840111156200016f576200016f600080fd5b6200017c84828562000115565b509392505050565b600082601f8301126200019a576200019a600080fd5b8151620001ac8482602086016200013b565b949350505050565b60008060408385031215620001cc57620001cc600080fd5b82516001600160401b03811115620001e757620001e7600080fd5b620001f58582860162000184565b602085015190935090506001600160401b03811115620002185762000218600080fd5b620002268582860162000184565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200025b57607f821691505b60208210810362000270576200027062000230565b50919050565b600062000287620002848381565b90565b92915050565b620002988362000276565b815460001960089490940293841b1916921b91909117905550565b6000620002c28184846200028d565b505050565b81811015620002e657620002dd600082620002b3565b600101620002c7565b5050565b601f821115620002c2576000818152602090206020601f85010481016020851015620003135750805b620003276020601f860104830182620002c7565b5050505050565b81516001600160401b038111156200034a576200034a62000084565b62000356825462000246565b62000363828285620002ea565b506020601f8211600181146200039b5760008315620003825750848201515b600019600885021c198116600285021785555062000327565b600084815260208120601f198516915b82811015620003cd5787850151825560209485019460019092019101620003ab565b5084821015620003eb5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a1d806200040a6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107bc565b6002545b6040516100bd91906107d0565b6100d96101053660046107de565b610206565b60126040516100bd9190610837565b6100ea610127366004610845565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea61015536600461086e565b6102c6565b606060038054610169906108b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610195906108b7565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108e3565b60405180910390fd5b606060048054610169906108b7565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a09061091e565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a093929190610988565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107d0565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109d4565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a093929190610988565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107d0565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b60006107978585610759565b92505060206107a88582860161076a565b9150509250929050565b8015155b82525050565b6020810161020082846107b2565b806107b6565b6020810161020082846107ca565b6000806000606084860312156107f6576107f6600080fd5b60006108028686610759565b935050602061081386828701610759565b92505060406108248682870161076a565b9150509250925092565b60ff81166107b6565b60208101610200828461082e565b60006020828403121561085a5761085a600080fd5b60006108668484610759565b949350505050565b6000806040838503121561088457610884600080fd5b60006108908585610759565b92505060206107a885828601610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108cb57607f821691505b6020821081036108dd576108dd6108a1565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b681610731565b60608101610996828661097f565b6109a360208301856107ca565b61086660408301846107ca565b60208101610200828461097f565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109be56fea2646970667358221220aba9443c9aef21109782a283d8f74e7df6eea5835c2ccc66f4ae7e5c36a42f3564736f6c63430008150033 \ No newline at end of file +6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b50604051610dc8380380610dc883398101604081905261005591610191565b8181600361006383826102ef565b50600461007082826102ef565b50505050506103ae565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156100b5576100b561007a565b6040525050565b60006100c760405190565b90506100d38282610090565b919050565b60006001600160401b038211156100f1576100f161007a565b601f19601f83011660200192915050565b60005b8381101561011d578181015183820152602001610105565b50506000910152565b6000610139610134846100d8565b6100bc565b905082815283838301111561015057610150600080fd5b61015e836020830184610102565b9392505050565b600082601f83011261017957610179600080fd5b8151610189848260208601610126565b949350505050565b600080604083850312156101a7576101a7600080fd5b82516001600160401b038111156101c0576101c0600080fd5b6101cc85828601610165565b602085015190935090506001600160401b038111156101ed576101ed600080fd5b6101f985828601610165565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061022d57607f821691505b60208210810361023f5761023f610203565b50919050565b60006102546102518381565b90565b92915050565b61026383610245565b815460001960089490940293841b1916921b91909117905550565b600061028b81848461025a565b505050565b818110156102ab576102a360008261027e565b600101610290565b5050565b601f82111561028b576000818152602090206020601f850104810160208510156102d65750805b6102e86020601f860104830182610290565b5050505050565b81516001600160401b038111156103085761030861007a565b6103128254610219565b61031d8282856102af565b506020601f821160018114610352576000831561033a5750848201515b600019600885021c19811660028502178555506102e8565b600084815260208120601f198516915b828110156103825787850151825560209485019460019092019101610362565b508482101561039f5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a0b806103bd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107b7565b6002545b6040516100bd91906107cb565b6100d96101053660046107d9565b610206565b60126040516100bd919061082b565b6100ea610127366004610839565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea610155366004610858565b6102c6565b6060600380546101699061089d565b80601f01602080910402602001604051908101604052809291908181526020018280546101959061089d565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108c9565b60405180910390fd5b6060600480546101699061089d565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a090610904565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107cb565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109c2565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107cb565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b6107958484610759565b91506107a4846020850161076a565b90509250929050565b8015155b82525050565b6020810161020082846107ad565b806107b1565b6020810161020082846107c5565b6000806000606084860312156107f1576107f1600080fd5b6107fb8585610759565b925061080a8560208601610759565b9150610819856040860161076a565b90509250925092565b60ff81166107b1565b602081016102008284610822565b60006020828403121561084e5761084e600080fd5b61072a8383610759565b6000806040838503121561086e5761086e600080fd5b6108788484610759565b91506107a48460208501610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108b157607f821691505b6020821081036108c3576108c3610887565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b181610731565b6060810161097c8286610965565b61098960208301856107c5565b61099660408301846107c5565b949350505050565b602081016102008284610965565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109ac56fea264697066735822122034cd0cdf26fe824a96259f36e04d997508d65683b4f463a133617b1a6371975464736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin b/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin index 748126329..6bd11b2f3 100644 --- a/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin +++ b/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin @@ -1 +1 @@ -6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001546380380620015468339810160408190526200005a916200029e565b8181818160036200006c838262000412565b5060046200007b828262000412565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620004de565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620001ac57620001ac6200016e565b6040525050565b6000620001bf60405190565b9050620001cd828262000184565b919050565b60006001600160401b03821115620001ee57620001ee6200016e565b601f19601f83011660200192915050565b60005b838110156200021c57818101518382015260200162000202565b50506000910152565b60006200023c6200023684620001d2565b620001b3565b905082815260208101848484011115620002595762000259600080fd5b62000266848285620001ff565b509392505050565b600082601f830112620002845762000284600080fd5b81516200029684826020860162000225565b949350505050565b60008060408385031215620002b657620002b6600080fd5b82516001600160401b03811115620002d157620002d1600080fd5b620002df858286016200026e565b602085015190935090506001600160401b03811115620003025762000302600080fd5b62000310858286016200026e565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200034557607f821691505b6020821081036200035a576200035a6200031a565b50919050565b6000620001686200036e8381565b90565b6200037c8362000360565b815460001960089490940293841b1916921b91909117905550565b6000620003a681848462000371565b505050565b81811015620003ca57620003c160008262000397565b600101620003ab565b5050565b601f821115620003a6576000818152602090206020601f85010481016020851015620003f75750805b6200040b6020601f860104830182620003ab565b5050505050565b81516001600160401b038111156200042e576200042e6200016e565b6200043a825462000330565b62000447828285620003ce565b506020601f8211600181146200047f5760008315620004665750848201515b600019600885021c19811660028502178555506200040b565b600084815260208120601f198516915b82811015620004b157878501518255602094850194600190920191016200048f565b5084821015620004cf5783870151600019601f87166008021c191681555b50505050600202600101905550565b61105880620004ee6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c7c565b60405180910390f35b6101876103a0565b6040516101769190610ce0565b6101696101a2366004610d27565b610432565b6002545b6040516101769190610d6a565b6101cb6101c6366004610d27565b61044a565b005b6101696101db366004610d78565b6104b4565b6101ab6101ee366004610dc8565b60009081526007602052604090206001015490565b6101cb610211366004610de9565b6104da565b60126040516101769190610e25565b6101cb610233366004610de9565b610505565b6101ab610246366004610e33565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610de9565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d27565b6105d6565b6101ab600081565b6101696102dc366004610d27565b61060a565b6101cb6102ef366004610de9565b610618565b6101ab610302366004610e54565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e8c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e8c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610eec565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f2e565b6060600480546103af90610e8c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f3e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610fa8565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610fa8565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610fa8565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610fa8565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d6a565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fde565b6001600160a01b038316610b0c578060026000828254610b01919061100f565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d6a565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6000610c6a8484610c3e565b949350505050565b8015155b82525050565b6020810161039a8284610c72565b60005b83811015610ca5578181015183820152602001610c8d565b50506000910152565b6000610cb8825190565b808452602084019350610ccf818560208601610c8a565b601f01601f19169290920192915050565b602080825281016104d38184610cae565b60006001600160a01b03821661039a565b610c3381610cf1565b803561039a81610d02565b80610c33565b803561039a81610d16565b60008060408385031215610d3d57610d3d600080fd5b6000610d498585610d0b565b9250506020610d5a85828601610d1c565b9150509250929050565b80610c76565b6020810161039a8284610d64565b600080600060608486031215610d9057610d90600080fd5b6000610d9c8686610d0b565b9350506020610dad86828701610d0b565b9250506040610dbe86828701610d1c565b9150509250925092565b600060208284031215610ddd57610ddd600080fd5b6000610c6a8484610d1c565b60008060408385031215610dff57610dff600080fd5b6000610e0b8585610d1c565b9250506020610d5a85828601610d0b565b60ff8116610c76565b6020810161039a8284610e1c565b600060208284031215610e4857610e48600080fd5b6000610c6a8484610d0b565b60008060408385031215610e6a57610e6a600080fd5b6000610e0b8585610d0b565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610ea057607f821691505b602082108103610eb257610eb2610e76565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610eb8565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ee6565b6020808252810161039a81610efc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c7681610cf1565b6020810161039a8284610f9f565b60608101610fc48286610f9f565b610fd16020830185610d64565b610c6a6040830184610d64565b60408101610fec8285610f9f565b6104d36020830184610d64565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610ff956fea264697066735822122015a37e58522ca26bdd51e6ea23c5953be6e295684d318926ea7d989d6576fe1c64736f6c63430008150033 \ No newline at end of file +6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220be3380d12a8a9c04f488bd6d863b29f9c1ea464ebf1b28b5c552d2e3f79e9fda64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin index 43167eca3..1b3649e5d 100644 --- a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin +++ b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61518580620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620002005760003560e01c80638129fc1c1162000119578063a25eb31c11620000af578063db5d91b1116200007a578063db5d91b114620004f9578063e34fbfc81462000528578063e874eb20146200053d578063f2fde38b146200055157600080fd5b8063a25eb31c14620004a3578063a4ab2faa14620004ba578063a52f433c14620004d1578063d4fab88714620004e257600080fd5b806387059edb11620000f057806387059edb14620004125780638da5cb5b146200042957806398077e86146200045a578063a1a227fa146200048057600080fd5b80638129fc1c14620003bb5780638236a7ba14620003c55780638415482614620003ec57600080fd5b806347665738116200019b5780636a30d26c11620001665780636a30d26c14620003775780636b9707d61462000390578063715018a614620003a75780637281099614620003b157600080fd5b806347665738146200030b5780635371a2161462000322578063568699c8146200033957806368e10383146200036057600080fd5b80632f0cb9e311620001dc5780632f0cb9e314620002575780633e60a22f146200028c57806343348b2f14620002d2578063440c953b146200030157600080fd5b80620ddd27146200020557806303e72e481462000227578063073b6ef31462000240575b600080fd5b6200020f600e5481565b6040516200021e919062001b7d565b60405180910390f35b6200023e6200023836600462001cd3565b62000568565b005b6200023e6200025136600462001e6e565b6200067b565b6200027d6200026836600462001f5b565b600c6020526000908152604090205460ff1681565b6040516200021e919062001f89565b620002c36200029d36600462001f99565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516200021e919062001fe5565b6200027d620002e336600462001ff5565b6001600160a01b031660009081526020819052604090205460ff1690565b6200020f60055481565b6200023e6200031c36600462001ff5565b62000899565b6200023e6200033336600462002088565b62000940565b620003506200034a36600462001f5b565b62000af6565b6040516200021e929190620021a4565b6200023e62000371366004620021c8565b62000b4f565b6200038162000bf8565b6040516200021e9190620022e9565b6200023e620003a136600462001ff5565b62000cdb565b6200023e62000d72565b6200023e62000d8a565b6200023e62000e15565b620003dc620003d636600462001f5b565b62000fff565b6040516200021e929190620022fc565b6200027d620003fd36600462001f5b565b600d6020526000908152604090205460ff1681565b620003dc6200042336600462001f5b565b620010ef565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620002c3565b620004716200046b36600462001f5b565b62001169565b6040516200021e91906200230c565b600a5462000494906001600160a01b031681565b6040516200021e919062002369565b6200023e620004b4366004620023a7565b6200121e565b6200027d620004cb36600462002419565b62001334565b600454610100900460ff166200027d565b6200023e620004f336600462002470565b620013c6565b6200027d6200050a36600462001ff5565b6001600160a01b031660009081526001602052604090205460ff1690565b6200023e620005393660046200252e565b5050565b600b5462000494906001600160a01b031681565b6200023e6200056236600462001ff5565b620014af565b620005726200150d565b60006001600160a01b03166003836040516200058f9190620025a1565b908152604051908190036020019020546001600160a01b031603620005ee57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01620005ec838262002691565b505b80600383604051620006019190620025a1565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200066f90849084906200275e565b60405180910390a15050565b6000828152600860205260409020548114620006b45760405162461bcd60e51b8152600401620006ab90620027b5565b60405180910390fd5b60006200072689898989604051602001620006d3949392919062002825565b6040516020818303038152906040528051906020012086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200158592505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620007645760405162461bcd60e51b8152600401620006ab90620028a4565b600e8990556000805b87518110156200087457600b5488516001600160a01b039091169063b6aed0cb908a9084908110620007a357620007a3620028b6565b6020026020010151620007b690620028d7565b426040518363ffffffff1660e01b8152600401620007d692919062002911565b600060405180830381600087803b158015620007f157600080fd5b505af115801562000806573d6000803e3d6000fd5b5050505081888281518110620008205762000820620028b6565b60200260200101516200083390620028d7565b6040516020016200084692919062002911565b60405160208183030381529060405280519060200120915080806200086b9062002946565b9150506200076d565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b620008a36200150d565b6001600160a01b03811660009081526020819052604090205460ff16620008de5760405162461bcd60e51b8152600401620006ab90620028a4565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936906200093590839062001fe5565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906200099190879087908790879060040162002a9b565b60006040518083038186803b158015620009aa57600080fd5b505afa158015620009bf573d6000803e3d6000fd5b50505050600084604051602001620009d8919062002ada565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff161562000a235760405162461bcd60e51b8152600401620006ab9062002b1d565b6001600c60008760405160200162000a3c919062002ada565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad219162000a979190890190890162001ff5565b87604001356040518363ffffffff1660e01b815260040162000abb92919062002b2f565b600060405180830381600087803b15801562000ad657600080fd5b505af115801562000aeb573d6000803e3d6000fd5b505050505050505050565b60408051606080820183526000808352602083019190915291810182905260008062000b2285620010ef565b915091508162000b385760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff161562000b755760405162461bcd60e51b8152600401620006ab9062002b99565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369062000be990879062001fe5565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000cd257838290600052602060002001805462000c3e90620025c3565b80601f016020809104026020016040519081016040528092919081815260200182805462000c6c90620025c3565b801562000cbd5780601f1062000c915761010080835404028352916020019162000cbd565b820191906000526020600020905b81548152906001019060200180831162000c9f57829003601f168201915b50505050508152602001906001019062000c1c565b50505050905090565b62000ce56200150d565b6001600160a01b03811660009081526001602052604090205460ff1662000d205760405162461bcd60e51b8152600401620006ab9062002bde565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47906200093590839062001fe5565b62000d7c6200150d565b62000d886000620015b5565b565b62000d946200150d565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da909062000ddf90339060040162001fe5565b600060405180830381600087803b15801562000dfa57600080fd5b505af115801562000e0f573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000e615750825b905060008267ffffffffffffffff16600114801562000e7f5750303b155b90508115801562000e8e575080155b1562000ec6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000efb57845468ff00000000000000001916680100000000000000001785555b62000f063362001633565b6000600555600160095560405162000f1e9062001b67565b604051809103906000f08015801562000f3b573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9162000fa69162001fe5565b60405180910390a1831562000ff857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29062000be99060019062002c0e565b5050505050565b6040805160608082018352600080835260208084018390528385018290528582526006815284822085519384019095528454835260018501805492958694939092840191906200104f90620025c3565b80601f01602080910402602001604051908101604052809291908181526020018280546200107d90620025c3565b8015620010ce5780601f10620010a257610100808354040283529160200191620010ce565b820191906000526020600020905b815481529060010190602001808311620010b057829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b604080516060808201835260008083526020830191909152918101829052600083815260076020526040812054908190036200115457505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b6200115f8162000fff565b9250925050915091565b600281815481106200117a57600080fd5b9060005260206000200160009150905080546200119790620025c3565b80601f0160208091040260200160405190810160405280929190818152602001828054620011c590620025c3565b8015620012165780601f10620011ea5761010080835404028352916020019162001216565b820191906000526020600020905b815481529060010190602001808311620011f857829003601f168201915b505050505081565b600062001270833562001235602086018662002c1e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200158592505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620012ae5760405162461bcd60e51b8152600401620006ab90620028a4565b6001600160a01b03811660009081526001602052604090205460ff16620012e95760405162461bcd60e51b8152600401620006ab9062002bde565b620012f48362001648565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a5890620013279085359062001b7d565b60405180910390a1505050565b600080805b8351811015620013ad5781848281518110620013595762001359620028b6565b60200260200101516200136c90620028d7565b6040516020016200137f92919062002911565b6040516020818303038152906040528051906020012091508080620013a49062002946565b91505062001339565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff1680620014025760405162461bcd60e51b8152600401620006ab9062002cd2565b8115620014845760006200143b878786604051602001620014269392919062002d13565b604051602081830303815290604052620016f5565b905060006200144b828762001585565b9050876001600160a01b0316816001600160a01b031614620014815760405162461bcd60e51b8152600401620006ab9062002d96565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b620014b96200150d565b6001600160a01b038116620014ff5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620006ab919062001fe5565b6200150a81620015b5565b50565b33620015407f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000d8857336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620006ab919062001fe5565b60008060008062001597868662001734565b925092509250620015a9828262001785565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6200163d6200189b565b6200150a8162001903565b80356000908152600660205260409020819062001666828262002f39565b505060095460009081526007602052604090208135908190556200168c60014362002f45565b40604051602001620016a092919062002911565b60408051601f198184030181529181528151602092830120600980546000908152600890945291832055805491620016d88362002946565b9190505550600554816040013511156200150a5760400135600555565b60006200170382516200190d565b826040516020016200171792919062002f5b565b604051602081830303815290604052805190602001209050919050565b60008060008351604103620017725760208401516040850151606086015160001a6200176388828585620019b5565b9550955095505050506200177e565b50508151600091506002905b9250925092565b60008260038111156200179c576200179c62002f9b565b03620017a6575050565b6001826003811115620017bd57620017bd62002f9b565b03620017f5576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200180c576200180c62002f9b565b0362001848576040517ffce698f7000000000000000000000000000000000000000000000000000000008152620006ab90829060040162001b7d565b60038260038111156200185f576200185f62002f9b565b036200053957806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401620006ab919062001b7d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000d88576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620014b96200189b565b606060006200191c8362001a7e565b600101905060008167ffffffffffffffff8111156200193f576200193f62001b8d565b6040519080825280601f01601f1916602001820160405280156200196a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508462001974575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115620019f2575060009150600390508262001a74565b60006001888888886040516000815260200160405260405162001a19949392919062002fbb565b6020604051602081039080840390855afa15801562001a3c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001a6a5750600092506001915082905062001a74565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831062001ac8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062001af5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831062001b1457662386f26fc10000830492506010015b6305f5e100831062001b2d576305f5e100830492506008015b612710831062001b4257612710830492506004015b6064831062001b55576064830492506002015b600a8310620015af5760010192915050565b6121578062002ff983390190565b805b82525050565b60208101620015af828462001b75565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171562001bcc5762001bcc62001b8d565b6040525050565b600062001bdf60405190565b905062001bed828262001ba3565b919050565b600067ffffffffffffffff82111562001c0f5762001c0f62001b8d565b601f19601f83011660200192915050565b82818337506000910152565b600062001c4362001c3d8462001bf2565b62001bd3565b90508281526020810184848401111562001c605762001c60600080fd5b620019ad84828562001c20565b600082601f83011262001c835762001c83600080fd5b813562001c9584826020860162001c2c565b949350505050565b60006001600160a01b038216620015af565b62001cba8162001c9d565b81146200150a57600080fd5b8035620015af8162001caf565b6000806040838503121562001ceb5762001ceb600080fd5b823567ffffffffffffffff81111562001d075762001d07600080fd5b62001d158582860162001c6d565b925050602062001d288582860162001cc6565b9150509250929050565b8062001cba565b8035620015af8162001d32565b600067ffffffffffffffff82111562001d635762001d6362001b8d565b5060209081020190565b600062001d7e62001c3d8462001d46565b8381529050602080820190840283018581111562001d9f5762001d9f600080fd5b835b8181101562001de457803567ffffffffffffffff81111562001dc65762001dc6600080fd5b850162001dd4888262001c6d565b8452506020928301920162001da1565b5050509392505050565b600082601f83011262001e045762001e04600080fd5b813562001c9584826020860162001d6d565b60008083601f84011262001e2d5762001e2d600080fd5b50813567ffffffffffffffff81111562001e4a5762001e4a600080fd5b60208301915083600182028301111562001e675762001e67600080fd5b9250929050565b60008060008060008060008060e0898b03121562001e8f5762001e8f600080fd5b600062001e9d8b8b62001d39565b985050602062001eb08b828c0162001d39565b975050604062001ec38b828c0162001d39565b965050606089013567ffffffffffffffff81111562001ee55762001ee5600080fd5b62001ef38b828c0162001dee565b955050608089013567ffffffffffffffff81111562001f155762001f15600080fd5b62001f238b828c0162001e16565b945094505060a062001f388b828c0162001d39565b92505060c062001f4b8b828c0162001d39565b9150509295985092959890939650565b60006020828403121562001f725762001f72600080fd5b600062001c95848462001d39565b80151562001b77565b60208101620015af828462001f80565b60006020828403121562001fb05762001fb0600080fd5b813567ffffffffffffffff81111562001fcc5762001fcc600080fd5b62001c958482850162001c6d565b62001b778162001c9d565b60208101620015af828462001fda565b6000602082840312156200200c576200200c600080fd5b600062001c95848462001cc6565b600060808284031215620020315762002031600080fd5b50919050565b60008083601f8401126200204e576200204e600080fd5b50813567ffffffffffffffff8111156200206b576200206b600080fd5b60208301915083602082028301111562001e675762001e67600080fd5b60008060008060c08587031215620020a357620020a3600080fd5b6000620020b187876200201a565b945050608085013567ffffffffffffffff811115620020d357620020d3600080fd5b620020e18782880162002037565b935093505060a0620020f68782880162001d39565b91505092959194509250565b60005b838110156200211f57818101518382015260200162002105565b50506000910152565b600062002133825190565b8084526020840193506200214c81856020860162002102565b601f01601f19169290920192915050565b8051600090606084019062002173858262001b75565b50602083015184820360208601526200218d828262002128565b9150506040830151620019ad604086018262001b75565b60408101620021b4828562001b75565b818103602083015262001c9581846200215d565b600080600080600060608688031215620021e557620021e5600080fd5b6000620021f3888862001cc6565b955050602086013567ffffffffffffffff811115620022155762002215600080fd5b620022238882890162001e16565b9450945050604086013567ffffffffffffffff811115620022475762002247600080fd5b620022558882890162001e16565b92509250509295509295909350565b600062002272838362002128565b9392505050565b60200190565b60006200228a825190565b80845260208401935083602082028501620022a58560200190565b60005b84811015620022dd5783830388528151620022c4848262002264565b93505060208201602098909801979150600101620022a8565b50909695505050505050565b602080825281016200227281846200227f565b60408101620021b4828562001f80565b6020808252810162002272818462002128565b6000620015af6001600160a01b03831662002338565b90565b6001600160a01b031690565b6000620015af826200231f565b6000620015af8262002344565b62001b778162002351565b60208101620015af82846200235e565b600060608284031215620020315762002031600080fd5b600060208284031215620020315762002031600080fd5b60008060408385031215620023bf57620023bf600080fd5b823567ffffffffffffffff811115620023db57620023db600080fd5b620023e98582860162002379565b925050602083013567ffffffffffffffff8111156200240b576200240b600080fd5b62001d288582860162002390565b600060208284031215620024305762002430600080fd5b813567ffffffffffffffff8111156200244c576200244c600080fd5b62001c958482850162001dee565b80151562001cba565b8035620015af816200245a565b600080600080600060a086880312156200248d576200248d600080fd5b60006200249b888862001cc6565b9550506020620024ae8882890162001cc6565b945050604086013567ffffffffffffffff811115620024d057620024d0600080fd5b620024de8882890162001c6d565b935050606086013567ffffffffffffffff811115620025005762002500600080fd5b6200250e8882890162001c6d565b9250506080620025218882890162002463565b9150509295509295909350565b60008060208385031215620025465762002546600080fd5b823567ffffffffffffffff811115620025625762002562600080fd5b620025708582860162001e16565b92509250509250929050565b600062002587825190565b6200259781856020860162002102565b9290920192915050565b620015af81836200257c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680620025d857607f821691505b602082108103620020315762002031620025ad565b6000620015af620023358381565b6200260683620025ed565b815460001960089490940293841b1916921b91909117905550565b600062002630818484620025fb565b505050565b8181101562000539576200264b60008262002621565b60010162002635565b601f82111562002630576000818152602090206020601f850104810160208510156200267d5750805b62000ff86020601f86010483018262002635565b815167ffffffffffffffff811115620026ae57620026ae62001b8d565b620026ba8254620025c3565b620026c782828562002654565b506020601f821160018114620026ff5760008315620026e65750848201515b600019600885021c198116600285021785555062000ff8565b600084815260208120601f198516915b828110156200273157878501518255602094850194600190920191016200270f565b50848210156200274f5783870151600019601f87166008021c191681555b50505050600202600101905550565b6040808252810162002771818562002128565b905062002272602083018462001fda565b600e8152602081017f496e76616c696420666f726b49440000000000000000000000000000000000008152905062002279565b60208082528101620015af8162002782565b6000620027d2825190565b80845260208401935083602082028501620027ed8560200190565b60005b84811015620022dd57838303885281516200280c848262002264565b93505060208201602098909801979150600101620027f0565b6080810162002835828762001b75565b62002844602083018662001b75565b62002853604083018562001b75565b8181036060830152620028678184620027c7565b9695505050505050565b60168152602081017f656e636c6176654944206e6f74206174746573746564000000000000000000008152905062002279565b60208082528101620015af8162002871565b634e487b7160e01b600052603260045260246000fd5b6000620015af825190565b6000620028e2825190565b60208301620028f181620028cc565b925050602081101562002031576000196020919091036008021b16919050565b6040810162002921828562001b75565b62002272602083018462001b75565b634e487b7160e01b600052601160045260246000fd5b6000600182016200295b576200295b62002930565b5060010190565b506000620015af602083018362001cc6565b506000620015af602083018362001d39565b67ffffffffffffffff811662001cba565b8035620015af8162002986565b506000620015af602083018362002997565b67ffffffffffffffff811662001b77565b620029d3818062002962565b620029df838262001fda565b50620029ef602082018262002962565b620029fe602084018262001fda565b5062002a0e604082018262002974565b62002a1d604084018262001b75565b5062002a2d6060820182620029a4565b620026306060840182620029b6565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111562002a825762002a82600080fd5b60208302925062002a9583858462002a3c565b50500190565b60c0810162002aab8287620029c7565b818103608083015262002ac081858762002a45565b905062002ad160a083018462001b75565b95945050505050565b60808101620015af8284620029c7565b60188152602081017f7769746864726177616c20616c7265616479207370656e7400000000000000008152905062002279565b60208082528101620015af8162002aea565b6040810162002921828562001fda565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101620015af8162002b3f565b60198152602081017f656e636c6176654944206e6f7420612073657175656e636572000000000000008152905062002279565b60208082528101620015af8162002bab565b600067ffffffffffffffff8216620015af565b62001b778162002bf0565b60208101620015af828462002c03565b6000808335601e193685900301811262002c3b5762002c3b600080fd5b8301915050803567ffffffffffffffff81111562002c5c5762002c5c600080fd5b60208201915060018102360382131562001e675762001e67600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905062002b93565b60208082528101620015af8162002c79565b6000620015af8260601b90565b6000620015af8262002ce4565b62001b7762002d0d8262001c9d565b62002cf1565b62002d1f818562002cfe565b60140162002d2e818462002cfe565b60140162001c9581836200257c565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905062002b93565b60208082528101620015af8162002d3d565b60008135620015af8162001d32565b600081620015af565b62002dcb8262002db7565b62002dda620023358262002db7565b8255505050565b8267ffffffffffffffff81111562002dfd5762002dfd62001b8d565b62002e098254620025c3565b62002e1682828562002654565b506000601f82116001811462002e4e576000831562002e355750848201355b600019600885021c198116600285021785555062002eab565b600084815260209020601f19841690835b8281101562002e81578785013582556020948501946001909201910162002e5f565b508482101562002e9f57600019601f86166008021c19848801351681555b50506001600284020184555b505050505050565b6200263083838362002de1565b62002ecb82620025ed565b8062002dda565b80828062002ee08162002da8565b905062002eee818462002dc0565b505050600181016020830162002f05818562002c1e565b915062002f1482828562002eb3565b50505060028101604083018062002f2b8262002da8565b905062000ff8818462002ec0565b62000539828262002ed2565b81810381811115620015af57620015af62002930565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a0162002f8d81846200257c565b90506200227281836200257c565b634e487b7160e01b600052602160045260246000fd5b60ff811662001b77565b6080810162002fcb828762001b75565b62002fda602083018662002fb1565b62002fe9604083018562001b75565b62002ad1606083018462001b7556fe60806040523480156200001157600080fd5b506200001d336200002d565b620000276200009e565b62000152565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000ef5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146200014f5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ff580620001626000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610ebc565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f0b565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f36565b61039e565b6040516101ae9190610f71565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f97565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f36565b610443565b6040516101ae9190610fc0565b61015e610212366004610fe2565b610495565b34801561022357600080fd5b5061015e61023236600461101f565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae9190611040565b34801561029d57600080fd5b5061015e6102ac36600461104e565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fe2565b610727565b3480156102dd57600080fd5b506102f16102ec366004611107565b6107a7565b6040516101ae919061119b565b34801561030a57600080fd5b5061015e610319366004611209565b610800565b34801561032a57600080fd5b5061015e610339366004611279565b610901565b34801561034a57600080fd5b5061015e61035936600461101f565b610947565b34801561036a57600080fd5b5061015e61037936600461129b565b610a89565b34801561038a57600080fd5b5061015e61039936600461101f565b610bcc565b600080826040516020016103b291906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b815260040161017890611507565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611549565b600090815260036020526040812055565b6000808260405160200161045791906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b8152600401610178906115b1565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115c1565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b81526004016101789061160e565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611634565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611689565b60006106418342611699565b905060008460405160200161065691906114b8565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b815260040161017890611704565b6000818152602081815260408220849055600191906106bb9088018861101f565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611714565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b87565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b81526004016101789061160e565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b91565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c4c565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c98565b60008460405160200161086e9190611d1d565b604051602081830303815290604052805190602001206040516020016108949190611d5d565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d7c565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611de6565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e4e565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e72565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c4c565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c98565b6000610af3602086018661101f565b610b036040870160208801611e80565b610b136060880160408901611714565b610b236080890160608a01611714565b610b3060808a018a611899565b610b4060c08c0160a08d01611ea1565b604051602001610b569796959493929190611b91565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ef4565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d7c565b610a815760405162461bcd60e51b815260040161017890611f5c565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f6c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610df3565b610c2081610e5a565b600081815b84811015610dea57610dd682878784818110610dca57610dca611f90565b90506020020135610e62565b915080610de281611fa6565b915050610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610df3565b6000818310610e7e576000828152602084905260409020610e8d565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e90565b610eb081610e96565b82525050565b80610eb0565b60408101610eca8285610ea7565b6103f66020830184610eb6565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e9081610ed7565b600060c08284031215610f3057610f30600080fd5b50919050565b600060208284031215610f4b57610f4b600080fd5b813567ffffffffffffffff811115610f6557610f65600080fd5b61048d84828501610f1b565b60208101610e908284610eb6565b805b8114610c2057600080fd5b8035610e9081610f7f565b600060208284031215610fac57610fac600080fd5b600061048d8484610f8c565b801515610eb0565b60208101610e908284610fb8565b610f8181610e96565b8035610e9081610fce565b60008060408385031215610ff857610ff8600080fd5b60006110048585610fd7565b925050602061101585828601610f8c565b9150509250929050565b60006020828403121561103457611034600080fd5b600061048d8484610fd7565b60208101610e908284610ea7565b6000806040838503121561106457611064600080fd5b823567ffffffffffffffff81111561107e5761107e600080fd5b61100485828601610f1b565b63ffffffff8116610f81565b8035610e908161108a565b60008083601f8401126110b6576110b6600080fd5b50813567ffffffffffffffff8111156110d1576110d1600080fd5b6020830191508360018202830111156110ec576110ec600080fd5b9250929050565b60ff8116610f81565b8035610e90816110f3565b60008060008060006080868803121561112257611122600080fd5b600061112e8888611096565b955050602061113f88828901611096565b945050604086013567ffffffffffffffff81111561115f5761115f600080fd5b61116b888289016110a1565b9350935050606061117e888289016110fc565b9150509295509295909350565b67ffffffffffffffff8116610eb0565b60208101610e90828461118b565b600060808284031215610f3057610f30600080fd5b60008083601f8401126111d3576111d3600080fd5b50813567ffffffffffffffff8111156111ee576111ee600080fd5b6020830191508360208202830111156110ec576110ec600080fd5b60008060008060c0858703121561122257611222600080fd5b600061122e87876111a9565b945050608085013567ffffffffffffffff81111561124e5761124e600080fd5b61125a878288016111be565b935093505060a061126d87828801610f8c565b91505092959194509250565b6000806040838503121561128f5761128f600080fd5b60006110048585610f8c565b600080600080606085870312156112b4576112b4600080fd5b843567ffffffffffffffff8111156112ce576112ce600080fd5b6112da87828801610f1b565b945050602085013567ffffffffffffffff8111156112fa576112fa600080fd5b611306878288016111be565b9350935050604061126d87828801610f8c565b506000610e906020830183610fd7565b67ffffffffffffffff8116610f81565b8035610e9081611329565b506000610e906020830183611339565b506000610e906020830183611096565b63ffffffff8116610eb0565b6000808335601e193685900301811261138b5761138b600080fd5b830160208101925035905067ffffffffffffffff8111156113ae576113ae600080fd5b368190038213156110ec576110ec600080fd5b82818337506000910152565b8183526020830192506113e18284836113c1565b50601f01601f19160190565b506000610e9060208301836110fc565b60ff8116610eb0565b600060c083016114168380611319565b6114208582610ea7565b5061142e6020840184611344565b61143b602086018261118b565b506114496040840184611354565b6114566040860182611364565b506114646060840184611354565b6114716060860182611364565b5061147f6080840184611370565b85830360808701526114928382846113cd565b925050506114a360a08401846113ed565b6114b060a08601826113fd565b509392505050565b60208082528101610e8d8184611406565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e90816114c9565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610f05565b60208082528101610e9081611517565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611501565b60208082528101610e9081611559565b604081016115cf8285610eb6565b6103f6602083018461118b565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610f05565b60208082528101610e90816115dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e9057610e9061161e565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610f05565b60208082528101610e9081611657565b80820180821115610e9057610e9061161e565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e90816116ac565b60006020828403121561172957611729600080fd5b600061048d8484611096565b60008135610e9081610fce565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e906001600160a01b038316611777565b90565b6001600160a01b031690565b6000610e9082611760565b6000610e9082611783565b6117a28261178e565b6117ad818354611742565b8255505050565b60008135610e9081611329565b60007bffffffffffffffff000000000000000000000000000000000000000061174e8460a01b90565b6000610e9067ffffffffffffffff83165b67ffffffffffffffff1690565b611811826117ea565b6117ad8183546117c1565b60008135610e908161108a565b60007fffffffff0000000000000000000000000000000000000000000000000000000061174e8460e01b90565b600063ffffffff8216610e90565b61186d82611856565b6117ad818354611829565b600063ffffffff8361174e565b61188e82611856565b6117ad818354611878565b6000808335601e19368590030181126118b4576118b4600080fd5b8301915050803567ffffffffffffffff8111156118d3576118d3600080fd5b6020820191506001810236038213156110ec576110ec600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061192e57607f821691505b602082108103610f3057610f30611904565b6000610e906117748381565b61195583611940565b815460001960089490940293841b1916921b91909117905550565b60006107a281848461194c565b8181101561059a57611990600082611970565b60010161197d565b601f8211156107a2576000818152602090206020601f850104810160208510156119bf5750805b6108fa6020601f86010483018261197d565b8267ffffffffffffffff8111156119ea576119ea6118ee565b6119f4825461191a565b6119ff828285611998565b506000601f821160018114611a345760008315611a1c5750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a655787850135825560209485019460019092019101611a45565b5084821015611a8257600019601f86166008021c19848801351681555b5050505060020260010190555050565b6107a28383836119d1565b60008135610e90816110f3565b600060ff8361174e565b600060ff8216610e90565b611ac882611ab4565b6117ad818354611aaa565b808280611adf81611735565b9050611aeb8184611799565b50506020830180611afb826117b4565b9050611b078184611808565b50506040830180611b178261181c565b9050611b238184611864565b505050600181016060830180611b388261181c565b9050611b448184611885565b5050506002810160808301611b598185611899565b9150611b66828285611a92565b5050506003810160a0830180611b7b82611a9d565b90506108fa8184611abf565b61059a8282611ad3565b60c08101611b9f828a610ea7565b611bac602083018961118b565b611bb96040830188611364565b611bc66060830187611364565b8181036080830152611bd98185876113cd565b9050611be860a08301846113fd565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611bf4565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611501565b60208082528101610e9081611c5c565b506000610e906020830183610f8c565b611cc28180611319565b611ccc8382610ea7565b50611cda6020820182611319565b611ce76020840182610ea7565b50611cf56040820182611ca8565b611d026040840182610eb6565b50611d106060820182611344565b6107a2606084018261118b565b60808101610e908284611cb8565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611d2b565b9050610e906020830184610eb6565b611d868183610eb6565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611501565b60208082528101610e9081611d8e565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611df6565b6000610e90826117fb565b610eb081611e5e565b60208101610e908284611e69565b600060208284031215611e9557611e95600080fd5b600061048d8484611339565b600060208284031215611eb657611eb6600080fd5b600061048d84846110fc565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611ec2565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611501565b60208082528101610e9081611f04565b67ffffffffffffffff918216919081169082820190811115610e9057610e9061161e565b634e487b7160e01b600052603260045260246000fd5b600060018201611fb857611fb861161e565b506001019056fea2646970667358221220b765f1dcb71fc1a477b68645e3b185262574a58a520c2f06b8b8758eaac24c8364736f6c63430008150033a2646970667358221220ac70be67404d33a141c9e08884c79536a0b85c8cb414bc8b0fdb9d84b72d499464736f6c63430008150033 \ No newline at end of file +6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b614ddb8061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638129fc1c11610104578063a25eb31c116100a2578063db5d91b111610071578063db5d91b114610475578063e34fbfc8146104a1578063e874eb20146104b3578063f2fde38b146104c657600080fd5b8063a25eb31c1461042c578063a4ab2faa1461043f578063a52f433c14610452578063d4fab8871461046257600080fd5b806387059edb116100de57806387059edb146103a95780638da5cb5b146103bc57806398077e86146103ec578063a1a227fa1461040c57600080fd5b80638129fc1c1461035d5780638236a7ba14610365578063841548261461038657600080fd5b8063476657381161017c5780636a30d26c1161014b5780636a30d26c146103255780636b9707d61461033a578063715018a61461034d578063728109961461035557600080fd5b806347665738146102cb5780635371a216146102de578063568699c8146102f157806368e103831461031257600080fd5b80632f0cb9e3116101b85780632f0cb9e3146102255780633e60a22f1461025557806343348b2f14610296578063440c953b146102c257600080fd5b80620ddd27146101de57806303e72e48146101fd578063073b6ef314610212575b600080fd5b6101e7600e5481565b6040516101f491906119de565b60405180910390f35b61021061020b366004611b14565b6104d9565b005b610210610220366004611c89565b6105e1565b610248610233366004611d57565b600c6020526000908152604090205460ff1681565b6040516101f49190611d7e565b610289610263366004611d8c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101f49190611dd8565b6102486102a4366004611de6565b6001600160a01b031660009081526020819052604090205460ff1690565b6101e760055481565b6102106102d9366004611de6565b6107d8565b6102106102ec366004611e6b565b610878565b6103046102ff366004611d57565b610a1d565b6040516101f4929190611f6d565b610210610320366004611f8d565b610a73565b61032d610b17565b6040516101f49190612090565b610210610348366004611de6565b610bf0565b610210610c80565b610210610c94565b610210610d19565b610378610373366004611d57565b610ef4565b6040516101f49291906120a1565b610248610394366004611d57565b600d6020526000908152604090205460ff1681565b6103786103b7366004611d57565b610fdc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610289565b6103ff6103fa366004611d57565b611053565b6040516101f491906120af565b600a5461041f906001600160a01b031681565b6040516101f49190612102565b61021061043a36600461213a565b6110ff565b61024861044d3660046121ac565b611207565b600454610100900460ff16610248565b6102106104703660046121fa565b611285565b610248610483366004611de6565b6001600160a01b031660009081526001602052604090205460ff1690565b6102106104af3660046122a1565b5050565b600b5461041f906001600160a01b031681565b6102106104d4366004611de6565b611361565b6104e16113b8565b60006001600160a01b03166003836040516104fc919061230b565b908152604051908190036020019020546001600160a01b03160361055857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161055683826123e7565b505b80600383604051610569919061230b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906105d590849084906124a7565b60405180910390a15050565b60008281526008602052604090205481146106175760405162461bcd60e51b815260040161060e906124f9565b60405180910390fd5b6000610685898989896040516020016106339493929190612561565b6040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166106c05760405162461bcd60e51b815260040161060e906125d7565b600e8990556000805b87518110156107b357600b5488516001600160a01b039091169063b6aed0cb908a90849081106106fb576106fb6125e7565b602002602001015161070c90612607565b426040518363ffffffff1660e01b815260040161072a92919061263d565b600060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050508188828151811061076f5761076f6125e7565b602002602001015161078090612607565b60405160200161079192919061263d565b60408051601f19818403018152919052805160209091012091506001016106c9565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6107e06113b8565b6001600160a01b03811660009081526020819052604090205460ff166108185760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061086d908390611dd8565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906108c7908790879087908790600401612773565b60006040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b5050505060008460405160200161090a91906127ac565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff16156109525760405162461bcd60e51b815260040161060e906127ec565b6001600c60008760405160200161096991906127ac565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad21916109c291908901908901611de6565b87604001356040518363ffffffff1660e01b81526004016109e49291906127fc565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610a4785610fdc565b9150915081610a5c5760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610a965760405162461bcd60e51b815260040161060e90612864565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610b08908790611dd8565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610be7578382906000526020600020018054610b5a9061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b869061232b565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081526020019060010190610b3b565b50505050905090565b610bf86113b8565b6001600160a01b03811660009081526001602052604090205460ff16610c305760405162461bcd60e51b815260040161060e906128a6565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479061086d908390611dd8565b610c886113b8565b610c926000611458565b565b610c9c6113b8565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610ce5903390600401611dd8565b600060405180830381600087803b158015610cff57600080fd5b505af1158015610d13573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d645750825b905060008267ffffffffffffffff166001148015610d815750303b155b905081158015610d8f575080155b15610dc6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610dfa57845468ff00000000000000001916680100000000000000001785555b610e03336114d6565b60006005556001600955604051610e19906119c9565b604051809103906000f080158015610e35573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610e9e91611dd8565b60405180910390a18315610eed57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b08906001906128d1565b5050505050565b604080516060808201835260008083526020808401839052838501829052858252600681528482208551938401909552845483526001850180549295869493909284019190610f429061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e9061232b565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361104057505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61104981610ef4565b9250925050915091565b6002818154811061106357600080fd5b90600052602060002001600091509050805461107e9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546110aa9061232b565b80156110f75780601f106110cc576101008083540402835291602001916110f7565b820191906000526020600020905b8154815290600101906020018083116110da57829003601f168201915b505050505081565b600061114d833561111360208601866128df565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166111885760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b03811660009081526001602052604090205460ff166111c05760405162461bcd60e51b815260040161060e906128a6565b6111c9836114e7565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906111fa908535906119de565b60405180910390a1505050565b600080805b835181101561126c5781848281518110611228576112286125e7565b602002602001015161123990612607565b60405160200161124a92919061263d565b60408051601f198184030181529190528051602090910120915060010161120c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806112be5760405162461bcd60e51b815260040161060e9061298c565b81156113365760006112f28787866040516020016112de939291906129c4565b60405160208183030381529060405261158b565b90506000611300828761142c565b9050876001600160a01b0316816001600160a01b0316146113335760405162461bcd60e51b815260040161060e90612a40565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6113696113b8565b6001600160a01b0381166113ac5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b6113b581611458565b50565b336113ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c9257336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b60008060008061143c86866115c6565b92509250925061144c8282611613565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6114de611715565b6113b58161177c565b8035600090815260066020526040902081906115038282612bb3565b50506009546000908152600760205260409020813590819055611527600143612bd3565b4060405160200161153992919061263d565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549161156f83612be6565b9190505550600554816040013511156113b55760400135600555565b60006115978251611784565b826040516020016115a9929190612bff565b604051602081830303815290604052805190602001209050919050565b600080600083516041036116005760208401516040850151606086015160001a6115f288828585611825565b95509550955050505061160c565b50508151600091506002905b9250925092565b600082600381111561162757611627612c3b565b03611630575050565b600182600381111561164457611644612c3b565b0361167b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561168f5761168f612c3b565b036116c8576040517ffce698f700000000000000000000000000000000000000000000000000000000815261060e9082906004016119de565b60038260038111156116dc576116dc612c3b565b036104af57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161060e91906119de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c92576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611369611715565b60606000611791836118e7565b600101905060008167ffffffffffffffff8111156117b1576117b16119ec565b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117e5575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186057506000915060039050826118dd565b6000600188888888604051600081526020016040526040516118859493929190612c5a565b6020604051602081039080840390855afa1580156118a7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d3575060009250600191508290506118dd565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061195c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061197a57662386f26fc10000830492506010015b6305f5e1008310611992576305f5e100830492506008015b61271083106119a657612710830492506004015b606483106119b8576064830492506002015b600a83106114525760010192915050565b61211680612c9083390190565b805b82525050565b6020810161145282846119d6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611a2857611a286119ec565b6040525050565b6000611a3a60405190565b9050611a468282611a02565b919050565b600067ffffffffffffffff821115611a6557611a656119ec565b601f19601f83011660200192915050565b82818337506000910152565b6000611a95611a9084611a4b565b611a2f565b9050828152838383011115611aac57611aac600080fd5b611aba836020830184611a76565b9392505050565b600082601f830112611ad557611ad5600080fd5b611aba83833560208501611a82565b60006001600160a01b038216611452565b611afe81611ae4565b81146113b557600080fd5b803561145281611af5565b60008060408385031215611b2a57611b2a600080fd5b823567ffffffffffffffff811115611b4457611b44600080fd5b611b5085828601611ac1565b925050611b608460208501611b09565b90509250929050565b80611afe565b803561145281611b69565b600067ffffffffffffffff821115611b9457611b946119ec565b5060209081020190565b6000611bac611a9084611b7a565b83815290506020808201908402830185811115611bcb57611bcb600080fd5b835b81811015611c0a57803567ffffffffffffffff811115611bef57611bef600080fd5b611bfb88828801611ac1565b84525060209283019201611bcd565b5050509392505050565b600082601f830112611c2857611c28600080fd5b611aba83833560208501611b9e565b60008083601f840112611c4c57611c4c600080fd5b50813567ffffffffffffffff811115611c6757611c67600080fd5b602083019150836001820283011115611c8257611c82600080fd5b9250929050565b60008060008060008060008060e0898b031215611ca857611ca8600080fd5b611cb28a8a611b6f565b9750611cc18a60208b01611b6f565b9650611cd08a60408b01611b6f565b9550606089013567ffffffffffffffff811115611cef57611cef600080fd5b611cfb8b828c01611c14565b955050608089013567ffffffffffffffff811115611d1b57611d1b600080fd5b611d278b828c01611c37565b9450945050611d398a60a08b01611b6f565b9150611d488a60c08b01611b6f565b90509295985092959890939650565b600060208284031215611d6c57611d6c600080fd5b611aba8383611b6f565b8015156119d8565b602081016114528284611d76565b600060208284031215611da157611da1600080fd5b813567ffffffffffffffff811115611dbb57611dbb600080fd5b611dc784828501611ac1565b949350505050565b6119d881611ae4565b602081016114528284611dcf565b600060208284031215611dfb57611dfb600080fd5b611aba8383611b09565b600060808284031215611e1a57611e1a600080fd5b50919050565b60008083601f840112611e3557611e35600080fd5b50813567ffffffffffffffff811115611e5057611e50600080fd5b602083019150836020820283011115611c8257611c82600080fd5b60008060008060c08587031215611e8457611e84600080fd5b611e8e8686611e05565b9350608085013567ffffffffffffffff811115611ead57611ead600080fd5b611eb987828801611e20565b9350935050611ecb8660a08701611b6f565b905092959194509250565b60005b83811015611ef1578181015183820152602001611ed9565b50506000910152565b6000611f04825190565b808452602084019350611f1b818560208601611ed6565b601f01601f19169290920192915050565b80516000906060840190611f4085826119d6565b5060208301518482036020860152611f588282611efa565b915050604083015161181d60408601826119d6565b60408101611f7b82856119d6565b8181036020830152611dc78184611f2c565b600080600080600060608688031215611fa857611fa8600080fd5b611fb28787611b09565b9450602086013567ffffffffffffffff811115611fd157611fd1600080fd5b611fdd88828901611c37565b9450945050604086013567ffffffffffffffff811115611fff57611fff600080fd5b61200b88828901611c37565b92509250509295509295909350565b6000611aba8383611efa565b60200190565b6000612036825190565b808452602084019350836020820285016120508560200190565b60005b84811015612084578383038852815161206c848261201a565b93505060208201602098909801979150600101612053565b50909695505050505050565b60208082528101611aba818461202c565b60408101611f7b8285611d76565b60208082528101611aba8184611efa565b60006114526001600160a01b0383166120d7565b90565b6001600160a01b031690565b6000611452826120c0565b6000611452826120e3565b6119d8816120ee565b6020810161145282846120f9565b600060608284031215611e1a57611e1a600080fd5b600060208284031215611e1a57611e1a600080fd5b6000806040838503121561215057612150600080fd5b823567ffffffffffffffff81111561216a5761216a600080fd5b61217685828601612110565b925050602083013567ffffffffffffffff81111561219657612196600080fd5b6121a285828601612125565b9150509250929050565b6000602082840312156121c1576121c1600080fd5b813567ffffffffffffffff8111156121db576121db600080fd5b611dc784828501611c14565b801515611afe565b8035611452816121e7565b600080600080600060a0868803121561221557612215600080fd5b61221f8787611b09565b945061222e8760208801611b09565b9350604086013567ffffffffffffffff81111561224d5761224d600080fd5b61225988828901611ac1565b935050606086013567ffffffffffffffff81111561227957612279600080fd5b61228588828901611ac1565b92505061229587608088016121ef565b90509295509295909350565b600080602083850312156122b7576122b7600080fd5b823567ffffffffffffffff8111156122d1576122d1600080fd5b6122dd85828601611c37565b92509250509250929050565b60006122f3825190565b612301818560208601611ed6565b9290920192915050565b61145281836122e9565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061233f57607f821691505b602082108103611e1a57611e1a612315565b60006114526120d48381565b61236683612351565b815460001960089490940293841b1916921b91909117905550565b600061238e81848461235d565b505050565b818110156104af576123a6600082612381565b600101612393565b601f82111561238e576000818152602090206020601f850104810160208510156123d55750805b610eed6020601f860104830182612393565b815167ffffffffffffffff811115612401576124016119ec565b61240b825461232b565b6124168282856123ae565b506020601f82116001811461244b57600083156124335750848201515b600019600885021c1981166002850217855550610eed565b600084815260208120601f198516915b8281101561247b578785015182556020948501946001909201910161245b565b50848210156124985783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016124b88185611efa565b9050611aba6020830184611dcf565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612026565b60208082528101611452816124c7565b6000612513825190565b8084526020840193508360208202850161252d8560200190565b60005b848110156120845783830388528151612549848261201a565b93505060208201602098909801979150600101612530565b6080810161256f82876119d6565b61257c60208301866119d6565b61258960408301856119d6565b818103606083015261259b8184612509565b9695505050505050565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612026565b60208082528101611452816125a5565b634e487b7160e01b600052603260045260246000fd5b6000611452825190565b6000612611825190565b6020830161261e816125fd565b9250506020811015611e1a576000196020919091036008021b16919050565b6040810161264b82856119d6565b611aba60208301846119d6565b5060006114526020830183611b09565b5060006114526020830183611b6f565b67ffffffffffffffff8116611afe565b803561145281612678565b5060006114526020830183612688565b67ffffffffffffffff81166119d8565b6126bd8180612658565b6126c78382611dcf565b506126d56020820182612658565b6126e26020840182611dcf565b506126f06040820182612668565b6126fd60408401826119d6565b5061270b6060820182612693565b61238e60608401826126a3565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561275c5761275c600080fd5b60208302925061276d838584612718565b50500190565b60c0810161278182876126b3565b8181036080830152612794818587612721565b90506127a360a08301846119d6565b95945050505050565b6080810161145282846126b3565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612026565b60208082528101611452816127ba565b6040810161264b8285611dcf565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016114528161280a565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612026565b6020808252810161145281612874565b600067ffffffffffffffff8216611452565b6119d8816128b6565b6020810161145282846128c8565b6000808335601e19368590030181126128fa576128fa600080fd5b8301915050803567ffffffffffffffff81111561291957612919600080fd5b602082019150600181023603821315611c8257611c82600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061285e565b6020808252810161145281612934565b60006114528260601b90565b60006114528261299c565b6119d86129bf82611ae4565b6129a8565b6129ce81856129b3565b6014016129db81846129b3565b601401611dc781836122e9565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061285e565b60208082528101611452816129e8565b6000813561145281611b69565b600081611452565b612a6e82612a5d565b612a7a6120d482612a5d565b8255505050565b8267ffffffffffffffff811115612a9a57612a9a6119ec565b612aa4825461232b565b612aaf8282856123ae565b506000601f821160018114612ae45760008315612acc5750848201355b600019600885021c1981166002850217855550612b3e565b600084815260209020601f19841690835b82811015612b155787850135825560209485019460019092019101612af5565b5084821015612b32576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b61238e838383612a81565b612b5a82612351565b80612a7a565b8180612b6b81612a50565b9050612b778184612a65565b5050612b8660208301836128df565b612b94818360018601612b46565b50506040820180612ba482612a50565b9050610d138160028501612b51565b6104af8282612b60565b634e487b7160e01b600052601160045260246000fd5b8181038181111561145257611452612bbd565b600060018201612bf857612bf8612bbd565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612c2f81846122e9565b9050611aba81836122e9565b634e487b7160e01b600052602160045260246000fd5b60ff81166119d8565b60808101612c6882876119d6565b612c756020830186612c51565b612c8260408301856119d6565b6127a360608301846119d656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611fbd806101596000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610eb2565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f01565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f2c565b61039e565b6040516101ae9190610f67565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f8d565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f2c565b610443565b6040516101ae9190610fb4565b61015e610212366004610fd6565b610495565b34801561022357600080fd5b5061015e61023236600461100e565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae919061102d565b34801561029d57600080fd5b5061015e6102ac36600461103b565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fd6565b610727565b3480156102dd57600080fd5b506102f16102ec366004611104565b6107a7565b6040516101ae9190611191565b34801561030a57600080fd5b5061015e6103193660046111ff565b610800565b34801561032a57600080fd5b5061015e61033936600461126a565b610901565b34801561034a57600080fd5b5061015e61035936600461100e565b610947565b34801561036a57600080fd5b5061015e61037936600461128a565b610a89565b34801561038a57600080fd5b5061015e61039936600461100e565b610bcc565b600080826040516020016103b291906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b8152600401610178906114f5565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611537565b600090815260036020526040812055565b6000808260405160200161045791906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b81526004016101789061159f565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115af565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b8152600401610178906115fc565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611622565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611677565b60006106418342611687565b905060008460405160200161065691906114a6565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b8152600401610178906116f2565b6000818152602081815260408220849055600191906106bb9088018861100e565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611702565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b6c565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b8152600401610178906115fc565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b76565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c31565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c7d565b60008460405160200161086e9190611d02565b604051602081830303815290604052805190602001206040516020016108949190611d42565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d61565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611dcb565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e33565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e57565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c31565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c7d565b6000610af3602086018661100e565b610b036040870160208801611e65565b610b136060880160408901611702565b610b236080890160608a01611702565b610b3060808a018a611885565b610b4060c08c0160a08d01611e84565b604051602001610b569796959493929190611b76565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ed5565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d61565b610a815760405162461bcd60e51b815260040161017890611f3d565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610de9565b610c2081610e50565b600081815b84811015610de057610dd682878784818110610dca57610dca611f71565b90506020020135610e58565b9150600101610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610de9565b6000818310610e74576000828152602084905260409020610e83565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e86565b610ea681610e8c565b82525050565b80610ea6565b60408101610ec08285610e9d565b6103f66020830184610eac565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e8681610ecd565b600060c08284031215610f2657610f26600080fd5b50919050565b600060208284031215610f4157610f41600080fd5b813567ffffffffffffffff811115610f5b57610f5b600080fd5b61048d84828501610f11565b60208101610e868284610eac565b805b8114610c2057600080fd5b8035610e8681610f75565b600060208284031215610fa257610fa2600080fd5b610e838383610f82565b801515610ea6565b60208101610e868284610fac565b610f7781610e8c565b8035610e8681610fc2565b60008060408385031215610fec57610fec600080fd5b610ff68484610fcb565b91506110058460208501610f82565b90509250929050565b60006020828403121561102357611023600080fd5b610e838383610fcb565b60208101610e868284610e9d565b6000806040838503121561105157611051600080fd5b823567ffffffffffffffff81111561106b5761106b600080fd5b61107785828601610f11565b9250506110058460208501610f82565b63ffffffff8116610f77565b8035610e8681611087565b60008083601f8401126110b3576110b3600080fd5b50813567ffffffffffffffff8111156110ce576110ce600080fd5b6020830191508360018202830111156110e9576110e9600080fd5b9250929050565b60ff8116610f77565b8035610e86816110f0565b60008060008060006080868803121561111f5761111f600080fd5b6111298787611093565b94506111388760208801611093565b9350604086013567ffffffffffffffff81111561115757611157600080fd5b6111638882890161109e565b935093505061117587606088016110f9565b90509295509295909350565b67ffffffffffffffff8116610ea6565b60208101610e868284611181565b600060808284031215610f2657610f26600080fd5b60008083601f8401126111c9576111c9600080fd5b50813567ffffffffffffffff8111156111e4576111e4600080fd5b6020830191508360208202830111156110e9576110e9600080fd5b60008060008060c0858703121561121857611218600080fd5b611222868661119f565b9350608085013567ffffffffffffffff81111561124157611241600080fd5b61124d878288016111b4565b935093505061125f8660a08701610f82565b905092959194509250565b6000806040838503121561128057611280600080fd5b610ff68484610f82565b600080600080606085870312156112a3576112a3600080fd5b843567ffffffffffffffff8111156112bd576112bd600080fd5b6112c987828801610f11565b945050602085013567ffffffffffffffff8111156112e9576112e9600080fd5b6112f5878288016111b4565b935093505061125f8660408701610f82565b506000610e866020830183610fcb565b67ffffffffffffffff8116610f77565b8035610e8681611317565b506000610e866020830183611327565b506000610e866020830183611093565b63ffffffff8116610ea6565b6000808335601e193685900301811261137957611379600080fd5b830160208101925035905067ffffffffffffffff81111561139c5761139c600080fd5b368190038213156110e9576110e9600080fd5b82818337506000910152565b8183526020830192506113cf8284836113af565b50601f01601f19160190565b506000610e8660208301836110f9565b60ff8116610ea6565b600060c083016114048380611307565b61140e8582610e9d565b5061141c6020840184611332565b6114296020860182611181565b506114376040840184611342565b6114446040860182611352565b506114526060840184611342565b61145f6060860182611352565b5061146d608084018461135e565b85830360808701526114808382846113bb565b9250505061149160a08401846113db565b61149e60a08601826113eb565b509392505050565b60208082528101610e8381846113f4565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e86816114b7565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610efb565b60208082528101610e8681611505565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611547565b604081016115bd8285610eac565b6103f66020830184611181565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610efb565b60208082528101610e86816115ca565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e8657610e8661160c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610efb565b60208082528101610e8681611645565b80820180821115610e8657610e8661160c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e868161169a565b60006020828403121561171757611717600080fd5b610e838383611093565b60008135610e8681610fc2565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e866001600160a01b038316611763565b90565b6001600160a01b031690565b6000610e868261174c565b6000610e868261176f565b61178e8261177a565b61179981835461172e565b8255505050565b60008135610e8681611317565b60007bffffffffffffffff000000000000000000000000000000000000000061173a8460a01b90565b6000610e8667ffffffffffffffff83165b67ffffffffffffffff1690565b6117fd826117d6565b6117998183546117ad565b60008135610e8681611087565b60007fffffffff0000000000000000000000000000000000000000000000000000000061173a8460e01b90565b600063ffffffff8216610e86565b61185982611842565b611799818354611815565b600063ffffffff8361173a565b61187a82611842565b611799818354611864565b6000808335601e19368590030181126118a0576118a0600080fd5b8301915050803567ffffffffffffffff8111156118bf576118bf600080fd5b6020820191506001810236038213156110e9576110e9600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061191a57607f821691505b602082108103610f2657610f266118f0565b6000610e866117608381565b6119418361192c565b815460001960089490940293841b1916921b91909117905550565b60006107a2818484611938565b8181101561059a5761197c60008261195c565b600101611969565b601f8211156107a2576000818152602090206020601f850104810160208510156119ab5750805b6108fa6020601f860104830182611969565b8267ffffffffffffffff8111156119d6576119d66118da565b6119e08254611906565b6119eb828285611984565b506000601f821160018114611a205760008315611a085750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a515787850135825560209485019460019092019101611a31565b5084821015611a6e576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6107a28383836119bd565b60008135610e86816110f0565b600060ff8216610e86565b611aaa82611a96565b815460ff191660ff821617611799565b808280611ac681611721565b9050611ad28184611785565b50506020830180611ae2826117a0565b9050611aee81846117f4565b50506040830180611afe82611808565b9050611b0a8184611850565b5050506060820180611b1b82611808565b9050611b2a8160018501611871565b5050611b396080830183611885565b611b47818360028601611a7e565b505060a0820180611b5782611a89565b9050611b668160038501611aa1565b50505050565b61059a8282611aba565b60c08101611b84828a610e9d565b611b916020830189611181565b611b9e6040830188611352565b611bab6060830187611352565b8181036080830152611bbe8185876113bb565b9050611bcd60a08301846113eb565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611bd9565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506114ef565b60208082528101610e8681611c41565b506000610e866020830183610f82565b611ca78180611307565b611cb18382610e9d565b50611cbf6020820182611307565b611ccc6020840182610e9d565b50611cda6040820182611c8d565b611ce76040840182610eac565b50611cf56060820182611332565b6107a26060840182611181565b60808101610e868284611c9d565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611d10565b9050610e866020830184610eac565b611d6b8183610eac565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506114ef565b60208082528101610e8681611d73565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ddb565b6000610e86826117e7565b610ea681611e43565b60208101610e868284611e4e565b600060208284031215611e7a57611e7a600080fd5b610e838383611327565b600060208284031215611e9957611e99600080fd5b610e8383836110f9565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611ea3565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ee5565b67ffffffffffffffff918216919081169082820190811115610e8657610e8661160c565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205e8a2a9bc33c3a988cb2b5342dbf402d725b529ed253b9949551653847bb8a0764736f6c634300081c0033a264697066735822122072a39f97044b9862ab3c9bc3242d88725f800009f8e486e429ccbf92b16e119c64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin b/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin index cc8d327af..b39f2f4d5 100644 --- a/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin +++ b/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506200001d336200002d565b620000276200009e565b62000152565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000ef5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146200014f5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ff580620001626000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610ebc565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f0b565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f36565b61039e565b6040516101ae9190610f71565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f97565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f36565b610443565b6040516101ae9190610fc0565b61015e610212366004610fe2565b610495565b34801561022357600080fd5b5061015e61023236600461101f565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae9190611040565b34801561029d57600080fd5b5061015e6102ac36600461104e565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fe2565b610727565b3480156102dd57600080fd5b506102f16102ec366004611107565b6107a7565b6040516101ae919061119b565b34801561030a57600080fd5b5061015e610319366004611209565b610800565b34801561032a57600080fd5b5061015e610339366004611279565b610901565b34801561034a57600080fd5b5061015e61035936600461101f565b610947565b34801561036a57600080fd5b5061015e61037936600461129b565b610a89565b34801561038a57600080fd5b5061015e61039936600461101f565b610bcc565b600080826040516020016103b291906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b815260040161017890611507565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611549565b600090815260036020526040812055565b6000808260405160200161045791906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b8152600401610178906115b1565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115c1565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b81526004016101789061160e565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611634565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611689565b60006106418342611699565b905060008460405160200161065691906114b8565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b815260040161017890611704565b6000818152602081815260408220849055600191906106bb9088018861101f565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611714565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b87565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b81526004016101789061160e565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b91565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c4c565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c98565b60008460405160200161086e9190611d1d565b604051602081830303815290604052805190602001206040516020016108949190611d5d565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d7c565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611de6565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e4e565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e72565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c4c565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c98565b6000610af3602086018661101f565b610b036040870160208801611e80565b610b136060880160408901611714565b610b236080890160608a01611714565b610b3060808a018a611899565b610b4060c08c0160a08d01611ea1565b604051602001610b569796959493929190611b91565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ef4565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d7c565b610a815760405162461bcd60e51b815260040161017890611f5c565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f6c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610df3565b610c2081610e5a565b600081815b84811015610dea57610dd682878784818110610dca57610dca611f90565b90506020020135610e62565b915080610de281611fa6565b915050610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610df3565b6000818310610e7e576000828152602084905260409020610e8d565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e90565b610eb081610e96565b82525050565b80610eb0565b60408101610eca8285610ea7565b6103f66020830184610eb6565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e9081610ed7565b600060c08284031215610f3057610f30600080fd5b50919050565b600060208284031215610f4b57610f4b600080fd5b813567ffffffffffffffff811115610f6557610f65600080fd5b61048d84828501610f1b565b60208101610e908284610eb6565b805b8114610c2057600080fd5b8035610e9081610f7f565b600060208284031215610fac57610fac600080fd5b600061048d8484610f8c565b801515610eb0565b60208101610e908284610fb8565b610f8181610e96565b8035610e9081610fce565b60008060408385031215610ff857610ff8600080fd5b60006110048585610fd7565b925050602061101585828601610f8c565b9150509250929050565b60006020828403121561103457611034600080fd5b600061048d8484610fd7565b60208101610e908284610ea7565b6000806040838503121561106457611064600080fd5b823567ffffffffffffffff81111561107e5761107e600080fd5b61100485828601610f1b565b63ffffffff8116610f81565b8035610e908161108a565b60008083601f8401126110b6576110b6600080fd5b50813567ffffffffffffffff8111156110d1576110d1600080fd5b6020830191508360018202830111156110ec576110ec600080fd5b9250929050565b60ff8116610f81565b8035610e90816110f3565b60008060008060006080868803121561112257611122600080fd5b600061112e8888611096565b955050602061113f88828901611096565b945050604086013567ffffffffffffffff81111561115f5761115f600080fd5b61116b888289016110a1565b9350935050606061117e888289016110fc565b9150509295509295909350565b67ffffffffffffffff8116610eb0565b60208101610e90828461118b565b600060808284031215610f3057610f30600080fd5b60008083601f8401126111d3576111d3600080fd5b50813567ffffffffffffffff8111156111ee576111ee600080fd5b6020830191508360208202830111156110ec576110ec600080fd5b60008060008060c0858703121561122257611222600080fd5b600061122e87876111a9565b945050608085013567ffffffffffffffff81111561124e5761124e600080fd5b61125a878288016111be565b935093505060a061126d87828801610f8c565b91505092959194509250565b6000806040838503121561128f5761128f600080fd5b60006110048585610f8c565b600080600080606085870312156112b4576112b4600080fd5b843567ffffffffffffffff8111156112ce576112ce600080fd5b6112da87828801610f1b565b945050602085013567ffffffffffffffff8111156112fa576112fa600080fd5b611306878288016111be565b9350935050604061126d87828801610f8c565b506000610e906020830183610fd7565b67ffffffffffffffff8116610f81565b8035610e9081611329565b506000610e906020830183611339565b506000610e906020830183611096565b63ffffffff8116610eb0565b6000808335601e193685900301811261138b5761138b600080fd5b830160208101925035905067ffffffffffffffff8111156113ae576113ae600080fd5b368190038213156110ec576110ec600080fd5b82818337506000910152565b8183526020830192506113e18284836113c1565b50601f01601f19160190565b506000610e9060208301836110fc565b60ff8116610eb0565b600060c083016114168380611319565b6114208582610ea7565b5061142e6020840184611344565b61143b602086018261118b565b506114496040840184611354565b6114566040860182611364565b506114646060840184611354565b6114716060860182611364565b5061147f6080840184611370565b85830360808701526114928382846113cd565b925050506114a360a08401846113ed565b6114b060a08601826113fd565b509392505050565b60208082528101610e8d8184611406565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e90816114c9565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610f05565b60208082528101610e9081611517565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611501565b60208082528101610e9081611559565b604081016115cf8285610eb6565b6103f6602083018461118b565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610f05565b60208082528101610e90816115dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e9057610e9061161e565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610f05565b60208082528101610e9081611657565b80820180821115610e9057610e9061161e565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e90816116ac565b60006020828403121561172957611729600080fd5b600061048d8484611096565b60008135610e9081610fce565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e906001600160a01b038316611777565b90565b6001600160a01b031690565b6000610e9082611760565b6000610e9082611783565b6117a28261178e565b6117ad818354611742565b8255505050565b60008135610e9081611329565b60007bffffffffffffffff000000000000000000000000000000000000000061174e8460a01b90565b6000610e9067ffffffffffffffff83165b67ffffffffffffffff1690565b611811826117ea565b6117ad8183546117c1565b60008135610e908161108a565b60007fffffffff0000000000000000000000000000000000000000000000000000000061174e8460e01b90565b600063ffffffff8216610e90565b61186d82611856565b6117ad818354611829565b600063ffffffff8361174e565b61188e82611856565b6117ad818354611878565b6000808335601e19368590030181126118b4576118b4600080fd5b8301915050803567ffffffffffffffff8111156118d3576118d3600080fd5b6020820191506001810236038213156110ec576110ec600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061192e57607f821691505b602082108103610f3057610f30611904565b6000610e906117748381565b61195583611940565b815460001960089490940293841b1916921b91909117905550565b60006107a281848461194c565b8181101561059a57611990600082611970565b60010161197d565b601f8211156107a2576000818152602090206020601f850104810160208510156119bf5750805b6108fa6020601f86010483018261197d565b8267ffffffffffffffff8111156119ea576119ea6118ee565b6119f4825461191a565b6119ff828285611998565b506000601f821160018114611a345760008315611a1c5750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a655787850135825560209485019460019092019101611a45565b5084821015611a8257600019601f86166008021c19848801351681555b5050505060020260010190555050565b6107a28383836119d1565b60008135610e90816110f3565b600060ff8361174e565b600060ff8216610e90565b611ac882611ab4565b6117ad818354611aaa565b808280611adf81611735565b9050611aeb8184611799565b50506020830180611afb826117b4565b9050611b078184611808565b50506040830180611b178261181c565b9050611b238184611864565b505050600181016060830180611b388261181c565b9050611b448184611885565b5050506002810160808301611b598185611899565b9150611b66828285611a92565b5050506003810160a0830180611b7b82611a9d565b90506108fa8184611abf565b61059a8282611ad3565b60c08101611b9f828a610ea7565b611bac602083018961118b565b611bb96040830188611364565b611bc66060830187611364565b8181036080830152611bd98185876113cd565b9050611be860a08301846113fd565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611bf4565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611501565b60208082528101610e9081611c5c565b506000610e906020830183610f8c565b611cc28180611319565b611ccc8382610ea7565b50611cda6020820182611319565b611ce76020840182610ea7565b50611cf56040820182611ca8565b611d026040840182610eb6565b50611d106060820182611344565b6107a2606084018261118b565b60808101610e908284611cb8565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611d2b565b9050610e906020830184610eb6565b611d868183610eb6565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611501565b60208082528101610e9081611d8e565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611df6565b6000610e90826117fb565b610eb081611e5e565b60208101610e908284611e69565b600060208284031215611e9557611e95600080fd5b600061048d8484611339565b600060208284031215611eb657611eb6600080fd5b600061048d84846110fc565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611ec2565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611501565b60208082528101610e9081611f04565b67ffffffffffffffff918216919081169082820190811115610e9057610e9061161e565b634e487b7160e01b600052603260045260246000fd5b600060018201611fb857611fb861161e565b506001019056fea2646970667358221220b765f1dcb71fc1a477b68645e3b185262574a58a520c2f06b8b8758eaac24c8364736f6c63430008150033 \ No newline at end of file +608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611fbd806101596000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610eb2565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f01565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f2c565b61039e565b6040516101ae9190610f67565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f8d565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f2c565b610443565b6040516101ae9190610fb4565b61015e610212366004610fd6565b610495565b34801561022357600080fd5b5061015e61023236600461100e565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae919061102d565b34801561029d57600080fd5b5061015e6102ac36600461103b565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fd6565b610727565b3480156102dd57600080fd5b506102f16102ec366004611104565b6107a7565b6040516101ae9190611191565b34801561030a57600080fd5b5061015e6103193660046111ff565b610800565b34801561032a57600080fd5b5061015e61033936600461126a565b610901565b34801561034a57600080fd5b5061015e61035936600461100e565b610947565b34801561036a57600080fd5b5061015e61037936600461128a565b610a89565b34801561038a57600080fd5b5061015e61039936600461100e565b610bcc565b600080826040516020016103b291906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b8152600401610178906114f5565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611537565b600090815260036020526040812055565b6000808260405160200161045791906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b81526004016101789061159f565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115af565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b8152600401610178906115fc565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611622565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611677565b60006106418342611687565b905060008460405160200161065691906114a6565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b8152600401610178906116f2565b6000818152602081815260408220849055600191906106bb9088018861100e565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611702565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b6c565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b8152600401610178906115fc565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b76565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c31565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c7d565b60008460405160200161086e9190611d02565b604051602081830303815290604052805190602001206040516020016108949190611d42565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d61565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611dcb565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e33565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e57565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c31565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c7d565b6000610af3602086018661100e565b610b036040870160208801611e65565b610b136060880160408901611702565b610b236080890160608a01611702565b610b3060808a018a611885565b610b4060c08c0160a08d01611e84565b604051602001610b569796959493929190611b76565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ed5565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d61565b610a815760405162461bcd60e51b815260040161017890611f3d565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610de9565b610c2081610e50565b600081815b84811015610de057610dd682878784818110610dca57610dca611f71565b90506020020135610e58565b9150600101610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610de9565b6000818310610e74576000828152602084905260409020610e83565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e86565b610ea681610e8c565b82525050565b80610ea6565b60408101610ec08285610e9d565b6103f66020830184610eac565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e8681610ecd565b600060c08284031215610f2657610f26600080fd5b50919050565b600060208284031215610f4157610f41600080fd5b813567ffffffffffffffff811115610f5b57610f5b600080fd5b61048d84828501610f11565b60208101610e868284610eac565b805b8114610c2057600080fd5b8035610e8681610f75565b600060208284031215610fa257610fa2600080fd5b610e838383610f82565b801515610ea6565b60208101610e868284610fac565b610f7781610e8c565b8035610e8681610fc2565b60008060408385031215610fec57610fec600080fd5b610ff68484610fcb565b91506110058460208501610f82565b90509250929050565b60006020828403121561102357611023600080fd5b610e838383610fcb565b60208101610e868284610e9d565b6000806040838503121561105157611051600080fd5b823567ffffffffffffffff81111561106b5761106b600080fd5b61107785828601610f11565b9250506110058460208501610f82565b63ffffffff8116610f77565b8035610e8681611087565b60008083601f8401126110b3576110b3600080fd5b50813567ffffffffffffffff8111156110ce576110ce600080fd5b6020830191508360018202830111156110e9576110e9600080fd5b9250929050565b60ff8116610f77565b8035610e86816110f0565b60008060008060006080868803121561111f5761111f600080fd5b6111298787611093565b94506111388760208801611093565b9350604086013567ffffffffffffffff81111561115757611157600080fd5b6111638882890161109e565b935093505061117587606088016110f9565b90509295509295909350565b67ffffffffffffffff8116610ea6565b60208101610e868284611181565b600060808284031215610f2657610f26600080fd5b60008083601f8401126111c9576111c9600080fd5b50813567ffffffffffffffff8111156111e4576111e4600080fd5b6020830191508360208202830111156110e9576110e9600080fd5b60008060008060c0858703121561121857611218600080fd5b611222868661119f565b9350608085013567ffffffffffffffff81111561124157611241600080fd5b61124d878288016111b4565b935093505061125f8660a08701610f82565b905092959194509250565b6000806040838503121561128057611280600080fd5b610ff68484610f82565b600080600080606085870312156112a3576112a3600080fd5b843567ffffffffffffffff8111156112bd576112bd600080fd5b6112c987828801610f11565b945050602085013567ffffffffffffffff8111156112e9576112e9600080fd5b6112f5878288016111b4565b935093505061125f8660408701610f82565b506000610e866020830183610fcb565b67ffffffffffffffff8116610f77565b8035610e8681611317565b506000610e866020830183611327565b506000610e866020830183611093565b63ffffffff8116610ea6565b6000808335601e193685900301811261137957611379600080fd5b830160208101925035905067ffffffffffffffff81111561139c5761139c600080fd5b368190038213156110e9576110e9600080fd5b82818337506000910152565b8183526020830192506113cf8284836113af565b50601f01601f19160190565b506000610e8660208301836110f9565b60ff8116610ea6565b600060c083016114048380611307565b61140e8582610e9d565b5061141c6020840184611332565b6114296020860182611181565b506114376040840184611342565b6114446040860182611352565b506114526060840184611342565b61145f6060860182611352565b5061146d608084018461135e565b85830360808701526114808382846113bb565b9250505061149160a08401846113db565b61149e60a08601826113eb565b509392505050565b60208082528101610e8381846113f4565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e86816114b7565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610efb565b60208082528101610e8681611505565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611547565b604081016115bd8285610eac565b6103f66020830184611181565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610efb565b60208082528101610e86816115ca565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e8657610e8661160c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610efb565b60208082528101610e8681611645565b80820180821115610e8657610e8661160c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e868161169a565b60006020828403121561171757611717600080fd5b610e838383611093565b60008135610e8681610fc2565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e866001600160a01b038316611763565b90565b6001600160a01b031690565b6000610e868261174c565b6000610e868261176f565b61178e8261177a565b61179981835461172e565b8255505050565b60008135610e8681611317565b60007bffffffffffffffff000000000000000000000000000000000000000061173a8460a01b90565b6000610e8667ffffffffffffffff83165b67ffffffffffffffff1690565b6117fd826117d6565b6117998183546117ad565b60008135610e8681611087565b60007fffffffff0000000000000000000000000000000000000000000000000000000061173a8460e01b90565b600063ffffffff8216610e86565b61185982611842565b611799818354611815565b600063ffffffff8361173a565b61187a82611842565b611799818354611864565b6000808335601e19368590030181126118a0576118a0600080fd5b8301915050803567ffffffffffffffff8111156118bf576118bf600080fd5b6020820191506001810236038213156110e9576110e9600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061191a57607f821691505b602082108103610f2657610f266118f0565b6000610e866117608381565b6119418361192c565b815460001960089490940293841b1916921b91909117905550565b60006107a2818484611938565b8181101561059a5761197c60008261195c565b600101611969565b601f8211156107a2576000818152602090206020601f850104810160208510156119ab5750805b6108fa6020601f860104830182611969565b8267ffffffffffffffff8111156119d6576119d66118da565b6119e08254611906565b6119eb828285611984565b506000601f821160018114611a205760008315611a085750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a515787850135825560209485019460019092019101611a31565b5084821015611a6e576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6107a28383836119bd565b60008135610e86816110f0565b600060ff8216610e86565b611aaa82611a96565b815460ff191660ff821617611799565b808280611ac681611721565b9050611ad28184611785565b50506020830180611ae2826117a0565b9050611aee81846117f4565b50506040830180611afe82611808565b9050611b0a8184611850565b5050506060820180611b1b82611808565b9050611b2a8160018501611871565b5050611b396080830183611885565b611b47818360028601611a7e565b505060a0820180611b5782611a89565b9050611b668160038501611aa1565b50505050565b61059a8282611aba565b60c08101611b84828a610e9d565b611b916020830189611181565b611b9e6040830188611352565b611bab6060830187611352565b8181036080830152611bbe8185876113bb565b9050611bcd60a08301846113eb565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611bd9565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506114ef565b60208082528101610e8681611c41565b506000610e866020830183610f82565b611ca78180611307565b611cb18382610e9d565b50611cbf6020820182611307565b611ccc6020840182610e9d565b50611cda6040820182611c8d565b611ce76040840182610eac565b50611cf56060820182611332565b6107a26060840182611181565b60808101610e868284611c9d565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611d10565b9050610e866020830184610eac565b611d6b8183610eac565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506114ef565b60208082528101610e8681611d73565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ddb565b6000610e86826117e7565b610ea681611e43565b60208101610e868284611e4e565b600060208284031215611e7a57611e7a600080fd5b610e838383611327565b600060208284031215611e9957611e99600080fd5b610e8383836110f9565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611ea3565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ee5565b67ffffffffffffffff918216919081169082820190811115610e8657610e8661160c565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205e8a2a9bc33c3a988cb2b5342dbf402d725b529ed253b9949551653847bb8a0764736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin b/contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin index 89776c626..ae6dce680 100644 --- a/contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin +++ b/contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c63430008150033 \ No newline at end of file +608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin b/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin index 3a51eb8c4..ecf008f75 100644 --- a/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin +++ b/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50610ff9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078b565b61010c565b005b61009f61009a366004610885565b610211565b6040516100ac9190610937565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac919061095e565b61008a6100e336600461096c565b610291565b6000546001600160a01b03166100c8565b61008a6101073660046109af565b610387565b610118848484846104e7565b61012560208501856109af565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109d0565b8101906101619190610bb1565b905060008082600001516001600160a01b03165a84602001516040516101879190610c0e565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610937565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c5f565b60405160208183030381529060405290509392505050565b61029a816105e0565b6102a760208201826109af565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d660808301836109d0565b8101906102e39190610bb1565b905060008082600001516001600160a01b03165a84602001516040516103099190610c0e565b60006040518083038160008787f1925050503d8060008114610347576040519150601f19603f3d011682016040523d82523d6000602084013e61034c565b606091505b509150915081610371578060405163a5fa8d2b60e01b81526004016101ef9190610937565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d25750825b905060008267ffffffffffffffff1660011480156103ef5750303b155b9050811580156103fd575080155b15610434576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046857845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104df57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d690600190610c8b565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610536908790879087908790600401610eba565b60006040518083038186803b15801561054e57600080fd5b505afa158015610562573d6000803e3d6000fd5b505050506000846040516020016105799190610ef8565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c15760405162461bcd60e51b81526004016101ef90610f3d565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c7290610629908490600401610ef8565b602060405180830381865afa158015610646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066a9190610f60565b6106865760405162461bcd60e51b81526004016101ef90610fb3565b6000816040516020016106999190610ef8565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e15760405162461bcd60e51b81526004016101ef90610f3d565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071257610712600080fd5b50919050565b60008083601f84011261072d5761072d600080fd5b50813567ffffffffffffffff81111561074857610748600080fd5b60208301915083602082028301111561076357610763600080fd5b9250929050565b805b811461077757600080fd5b50565b80356107858161076a565b92915050565b600080600080606085870312156107a4576107a4600080fd5b843567ffffffffffffffff8111156107be576107be600080fd5b6107ca878288016106fd565b945050602085013567ffffffffffffffff8111156107ea576107ea600080fd5b6107f687828801610718565b935093505060406108098782880161077a565b91505092959194509250565b60006001600160a01b038216610785565b61076c81610815565b803561078581610826565b60008083601f84011261084f5761084f600080fd5b50813567ffffffffffffffff81111561086a5761086a600080fd5b60208301915083600182028301111561076357610763600080fd5b60008060006040848603121561089d5761089d600080fd5b60006108a9868661082f565b935050602084013567ffffffffffffffff8111156108c9576108c9600080fd5b6108d58682870161083a565b92509250509250925092565b60005b838110156108fc5781810151838201526020016108e4565b50506000910152565b600061090f825190565b8084526020840193506109268185602086016108e1565b601f01601f19169290920192915050565b602080825281016109488184610905565b9392505050565b61095881610815565b82525050565b60208101610785828461094f565b60006020828403121561098157610981600080fd5b813567ffffffffffffffff81111561099b5761099b600080fd5b6109a7848285016106fd565b949350505050565b6000602082840312156109c4576109c4600080fd5b60006109a7848461082f565b6000808335601e19368590030181126109eb576109eb600080fd5b8301915050803567ffffffffffffffff811115610a0a57610a0a600080fd5b60208201915060018102360382131561076357610763600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a7a57610a7a610a25565b6040525050565b6000610a8c60405190565b9050610a988282610a54565b919050565b600067ffffffffffffffff821115610ab757610ab7610a25565b601f19601f83011660200192915050565b82818337506000910152565b6000610ae7610ae284610a9d565b610a81565b905082815260208101848484011115610b0257610b02600080fd5b610b0d848285610ac8565b509392505050565b600082601f830112610b2957610b29600080fd5b81356109a7848260208601610ad4565b600060608284031215610b4e57610b4e600080fd5b610b586060610a81565b90506000610b66848461082f565b90820152602082013567ffffffffffffffff811115610b8757610b87600080fd5b610b9384828501610b15565b6020830152506040610ba78482850161077a565b9082015292915050565b600060208284031215610bc657610bc6600080fd5b813567ffffffffffffffff811115610be057610be0600080fd5b6109a784828501610b39565b6000610bf6825190565b610c048185602086016108e1565b9290920192915050565b6107858183610bec565b80610958565b80516000906060840190610c32858261094f565b5060208301518482036020860152610c4a8282610905565b9150506040830151610b0d6040860182610c18565b602080825281016109488184610c1e565b600067ffffffffffffffff8216610785565b61095881610c70565b602081016107858284610c82565b506000610785602083018361082f565b67ffffffffffffffff811661076c565b803561078581610ca9565b5060006107856020830183610cb9565b67ffffffffffffffff8116610958565b63ffffffff811661076c565b803561078581610ce4565b5060006107856020830183610cf0565b63ffffffff8116610958565b6000808335601e1936859003018112610d3257610d32600080fd5b830160208101925035905067ffffffffffffffff811115610d5557610d55600080fd5b3681900382131561076357610763600080fd5b818352602083019250610d7c828483610ac8565b50601f01601f19160190565b60ff811661076c565b803561078581610d88565b5060006107856020830183610d91565b60ff8116610958565b600060c08301610dc58380610c99565b610dcf858261094f565b50610ddd6020840184610cc4565b610dea6020860182610cd4565b50610df86040840184610cfb565b610e056040860182610d0b565b50610e136060840184610cfb565b610e206060860182610d0b565b50610e2e6080840184610d17565b8583036080870152610e41838284610d68565b92505050610e5260a0840184610d9c565b610b0d60a0860182610dac565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610ea357610ea3600080fd5b602083029250610eb4838584610e5f565b50500190565b60608082528101610ecb8187610db5565b90508181036020830152610ee0818587610e68565b9050610eef6040830184610c18565b95945050505050565b602080825281016109488184610db5565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078581610f09565b80151561076c565b805161078581610f4d565b600060208284031215610f7557610f75600080fd5b60006109a78484610f55565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f37565b6020808252810161078581610f8156fea264697066735822122047f28995de7130c3998b1599d405fb370dedbc68b4a589631e78ea0032bfd28164736f6c63430008150033 \ No newline at end of file +6080604052348015600f57600080fd5b50610fe48061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078c565b61010c565b005b61009f61009a366004610884565b610211565b6040516100ac9190610933565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac9190610953565b61008a6100e3366004610961565b610292565b6000546001600160a01b03166100c8565b61008a6101073660046109a4565b610388565b610118848484846104e8565b61012560208501856109a4565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109c3565b8101906101619190610b96565b905060008082600001516001600160a01b03165a84602001516040516101879190610bf3565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610933565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c4c565b60405160208183030381529060405290505b9392505050565b61029b816105e1565b6102a860208201826109a4565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d760808301836109c3565b8101906102e49190610b96565b905060008082600001516001600160a01b03165a846020015160405161030a9190610bf3565b60006040518083038160008787f1925050503d8060008114610348576040519150601f19603f3d011682016040523d82523d6000602084013e61034d565b606091505b509150915081610372578060405163a5fa8d2b60e01b81526004016101ef9190610933565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d35750825b905060008267ffffffffffffffff1660011480156103f05750303b155b9050811580156103fe575080155b15610435576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046957845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104e057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d790600190610c78565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610537908790879087908790600401610ea7565b60006040518083038186803b15801561054f57600080fd5b505afa158015610563573d6000803e3d6000fd5b5050505060008460405160200161057a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c729061062a908490600401610ee5565b602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190610f4d565b6106875760405162461bcd60e51b81526004016101ef90610f9e565b60008160405160200161069a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071357610713600080fd5b50919050565b60008083601f84011261072e5761072e600080fd5b50813567ffffffffffffffff81111561074957610749600080fd5b60208301915083602082028301111561076457610764600080fd5b9250929050565b805b811461077857600080fd5b50565b80356107868161076b565b92915050565b600080600080606085870312156107a5576107a5600080fd5b843567ffffffffffffffff8111156107bf576107bf600080fd5b6107cb878288016106fe565b945050602085013567ffffffffffffffff8111156107eb576107eb600080fd5b6107f787828801610719565b9350935050610809866040870161077b565b905092959194509250565b60006001600160a01b038216610786565b61076d81610814565b803561078681610825565b60008083601f84011261084e5761084e600080fd5b50813567ffffffffffffffff81111561086957610869600080fd5b60208301915083600182028301111561076457610764600080fd5b60008060006040848603121561089c5761089c600080fd5b6108a6858561082e565b9250602084013567ffffffffffffffff8111156108c5576108c5600080fd5b6108d186828701610839565b92509250509250925092565b60005b838110156108f85781810151838201526020016108e0565b50506000910152565b600061090b825190565b8084526020840193506109228185602086016108dd565b601f01601f19169290920192915050565b6020808252810161028b8184610901565b61094d81610814565b82525050565b602081016107868284610944565b60006020828403121561097657610976600080fd5b813567ffffffffffffffff81111561099057610990600080fd5b61099c848285016106fe565b949350505050565b6000602082840312156109b9576109b9600080fd5b61028b838361082e565b6000808335601e19368590030181126109de576109de600080fd5b8301915050803567ffffffffffffffff8111156109fd576109fd600080fd5b60208201915060018102360382131561076457610764600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a6d57610a6d610a18565b6040525050565b6000610a7f60405190565b9050610a8b8282610a47565b919050565b600067ffffffffffffffff821115610aaa57610aaa610a18565b601f19601f83011660200192915050565b82818337506000910152565b6000610ada610ad584610a90565b610a74565b9050828152838383011115610af157610af1600080fd5b61028b836020830184610abb565b600082601f830112610b1357610b13600080fd5b61028b83833560208501610ac7565b600060608284031215610b3757610b37600080fd5b610b416060610a74565b9050610b4d838361082e565b8152602082013567ffffffffffffffff811115610b6c57610b6c600080fd5b610b7884828501610aff565b602083015250610b8b836040840161077b565b604082015292915050565b600060208284031215610bab57610bab600080fd5b813567ffffffffffffffff811115610bc557610bc5600080fd5b61099c84828501610b22565b6000610bdb825190565b610be98185602086016108dd565b9290920192915050565b6107868183610bd1565b8061094d565b80516000906060840190610c178582610944565b5060208301518482036020860152610c2f8282610901565b9150506040830151610c446040860182610bfd565b509392505050565b6020808252810161028b8184610c03565b600067ffffffffffffffff8216610786565b61094d81610c5d565b602081016107868284610c6f565b506000610786602083018361082e565b67ffffffffffffffff811661076d565b803561078681610c96565b5060006107866020830183610ca6565b67ffffffffffffffff811661094d565b63ffffffff811661076d565b803561078681610cd1565b5060006107866020830183610cdd565b63ffffffff811661094d565b6000808335601e1936859003018112610d1f57610d1f600080fd5b830160208101925035905067ffffffffffffffff811115610d4257610d42600080fd5b3681900382131561076457610764600080fd5b818352602083019250610d69828483610abb565b50601f01601f19160190565b60ff811661076d565b803561078681610d75565b5060006107866020830183610d7e565b60ff811661094d565b600060c08301610db28380610c86565b610dbc8582610944565b50610dca6020840184610cb1565b610dd76020860182610cc1565b50610de56040840184610ce8565b610df26040860182610cf8565b50610e006060840184610ce8565b610e0d6060860182610cf8565b50610e1b6080840184610d04565b8583036080870152610e2e838284610d55565b92505050610e3f60a0840184610d89565b610c4460a0860182610d99565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610e9057610e90600080fd5b602083029250610ea1838584610e4c565b50500190565b60608082528101610eb88187610da2565b90508181036020830152610ecd818587610e55565b9050610edc6040830184610bfd565b95945050505050565b6020808252810161028b8184610da2565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078681610ef6565b80151561076d565b805161078681610f3a565b600060208284031215610f6257610f62600080fd5b61028b8383610f42565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f24565b6020808252810161078681610f6c56fea264697066735822122055cdc73260ce1332c22b35dd79ea4bf3199b50f11a946e6ed8b35482d371c1f864736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/system/Logger.sol/Logger.bin b/contracts/exported/src/system/Logger.sol/Logger.bin index 28e294916..d46b709c4 100644 --- a/contracts/exported/src/system/Logger.sol/Logger.bin +++ b/contracts/exported/src/system/Logger.sol/Logger.bin @@ -1 +1 @@ -6101af61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632e3c2a4d1461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046100eb565b61005c565b005b7f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480828260405161008d92919061015f565b60405180910390a15050565b60008083601f8401126100ae576100ae600080fd5b50813567ffffffffffffffff8111156100c9576100c9600080fd5b6020830191508360018202830111156100e4576100e4600080fd5b9250929050565b6000806020838503121561010157610101600080fd5b823567ffffffffffffffff81111561011b5761011b600080fd5b61012785828601610099565b92509250509250929050565b82818337506000910152565b818352602083019250610153828483610133565b50601f01601f19160190565b6020808252810161017181848661013f565b94935050505056fea264697066735822122007133e6865990a286b3061b3149c23af2b18d81bea79f5ffd90ef8bcbf5c455264736f6c63430008150033 \ No newline at end of file +6101af610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632e3c2a4d1461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046100eb565b61005c565b005b7f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480828260405161008d92919061015f565b60405180910390a15050565b60008083601f8401126100ae576100ae600080fd5b50813567ffffffffffffffff8111156100c9576100c9600080fd5b6020830191508360018202830111156100e4576100e4600080fd5b9250929050565b6000806020838503121561010157610101600080fd5b823567ffffffffffffffff81111561011b5761011b600080fd5b61012785828601610099565b92509250509250929050565b82818337506000910152565b818352602083019250610153828483610133565b50601f01601f19160190565b6020808252810161017181848661013f565b94935050505056fea264697066735822122074c816dc8a29f612e0f1c16fd3894703d303c4edadf0c07edb14dbda4a97219564736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin index 7772cb182..62f2421c0 100644 --- a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin +++ b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162004a2e38038062004a2e83398101604081905262000034916200032c565b6200003f816200005c565b6200004a8162000123565b6200005581620001dc565b50620004d1565b60006040516200006c90620002ba565b604051809103906000f08015801562000089573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401620000a991906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000f38385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003ae565b60405180910390a150505050565b60006040516200013390620002c8565b604051809103906000f08015801562000150573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016200017091906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620001ba8385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003f1565b6000604051620001ec90620002d6565b604051809103906000f08015801562000209573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906200024f908490869085906200027116565b905060008051602062004a0e8339815191528160405162000115919062000428565b6000808484846040516200028590620002e4565b620002939392919062000495565b604051809103906000f080158015620002b0573d6000803e3d6000fd5b5095945050505050565b610e61806200051f83390190565b61180b806200138083390190565b610b578062002b8b83390190565b61132c80620036e283390190565b60006001600160a01b0382165b92915050565b6200031081620002f2565b81146200031c57600080fd5b50565b8051620002ff8162000305565b600060208284031215620003435762000343600080fd5b60006200035184846200031f565b949350505050565b6200036481620002f2565b82525050565b60208101620002ff828462000359565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b60408082528101620003c0816200037a565b9050620002ff602083018462000359565b600a815260208101694d65737361676542757360b01b81529050620003a8565b60408082528101620003c081620003d1565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050620003a8565b60408082528101620003c08162000403565b60005b83811015620004575781810151838201526020016200043d565b50506000910152565b60006200046b825190565b808452602084019350620004848185602086016200043a565b601f01601f19169290920192915050565b60608101620004a5828662000359565b620004b4602083018562000359565b8181036040830152620004c8818462000460565b95945050505050565b603f80620004e06000396000f3fe6080604052600080fdfea2646970667358221220c273fe59a844f09235798ada225f43dc52966aea8ebad34d2f80e332b991792d64736f6c63430008150033608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c63430008150033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610a78806100df6000396000f3fe60806040526004361061003e5760003560e01c8062e0d3b514610043578063349e7eca1461007b5780638129fc1c1461009257806382fbdc9c146100a7575b600080fd5b34801561004f57600080fd5b5061006361005e3660046105f0565b6100ba565b60405161007293929190610695565b60405180910390f35b34801561008757600080fd5b5061009061016f565b005b34801561009e57600080fd5b50610090610378565b6100906100b5366004610716565b6104ba565b600060208190529081526040902080546001820180546001600160a01b0390921692916100e690610774565b80601f016020809104026020016040519081016040528092919081815260200182805461011290610774565b801561015f5780601f106101345761010080835404028352916020019161015f565b820191906000526020600020905b81548152906001019060200180831161014257829003601f168201915b5050505050908060020154905083565b600061017c6001306107b6565b9050336001600160a01b038216146101af5760405162461bcd60e51b81526004016101a69061080d565b60405180910390fd5b600254600154116103755760028054600091826101cb8361081d565b91905055905060025481106101f25760405162461bcd60e51b81526004016101a690610868565b60008181526020818152604080832081516060810190925280546001600160a01b03168252600181018054929391929184019161022e90610774565b80601f016020809104026020016040519081016040528092919081815260200182805461025a90610774565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b0316826040015183602001516040516102e3919061089a565b60006040518083038185875af1925050503d8060008114610320576040519150601f19603f3d011682016040523d82523d6000602084013e610325565b606091505b505090508015610371576000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103666001830182610599565b600282016000905550505b5050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c35750825b905060008267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b15610425576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045957845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104aa906001906108c8565b60405180910390a15b5050505050565b6104c6338383346104ca565b5050565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020909101839052600180548291826105348361081d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105859082610982565b506040820151816002015590505050505050565b5080546105a590610774565b6000825580601f106105b5575050565b601f01602090049060005260206000209081019061037591905b808211156105e357600081556001016105cf565b5090565b80355b92915050565b60006020828403121561060557610605600080fd5b600061061184846105e7565b949350505050565b60006001600160a01b0382166105ea565b61063381610619565b82525050565b60005b8381101561065457818101518382015260200161063c565b50506000910152565b6000610667825190565b80845260208401935061067e818560208601610639565b601f01601f19169290920192915050565b80610633565b606081016106a3828661062a565b81810360208301526106b5818561065d565b9050610611604083018461068f565b60008083601f8401126106d9576106d9600080fd5b50813567ffffffffffffffff8111156106f4576106f4600080fd5b60208301915083600182028301111561070f5761070f600080fd5b9250929050565b6000806020838503121561072c5761072c600080fd5b823567ffffffffffffffff81111561074657610746600080fd5b610752858286016106c4565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061078857607f821691505b60208210810361079a5761079a61075e565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156105ea576105ea6107a0565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105ea816107d9565b60006001820161082f5761082f6107a0565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610807565b602080825281016105ea81610836565b6000610882825190565b610890818560208601610639565b9290920192915050565b6105ea8183610878565b60006105ea826108b2565b90565b67ffffffffffffffff1690565b610633816108a4565b602081016105ea82846108bf565b634e487b7160e01b600052604160045260246000fd5b60006105ea6108af8381565b610901836108ec565b815460001960089490940293841b1916921b91909117905550565b60006109298184846108f8565b505050565b818110156104c65761094160008261091c565b60010161092e565b601f821115610929576000818152602090206020601f850104810160208510156109705750805b6104b36020601f86010483018261092e565b815167ffffffffffffffff81111561099c5761099c6108d6565b6109a68254610774565b6109b1828285610949565b506020601f8211600181146109e657600083156109ce5750848201515b600019600885021c19811660028502178555506104b3565b600084815260208120601f198516915b82811015610a1657878501518255602094850194600190920191016109f6565b5084821015610a335783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220d17e8eed9b79a79400ab369369f2cd2a5f9a78b3253b0346382f1e69c1cf77d864736f6c6343000815003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69 \ No newline at end of file +608060405234801561001057600080fd5b50604051614c16380380614c1683398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614bf6833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610e6a80612b0283390190565b61128a8061396c83390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212208d3b059fdd6dd1700d2667a504d38651d0b99a164918fd748bad9151694bcfa664736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610d91806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ad57806382fbdc9c146100c2578063929d34e9146100d557600080fd5b8062e0d3b51461005e578063349e7eca14610096575b600080fd5b34801561006a57600080fd5b5061007e6100793660046107f7565b6100f5565b60405161008d93929190610899565b60405180910390f35b3480156100a257600080fd5b506100ab6101aa565b005b3480156100b957600080fd5b506100ab61036b565b6100ab6100d0366004610922565b6104ad565b3480156100e157600080fd5b506100ab6100f03660046107f7565b6104bd565b600060208190529081526040902080546001820180546001600160a01b03909216929161012190610980565b80601f016020809104026020016040519081016040528092919081815260200182805461014d90610980565b801561019a5780601f1061016f5761010080835404028352916020019161019a565b820191906000526020600020905b81548152906001019060200180831161017d57829003601f168201915b5050505050908060020154905083565b60006101b76001306109c2565b9050336001600160a01b038216146101ea5760405162461bcd60e51b81526004016101e190610a19565b60405180910390fd5b6002546001541161036857600280546000918261020683610a29565b919050559050600254811061022d5760405162461bcd60e51b81526004016101e190610a74565b600081815260208190526040812060028101549091489161024f908390610a9a565b905060005a84546040519192506000916001600160a01b0390911690849061027b906001890190610b20565b60006040518083038160008787f1925050503d80600081146102b9576040519150601f19603f3d011682016040523d82523d6000602084013e6102be565b606091505b50509050801561030a576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906102ff60018301826107a0565b600282016000905550505b60005a905060008561031c8386610b2a565b6103269190610b3d565b875490915061033f9082906001600160a01b0316610611565b80876002015461034f9190610b2a565b6002880181905561035f906106a4565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103b65750825b905060008267ffffffffffffffff1660011480156103d35750303b155b9050811580156103e1575080155b15610418576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044c57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104a657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061049d90600190610b78565b60405180910390a15b5050505050565b6104b9338383346106d1565b5050565b60008181526020818152604080832081516060810190925280546001600160a01b0316825260018101805492939192918401916104f990610980565b80601f016020809104026020016040519081016040528092919081815260200182805461052590610980565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b031682602001516040516105a99190610ba8565b6000604051808303816000865af19150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b505090508061060c5760405162461bcd60e51b81526004016101e190610be4565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610663576040519150601f19603f3d011682016040523d82523d6000602084013e610668565b606091505b505090508061060c57604051419084156108fc029085906000818181858888f1935050505015801561069e573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104b9573d6000803e3d6000fd5b6040518060600160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060209091018390526001805482918261073b83610a29565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617815590820151600182019061078c9082610c9b565b506040820151816002015590505050505050565b5080546107ac90610980565b6000825580601f106107bc575050565b601f01602090049060005260206000209081019061036891905b808211156107ea57600081556001016107d6565b5090565b80355b92915050565b60006020828403121561080c5761080c600080fd5b61081683836107ee565b9392505050565b60006001600160a01b0382166107f1565b6108378161081d565b82525050565b60005b83811015610858578181015183820152602001610840565b50506000910152565b600061086b825190565b80845260208401935061088281856020860161083d565b601f01601f19169290920192915050565b80610837565b606081016108a7828661082e565b81810360208301526108b98185610861565b90506108c86040830184610893565b949350505050565b60008083601f8401126108e5576108e5600080fd5b50813567ffffffffffffffff81111561090057610900600080fd5b60208301915083600182028301111561091b5761091b600080fd5b9250929050565b6000806020838503121561093857610938600080fd5b823567ffffffffffffffff81111561095257610952600080fd5b61095e858286016108d0565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061099457607f821691505b6020821081036109a6576109a661096a565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156107f1576107f16109ac565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016107f1816109e5565b600060018201610a3b57610a3b6109ac565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a13565b602080825281016107f181610a42565b634e487b7160e01b600052601260045260246000fd5b600082610aa957610aa9610a84565b500490565b60008154610abb81610980565b600182168015610ad25760018114610ae757610b17565b60ff1983168652811515820286019350610b17565b60008581526020902060005b83811015610b0f57815488820152600190910190602001610af3565b505081860193505b50505092915050565b6107f18183610aae565b818103818111156107f1576107f16109ac565b81810281158282048414176107f1576107f16109ac565b60006107f182610b62565b90565b67ffffffffffffffff1690565b61083781610b54565b602081016107f18284610b6f565b6000610b90825190565b610b9e81856020860161083d565b9290920192915050565b6107f18183610b86565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a13565b602080825281016107f181610bb2565b634e487b7160e01b600052604160045260246000fd5b60006107f1610b5f8381565b610c1f83610c0a565b815460001960089490940293841b1916921b91909117905550565b600061060c818484610c16565b818110156104b957610c5a600082610c3a565b600101610c47565b601f82111561060c576000818152602090206020601f85010481016020851015610c895750805b6104a66020601f860104830182610c47565b815167ffffffffffffffff811115610cb557610cb5610bf4565b610cbf8254610980565b610cca828285610c62565b506020601f821160018114610cff5760008315610ce75750848201515b600019600885021c19811660028502178555506104a6565b600084815260208120601f198516915b82811015610d2f5787850151825560209485019460019092019101610d0f565b5084821015610d4c5783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200245eda5298d1b0b2c981784e582dfd9ea7daca2160ad0978d83e72c11e9122864736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69 \ No newline at end of file diff --git a/contracts/exported/src/system/Transaction.sol/Structs.bin b/contracts/exported/src/system/Transaction.sol/Structs.bin index 84deb1cf2..2c25bca86 100644 --- a/contracts/exported/src/system/Transaction.sol/Structs.bin +++ b/contracts/exported/src/system/Transaction.sol/Structs.bin @@ -1 +1 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122032175d88d3a7b1998650b0ab451e19f7513948dcc3f79b30ee2efb24ce71603c64736f6c63430008150033 \ No newline at end of file +60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220103f40f9f1f0afb9557ce8cbaf46aede3cb15787d4213cffd7b27789680f3abb64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin b/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin index 812060339..13ff7f05d 100644 --- a/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin +++ b/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033 \ No newline at end of file +6080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin b/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin index 01e4af89d..3057b2ae5 100644 --- a/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin +++ b/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561023c806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806373cc802a1461005157806383197ef0146100a85780638da5cb5b146100b0578063c1cfb99a146100a6575b600080fd5b6100a661005f366004610185565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100e6565b6000546100d09073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100dd91906101bd565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff163314610140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610137906101cb565b60405180910390fd5b30ff5b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b61016c81610143565b811461017757600080fd5b50565b803561015d81610163565b60006020828403121561019a5761019a600080fd5b60006101a6848461017a565b949350505050565b6101b781610143565b82525050565b6020810161015d82846101ae565b6020808252810161015d81601581527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060208201526040019056fea2646970667358221220b30748e6044bd6e6bd1865e299bdb154c2f030105056739fc4767cbf784e74fb64736f6c63430008150033 \ No newline at end of file +6080604052348015600f57600080fd5b50600080546001600160a01b03191633179055610239806100316000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806373cc802a1461005157806383197ef0146100a85780638da5cb5b146100b0578063c1cfb99a146100a6575b600080fd5b6100a661005f366004610185565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100e6565b6000546100d09073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100dd91906101ba565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff163314610140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610137906101c8565b60405180910390fd5b30ff5b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b61016c81610143565b811461017757600080fd5b50565b803561015d81610163565b60006020828403121561019a5761019a600080fd5b6101a4838361017a565b9392505050565b6101b481610143565b82525050565b6020810161015d82846101ab565b6020808252810161015d81601581527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060208201526040019056fea2646970667358221220eb83c2ccc2dee5bbd5dc37fdcbf0d1fe7c4fb313229649df273a57945213486564736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/zen/ZenBase.sol/ZenBase.bin b/contracts/exported/src/zen/ZenBase.sol/ZenBase.bin index 7fade9ade..b41209d7f 100644 --- a/contracts/exported/src/zen/ZenBase.sol/ZenBase.bin +++ b/contracts/exported/src/zen/ZenBase.sol/ZenBase.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200115f3803806200115f8339810160408190526200003491620001ad565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e9190620002e8565b5060046200008d8282620002e8565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd9190620003c5565b60405180910390fd5b620000d18162000121565b506001600160a01b038116620000fb5760405162461bcd60e51b8152600401620000bd90620003d5565b600680546001600160a01b0319166001600160a01b03929092169190911790556200041e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001918162000173565b81146200019d57600080fd5b50565b8051620001808162000186565b600060208284031215620001c457620001c4600080fd5b6000620001d28484620001a0565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200021b57607f821691505b602082108103620002305762000230620001f0565b50919050565b600062000180620002448381565b90565b620002528362000236565b815460001960089490940293841b1916921b91909117905550565b60006200027c81848462000247565b505050565b81811015620002a057620002976000826200026d565b60010162000281565b5050565b601f8211156200027c576000818152602090206020601f85010481016020851015620002cd5750805b620002e16020601f86010483018262000281565b5050505050565b81516001600160401b03811115620003045762000304620001da565b62000310825462000206565b6200031d828285620002a4565b506020601f8211600181146200035557600083156200033c5750848201515b600019600885021c1981166002850217855550620002e1565b600084815260208120601f198516915b8281101562000387578785015182556020948501946001909201910162000365565b5084821015620003a55783870151600019601f87166008021c191681555b50505050600202600101905550565b620003bf8162000173565b82525050565b60208101620001808284620003b4565b602080825281016200018081602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610d31806200042e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101866101b7366004610aca565b610310565b6101156101ca366004610968565b610435565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b87565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610be8565b60005b81811015610430576103af83838381811061038457610384610c23565b90506020028101906103969190610c39565b6103a89061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610c23565b90506020028101906103f49190610c39565b6104069061010081019060e001610a38565b6001604051610416929190610c76565b60405180910390a18061042881610ca7565b915050610367565b505050565b6000336102bb81858561052b565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b610497816105e9565b50565b610430838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b815260040161033a9190610a6a565b610430838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b815260040161033a9190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b0383166107135760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610a61565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610a61565b610cdb60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9156fea264697066735822122036c31eb715ecd8e46b6b1572d2c583e9792e8561c8256d9322cb3a53e739149e64736f6c63430008150033 \ No newline at end of file +608060405234801561001057600080fd5b506040516110e73803806110e783398101604081905261002f91610196565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b815250816003908161007791906102b8565b50600461008482826102b8565b5050506001600160a01b0381166100ba576000604051631e4fbdf760e01b81526004016100b19190610386565b60405180910390fd5b6100c38161010f565b506001600160a01b0381166100ea5760405162461bcd60e51b81526004016100b190610394565b600680546001600160a01b0319166001600160a01b03929092169190911790556103dc565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b61017d81610161565b811461018857600080fd5b50565b805161016e81610174565b6000602082840312156101ab576101ab600080fd5b6101b5838361018b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806101fc57607f821691505b60208210810361020e5761020e6101d2565b50919050565b600061016e6102208381565b90565b61022c83610214565b815460001960089490940293841b1916921b91909117905550565b6000610254818484610223565b505050565b818110156102745761026c600082610247565b600101610259565b5050565b601f821115610254576000818152602090206020601f8501048101602085101561029f5750805b6102b16020601f860104830182610259565b5050505050565b81516001600160401b038111156102d1576102d16101bc565b6102db82546101e8565b6102e6828285610278565b506020601f82116001811461031b57600083156103035750848201515b600019600885021c19811660028502178555506102b1565b600084815260208120601f198516915b8281101561034b578785015182556020948501946001909201910161032b565b50848210156103685783870151600019601f87166008021c191681555b50505050600202600101905550565b61038081610161565b82525050565b6020810161016e8284610377565b6020808252810161016e81602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610cfc806103eb6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f9919061090c565b60405180910390f35b61011561011036600461095e565b6102ad565b6040516100f991906109a0565b6002545b6040516100f991906109b4565b6101156101413660046109c2565b6102c7565b60126040516100f99190610a14565b610126610163366004610a22565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a4a565b6100ec610301565b6101866101b7366004610aaa565b610310565b6101156101ca36600461095e565b61042b565b6101266101dd366004610af2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a22565b610439565b60606003805461022a90610b37565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b37565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb818585610490565b60019150505b92915050565b6000336102d585828561049d565b6102e0858585610521565b60019150505b9392505050565b6102f5610599565b6102ff60006105df565b565b60606004805461022a90610b37565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b63565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610bc4565b60005b81811015610426576103af83838381811061038457610384610bff565b90506020028101906103969190610c15565b6103a89061010081019060e001610a22565b6001610649565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610bff565b90506020028101906103f49190610c15565b6104069061010081019060e001610a22565b6001604051610416929190610c52565b60405180910390a1600101610367565b505050565b6000336102bb818585610521565b610441610599565b6001600160a01b0381166104845760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b61048d816105df565b50565b6104268383836001610683565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461051b578181101561050c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b61051b84848484036000610683565b50505050565b6001600160a01b0383166105645760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b03821661058e57600060405163ec442f0560e01b815260040161033a9190610a4a565b610426838383610788565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067357600060405163ec442f0560e01b815260040161033a9190610a4a565b61067f60008383610788565b5050565b6001600160a01b0384166106c65760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b0383166107095760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561051b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161077a91906109b4565b60405180910390a350505050565b6001600160a01b0383166107b35780600260008282546107a89190610cb3565b9091555061082b9050565b6001600160a01b0383166000908152602081905260409020548181101561080c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661084757600280548290039055610866565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108a991906109b4565b60405180910390a3505050565b60005b838110156108d15781810151838201526020016108b9565b50506000910152565b60006108e4825190565b8084526020840193506108fb8185602086016108b6565b601f01601f19169290920192915050565b602080825281016102e681846108da565b60006001600160a01b0382166102c1565b6109378161091d565b811461048d57600080fd5b80356102c18161092e565b80610937565b80356102c18161094d565b6000806040838503121561097457610974600080fd5b61097e8484610942565b915061098d8460208501610953565b90509250929050565b8015155b82525050565b602081016102c18284610996565b8061099a565b602081016102c182846109ae565b6000806000606084860312156109da576109da600080fd5b6109e48585610942565b92506109f38560208601610942565b9150610a028560408601610953565b90509250925092565b60ff811661099a565b602081016102c18284610a0b565b600060208284031215610a3757610a37600080fd5b6102e68383610942565b61099a8161091d565b602081016102c18284610a41565b60008083601f840112610a6d57610a6d600080fd5b50813567ffffffffffffffff811115610a8857610a88600080fd5b602083019150836020820283011115610aa357610aa3600080fd5b9250929050565b60008060208385031215610ac057610ac0600080fd5b823567ffffffffffffffff811115610ada57610ada600080fd5b610ae685828601610a58565b92509250509250929050565b60008060408385031215610b0857610b08600080fd5b610b128484610942565b915061098d8460208501610942565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b4b57607f821691505b602082108103610b5d57610b5d610b21565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c3057610c30600080fd5b9190910192915050565b60006102c1610c468381565b90565b61099a81610c3a565b60408101610c608285610a41565b6102e66020830184610c49565b60608101610c7b8286610a41565b610c8860208301856109ae565b610c9560408301846109ae565b949350505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102c1576102c1610c9d56fea2646970667358221220f7b04cad41f1453ff919861d5ed5be8c01107adbd7a57bb76e5fce821d5bb64664736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin b/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin index 875c6ec48..3b01c37e5 100644 --- a/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin +++ b/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6113ea806100df6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610dda565b60405180910390f35b61012061011b366004610e2c565b61038a565b6040516101049190610e73565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e87565b61012061016b366004610e95565b6103a4565b60126040516101049190610eee565b61015061018d366004610efc565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103ca565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610f2e565b6100f76103de565b6101cf61021f366004610f8e565b61042f565b610120610232366004610e2c565b610554565b6101cf610245366004610efc565b610562565b610150610258366004610fd6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610efc565b610766565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916103069061101f565b80601f01602080910402602001604051908101604052809291908181526020018280546103329061101f565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b6000336103988185856107bd565b60019150505b92915050565b6000336103b28582856107ca565b6103bd85858561086d565b60019150505b9392505050565b6103d26108e5565b6103dc6000610959565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916103069061101f565b6000546001600160a01b031633146104625760405162461bcd60e51b8152600401610459906110a5565b60405180910390fd5b60008190036104835760405162461bcd60e51b8152600401610459906110b5565b60005b8181101561054f576104ce8383838181106104a3576104a36110f0565b90506020028101906104b59190611106565b6104c79061010081019060e001610efc565b60016109d7565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1838383818110610501576105016110f0565b90506020028101906105139190611106565b6105259061010081019060e001610efc565b6001604051610535929190611143565b60405180910390a18061054781611174565b915050610486565b505050565b60003361039881858561086d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105ad5750825b905060008267ffffffffffffffff1660011480156105ca5750303b155b9050811580156105d8575080155b1561060f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064357845468ff00000000000000001916680100000000000000001785555b6001600160a01b0386166106695760405162461bcd60e51b8152600401610459906111e5565b6106dd6040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610a11565b6106e633610a23565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561075e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061075590600190611210565b60405180910390a15b505050505050565b61076e6108e5565b6001600160a01b0381166107b15760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6107ba81610959565b50565b61054f8383836001610a34565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01602090815260408083209386168352929052205460001981146108675781811015610858578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016104599392919061121e565b61086784848484036000610a34565b50505050565b6001600160a01b0383166108b05760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b0382166108da57600060405163ec442f0560e01b81526004016104599190610f2e565b61054f838383610b5e565b336109177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103dc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b038216610a0157600060405163ec442f0560e01b81526004016104599190610f2e565b610a0d60008383610b5e565b5050565b610a19610cb2565b610a0d8282610d19565b610a2b610cb2565b6107ba81610d7c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a985760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b038416610adb5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610b5757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b4e9190610e87565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610bac5781816002016000828254610ba19190611246565b90915550610c249050565b6001600160a01b03841660009081526020829052604090205482811015610c05578481846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016104599392919061121e565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610c42576002810180548390039055610c61565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ca49190610e87565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103dc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d21610cb2565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d6d84826112f4565b506004810161086783826112f4565b61076e610cb2565b60005b83811015610d9f578181015183820152602001610d87565b50506000910152565b6000610db2825190565b808452602084019350610dc9818560208601610d84565b601f01601f19169290920192915050565b602080825281016103c38184610da8565b60006001600160a01b03821661039e565b610e0581610deb565b81146107ba57600080fd5b803561039e81610dfc565b80610e05565b803561039e81610e1b565b60008060408385031215610e4257610e42600080fd5b6000610e4e8585610e10565b9250506020610e5f85828601610e21565b9150509250929050565b8015155b82525050565b6020810161039e8284610e69565b80610e6d565b6020810161039e8284610e81565b600080600060608486031215610ead57610ead600080fd5b6000610eb98686610e10565b9350506020610eca86828701610e10565b9250506040610edb86828701610e21565b9150509250925092565b60ff8116610e6d565b6020810161039e8284610ee5565b600060208284031215610f1157610f11600080fd5b6000610f1d8484610e10565b949350505050565b610e6d81610deb565b6020810161039e8284610f25565b60008083601f840112610f5157610f51600080fd5b50813567ffffffffffffffff811115610f6c57610f6c600080fd5b602083019150836020820283011115610f8757610f87600080fd5b9250929050565b60008060208385031215610fa457610fa4600080fd5b823567ffffffffffffffff811115610fbe57610fbe600080fd5b610fca85828601610f3c565b92509250509250929050565b60008060408385031215610fec57610fec600080fd5b6000610ff88585610e10565b9250506020610e5f85828601610e10565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061103357607f821691505b60208210810361104557611045611009565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e8161104b565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e193684900301811261112157611121600080fd5b9190910192915050565b600061039e6111378381565b90565b610e6d8161112b565b604081016111518285610f25565b6103c3602083018461113a565b634e487b7160e01b600052601160045260246000fd5b6000600182016111865761118661115e565b5060010190565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152905061109f565b6020808252810161039e8161118d565b600067ffffffffffffffff821661039e565b610e6d816111f5565b6020810161039e8284611207565b6060810161122c8286610f25565b6112396020830185610e81565b610f1d6040830184610e81565b8082018082111561039e5761039e61115e565b634e487b7160e01b600052604160045260246000fd5b6112788361112b565b815460001960089490940293841b1916921b91909117905550565b600061054f81848461126f565b81811015610a0d576112b3600082611293565b6001016112a0565b601f82111561054f576000818152602090206020601f850104810160208510156112e25750805b610b576020601f8601048301826112a0565b815167ffffffffffffffff81111561130e5761130e611259565b611318825461101f565b6113238282856112bb565b506020601f82116001811461135857600083156113405750848201515b600019600885021c1981166002850217855550610b57565b600084815260208120601f198516915b828110156113885787850151825560209485019460019092019101611368565b50848210156113a55783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220c92d36796669f09a165d85f5ad6ccaec7365a19d0cba54a86db26b29f35b60dd64736f6c63430008150033 \ No newline at end of file +6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6113b5806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610dd0565b60405180910390f35b61012061011b366004610e22565b61038a565b6040516101049190610e64565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e78565b61012061016b366004610e86565b6103a4565b60126040516101049190610ed8565b61015061018d366004610ee6565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103ca565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610f0e565b6100f76103de565b6101cf61021f366004610f6e565b61042f565b610120610232366004610e22565b61054a565b6101cf610245366004610ee6565b610558565b610150610258366004610fb6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610ee6565b61075c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461033290610ffb565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b6000336103988185856107b3565b60019150505b92915050565b6000336103b28582856107c0565b6103bd858585610863565b60019150505b9392505050565b6103d26108db565b6103dc600061094f565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161045990611081565b60405180910390fd5b60008190036104835760405162461bcd60e51b815260040161045990611091565b60005b81811015610545576104ce8383838181106104a3576104a36110cc565b90506020028101906104b591906110e2565b6104c79061010081019060e001610ee6565b60016109cd565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1838383818110610501576105016110cc565b905060200281019061051391906110e2565b6105259061010081019060e001610ee6565b600160405161053592919061111f565b60405180910390a1600101610486565b505050565b600033610398818585610863565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105a35750825b905060008267ffffffffffffffff1660011480156105c05750303b155b9050811580156105ce575080155b15610605576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561063957845468ff00000000000000001916680100000000000000001785555b6001600160a01b03861661065f5760405162461bcd60e51b815260040161045990611192565b6106d36040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610a07565b6106dc33610a19565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561075457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061074b906001906111bd565b60405180910390a15b505050505050565b6107646108db565b6001600160a01b0381166107a75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6107b08161094f565b50565b6105458383836001610a2a565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093861683529290522054600019811461085d578181101561084e578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b61085d84848484036000610a2a565b50505050565b6001600160a01b0383166108a65760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b0382166108d057600060405163ec442f0560e01b81526004016104599190610f0e565b610545838383610b54565b3361090d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103dc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b0382166109f757600060405163ec442f0560e01b81526004016104599190610f0e565b610a0360008383610b54565b5050565b610a0f610ca8565b610a038282610d0f565b610a21610ca8565b6107b081610d72565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a8e5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b038416610ad15760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610b4d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b449190610e78565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610ba25781816002016000828254610b979190611211565b90915550610c1a9050565b6001600160a01b03841660009081526020829052604090205482811015610bfb578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610c38576002810180548390039055610c57565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c9a9190610e78565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103dc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d17610ca8565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d6384826112bf565b506004810161085d83826112bf565b610764610ca8565b60005b83811015610d95578181015183820152602001610d7d565b50506000910152565b6000610da8825190565b808452602084019350610dbf818560208601610d7a565b601f01601f19169290920192915050565b602080825281016103c38184610d9e565b60006001600160a01b03821661039e565b610dfb81610de1565b81146107b057600080fd5b803561039e81610df2565b80610dfb565b803561039e81610e11565b60008060408385031215610e3857610e38600080fd5b610e428484610e06565b9150610e518460208501610e17565b90509250929050565b8015155b82525050565b6020810161039e8284610e5a565b80610e5e565b6020810161039e8284610e72565b600080600060608486031215610e9e57610e9e600080fd5b610ea88585610e06565b9250610eb78560208601610e06565b9150610ec68560408601610e17565b90509250925092565b60ff8116610e5e565b6020810161039e8284610ecf565b600060208284031215610efb57610efb600080fd5b6103c38383610e06565b610e5e81610de1565b6020810161039e8284610f05565b60008083601f840112610f3157610f31600080fd5b50813567ffffffffffffffff811115610f4c57610f4c600080fd5b602083019150836020820283011115610f6757610f67600080fd5b9250929050565b60008060208385031215610f8457610f84600080fd5b823567ffffffffffffffff811115610f9e57610f9e600080fd5b610faa85828601610f1c565b92509250509250929050565b60008060408385031215610fcc57610fcc600080fd5b610fd68484610e06565b9150610e518460208501610e06565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061100f57607f821691505b60208210810361102157611021610fe5565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e81611027565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19368490030181126110fd576110fd600080fd5b9190910192915050565b600061039e6111138381565b90565b610e5e81611107565b6040810161112d8285610f05565b6103c36020830184611116565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152905061107b565b6020808252810161039e8161113a565b600067ffffffffffffffff821661039e565b610e5e816111a2565b6020810161039e82846111b4565b606081016111d98286610f05565b6111e66020830185610e72565b6111f36040830184610e72565b949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039e5761039e6111fb565b634e487b7160e01b600052604160045260246000fd5b61124383611107565b815460001960089490940293841b1916921b91909117905550565b600061054581848461123a565b81811015610a035761127e60008261125e565b60010161126b565b601f821115610545576000818152602090206020601f850104810160208510156112ad5750805b610b4d6020601f86010483018261126b565b815167ffffffffffffffff8111156112d9576112d9611224565b6112e38254610ffb565b6112ee828285611286565b506020601f821160018114611323576000831561130b5750848201515b600019600885021c1981166002850217855550610b4d565b600084815260208120601f198516915b828110156113535787850151825560209485019460019092019101611333565b50848210156113705783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122021c1edec5751580cda4d7c9c56cddd69057e1d7032b01be07c5b6f4124dfb25764736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/generated/Address/Address.go b/contracts/generated/Address/Address.go index 9f86d3ad5..05155acbd 100644 --- a/contracts/generated/Address/Address.go +++ b/contracts/generated/Address/Address.go @@ -32,7 +32,7 @@ var ( // AddressMetaData contains all meta data concerning the Address contract. var AddressMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d74e230a1c3698413be30397c8e30a7647b12e3f7cd265bc7728b971a53935b464736f6c63430008150033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e6433e77b77d7f243f1afe2a29c6dd689e492ac368400ed7ccecd0f7cdb49c0964736f6c634300081c0033", } // AddressABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go b/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go index c4e04c8c3..6c485d779 100644 --- a/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go +++ b/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go @@ -32,7 +32,7 @@ var ( // ConstantSupplyERC20MetaData contains all meta data concerning the ConstantSupplyERC20 contract. var ConstantSupplyERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162000ebb38038062000ebb833981016040819052620000349162000312565b8282600362000044838262000497565b50600462000053828262000497565b5050506200006833826200007160201b60201c565b50505062000607565b6001600160a01b038216620000a757600060405163ec442f0560e01b81526004016200009e919062000586565b60405180910390fd5b620000b560008383620000b9565b5050565b6001600160a01b038316620000e8578060026000828254620000dc9190620005ac565b909155506200014a9050565b6001600160a01b038316600090815260208190526040902054818110156200012b5783818360405163391434e360e21b81526004016200009e93929190620005c9565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001685760028054829003905562000187565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001cc9190620005f7565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620002175762000217620001d9565b6040525050565b60006200022a60405190565b9050620002388282620001ef565b919050565b60006001600160401b03821115620002595762000259620001d9565b601f19601f83011660200192915050565b60005b83811015620002875781810151838201526020016200026d565b50506000910152565b6000620002a7620002a1846200023d565b6200021e565b905082815260208101848484011115620002c457620002c4600080fd5b620002d18482856200026a565b509392505050565b600082601f830112620002ef57620002ef600080fd5b81516200030184826020860162000290565b949350505050565b80515b92915050565b6000806000606084860312156200032c576200032c600080fd5b83516001600160401b03811115620003475762000347600080fd5b6200035586828701620002d9565b602086015190945090506001600160401b03811115620003785762000378600080fd5b6200038686828701620002d9565b9250506040620003998682870162000309565b9150509250925092565b634e487b7160e01b600052602260045260246000fd5b600281046001821680620003ce57607f821691505b602082108103620003e357620003e3620003a3565b50919050565b60006200030c620003f78381565b90565b6200040583620003e9565b815460001960089490940293841b1916921b91909117905550565b60006200042f818484620003fa565b505050565b81811015620000b5576200044a60008262000420565b60010162000434565b601f8211156200042f576000818152602090206020601f850104810160208510156200047c5750805b620004906020601f86010483018262000434565b5050505050565b81516001600160401b03811115620004b357620004b3620001d9565b620004bf8254620003b9565b620004cc82828562000453565b506020601f821160018114620005045760008315620004eb5750848201515b600019600885021c198116600285021785555062000490565b600084815260208120601f198516915b8281101562000536578785015182556020948501946001909201910162000514565b5084821015620005545783870151600019601f87166008021c191681555b50505050600202600101905550565b60006001600160a01b0382166200030c565b620005808162000563565b82525050565b602081016200030c828462000575565b634e487b7160e01b600052601160045260246000fd5b808201808211156200030c576200030c62000596565b8062000580565b60608101620005d9828662000575565b620005e86020830185620005c2565b620003016040830184620005c2565b602081016200030c8284620005c2565b6108a480620006176000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610142578063a9059cbb1461014a578063dd62ed3e1461015d57600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b0610196565b6040516100bd919061063c565b60405180910390f35b6100d96100d4366004610698565b610228565b6040516100bd91906106df565b6002545b6040516100bd91906106f3565b6100d9610105366004610701565b610242565b60126040516100bd919061075a565b6100ea610127366004610768565b6001600160a01b031660009081526020819052604090205490565b6100b0610266565b6100d9610158366004610698565b610275565b6100ea61016b366004610791565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101a5906107da565b80601f01602080910402602001604051908101604052809291908181526020018280546101d1906107da565b801561021e5780601f106101f35761010080835404028352916020019161021e565b820191906000526020600020905b81548152906001019060200180831161020157829003601f168201915b5050505050905090565b600033610236818585610283565b60019150505b92915050565b600033610250858285610295565b61025b858585610322565b506001949350505050565b6060600480546101a5906107da565b600033610236818585610322565b61029083838360016103b3565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461031c578181101561030d578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016103049392919061080f565b60405180910390fd5b61031c848484840360006103b3565b50505050565b6001600160a01b0383166103655760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b0382166103a85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6102908383836104b8565b6001600160a01b0384166103f65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b0383166104395760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561031c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104aa91906106f3565b60405180910390a350505050565b6001600160a01b0383166104e35780600260008282546104d8919061085b565b9091555061055b9050565b6001600160a01b0383166000908152602081905260409020548181101561053c578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016103049392919061080f565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661057757600280548290039055610596565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105d991906106f3565b60405180910390a3505050565b60005b838110156106015781810151838201526020016105e9565b50506000910152565b6000610614825190565b80845260208401935061062b8185602086016105e6565b601f01601f19169290920192915050565b6020808252810161064d818461060a565b9392505050565b60006001600160a01b03821661023c565b61066e81610654565b811461067957600080fd5b50565b803561023c81610665565b8061066e565b803561023c81610687565b600080604083850312156106ae576106ae600080fd5b60006106ba858561067c565b92505060206106cb8582860161068d565b9150509250929050565b8015155b82525050565b6020810161023c82846106d5565b806106d9565b6020810161023c82846106ed565b60008060006060848603121561071957610719600080fd5b6000610725868661067c565b93505060206107368682870161067c565b92505060406107478682870161068d565b9150509250925092565b60ff81166106d9565b6020810161023c8284610751565b60006020828403121561077d5761077d600080fd5b6000610789848461067c565b949350505050565b600080604083850312156107a7576107a7600080fd5b60006107b3858561067c565b92505060206106cb8582860161067c565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107ee57607f821691505b602082108103610800576108006107c4565b50919050565b6106d981610654565b6060810161081d8286610806565b61082a60208301856106ed565b61078960408301846106ed565b6020810161023c8284610806565b634e487b7160e01b600052601160045260246000fd5b8082018082111561023c5761023c61084556fea264697066735822122091ea0ede169de058ccdd3cb7d029ac7763f9230cde51285aac42f1fd73afff7264736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b50604051610e35380380610e3583398101604081905261002f916102dd565b8282600361003d8382610442565b50600461004a8282610442565b50505061005d338261006560201b60201c565b505050610594565b6001600160a01b03821661009857600060405163ec442f0560e01b815260040161008f9190610521565b60405180910390fd5b6100a4600083836100a8565b5050565b6001600160a01b0383166100d35780600260008282546100c89190610545565b909155506101329050565b6001600160a01b038316600090815260208190526040902054818110156101135783818360405163391434e360e21b815260040161008f9392919061055e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661014e5760028054829003905561016d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101b09190610586565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156101f8576101f86101bd565b6040525050565b600061020a60405190565b905061021682826101d3565b919050565b60006001600160401b03821115610234576102346101bd565b601f19601f83011660200192915050565b60005b83811015610260578181015183820152602001610248565b50506000910152565b600061027c6102778461021b565b6101ff565b905082815283838301111561029357610293600080fd5b6102a1836020830184610245565b9392505050565b600082601f8301126102bc576102bc600080fd5b81516102cc848260208601610269565b949350505050565b80515b92915050565b6000806000606084860312156102f5576102f5600080fd5b83516001600160401b0381111561030e5761030e600080fd5b61031a868287016102a8565b602086015190945090506001600160401b0381111561033b5761033b600080fd5b610347868287016102a8565b92505061035785604086016102d4565b90509250925092565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061038a57607f821691505b60208210810361039c5761039c610360565b50919050565b60006102d76103ae8381565b90565b6103ba836103a2565b815460001960089490940293841b1916921b91909117905550565b60006103e28184846103b1565b505050565b818110156100a4576103fa6000826103d5565b6001016103e7565b601f8211156103e2576000818152602090206020601f850104810160208510156104295750805b61043b6020601f8601048301826103e7565b5050505050565b81516001600160401b0381111561045b5761045b6101bd565b6104658254610376565b610470828285610402565b506020601f8211600181146104a5576000831561048d5750848201515b600019600885021c198116600285021785555061043b565b600084815260208120601f198516915b828110156104d557878501518255602094850194600190920191016104b5565b50848210156104f25783870151600019601f87166008021c191681555b50505050600202600101905550565b60006001600160a01b0382166102d7565b61051b81610501565b82525050565b602081016102d78284610512565b634e487b7160e01b600052601160045260246000fd5b808201808211156102d7576102d761052f565b8061051b565b6060810161056c8286610512565b6105796020830185610558565b6102cc6040830184610558565b602081016102d78284610558565b610892806105a36000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610142578063a9059cbb1461014a578063dd62ed3e1461015d57600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b0610196565b6040516100bd919061063c565b60405180910390f35b6100d96100d4366004610698565b610228565b6040516100bd91906106da565b6002545b6040516100bd91906106ee565b6100d96101053660046106fc565b610242565b60126040516100bd919061074e565b6100ea61012736600461075c565b6001600160a01b031660009081526020819052604090205490565b6100b0610266565b6100d9610158366004610698565b610275565b6100ea61016b36600461077b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101a5906107c0565b80601f01602080910402602001604051908101604052809291908181526020018280546101d1906107c0565b801561021e5780601f106101f35761010080835404028352916020019161021e565b820191906000526020600020905b81548152906001019060200180831161020157829003601f168201915b5050505050905090565b600033610236818585610283565b60019150505b92915050565b600033610250858285610295565b61025b858585610322565b506001949350505050565b6060600480546101a5906107c0565b600033610236818585610322565b61029083838360016103b3565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461031c578181101561030d578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610304939291906107f5565b60405180910390fd5b61031c848484840360006103b3565b50505050565b6001600160a01b0383166103655760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b0382166103a85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6102908383836104b8565b6001600160a01b0384166103f65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b0383166104395760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561031c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104aa91906106ee565b60405180910390a350505050565b6001600160a01b0383166104e35780600260008282546104d89190610849565b9091555061055b9050565b6001600160a01b0383166000908152602081905260409020548181101561053c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610304939291906107f5565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661057757600280548290039055610596565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105d991906106ee565b60405180910390a3505050565b60005b838110156106015781810151838201526020016105e9565b50506000910152565b6000610614825190565b80845260208401935061062b8185602086016105e6565b601f01601f19169290920192915050565b6020808252810161064d818461060a565b9392505050565b60006001600160a01b03821661023c565b61066e81610654565b811461067957600080fd5b50565b803561023c81610665565b8061066e565b803561023c81610687565b600080604083850312156106ae576106ae600080fd5b6106b8848461067c565b91506106c7846020850161068d565b90509250929050565b8015155b82525050565b6020810161023c82846106d0565b806106d4565b6020810161023c82846106e8565b60008060006060848603121561071457610714600080fd5b61071e858561067c565b925061072d856020860161067c565b915061073c856040860161068d565b90509250925092565b60ff81166106d4565b6020810161023c8284610745565b60006020828403121561077157610771600080fd5b61064d838361067c565b6000806040838503121561079157610791600080fd5b61079b848461067c565b91506106c7846020850161067c565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107d457607f821691505b6020821081036107e6576107e66107aa565b50919050565b6106d481610654565b6060810161080382866107ec565b61081060208301856106e8565b61081d60408301846106e8565b949350505050565b6020810161023c82846107ec565b634e487b7160e01b600052601160045260246000fd5b8082018082111561023c5761023c61083356fea2646970667358221220fe5b081ab8295c13082e93f4d009a2615ec46fcb0f111b183ee53af0eaa9513f64736f6c634300081c0033", } // ConstantSupplyERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go index b2ddc8e63..7b4d7adb9 100644 --- a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go +++ b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // CrossChainMessengerMetaData contains all meta data concerning the CrossChainMessenger contract. var CrossChainMessengerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"crossChainSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"encodeCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messageBusAddr\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"relayMessageWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610ff9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078b565b61010c565b005b61009f61009a366004610885565b610211565b6040516100ac9190610937565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac919061095e565b61008a6100e336600461096c565b610291565b6000546001600160a01b03166100c8565b61008a6101073660046109af565b610387565b610118848484846104e7565b61012560208501856109af565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109d0565b8101906101619190610bb1565b905060008082600001516001600160a01b03165a84602001516040516101879190610c0e565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610937565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c5f565b60405160208183030381529060405290509392505050565b61029a816105e0565b6102a760208201826109af565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d660808301836109d0565b8101906102e39190610bb1565b905060008082600001516001600160a01b03165a84602001516040516103099190610c0e565b60006040518083038160008787f1925050503d8060008114610347576040519150601f19603f3d011682016040523d82523d6000602084013e61034c565b606091505b509150915081610371578060405163a5fa8d2b60e01b81526004016101ef9190610937565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d25750825b905060008267ffffffffffffffff1660011480156103ef5750303b155b9050811580156103fd575080155b15610434576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046857845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104df57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d690600190610c8b565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610536908790879087908790600401610eba565b60006040518083038186803b15801561054e57600080fd5b505afa158015610562573d6000803e3d6000fd5b505050506000846040516020016105799190610ef8565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c15760405162461bcd60e51b81526004016101ef90610f3d565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c7290610629908490600401610ef8565b602060405180830381865afa158015610646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066a9190610f60565b6106865760405162461bcd60e51b81526004016101ef90610fb3565b6000816040516020016106999190610ef8565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e15760405162461bcd60e51b81526004016101ef90610f3d565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071257610712600080fd5b50919050565b60008083601f84011261072d5761072d600080fd5b50813567ffffffffffffffff81111561074857610748600080fd5b60208301915083602082028301111561076357610763600080fd5b9250929050565b805b811461077757600080fd5b50565b80356107858161076a565b92915050565b600080600080606085870312156107a4576107a4600080fd5b843567ffffffffffffffff8111156107be576107be600080fd5b6107ca878288016106fd565b945050602085013567ffffffffffffffff8111156107ea576107ea600080fd5b6107f687828801610718565b935093505060406108098782880161077a565b91505092959194509250565b60006001600160a01b038216610785565b61076c81610815565b803561078581610826565b60008083601f84011261084f5761084f600080fd5b50813567ffffffffffffffff81111561086a5761086a600080fd5b60208301915083600182028301111561076357610763600080fd5b60008060006040848603121561089d5761089d600080fd5b60006108a9868661082f565b935050602084013567ffffffffffffffff8111156108c9576108c9600080fd5b6108d58682870161083a565b92509250509250925092565b60005b838110156108fc5781810151838201526020016108e4565b50506000910152565b600061090f825190565b8084526020840193506109268185602086016108e1565b601f01601f19169290920192915050565b602080825281016109488184610905565b9392505050565b61095881610815565b82525050565b60208101610785828461094f565b60006020828403121561098157610981600080fd5b813567ffffffffffffffff81111561099b5761099b600080fd5b6109a7848285016106fd565b949350505050565b6000602082840312156109c4576109c4600080fd5b60006109a7848461082f565b6000808335601e19368590030181126109eb576109eb600080fd5b8301915050803567ffffffffffffffff811115610a0a57610a0a600080fd5b60208201915060018102360382131561076357610763600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a7a57610a7a610a25565b6040525050565b6000610a8c60405190565b9050610a988282610a54565b919050565b600067ffffffffffffffff821115610ab757610ab7610a25565b601f19601f83011660200192915050565b82818337506000910152565b6000610ae7610ae284610a9d565b610a81565b905082815260208101848484011115610b0257610b02600080fd5b610b0d848285610ac8565b509392505050565b600082601f830112610b2957610b29600080fd5b81356109a7848260208601610ad4565b600060608284031215610b4e57610b4e600080fd5b610b586060610a81565b90506000610b66848461082f565b90820152602082013567ffffffffffffffff811115610b8757610b87600080fd5b610b9384828501610b15565b6020830152506040610ba78482850161077a565b9082015292915050565b600060208284031215610bc657610bc6600080fd5b813567ffffffffffffffff811115610be057610be0600080fd5b6109a784828501610b39565b6000610bf6825190565b610c048185602086016108e1565b9290920192915050565b6107858183610bec565b80610958565b80516000906060840190610c32858261094f565b5060208301518482036020860152610c4a8282610905565b9150506040830151610b0d6040860182610c18565b602080825281016109488184610c1e565b600067ffffffffffffffff8216610785565b61095881610c70565b602081016107858284610c82565b506000610785602083018361082f565b67ffffffffffffffff811661076c565b803561078581610ca9565b5060006107856020830183610cb9565b67ffffffffffffffff8116610958565b63ffffffff811661076c565b803561078581610ce4565b5060006107856020830183610cf0565b63ffffffff8116610958565b6000808335601e1936859003018112610d3257610d32600080fd5b830160208101925035905067ffffffffffffffff811115610d5557610d55600080fd5b3681900382131561076357610763600080fd5b818352602083019250610d7c828483610ac8565b50601f01601f19160190565b60ff811661076c565b803561078581610d88565b5060006107856020830183610d91565b60ff8116610958565b600060c08301610dc58380610c99565b610dcf858261094f565b50610ddd6020840184610cc4565b610dea6020860182610cd4565b50610df86040840184610cfb565b610e056040860182610d0b565b50610e136060840184610cfb565b610e206060860182610d0b565b50610e2e6080840184610d17565b8583036080870152610e41838284610d68565b92505050610e5260a0840184610d9c565b610b0d60a0860182610dac565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610ea357610ea3600080fd5b602083029250610eb4838584610e5f565b50500190565b60608082528101610ecb8187610db5565b90508181036020830152610ee0818587610e68565b9050610eef6040830184610c18565b95945050505050565b602080825281016109488184610db5565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078581610f09565b80151561076c565b805161078581610f4d565b600060208284031215610f7557610f75600080fd5b60006109a78484610f55565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f37565b6020808252810161078581610f8156fea264697066735822122047f28995de7130c3998b1599d405fb370dedbc68b4a589631e78ea0032bfd28164736f6c63430008150033", + Bin: "0x6080604052348015600f57600080fd5b50610fe48061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078c565b61010c565b005b61009f61009a366004610884565b610211565b6040516100ac9190610933565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac9190610953565b61008a6100e3366004610961565b610292565b6000546001600160a01b03166100c8565b61008a6101073660046109a4565b610388565b610118848484846104e8565b61012560208501856109a4565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109c3565b8101906101619190610b96565b905060008082600001516001600160a01b03165a84602001516040516101879190610bf3565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610933565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c4c565b60405160208183030381529060405290505b9392505050565b61029b816105e1565b6102a860208201826109a4565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d760808301836109c3565b8101906102e49190610b96565b905060008082600001516001600160a01b03165a846020015160405161030a9190610bf3565b60006040518083038160008787f1925050503d8060008114610348576040519150601f19603f3d011682016040523d82523d6000602084013e61034d565b606091505b509150915081610372578060405163a5fa8d2b60e01b81526004016101ef9190610933565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d35750825b905060008267ffffffffffffffff1660011480156103f05750303b155b9050811580156103fe575080155b15610435576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046957845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104e057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d790600190610c78565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610537908790879087908790600401610ea7565b60006040518083038186803b15801561054f57600080fd5b505afa158015610563573d6000803e3d6000fd5b5050505060008460405160200161057a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c729061062a908490600401610ee5565b602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190610f4d565b6106875760405162461bcd60e51b81526004016101ef90610f9e565b60008160405160200161069a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071357610713600080fd5b50919050565b60008083601f84011261072e5761072e600080fd5b50813567ffffffffffffffff81111561074957610749600080fd5b60208301915083602082028301111561076457610764600080fd5b9250929050565b805b811461077857600080fd5b50565b80356107868161076b565b92915050565b600080600080606085870312156107a5576107a5600080fd5b843567ffffffffffffffff8111156107bf576107bf600080fd5b6107cb878288016106fe565b945050602085013567ffffffffffffffff8111156107eb576107eb600080fd5b6107f787828801610719565b9350935050610809866040870161077b565b905092959194509250565b60006001600160a01b038216610786565b61076d81610814565b803561078681610825565b60008083601f84011261084e5761084e600080fd5b50813567ffffffffffffffff81111561086957610869600080fd5b60208301915083600182028301111561076457610764600080fd5b60008060006040848603121561089c5761089c600080fd5b6108a6858561082e565b9250602084013567ffffffffffffffff8111156108c5576108c5600080fd5b6108d186828701610839565b92509250509250925092565b60005b838110156108f85781810151838201526020016108e0565b50506000910152565b600061090b825190565b8084526020840193506109228185602086016108dd565b601f01601f19169290920192915050565b6020808252810161028b8184610901565b61094d81610814565b82525050565b602081016107868284610944565b60006020828403121561097657610976600080fd5b813567ffffffffffffffff81111561099057610990600080fd5b61099c848285016106fe565b949350505050565b6000602082840312156109b9576109b9600080fd5b61028b838361082e565b6000808335601e19368590030181126109de576109de600080fd5b8301915050803567ffffffffffffffff8111156109fd576109fd600080fd5b60208201915060018102360382131561076457610764600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a6d57610a6d610a18565b6040525050565b6000610a7f60405190565b9050610a8b8282610a47565b919050565b600067ffffffffffffffff821115610aaa57610aaa610a18565b601f19601f83011660200192915050565b82818337506000910152565b6000610ada610ad584610a90565b610a74565b9050828152838383011115610af157610af1600080fd5b61028b836020830184610abb565b600082601f830112610b1357610b13600080fd5b61028b83833560208501610ac7565b600060608284031215610b3757610b37600080fd5b610b416060610a74565b9050610b4d838361082e565b8152602082013567ffffffffffffffff811115610b6c57610b6c600080fd5b610b7884828501610aff565b602083015250610b8b836040840161077b565b604082015292915050565b600060208284031215610bab57610bab600080fd5b813567ffffffffffffffff811115610bc557610bc5600080fd5b61099c84828501610b22565b6000610bdb825190565b610be98185602086016108dd565b9290920192915050565b6107868183610bd1565b8061094d565b80516000906060840190610c178582610944565b5060208301518482036020860152610c2f8282610901565b9150506040830151610c446040860182610bfd565b509392505050565b6020808252810161028b8184610c03565b600067ffffffffffffffff8216610786565b61094d81610c5d565b602081016107868284610c6f565b506000610786602083018361082e565b67ffffffffffffffff811661076d565b803561078681610c96565b5060006107866020830183610ca6565b67ffffffffffffffff811661094d565b63ffffffff811661076d565b803561078681610cd1565b5060006107866020830183610cdd565b63ffffffff811661094d565b6000808335601e1936859003018112610d1f57610d1f600080fd5b830160208101925035905067ffffffffffffffff811115610d4257610d42600080fd5b3681900382131561076457610764600080fd5b818352602083019250610d69828483610abb565b50601f01601f19160190565b60ff811661076d565b803561078681610d75565b5060006107866020830183610d7e565b60ff811661094d565b600060c08301610db28380610c86565b610dbc8582610944565b50610dca6020840184610cb1565b610dd76020860182610cc1565b50610de56040840184610ce8565b610df26040860182610cf8565b50610e006060840184610ce8565b610e0d6060860182610cf8565b50610e1b6080840184610d04565b8583036080870152610e2e838284610d55565b92505050610e3f60a0840184610d89565b610c4460a0860182610d99565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610e9057610e90600080fd5b602083029250610ea1838584610e4c565b50500190565b60608082528101610eb88187610da2565b90508181036020830152610ecd818587610e55565b9050610edc6040830184610bfd565b95945050505050565b6020808252810161028b8184610da2565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078681610ef6565b80151561076d565b805161078681610f3a565b600060208284031215610f6257610f62600080fd5b61028b8383610f42565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f24565b6020808252810161078681610f6c56fea264697066735822122055cdc73260ce1332c22b35dd79ea4bf3199b50f11a946e6ed8b35482d371c1f864736f6c634300081c0033", } // CrossChainMessengerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ECDSA/ECDSA.go b/contracts/generated/ECDSA/ECDSA.go index d444ed4c3..ff7d12469 100644 --- a/contracts/generated/ECDSA/ECDSA.go +++ b/contracts/generated/ECDSA/ECDSA.go @@ -32,7 +32,7 @@ var ( // ECDSAMetaData contains all meta data concerning the ECDSA contract. var ECDSAMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207b9be294925ae7a4b046c2ea4eabd9690441e56d3c593a7fa370449ab2dc9acb64736f6c63430008150033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c608f31ab95dd3b5ce51dc7fda8d8594f29d5172a355d98cbccb0212cf5c103b64736f6c634300081c0033", } // ECDSAABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ERC1967Proxy/ERC1967Proxy.go b/contracts/generated/ERC1967Proxy/ERC1967Proxy.go index efcd80e42..b30754ae9 100644 --- a/contracts/generated/ERC1967Proxy/ERC1967Proxy.go +++ b/contracts/generated/ERC1967Proxy/ERC1967Proxy.go @@ -32,7 +32,7 @@ var ( // ERC1967ProxyMetaData contains all meta data concerning the ERC1967Proxy contract. var ERC1967ProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}]", - Bin: "0x60806040526040516104d53803806104d58339810160408190526100229161036e565b61002c8282610033565b5050610410565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610182565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf91906103d6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516101269190610406565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a3565b925050505b92915050565b34156101a15760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b8576101b3826101f9565b6101f2565b81511580156101cf57506001600160a01b0384163b155b156101ef5783604051639996b31560e01b81526004016100bf91906103d6565b50805b9392505050565b8051156102095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b60006001600160a01b03821661017c565b61023f81610225565b811461022257600080fd5b805161017c81610236565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561029057610290610255565b6040525050565b60006102a260405190565b90506102ae828261026b565b919050565b60006001600160401b038211156102cc576102cc610255565b601f19601f83011660200192915050565b60005b838110156102f85781810151838201526020016102e0565b50506000910152565b600061031461030f846102b3565b610297565b90508281526020810184848401111561032f5761032f600080fd5b61033a8482856102dd565b509392505050565b600082601f83011261035657610356600080fd5b8151610366848260208601610301565b949350505050565b6000806040838503121561038457610384600080fd5b6000610390858561024a565b602085015190935090506001600160401b038111156103b1576103b1600080fd5b6103bd85828601610342565b9150509250929050565b6103d081610225565b82525050565b6020810161017c82846103c7565b60006103ee825190565b6103fc8185602086016102dd565b9290920192915050565b61017c81836103e4565b60b78061041e6000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea2646970667358221220af0ad56f192a7d1bfa60e5538e4a309664aeb1af6cdbcf5ffe7d317ac444c19264736f6c63430008150033", + Bin: "0x60806040526040516104c83803806104c883398101604081905261002291610365565b61002c8282610033565b5050610403565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610182565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf91906103c9565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012691906103f9565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a3565b925050505b92915050565b34156101a15760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b8576101b3826101f9565b6101f2565b81511580156101cf57506001600160a01b0384163b155b156101ef5783604051639996b31560e01b81526004016100bf91906103c9565b50805b9392505050565b8051156102095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b60006001600160a01b03821661017c565b61023f81610225565b811461022257600080fd5b805161017c81610236565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561029057610290610255565b6040525050565b60006102a260405190565b90506102ae828261026b565b919050565b60006001600160401b038211156102cc576102cc610255565b601f19601f83011660200192915050565b60005b838110156102f85781810151838201526020016102e0565b50506000910152565b600061031461030f846102b3565b610297565b905082815283838301111561032b5761032b600080fd5b6101f28360208301846102dd565b600082601f83011261034d5761034d600080fd5b815161035d848260208601610301565b949350505050565b6000806040838503121561037b5761037b600080fd5b610385848461024a565b60208401519092506001600160401b038111156103a4576103a4600080fd5b6103b085828601610339565b9150509250929050565b6103c381610225565b82525050565b6020810161017c82846103ba565b60006103e1825190565b6103ef8185602086016102dd565b9290920192915050565b61017c81836103d7565b60b7806104116000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea264697066735822122066d3d78a32860920cee3e1088ebb8679b983ca693d9bf0e5254c68f2d35e4d1364736f6c634300081c0033", } // ERC1967ProxyABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ERC1967Utils/ERC1967Utils.go b/contracts/generated/ERC1967Utils/ERC1967Utils.go index d8f26f9f9..11fd9ddec 100644 --- a/contracts/generated/ERC1967Utils/ERC1967Utils.go +++ b/contracts/generated/ERC1967Utils/ERC1967Utils.go @@ -32,7 +32,7 @@ var ( // ERC1967UtilsMetaData contains all meta data concerning the ERC1967Utils contract. var ERC1967UtilsMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidBeacon\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c8743ddfc5db36f715983637591eefdb90bb3bd861ff75e197f8bfa9b46e10a64736f6c63430008150033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220119e23d3037aca42a1fe273a94ec7561409ce1c2bff988010f652b59a5870b8864736f6c634300081c0033", } // ERC1967UtilsABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/EthereumBridge/EthereumBridge.go b/contracts/generated/EthereumBridge/EthereumBridge.go index b976e83f8..c432a3156 100644 --- a/contracts/generated/EthereumBridge/EthereumBridge.go +++ b/contracts/generated/EthereumBridge/EthereumBridge.go @@ -32,7 +32,7 @@ var ( // EthereumBridgeMetaData contains all meta data concerning the EthereumBridge contract. var EthereumBridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"remoteAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreatedWrappedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messengerAddress\",\"type\":\"address\"}],\"name\":\"configure\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"hasTokenMapping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"remoteBridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"localToRemoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"crossChainAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"onCreateTokenCommand\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"remoteToLocalToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"wrappedTokens\",\"outputs\":[{\"internalType\":\"contractWrappedERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50612abd806100306000396000f3fe608060405260043610620000c65760003560e01c806383bece4d11620000735780639e405b7111620000555780639e405b711462000256578063a381c8e21462000290578063d5c6b50414620002b557620000ef565b806383bece4d14620001e35780639813c7b2146200020857620000ef565b8063458ffd6311620000a9578063458ffd631462000174578063485cc955146200019957806375cb267214620001be57620000ef565b80628d48e314620001095780631888d712146200015b57620000ef565b36620000ef5760405162461bcd60e51b8152600401620000e69062000d72565b60405180910390fd5b60405162461bcd60e51b8152600401620000e69062000dbe565b3480156200011657600080fd5b50620001436200012836600462000e09565b6004602052600090815260409020546001600160a01b031681565b60405162000152919062000e47565b60405180910390f35b620001726200016c36600462000e09565b620002fe565b005b3480156200018157600080fd5b50620001726200019336600462000eaf565b6200047e565b348015620001a657600080fd5b5062000172620001b836600462000f4b565b620005e7565b348015620001cb57600080fd5b5062000172620001dd36600462000e09565b6200075b565b348015620001f057600080fd5b50620001726200020236600462000fa2565b6200083b565b3480156200021557600080fd5b50620002476200022736600462000e09565b6001600160a01b0390811660009081526002602052604090205416151590565b60405162000152919062001003565b3480156200026357600080fd5b50620001436200027536600462000e09565b6003602052600090815260409020546001600160a01b031681565b3480156200029d57600080fd5b5062000172620002af36600462000fa2565b6200097f565b348015620002c257600080fd5b50620002ef620002d436600462000e09565b6002602052600090815260409020546001600160a01b031681565b60405162000152919062001038565b60003411620003215760405162461bcd60e51b8152600401620000e6906200107b565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b9162000377916001600160a01b03909116903490869060240162001094565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150620003f7906001600160a01b03168260005b60008062000b0b565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb903490620004469086908390600401620010c2565b6000604051808303818588803b1580156200046057600080fd5b505af115801562000475573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b0391821691163314620004b25760405162461bcd60e51b8152600401620000e69062001141565b806001600160a01b0316620004c662000c20565b6001600160a01b031614620004ef5760405162461bcd60e51b8152600401620000e690620011ac565b600085858585604051620005039062000d0a565b620005129493929190620011ec565b604051809103906000f0801580156200052f573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90620005d5908a9084908b908b908b908b9062001221565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620006335750825b905060008267ffffffffffffffff166001148015620006515750303b155b90508115801562000660575080155b1562000698576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315620006cd57845468ff00000000000000001916680100000000000000001785555b620006d8876200075b565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156200047557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906200074a9060019062001296565b60405180910390a150505050505050565b6200076562000ca0565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015620007e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080b9190620012b3565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146200086f5760405162461bcd60e51b8152600401620000e69062001141565b806001600160a01b03166200088362000c20565b6001600160a01b031614620008ac5760405162461bcd60e51b8152600401620000e690620011ac565b6001600160a01b03808516600090815260046020908152604080832054841680845260029092529091205490911680620008fa5760405162461bcd60e51b8152600401620000e69062001331565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad90620009439087908990600401620010c2565b600060405180830381600087803b1580156200095e57600080fd5b505af115801562000973573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0380841660009081526002602052604090205416620009b95760405162461bcd60e51b8152600401620000e69062001376565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb9062000a179033908790600401620010c2565b600060405180830381600087803b15801562000a3257600080fd5b505af115801562000a47573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b9262000a88929116908790879060240162001094565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260055490915062000b04906001600160a01b0316826000620003ee565b5050505050565b60006040518060600160405280876001600160a01b031681526020018681526020018481525060405160200162000b43919062001432565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff1690601462000b988362001474565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b815260040162000bda9493929190620014b1565b6020604051808303816000875af115801562000bfa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047591906200151c565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9b9190620012b3565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000d08576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611546806200154283390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810162000d848162000d18565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b6020808252810162000d848162000d8a565b60006001600160a01b03821662000d84565b62000ded8162000dd0565b811462000df957600080fd5b50565b803562000d848162000de2565b60006020828403121562000e205762000e20600080fd5b600062000e2e848462000dfc565b949350505050565b62000e418162000dd0565b82525050565b6020810162000d84828462000e36565b60008083601f84011262000e6e5762000e6e600080fd5b50813567ffffffffffffffff81111562000e8b5762000e8b600080fd5b60208301915083600182028301111562000ea85762000ea8600080fd5b9250929050565b60008060008060006060868803121562000ecc5762000ecc600080fd5b600062000eda888862000dfc565b955050602086013567ffffffffffffffff81111562000efc5762000efc600080fd5b62000f0a8882890162000e57565b9450945050604086013567ffffffffffffffff81111562000f2e5762000f2e600080fd5b62000f3c8882890162000e57565b92509250509295509295909350565b6000806040838503121562000f635762000f63600080fd5b600062000f71858562000dfc565b925050602062000f848582860162000dfc565b9150509250929050565b8062000ded565b803562000d848162000f8e565b60008060006060848603121562000fbc5762000fbc600080fd5b600062000fca868662000dfc565b935050602062000fdd8682870162000f95565b925050604062000ff08682870162000dfc565b9150509250925092565b80151562000e41565b6020810162000d84828462000ffa565b600062000d848262000dd0565b600062000d848262001013565b62000e418162001020565b6020810162000d8482846200102d565b600d8152602081017f4e6f7468696e672073656e742e000000000000000000000000000000000000008152905062000db8565b6020808252810162000d848162001048565b8062000e41565b60608101620010a4828662000e36565b620010b360208301856200108d565b62000e2e604083018462000e36565b60408101620010d2828562000e36565b620010e160208301846200108d565b9392505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e67657221000000000000000000000000000000006020820152905062000d6c565b6020808252810162000d8481620010e8565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e646572210000000000000000000000000000006020820152905062000d6c565b6020808252810162000d848162001153565b82818337506000910152565b818352602083019250620011e0828483620011be565b50601f01601f19160190565b6040808252810162001200818688620011ca565b9050818103602083015262001217818486620011ca565b9695505050505050565b6080810162001231828962000e36565b62001240602083018862000e36565b818103604083015262001255818688620011ca565b905081810360608301526200126c818486620011ca565b98975050505050505050565b600067ffffffffffffffff821662000d84565b62000e418162001278565b6020810162000d8482846200128b565b805162000d848162000de2565b600060208284031215620012ca57620012ca600080fd5b600062000e2e8484620012a6565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e210000000000000000000000000000000000000000006020820152905062000d6c565b6020808252810162000d8481620012d8565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000008152905062000db8565b6020808252810162000d848162001343565b60005b83811015620013a55781810151838201526020016200138b565b50506000910152565b6000620013b9825190565b808452602084019350620013d281856020860162001388565b601f01601f19169290920192915050565b80516000906060840190620013f9858262000e36565b5060208301518482036020860152620014138282620013ae565b91505060408301516200142a60408601826200108d565b509392505050565b60208082528101620010e18184620013e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820162001493576200149362001445565b5060010190565b63ffffffff811662000e41565b60ff811662000e41565b60808101620014c182876200149a565b620014d060208301866200149a565b8181036040830152620014e48185620013ae565b9050620014f56060830184620014a7565b95945050505050565b67ffffffffffffffff811662000ded565b805162000d8481620014fe565b600060208284031215620015335762001533600080fd5b600062000e2e84846200150f56fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001546380380620015468339810160408190526200005a916200029e565b8181818160036200006c838262000412565b5060046200007b828262000412565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620004de565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620001ac57620001ac6200016e565b6040525050565b6000620001bf60405190565b9050620001cd828262000184565b919050565b60006001600160401b03821115620001ee57620001ee6200016e565b601f19601f83011660200192915050565b60005b838110156200021c57818101518382015260200162000202565b50506000910152565b60006200023c6200023684620001d2565b620001b3565b905082815260208101848484011115620002595762000259600080fd5b62000266848285620001ff565b509392505050565b600082601f830112620002845762000284600080fd5b81516200029684826020860162000225565b949350505050565b60008060408385031215620002b657620002b6600080fd5b82516001600160401b03811115620002d157620002d1600080fd5b620002df858286016200026e565b602085015190935090506001600160401b03811115620003025762000302600080fd5b62000310858286016200026e565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200034557607f821691505b6020821081036200035a576200035a6200031a565b50919050565b6000620001686200036e8381565b90565b6200037c8362000360565b815460001960089490940293841b1916921b91909117905550565b6000620003a681848462000371565b505050565b81811015620003ca57620003c160008262000397565b600101620003ab565b5050565b601f821115620003a6576000818152602090206020601f85010481016020851015620003f75750805b6200040b6020601f860104830182620003ab565b5050505050565b81516001600160401b038111156200042e576200042e6200016e565b6200043a825462000330565b62000447828285620003ce565b506020601f8211600181146200047f5760008315620004665750848201515b600019600885021c19811660028502178555506200040b565b600084815260208120601f198516915b82811015620004b157878501518255602094850194600190920191016200048f565b5084821015620004cf5783870151600019601f87166008021c191681555b50505050600202600101905550565b61105880620004ee6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c7c565b60405180910390f35b6101876103a0565b6040516101769190610ce0565b6101696101a2366004610d27565b610432565b6002545b6040516101769190610d6a565b6101cb6101c6366004610d27565b61044a565b005b6101696101db366004610d78565b6104b4565b6101ab6101ee366004610dc8565b60009081526007602052604090206001015490565b6101cb610211366004610de9565b6104da565b60126040516101769190610e25565b6101cb610233366004610de9565b610505565b6101ab610246366004610e33565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610de9565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d27565b6105d6565b6101ab600081565b6101696102dc366004610d27565b61060a565b6101cb6102ef366004610de9565b610618565b6101ab610302366004610e54565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e8c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e8c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610eec565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f2e565b6060600480546103af90610e8c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f3e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610fa8565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610fa8565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610fa8565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610fa8565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d6a565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fde565b6001600160a01b038316610b0c578060026000828254610b01919061100f565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d6a565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6000610c6a8484610c3e565b949350505050565b8015155b82525050565b6020810161039a8284610c72565b60005b83811015610ca5578181015183820152602001610c8d565b50506000910152565b6000610cb8825190565b808452602084019350610ccf818560208601610c8a565b601f01601f19169290920192915050565b602080825281016104d38184610cae565b60006001600160a01b03821661039a565b610c3381610cf1565b803561039a81610d02565b80610c33565b803561039a81610d16565b60008060408385031215610d3d57610d3d600080fd5b6000610d498585610d0b565b9250506020610d5a85828601610d1c565b9150509250929050565b80610c76565b6020810161039a8284610d64565b600080600060608486031215610d9057610d90600080fd5b6000610d9c8686610d0b565b9350506020610dad86828701610d0b565b9250506040610dbe86828701610d1c565b9150509250925092565b600060208284031215610ddd57610ddd600080fd5b6000610c6a8484610d1c565b60008060408385031215610dff57610dff600080fd5b6000610e0b8585610d1c565b9250506020610d5a85828601610d0b565b60ff8116610c76565b6020810161039a8284610e1c565b600060208284031215610e4857610e48600080fd5b6000610c6a8484610d0b565b60008060408385031215610e6a57610e6a600080fd5b6000610e0b8585610d0b565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610ea057607f821691505b602082108103610eb257610eb2610e76565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610eb8565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ee6565b6020808252810161039a81610efc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c7681610cf1565b6020810161039a8284610f9f565b60608101610fc48286610f9f565b610fd16020830185610d64565b610c6a6040830184610d64565b60408101610fec8285610f9f565b6104d36020830184610d64565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610ff956fea264697066735822122015a37e58522ca26bdd51e6ea23c5953be6e295684d318926ea7d989d6576fe1c64736f6c63430008150033a2646970667358221220f32fa9bbc81033e4c32c93807c57829cac33e49d74d4612615588dff6d00a05564736f6c63430008150033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b5061290f8061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610271576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610cd7565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610d21565b3480156100fe57600080fd5b5061012861010d366004610d64565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610d99565b60405180910390f35b61015161014c366004610d64565b6102b4565b005b34801561015f57600080fd5b5061015161016e366004610df9565b610429565b34801561017f57600080fd5b5061015161018e366004610e86565b610583565b34801561019f57600080fd5b506101516101ae366004610d64565b6106ed565b3480156101bf57600080fd5b506101516101ce366004610ecf565b6107c8565b3480156101df57600080fd5b5061020e6101ee366004610d64565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610f20565b34801561022757600080fd5b50610128610236366004610d64565b6003602052600090815260409020546001600160a01b031681565b34801561025d57600080fd5b5061015161026c366004610ecf565b6108fd565b34801561027d57600080fd5b506102a761028c366004610d64565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610f4d565b600034116102d45760405162461bcd60e51b81526004016100d190610f8d565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b91610328916001600160a01b039091169034908690602401610fa3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526005549091506103a6906001600160a01b03168260005b600080610a7e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103f39086908390600401610fd3565b6000604051808303818588803b15801561040c57600080fd5b505af1158015610420573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b039182169116331461045a5760405162461bcd60e51b81526004016100d190611046565b806001600160a01b031661046c610b8a565b6001600160a01b0316146104925760405162461bcd60e51b81526004016100d1906110ae565b6000858585856040516104a490610c70565b6104b194939291906110ea565b604051809103906000f0801580156104cd573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610571908a9084908b908b908b908b9061111b565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105ce5750825b905060008267ffffffffffffffff1660011480156105eb5750303b155b9050811580156105f9575080155b15610630576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561066457845468ff00000000000000001916680100000000000000001785555b61066d876106ed565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561042057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106dc90600190611185565b60405180910390a150505050505050565b6106f5610c07565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610798919061119e565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146107f95760405162461bcd60e51b81526004016100d190611046565b806001600160a01b031661080b610b8a565b6001600160a01b0316146108315760405162461bcd60e51b81526004016100d1906110ae565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061087c5760405162461bcd60e51b81526004016100d190611215565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906108c39087908990600401610fd3565b600060405180830381600087803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166109345760405162461bcd60e51b81526004016100d190611257565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906109909033908790600401610fd3565b600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b926109fd9291169087908790602401610fa3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610a77906001600160a01b031682600061039e565b5050505050565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610ab49190611306565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610b0783611346565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610b47949392919061137e565b6020604051808303816000875af1158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042091906113de565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c02919061119e565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c6e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114dc806113fe83390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610ce781610c7d565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610ce781610ced565b60006001600160a01b038216610ce7565b610d4b81610d31565b8114610d5657600080fd5b50565b8035610ce781610d42565b600060208284031215610d7957610d79600080fd5b610d838383610d59565b9392505050565b610d9381610d31565b82525050565b60208101610ce78284610d8a565b60008083601f840112610dbc57610dbc600080fd5b50813567ffffffffffffffff811115610dd757610dd7600080fd5b602083019150836001820283011115610df257610df2600080fd5b9250929050565b600080600080600060608688031215610e1457610e14600080fd5b610e1e8787610d59565b9450602086013567ffffffffffffffff811115610e3d57610e3d600080fd5b610e4988828901610da7565b9450945050604086013567ffffffffffffffff811115610e6b57610e6b600080fd5b610e7788828901610da7565b92509250509295509295909350565b60008060408385031215610e9c57610e9c600080fd5b610ea68484610d59565b9150610eb58460208501610d59565b90509250929050565b80610d4b565b8035610ce781610ebe565b600080600060608486031215610ee757610ee7600080fd5b610ef18585610d59565b9250610f008560208601610ec4565b9150610f0f8560408601610d59565b90509250925092565b801515610d93565b60208101610ce78284610f18565b6000610ce782610d31565b6000610ce782610f2e565b610d9381610f39565b60208101610ce78284610f44565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610d1b565b60208082528101610ce781610f5b565b80610d93565b60608101610fb18286610d8a565b610fbe6020830185610f9d565b610fcb6040830184610d8a565b949350505050565b60408101610fe18285610d8a565b610d836020830184610f9d565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610cd1565b60208082528101610ce781610fee565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610cd1565b60208082528101610ce781611056565b82818337506000910152565b8183526020830192506110de8284836110be565b50601f01601f19160190565b604080825281016110fc8186886110ca565b905081810360208301526111118184866110ca565b9695505050505050565b608081016111298289610d8a565b6111366020830188610d8a565b81810360408301526111498186886110ca565b9050818103606083015261115e8184866110ca565b98975050505050505050565b600067ffffffffffffffff8216610ce7565b610d938161116a565b60208101610ce7828461117c565b8051610ce781610d42565b6000602082840312156111b3576111b3600080fd5b610d838383611193565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610cd1565b60208082528101610ce7816111bd565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610d1b565b60208082528101610ce781611225565b60005b8381101561128257818101518382015260200161126a565b50506000910152565b6000611295825190565b8084526020840193506112ac818560208601611267565b601f01601f19169290920192915050565b805160009060608401906112d18582610d8a565b50602083015184820360208601526112e9828261128b565b91505060408301516112fe6040860182610f9d565b509392505050565b60208082528101610d8381846112bd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820161136257611362611317565b5060010190565b63ffffffff8116610d93565b60ff8116610d93565b6080810161138c8287611369565b6113996020830186611369565b81810360408301526113ab818561128b565b90506113ba6060830184611375565b95945050505050565b67ffffffffffffffff8116610d4b565b8051610ce7816113c3565b6000602082840312156113f3576113f3600080fd5b610d8383836113d356fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220be3380d12a8a9c04f488bd6d863b29f9c1ea464ebf1b28b5c552d2e3f79e9fda64736f6c634300081c0033a2646970667358221220d25847c7c6f03a8709a552d0b6870c4d559040f42b2743311507e6b47eb837ea64736f6c634300081c0033", } // EthereumBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/GasConsumerBalance/GasConsumerBalance.go b/contracts/generated/GasConsumerBalance/GasConsumerBalance.go index ec9ba7c49..9798bf4cb 100644 --- a/contracts/generated/GasConsumerBalance/GasConsumerBalance.go +++ b/contracts/generated/GasConsumerBalance/GasConsumerBalance.go @@ -32,7 +32,7 @@ var ( // GasConsumerBalanceMetaData contains all meta data concerning the GasConsumerBalance contract. var GasConsumerBalanceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"destroy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"get_balance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"resetOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561023c806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806373cc802a1461005157806383197ef0146100a85780638da5cb5b146100b0578063c1cfb99a146100a6575b600080fd5b6100a661005f366004610185565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100e6565b6000546100d09073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100dd91906101bd565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff163314610140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610137906101cb565b60405180910390fd5b30ff5b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b61016c81610143565b811461017757600080fd5b50565b803561015d81610163565b60006020828403121561019a5761019a600080fd5b60006101a6848461017a565b949350505050565b6101b781610143565b82525050565b6020810161015d82846101ae565b6020808252810161015d81601581527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060208201526040019056fea2646970667358221220b30748e6044bd6e6bd1865e299bdb154c2f030105056739fc4767cbf784e74fb64736f6c63430008150033", + Bin: "0x6080604052348015600f57600080fd5b50600080546001600160a01b03191633179055610239806100316000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806373cc802a1461005157806383197ef0146100a85780638da5cb5b146100b0578063c1cfb99a146100a6575b600080fd5b6100a661005f366004610185565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100e6565b6000546100d09073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100dd91906101ba565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff163314610140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610137906101c8565b60405180910390fd5b30ff5b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b61016c81610143565b811461017757600080fd5b50565b803561015d81610163565b60006020828403121561019a5761019a600080fd5b6101a4838361017a565b9392505050565b6101b481610143565b82525050565b6020810161015d82846101ab565b6020808252810161015d81601581527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060208201526040019056fea2646970667358221220eb83c2ccc2dee5bbd5dc37fdcbf0d1fe7c4fb313229649df273a57945213486564736f6c634300081c0033", } // GasConsumerBalanceABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Logger/Logger.go b/contracts/generated/Logger/Logger.go index 483962e3c..a95363d0a 100644 --- a/contracts/generated/Logger/Logger.go +++ b/contracts/generated/Logger/Logger.go @@ -32,7 +32,7 @@ var ( // LoggerMetaData contains all meta data concerning the Logger contract. var LoggerMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"LogMessage\",\"type\":\"event\"}]", - Bin: "0x6101af61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632e3c2a4d1461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046100eb565b61005c565b005b7f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480828260405161008d92919061015f565b60405180910390a15050565b60008083601f8401126100ae576100ae600080fd5b50813567ffffffffffffffff8111156100c9576100c9600080fd5b6020830191508360018202830111156100e4576100e4600080fd5b9250929050565b6000806020838503121561010157610101600080fd5b823567ffffffffffffffff81111561011b5761011b600080fd5b61012785828601610099565b92509250509250929050565b82818337506000910152565b818352602083019250610153828483610133565b50601f01601f19160190565b6020808252810161017181848661013f565b94935050505056fea264697066735822122007133e6865990a286b3061b3149c23af2b18d81bea79f5ffd90ef8bcbf5c455264736f6c63430008150033", + Bin: "0x6101af610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632e3c2a4d1461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046100eb565b61005c565b005b7f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480828260405161008d92919061015f565b60405180910390a15050565b60008083601f8401126100ae576100ae600080fd5b50813567ffffffffffffffff8111156100c9576100c9600080fd5b6020830191508360018202830111156100e4576100e4600080fd5b9250929050565b6000806020838503121561010157610101600080fd5b823567ffffffffffffffff81111561011b5761011b600080fd5b61012785828601610099565b92509250509250929050565b82818337506000910152565b818352602083019250610153828483610133565b50601f01601f19160190565b6020808252810161017181848661013f565b94935050505056fea264697066735822122074c816dc8a29f612e0f1c16fd3894703d303c4edadf0c07edb14dbda4a97219564736f6c634300081c0033", } // LoggerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index e43de1277..c42ef336f 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -62,7 +62,7 @@ type StructsValueTransferMessage struct { // ManagementContractMetaData contains all meta data concerning the ManagementContract contract. var ManagementContractMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"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\":false,\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"RollupAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetRollupByNumber\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetUniqueForkID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_lastBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"rollupNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"forkID\",\"type\":\"bytes32\"}],\"name\":\"addCrossChainMessagesRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"}],\"name\":\"isBundleAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isBundleSaved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61518580620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620002005760003560e01c80638129fc1c1162000119578063a25eb31c11620000af578063db5d91b1116200007a578063db5d91b114620004f9578063e34fbfc81462000528578063e874eb20146200053d578063f2fde38b146200055157600080fd5b8063a25eb31c14620004a3578063a4ab2faa14620004ba578063a52f433c14620004d1578063d4fab88714620004e257600080fd5b806387059edb11620000f057806387059edb14620004125780638da5cb5b146200042957806398077e86146200045a578063a1a227fa146200048057600080fd5b80638129fc1c14620003bb5780638236a7ba14620003c55780638415482614620003ec57600080fd5b806347665738116200019b5780636a30d26c11620001665780636a30d26c14620003775780636b9707d61462000390578063715018a614620003a75780637281099614620003b157600080fd5b806347665738146200030b5780635371a2161462000322578063568699c8146200033957806368e10383146200036057600080fd5b80632f0cb9e311620001dc5780632f0cb9e314620002575780633e60a22f146200028c57806343348b2f14620002d2578063440c953b146200030157600080fd5b80620ddd27146200020557806303e72e481462000227578063073b6ef31462000240575b600080fd5b6200020f600e5481565b6040516200021e919062001b7d565b60405180910390f35b6200023e6200023836600462001cd3565b62000568565b005b6200023e6200025136600462001e6e565b6200067b565b6200027d6200026836600462001f5b565b600c6020526000908152604090205460ff1681565b6040516200021e919062001f89565b620002c36200029d36600462001f99565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516200021e919062001fe5565b6200027d620002e336600462001ff5565b6001600160a01b031660009081526020819052604090205460ff1690565b6200020f60055481565b6200023e6200031c36600462001ff5565b62000899565b6200023e6200033336600462002088565b62000940565b620003506200034a36600462001f5b565b62000af6565b6040516200021e929190620021a4565b6200023e62000371366004620021c8565b62000b4f565b6200038162000bf8565b6040516200021e9190620022e9565b6200023e620003a136600462001ff5565b62000cdb565b6200023e62000d72565b6200023e62000d8a565b6200023e62000e15565b620003dc620003d636600462001f5b565b62000fff565b6040516200021e929190620022fc565b6200027d620003fd36600462001f5b565b600d6020526000908152604090205460ff1681565b620003dc6200042336600462001f5b565b620010ef565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620002c3565b620004716200046b36600462001f5b565b62001169565b6040516200021e91906200230c565b600a5462000494906001600160a01b031681565b6040516200021e919062002369565b6200023e620004b4366004620023a7565b6200121e565b6200027d620004cb36600462002419565b62001334565b600454610100900460ff166200027d565b6200023e620004f336600462002470565b620013c6565b6200027d6200050a36600462001ff5565b6001600160a01b031660009081526001602052604090205460ff1690565b6200023e620005393660046200252e565b5050565b600b5462000494906001600160a01b031681565b6200023e6200056236600462001ff5565b620014af565b620005726200150d565b60006001600160a01b03166003836040516200058f9190620025a1565b908152604051908190036020019020546001600160a01b031603620005ee57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01620005ec838262002691565b505b80600383604051620006019190620025a1565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200066f90849084906200275e565b60405180910390a15050565b6000828152600860205260409020548114620006b45760405162461bcd60e51b8152600401620006ab90620027b5565b60405180910390fd5b60006200072689898989604051602001620006d3949392919062002825565b6040516020818303038152906040528051906020012086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200158592505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620007645760405162461bcd60e51b8152600401620006ab90620028a4565b600e8990556000805b87518110156200087457600b5488516001600160a01b039091169063b6aed0cb908a9084908110620007a357620007a3620028b6565b6020026020010151620007b690620028d7565b426040518363ffffffff1660e01b8152600401620007d692919062002911565b600060405180830381600087803b158015620007f157600080fd5b505af115801562000806573d6000803e3d6000fd5b5050505081888281518110620008205762000820620028b6565b60200260200101516200083390620028d7565b6040516020016200084692919062002911565b60405160208183030381529060405280519060200120915080806200086b9062002946565b9150506200076d565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b620008a36200150d565b6001600160a01b03811660009081526020819052604090205460ff16620008de5760405162461bcd60e51b8152600401620006ab90620028a4565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936906200093590839062001fe5565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906200099190879087908790879060040162002a9b565b60006040518083038186803b158015620009aa57600080fd5b505afa158015620009bf573d6000803e3d6000fd5b50505050600084604051602001620009d8919062002ada565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff161562000a235760405162461bcd60e51b8152600401620006ab9062002b1d565b6001600c60008760405160200162000a3c919062002ada565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad219162000a979190890190890162001ff5565b87604001356040518363ffffffff1660e01b815260040162000abb92919062002b2f565b600060405180830381600087803b15801562000ad657600080fd5b505af115801562000aeb573d6000803e3d6000fd5b505050505050505050565b60408051606080820183526000808352602083019190915291810182905260008062000b2285620010ef565b915091508162000b385760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff161562000b755760405162461bcd60e51b8152600401620006ab9062002b99565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369062000be990879062001fe5565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000cd257838290600052602060002001805462000c3e90620025c3565b80601f016020809104026020016040519081016040528092919081815260200182805462000c6c90620025c3565b801562000cbd5780601f1062000c915761010080835404028352916020019162000cbd565b820191906000526020600020905b81548152906001019060200180831162000c9f57829003601f168201915b50505050508152602001906001019062000c1c565b50505050905090565b62000ce56200150d565b6001600160a01b03811660009081526001602052604090205460ff1662000d205760405162461bcd60e51b8152600401620006ab9062002bde565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47906200093590839062001fe5565b62000d7c6200150d565b62000d886000620015b5565b565b62000d946200150d565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da909062000ddf90339060040162001fe5565b600060405180830381600087803b15801562000dfa57600080fd5b505af115801562000e0f573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000e615750825b905060008267ffffffffffffffff16600114801562000e7f5750303b155b90508115801562000e8e575080155b1562000ec6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000efb57845468ff00000000000000001916680100000000000000001785555b62000f063362001633565b6000600555600160095560405162000f1e9062001b67565b604051809103906000f08015801562000f3b573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9162000fa69162001fe5565b60405180910390a1831562000ff857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29062000be99060019062002c0e565b5050505050565b6040805160608082018352600080835260208084018390528385018290528582526006815284822085519384019095528454835260018501805492958694939092840191906200104f90620025c3565b80601f01602080910402602001604051908101604052809291908181526020018280546200107d90620025c3565b8015620010ce5780601f10620010a257610100808354040283529160200191620010ce565b820191906000526020600020905b815481529060010190602001808311620010b057829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b604080516060808201835260008083526020830191909152918101829052600083815260076020526040812054908190036200115457505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b6200115f8162000fff565b9250925050915091565b600281815481106200117a57600080fd5b9060005260206000200160009150905080546200119790620025c3565b80601f0160208091040260200160405190810160405280929190818152602001828054620011c590620025c3565b8015620012165780601f10620011ea5761010080835404028352916020019162001216565b820191906000526020600020905b815481529060010190602001808311620011f857829003601f168201915b505050505081565b600062001270833562001235602086018662002c1e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200158592505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620012ae5760405162461bcd60e51b8152600401620006ab90620028a4565b6001600160a01b03811660009081526001602052604090205460ff16620012e95760405162461bcd60e51b8152600401620006ab9062002bde565b620012f48362001648565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a5890620013279085359062001b7d565b60405180910390a1505050565b600080805b8351811015620013ad5781848281518110620013595762001359620028b6565b60200260200101516200136c90620028d7565b6040516020016200137f92919062002911565b6040516020818303038152906040528051906020012091508080620013a49062002946565b91505062001339565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff1680620014025760405162461bcd60e51b8152600401620006ab9062002cd2565b8115620014845760006200143b878786604051602001620014269392919062002d13565b604051602081830303815290604052620016f5565b905060006200144b828762001585565b9050876001600160a01b0316816001600160a01b031614620014815760405162461bcd60e51b8152600401620006ab9062002d96565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b620014b96200150d565b6001600160a01b038116620014ff5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620006ab919062001fe5565b6200150a81620015b5565b50565b33620015407f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000d8857336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620006ab919062001fe5565b60008060008062001597868662001734565b925092509250620015a9828262001785565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6200163d6200189b565b6200150a8162001903565b80356000908152600660205260409020819062001666828262002f39565b505060095460009081526007602052604090208135908190556200168c60014362002f45565b40604051602001620016a092919062002911565b60408051601f198184030181529181528151602092830120600980546000908152600890945291832055805491620016d88362002946565b9190505550600554816040013511156200150a5760400135600555565b60006200170382516200190d565b826040516020016200171792919062002f5b565b604051602081830303815290604052805190602001209050919050565b60008060008351604103620017725760208401516040850151606086015160001a6200176388828585620019b5565b9550955095505050506200177e565b50508151600091506002905b9250925092565b60008260038111156200179c576200179c62002f9b565b03620017a6575050565b6001826003811115620017bd57620017bd62002f9b565b03620017f5576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200180c576200180c62002f9b565b0362001848576040517ffce698f7000000000000000000000000000000000000000000000000000000008152620006ab90829060040162001b7d565b60038260038111156200185f576200185f62002f9b565b036200053957806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401620006ab919062001b7d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000d88576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620014b96200189b565b606060006200191c8362001a7e565b600101905060008167ffffffffffffffff8111156200193f576200193f62001b8d565b6040519080825280601f01601f1916602001820160405280156200196a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508462001974575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115620019f2575060009150600390508262001a74565b60006001888888886040516000815260200160405260405162001a19949392919062002fbb565b6020604051602081039080840390855afa15801562001a3c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001a6a5750600092506001915082905062001a74565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831062001ac8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062001af5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831062001b1457662386f26fc10000830492506010015b6305f5e100831062001b2d576305f5e100830492506008015b612710831062001b4257612710830492506004015b6064831062001b55576064830492506002015b600a8310620015af5760010192915050565b6121578062002ff983390190565b805b82525050565b60208101620015af828462001b75565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171562001bcc5762001bcc62001b8d565b6040525050565b600062001bdf60405190565b905062001bed828262001ba3565b919050565b600067ffffffffffffffff82111562001c0f5762001c0f62001b8d565b601f19601f83011660200192915050565b82818337506000910152565b600062001c4362001c3d8462001bf2565b62001bd3565b90508281526020810184848401111562001c605762001c60600080fd5b620019ad84828562001c20565b600082601f83011262001c835762001c83600080fd5b813562001c9584826020860162001c2c565b949350505050565b60006001600160a01b038216620015af565b62001cba8162001c9d565b81146200150a57600080fd5b8035620015af8162001caf565b6000806040838503121562001ceb5762001ceb600080fd5b823567ffffffffffffffff81111562001d075762001d07600080fd5b62001d158582860162001c6d565b925050602062001d288582860162001cc6565b9150509250929050565b8062001cba565b8035620015af8162001d32565b600067ffffffffffffffff82111562001d635762001d6362001b8d565b5060209081020190565b600062001d7e62001c3d8462001d46565b8381529050602080820190840283018581111562001d9f5762001d9f600080fd5b835b8181101562001de457803567ffffffffffffffff81111562001dc65762001dc6600080fd5b850162001dd4888262001c6d565b8452506020928301920162001da1565b5050509392505050565b600082601f83011262001e045762001e04600080fd5b813562001c9584826020860162001d6d565b60008083601f84011262001e2d5762001e2d600080fd5b50813567ffffffffffffffff81111562001e4a5762001e4a600080fd5b60208301915083600182028301111562001e675762001e67600080fd5b9250929050565b60008060008060008060008060e0898b03121562001e8f5762001e8f600080fd5b600062001e9d8b8b62001d39565b985050602062001eb08b828c0162001d39565b975050604062001ec38b828c0162001d39565b965050606089013567ffffffffffffffff81111562001ee55762001ee5600080fd5b62001ef38b828c0162001dee565b955050608089013567ffffffffffffffff81111562001f155762001f15600080fd5b62001f238b828c0162001e16565b945094505060a062001f388b828c0162001d39565b92505060c062001f4b8b828c0162001d39565b9150509295985092959890939650565b60006020828403121562001f725762001f72600080fd5b600062001c95848462001d39565b80151562001b77565b60208101620015af828462001f80565b60006020828403121562001fb05762001fb0600080fd5b813567ffffffffffffffff81111562001fcc5762001fcc600080fd5b62001c958482850162001c6d565b62001b778162001c9d565b60208101620015af828462001fda565b6000602082840312156200200c576200200c600080fd5b600062001c95848462001cc6565b600060808284031215620020315762002031600080fd5b50919050565b60008083601f8401126200204e576200204e600080fd5b50813567ffffffffffffffff8111156200206b576200206b600080fd5b60208301915083602082028301111562001e675762001e67600080fd5b60008060008060c08587031215620020a357620020a3600080fd5b6000620020b187876200201a565b945050608085013567ffffffffffffffff811115620020d357620020d3600080fd5b620020e18782880162002037565b935093505060a0620020f68782880162001d39565b91505092959194509250565b60005b838110156200211f57818101518382015260200162002105565b50506000910152565b600062002133825190565b8084526020840193506200214c81856020860162002102565b601f01601f19169290920192915050565b8051600090606084019062002173858262001b75565b50602083015184820360208601526200218d828262002128565b9150506040830151620019ad604086018262001b75565b60408101620021b4828562001b75565b818103602083015262001c9581846200215d565b600080600080600060608688031215620021e557620021e5600080fd5b6000620021f3888862001cc6565b955050602086013567ffffffffffffffff811115620022155762002215600080fd5b620022238882890162001e16565b9450945050604086013567ffffffffffffffff811115620022475762002247600080fd5b620022558882890162001e16565b92509250509295509295909350565b600062002272838362002128565b9392505050565b60200190565b60006200228a825190565b80845260208401935083602082028501620022a58560200190565b60005b84811015620022dd5783830388528151620022c4848262002264565b93505060208201602098909801979150600101620022a8565b50909695505050505050565b602080825281016200227281846200227f565b60408101620021b4828562001f80565b6020808252810162002272818462002128565b6000620015af6001600160a01b03831662002338565b90565b6001600160a01b031690565b6000620015af826200231f565b6000620015af8262002344565b62001b778162002351565b60208101620015af82846200235e565b600060608284031215620020315762002031600080fd5b600060208284031215620020315762002031600080fd5b60008060408385031215620023bf57620023bf600080fd5b823567ffffffffffffffff811115620023db57620023db600080fd5b620023e98582860162002379565b925050602083013567ffffffffffffffff8111156200240b576200240b600080fd5b62001d288582860162002390565b600060208284031215620024305762002430600080fd5b813567ffffffffffffffff8111156200244c576200244c600080fd5b62001c958482850162001dee565b80151562001cba565b8035620015af816200245a565b600080600080600060a086880312156200248d576200248d600080fd5b60006200249b888862001cc6565b9550506020620024ae8882890162001cc6565b945050604086013567ffffffffffffffff811115620024d057620024d0600080fd5b620024de8882890162001c6d565b935050606086013567ffffffffffffffff811115620025005762002500600080fd5b6200250e8882890162001c6d565b9250506080620025218882890162002463565b9150509295509295909350565b60008060208385031215620025465762002546600080fd5b823567ffffffffffffffff811115620025625762002562600080fd5b620025708582860162001e16565b92509250509250929050565b600062002587825190565b6200259781856020860162002102565b9290920192915050565b620015af81836200257c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680620025d857607f821691505b602082108103620020315762002031620025ad565b6000620015af620023358381565b6200260683620025ed565b815460001960089490940293841b1916921b91909117905550565b600062002630818484620025fb565b505050565b8181101562000539576200264b60008262002621565b60010162002635565b601f82111562002630576000818152602090206020601f850104810160208510156200267d5750805b62000ff86020601f86010483018262002635565b815167ffffffffffffffff811115620026ae57620026ae62001b8d565b620026ba8254620025c3565b620026c782828562002654565b506020601f821160018114620026ff5760008315620026e65750848201515b600019600885021c198116600285021785555062000ff8565b600084815260208120601f198516915b828110156200273157878501518255602094850194600190920191016200270f565b50848210156200274f5783870151600019601f87166008021c191681555b50505050600202600101905550565b6040808252810162002771818562002128565b905062002272602083018462001fda565b600e8152602081017f496e76616c696420666f726b49440000000000000000000000000000000000008152905062002279565b60208082528101620015af8162002782565b6000620027d2825190565b80845260208401935083602082028501620027ed8560200190565b60005b84811015620022dd57838303885281516200280c848262002264565b93505060208201602098909801979150600101620027f0565b6080810162002835828762001b75565b62002844602083018662001b75565b62002853604083018562001b75565b8181036060830152620028678184620027c7565b9695505050505050565b60168152602081017f656e636c6176654944206e6f74206174746573746564000000000000000000008152905062002279565b60208082528101620015af8162002871565b634e487b7160e01b600052603260045260246000fd5b6000620015af825190565b6000620028e2825190565b60208301620028f181620028cc565b925050602081101562002031576000196020919091036008021b16919050565b6040810162002921828562001b75565b62002272602083018462001b75565b634e487b7160e01b600052601160045260246000fd5b6000600182016200295b576200295b62002930565b5060010190565b506000620015af602083018362001cc6565b506000620015af602083018362001d39565b67ffffffffffffffff811662001cba565b8035620015af8162002986565b506000620015af602083018362002997565b67ffffffffffffffff811662001b77565b620029d3818062002962565b620029df838262001fda565b50620029ef602082018262002962565b620029fe602084018262001fda565b5062002a0e604082018262002974565b62002a1d604084018262001b75565b5062002a2d6060820182620029a4565b620026306060840182620029b6565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111562002a825762002a82600080fd5b60208302925062002a9583858462002a3c565b50500190565b60c0810162002aab8287620029c7565b818103608083015262002ac081858762002a45565b905062002ad160a083018462001b75565b95945050505050565b60808101620015af8284620029c7565b60188152602081017f7769746864726177616c20616c7265616479207370656e7400000000000000008152905062002279565b60208082528101620015af8162002aea565b6040810162002921828562001fda565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101620015af8162002b3f565b60198152602081017f656e636c6176654944206e6f7420612073657175656e636572000000000000008152905062002279565b60208082528101620015af8162002bab565b600067ffffffffffffffff8216620015af565b62001b778162002bf0565b60208101620015af828462002c03565b6000808335601e193685900301811262002c3b5762002c3b600080fd5b8301915050803567ffffffffffffffff81111562002c5c5762002c5c600080fd5b60208201915060018102360382131562001e675762001e67600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905062002b93565b60208082528101620015af8162002c79565b6000620015af8260601b90565b6000620015af8262002ce4565b62001b7762002d0d8262001c9d565b62002cf1565b62002d1f818562002cfe565b60140162002d2e818462002cfe565b60140162001c9581836200257c565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905062002b93565b60208082528101620015af8162002d3d565b60008135620015af8162001d32565b600081620015af565b62002dcb8262002db7565b62002dda620023358262002db7565b8255505050565b8267ffffffffffffffff81111562002dfd5762002dfd62001b8d565b62002e098254620025c3565b62002e1682828562002654565b506000601f82116001811462002e4e576000831562002e355750848201355b600019600885021c198116600285021785555062002eab565b600084815260209020601f19841690835b8281101562002e81578785013582556020948501946001909201910162002e5f565b508482101562002e9f57600019601f86166008021c19848801351681555b50506001600284020184555b505050505050565b6200263083838362002de1565b62002ecb82620025ed565b8062002dda565b80828062002ee08162002da8565b905062002eee818462002dc0565b505050600181016020830162002f05818562002c1e565b915062002f1482828562002eb3565b50505060028101604083018062002f2b8262002da8565b905062000ff8818462002ec0565b62000539828262002ed2565b81810381811115620015af57620015af62002930565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a0162002f8d81846200257c565b90506200227281836200257c565b634e487b7160e01b600052602160045260246000fd5b60ff811662001b77565b6080810162002fcb828762001b75565b62002fda602083018662002fb1565b62002fe9604083018562001b75565b62002ad1606083018462001b7556fe60806040523480156200001157600080fd5b506200001d336200002d565b620000276200009e565b62000152565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000ef5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146200014f5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ff580620001626000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610ebc565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f0b565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f36565b61039e565b6040516101ae9190610f71565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f97565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f36565b610443565b6040516101ae9190610fc0565b61015e610212366004610fe2565b610495565b34801561022357600080fd5b5061015e61023236600461101f565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae9190611040565b34801561029d57600080fd5b5061015e6102ac36600461104e565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fe2565b610727565b3480156102dd57600080fd5b506102f16102ec366004611107565b6107a7565b6040516101ae919061119b565b34801561030a57600080fd5b5061015e610319366004611209565b610800565b34801561032a57600080fd5b5061015e610339366004611279565b610901565b34801561034a57600080fd5b5061015e61035936600461101f565b610947565b34801561036a57600080fd5b5061015e61037936600461129b565b610a89565b34801561038a57600080fd5b5061015e61039936600461101f565b610bcc565b600080826040516020016103b291906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b815260040161017890611507565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611549565b600090815260036020526040812055565b6000808260405160200161045791906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b8152600401610178906115b1565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115c1565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b81526004016101789061160e565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611634565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611689565b60006106418342611699565b905060008460405160200161065691906114b8565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b815260040161017890611704565b6000818152602081815260408220849055600191906106bb9088018861101f565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611714565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b87565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b81526004016101789061160e565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b91565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c4c565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c98565b60008460405160200161086e9190611d1d565b604051602081830303815290604052805190602001206040516020016108949190611d5d565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d7c565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611de6565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e4e565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e72565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c4c565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c98565b6000610af3602086018661101f565b610b036040870160208801611e80565b610b136060880160408901611714565b610b236080890160608a01611714565b610b3060808a018a611899565b610b4060c08c0160a08d01611ea1565b604051602001610b569796959493929190611b91565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ef4565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d7c565b610a815760405162461bcd60e51b815260040161017890611f5c565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f6c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610df3565b610c2081610e5a565b600081815b84811015610dea57610dd682878784818110610dca57610dca611f90565b90506020020135610e62565b915080610de281611fa6565b915050610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610df3565b6000818310610e7e576000828152602084905260409020610e8d565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e90565b610eb081610e96565b82525050565b80610eb0565b60408101610eca8285610ea7565b6103f66020830184610eb6565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e9081610ed7565b600060c08284031215610f3057610f30600080fd5b50919050565b600060208284031215610f4b57610f4b600080fd5b813567ffffffffffffffff811115610f6557610f65600080fd5b61048d84828501610f1b565b60208101610e908284610eb6565b805b8114610c2057600080fd5b8035610e9081610f7f565b600060208284031215610fac57610fac600080fd5b600061048d8484610f8c565b801515610eb0565b60208101610e908284610fb8565b610f8181610e96565b8035610e9081610fce565b60008060408385031215610ff857610ff8600080fd5b60006110048585610fd7565b925050602061101585828601610f8c565b9150509250929050565b60006020828403121561103457611034600080fd5b600061048d8484610fd7565b60208101610e908284610ea7565b6000806040838503121561106457611064600080fd5b823567ffffffffffffffff81111561107e5761107e600080fd5b61100485828601610f1b565b63ffffffff8116610f81565b8035610e908161108a565b60008083601f8401126110b6576110b6600080fd5b50813567ffffffffffffffff8111156110d1576110d1600080fd5b6020830191508360018202830111156110ec576110ec600080fd5b9250929050565b60ff8116610f81565b8035610e90816110f3565b60008060008060006080868803121561112257611122600080fd5b600061112e8888611096565b955050602061113f88828901611096565b945050604086013567ffffffffffffffff81111561115f5761115f600080fd5b61116b888289016110a1565b9350935050606061117e888289016110fc565b9150509295509295909350565b67ffffffffffffffff8116610eb0565b60208101610e90828461118b565b600060808284031215610f3057610f30600080fd5b60008083601f8401126111d3576111d3600080fd5b50813567ffffffffffffffff8111156111ee576111ee600080fd5b6020830191508360208202830111156110ec576110ec600080fd5b60008060008060c0858703121561122257611222600080fd5b600061122e87876111a9565b945050608085013567ffffffffffffffff81111561124e5761124e600080fd5b61125a878288016111be565b935093505060a061126d87828801610f8c565b91505092959194509250565b6000806040838503121561128f5761128f600080fd5b60006110048585610f8c565b600080600080606085870312156112b4576112b4600080fd5b843567ffffffffffffffff8111156112ce576112ce600080fd5b6112da87828801610f1b565b945050602085013567ffffffffffffffff8111156112fa576112fa600080fd5b611306878288016111be565b9350935050604061126d87828801610f8c565b506000610e906020830183610fd7565b67ffffffffffffffff8116610f81565b8035610e9081611329565b506000610e906020830183611339565b506000610e906020830183611096565b63ffffffff8116610eb0565b6000808335601e193685900301811261138b5761138b600080fd5b830160208101925035905067ffffffffffffffff8111156113ae576113ae600080fd5b368190038213156110ec576110ec600080fd5b82818337506000910152565b8183526020830192506113e18284836113c1565b50601f01601f19160190565b506000610e9060208301836110fc565b60ff8116610eb0565b600060c083016114168380611319565b6114208582610ea7565b5061142e6020840184611344565b61143b602086018261118b565b506114496040840184611354565b6114566040860182611364565b506114646060840184611354565b6114716060860182611364565b5061147f6080840184611370565b85830360808701526114928382846113cd565b925050506114a360a08401846113ed565b6114b060a08601826113fd565b509392505050565b60208082528101610e8d8184611406565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e90816114c9565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610f05565b60208082528101610e9081611517565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611501565b60208082528101610e9081611559565b604081016115cf8285610eb6565b6103f6602083018461118b565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610f05565b60208082528101610e90816115dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e9057610e9061161e565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610f05565b60208082528101610e9081611657565b80820180821115610e9057610e9061161e565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e90816116ac565b60006020828403121561172957611729600080fd5b600061048d8484611096565b60008135610e9081610fce565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e906001600160a01b038316611777565b90565b6001600160a01b031690565b6000610e9082611760565b6000610e9082611783565b6117a28261178e565b6117ad818354611742565b8255505050565b60008135610e9081611329565b60007bffffffffffffffff000000000000000000000000000000000000000061174e8460a01b90565b6000610e9067ffffffffffffffff83165b67ffffffffffffffff1690565b611811826117ea565b6117ad8183546117c1565b60008135610e908161108a565b60007fffffffff0000000000000000000000000000000000000000000000000000000061174e8460e01b90565b600063ffffffff8216610e90565b61186d82611856565b6117ad818354611829565b600063ffffffff8361174e565b61188e82611856565b6117ad818354611878565b6000808335601e19368590030181126118b4576118b4600080fd5b8301915050803567ffffffffffffffff8111156118d3576118d3600080fd5b6020820191506001810236038213156110ec576110ec600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061192e57607f821691505b602082108103610f3057610f30611904565b6000610e906117748381565b61195583611940565b815460001960089490940293841b1916921b91909117905550565b60006107a281848461194c565b8181101561059a57611990600082611970565b60010161197d565b601f8211156107a2576000818152602090206020601f850104810160208510156119bf5750805b6108fa6020601f86010483018261197d565b8267ffffffffffffffff8111156119ea576119ea6118ee565b6119f4825461191a565b6119ff828285611998565b506000601f821160018114611a345760008315611a1c5750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a655787850135825560209485019460019092019101611a45565b5084821015611a8257600019601f86166008021c19848801351681555b5050505060020260010190555050565b6107a28383836119d1565b60008135610e90816110f3565b600060ff8361174e565b600060ff8216610e90565b611ac882611ab4565b6117ad818354611aaa565b808280611adf81611735565b9050611aeb8184611799565b50506020830180611afb826117b4565b9050611b078184611808565b50506040830180611b178261181c565b9050611b238184611864565b505050600181016060830180611b388261181c565b9050611b448184611885565b5050506002810160808301611b598185611899565b9150611b66828285611a92565b5050506003810160a0830180611b7b82611a9d565b90506108fa8184611abf565b61059a8282611ad3565b60c08101611b9f828a610ea7565b611bac602083018961118b565b611bb96040830188611364565b611bc66060830187611364565b8181036080830152611bd98185876113cd565b9050611be860a08301846113fd565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611bf4565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611501565b60208082528101610e9081611c5c565b506000610e906020830183610f8c565b611cc28180611319565b611ccc8382610ea7565b50611cda6020820182611319565b611ce76020840182610ea7565b50611cf56040820182611ca8565b611d026040840182610eb6565b50611d106060820182611344565b6107a2606084018261118b565b60808101610e908284611cb8565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611d2b565b9050610e906020830184610eb6565b611d868183610eb6565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611501565b60208082528101610e9081611d8e565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611df6565b6000610e90826117fb565b610eb081611e5e565b60208101610e908284611e69565b600060208284031215611e9557611e95600080fd5b600061048d8484611339565b600060208284031215611eb657611eb6600080fd5b600061048d84846110fc565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611ec2565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611501565b60208082528101610e9081611f04565b67ffffffffffffffff918216919081169082820190811115610e9057610e9061161e565b634e487b7160e01b600052603260045260246000fd5b600060018201611fb857611fb861161e565b506001019056fea2646970667358221220b765f1dcb71fc1a477b68645e3b185262574a58a520c2f06b8b8758eaac24c8364736f6c63430008150033a2646970667358221220ac70be67404d33a141c9e08884c79536a0b85c8cb414bc8b0fdb9d84b72d499464736f6c63430008150033", + Bin: "0x6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b614ddb8061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638129fc1c11610104578063a25eb31c116100a2578063db5d91b111610071578063db5d91b114610475578063e34fbfc8146104a1578063e874eb20146104b3578063f2fde38b146104c657600080fd5b8063a25eb31c1461042c578063a4ab2faa1461043f578063a52f433c14610452578063d4fab8871461046257600080fd5b806387059edb116100de57806387059edb146103a95780638da5cb5b146103bc57806398077e86146103ec578063a1a227fa1461040c57600080fd5b80638129fc1c1461035d5780638236a7ba14610365578063841548261461038657600080fd5b8063476657381161017c5780636a30d26c1161014b5780636a30d26c146103255780636b9707d61461033a578063715018a61461034d578063728109961461035557600080fd5b806347665738146102cb5780635371a216146102de578063568699c8146102f157806368e103831461031257600080fd5b80632f0cb9e3116101b85780632f0cb9e3146102255780633e60a22f1461025557806343348b2f14610296578063440c953b146102c257600080fd5b80620ddd27146101de57806303e72e48146101fd578063073b6ef314610212575b600080fd5b6101e7600e5481565b6040516101f491906119de565b60405180910390f35b61021061020b366004611b14565b6104d9565b005b610210610220366004611c89565b6105e1565b610248610233366004611d57565b600c6020526000908152604090205460ff1681565b6040516101f49190611d7e565b610289610263366004611d8c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101f49190611dd8565b6102486102a4366004611de6565b6001600160a01b031660009081526020819052604090205460ff1690565b6101e760055481565b6102106102d9366004611de6565b6107d8565b6102106102ec366004611e6b565b610878565b6103046102ff366004611d57565b610a1d565b6040516101f4929190611f6d565b610210610320366004611f8d565b610a73565b61032d610b17565b6040516101f49190612090565b610210610348366004611de6565b610bf0565b610210610c80565b610210610c94565b610210610d19565b610378610373366004611d57565b610ef4565b6040516101f49291906120a1565b610248610394366004611d57565b600d6020526000908152604090205460ff1681565b6103786103b7366004611d57565b610fdc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610289565b6103ff6103fa366004611d57565b611053565b6040516101f491906120af565b600a5461041f906001600160a01b031681565b6040516101f49190612102565b61021061043a36600461213a565b6110ff565b61024861044d3660046121ac565b611207565b600454610100900460ff16610248565b6102106104703660046121fa565b611285565b610248610483366004611de6565b6001600160a01b031660009081526001602052604090205460ff1690565b6102106104af3660046122a1565b5050565b600b5461041f906001600160a01b031681565b6102106104d4366004611de6565b611361565b6104e16113b8565b60006001600160a01b03166003836040516104fc919061230b565b908152604051908190036020019020546001600160a01b03160361055857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161055683826123e7565b505b80600383604051610569919061230b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906105d590849084906124a7565b60405180910390a15050565b60008281526008602052604090205481146106175760405162461bcd60e51b815260040161060e906124f9565b60405180910390fd5b6000610685898989896040516020016106339493929190612561565b6040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166106c05760405162461bcd60e51b815260040161060e906125d7565b600e8990556000805b87518110156107b357600b5488516001600160a01b039091169063b6aed0cb908a90849081106106fb576106fb6125e7565b602002602001015161070c90612607565b426040518363ffffffff1660e01b815260040161072a92919061263d565b600060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050508188828151811061076f5761076f6125e7565b602002602001015161078090612607565b60405160200161079192919061263d565b60408051601f19818403018152919052805160209091012091506001016106c9565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6107e06113b8565b6001600160a01b03811660009081526020819052604090205460ff166108185760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061086d908390611dd8565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906108c7908790879087908790600401612773565b60006040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b5050505060008460405160200161090a91906127ac565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff16156109525760405162461bcd60e51b815260040161060e906127ec565b6001600c60008760405160200161096991906127ac565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad21916109c291908901908901611de6565b87604001356040518363ffffffff1660e01b81526004016109e49291906127fc565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610a4785610fdc565b9150915081610a5c5760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610a965760405162461bcd60e51b815260040161060e90612864565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610b08908790611dd8565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610be7578382906000526020600020018054610b5a9061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b869061232b565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081526020019060010190610b3b565b50505050905090565b610bf86113b8565b6001600160a01b03811660009081526001602052604090205460ff16610c305760405162461bcd60e51b815260040161060e906128a6565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479061086d908390611dd8565b610c886113b8565b610c926000611458565b565b610c9c6113b8565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610ce5903390600401611dd8565b600060405180830381600087803b158015610cff57600080fd5b505af1158015610d13573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d645750825b905060008267ffffffffffffffff166001148015610d815750303b155b905081158015610d8f575080155b15610dc6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610dfa57845468ff00000000000000001916680100000000000000001785555b610e03336114d6565b60006005556001600955604051610e19906119c9565b604051809103906000f080158015610e35573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610e9e91611dd8565b60405180910390a18315610eed57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b08906001906128d1565b5050505050565b604080516060808201835260008083526020808401839052838501829052858252600681528482208551938401909552845483526001850180549295869493909284019190610f429061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e9061232b565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361104057505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61104981610ef4565b9250925050915091565b6002818154811061106357600080fd5b90600052602060002001600091509050805461107e9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546110aa9061232b565b80156110f75780601f106110cc576101008083540402835291602001916110f7565b820191906000526020600020905b8154815290600101906020018083116110da57829003601f168201915b505050505081565b600061114d833561111360208601866128df565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166111885760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b03811660009081526001602052604090205460ff166111c05760405162461bcd60e51b815260040161060e906128a6565b6111c9836114e7565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906111fa908535906119de565b60405180910390a1505050565b600080805b835181101561126c5781848281518110611228576112286125e7565b602002602001015161123990612607565b60405160200161124a92919061263d565b60408051601f198184030181529190528051602090910120915060010161120c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806112be5760405162461bcd60e51b815260040161060e9061298c565b81156113365760006112f28787866040516020016112de939291906129c4565b60405160208183030381529060405261158b565b90506000611300828761142c565b9050876001600160a01b0316816001600160a01b0316146113335760405162461bcd60e51b815260040161060e90612a40565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6113696113b8565b6001600160a01b0381166113ac5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b6113b581611458565b50565b336113ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c9257336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b60008060008061143c86866115c6565b92509250925061144c8282611613565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6114de611715565b6113b58161177c565b8035600090815260066020526040902081906115038282612bb3565b50506009546000908152600760205260409020813590819055611527600143612bd3565b4060405160200161153992919061263d565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549161156f83612be6565b9190505550600554816040013511156113b55760400135600555565b60006115978251611784565b826040516020016115a9929190612bff565b604051602081830303815290604052805190602001209050919050565b600080600083516041036116005760208401516040850151606086015160001a6115f288828585611825565b95509550955050505061160c565b50508151600091506002905b9250925092565b600082600381111561162757611627612c3b565b03611630575050565b600182600381111561164457611644612c3b565b0361167b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561168f5761168f612c3b565b036116c8576040517ffce698f700000000000000000000000000000000000000000000000000000000815261060e9082906004016119de565b60038260038111156116dc576116dc612c3b565b036104af57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161060e91906119de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c92576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611369611715565b60606000611791836118e7565b600101905060008167ffffffffffffffff8111156117b1576117b16119ec565b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117e5575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186057506000915060039050826118dd565b6000600188888888604051600081526020016040526040516118859493929190612c5a565b6020604051602081039080840390855afa1580156118a7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d3575060009250600191508290506118dd565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061195c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061197a57662386f26fc10000830492506010015b6305f5e1008310611992576305f5e100830492506008015b61271083106119a657612710830492506004015b606483106119b8576064830492506002015b600a83106114525760010192915050565b61211680612c9083390190565b805b82525050565b6020810161145282846119d6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611a2857611a286119ec565b6040525050565b6000611a3a60405190565b9050611a468282611a02565b919050565b600067ffffffffffffffff821115611a6557611a656119ec565b601f19601f83011660200192915050565b82818337506000910152565b6000611a95611a9084611a4b565b611a2f565b9050828152838383011115611aac57611aac600080fd5b611aba836020830184611a76565b9392505050565b600082601f830112611ad557611ad5600080fd5b611aba83833560208501611a82565b60006001600160a01b038216611452565b611afe81611ae4565b81146113b557600080fd5b803561145281611af5565b60008060408385031215611b2a57611b2a600080fd5b823567ffffffffffffffff811115611b4457611b44600080fd5b611b5085828601611ac1565b925050611b608460208501611b09565b90509250929050565b80611afe565b803561145281611b69565b600067ffffffffffffffff821115611b9457611b946119ec565b5060209081020190565b6000611bac611a9084611b7a565b83815290506020808201908402830185811115611bcb57611bcb600080fd5b835b81811015611c0a57803567ffffffffffffffff811115611bef57611bef600080fd5b611bfb88828801611ac1565b84525060209283019201611bcd565b5050509392505050565b600082601f830112611c2857611c28600080fd5b611aba83833560208501611b9e565b60008083601f840112611c4c57611c4c600080fd5b50813567ffffffffffffffff811115611c6757611c67600080fd5b602083019150836001820283011115611c8257611c82600080fd5b9250929050565b60008060008060008060008060e0898b031215611ca857611ca8600080fd5b611cb28a8a611b6f565b9750611cc18a60208b01611b6f565b9650611cd08a60408b01611b6f565b9550606089013567ffffffffffffffff811115611cef57611cef600080fd5b611cfb8b828c01611c14565b955050608089013567ffffffffffffffff811115611d1b57611d1b600080fd5b611d278b828c01611c37565b9450945050611d398a60a08b01611b6f565b9150611d488a60c08b01611b6f565b90509295985092959890939650565b600060208284031215611d6c57611d6c600080fd5b611aba8383611b6f565b8015156119d8565b602081016114528284611d76565b600060208284031215611da157611da1600080fd5b813567ffffffffffffffff811115611dbb57611dbb600080fd5b611dc784828501611ac1565b949350505050565b6119d881611ae4565b602081016114528284611dcf565b600060208284031215611dfb57611dfb600080fd5b611aba8383611b09565b600060808284031215611e1a57611e1a600080fd5b50919050565b60008083601f840112611e3557611e35600080fd5b50813567ffffffffffffffff811115611e5057611e50600080fd5b602083019150836020820283011115611c8257611c82600080fd5b60008060008060c08587031215611e8457611e84600080fd5b611e8e8686611e05565b9350608085013567ffffffffffffffff811115611ead57611ead600080fd5b611eb987828801611e20565b9350935050611ecb8660a08701611b6f565b905092959194509250565b60005b83811015611ef1578181015183820152602001611ed9565b50506000910152565b6000611f04825190565b808452602084019350611f1b818560208601611ed6565b601f01601f19169290920192915050565b80516000906060840190611f4085826119d6565b5060208301518482036020860152611f588282611efa565b915050604083015161181d60408601826119d6565b60408101611f7b82856119d6565b8181036020830152611dc78184611f2c565b600080600080600060608688031215611fa857611fa8600080fd5b611fb28787611b09565b9450602086013567ffffffffffffffff811115611fd157611fd1600080fd5b611fdd88828901611c37565b9450945050604086013567ffffffffffffffff811115611fff57611fff600080fd5b61200b88828901611c37565b92509250509295509295909350565b6000611aba8383611efa565b60200190565b6000612036825190565b808452602084019350836020820285016120508560200190565b60005b84811015612084578383038852815161206c848261201a565b93505060208201602098909801979150600101612053565b50909695505050505050565b60208082528101611aba818461202c565b60408101611f7b8285611d76565b60208082528101611aba8184611efa565b60006114526001600160a01b0383166120d7565b90565b6001600160a01b031690565b6000611452826120c0565b6000611452826120e3565b6119d8816120ee565b6020810161145282846120f9565b600060608284031215611e1a57611e1a600080fd5b600060208284031215611e1a57611e1a600080fd5b6000806040838503121561215057612150600080fd5b823567ffffffffffffffff81111561216a5761216a600080fd5b61217685828601612110565b925050602083013567ffffffffffffffff81111561219657612196600080fd5b6121a285828601612125565b9150509250929050565b6000602082840312156121c1576121c1600080fd5b813567ffffffffffffffff8111156121db576121db600080fd5b611dc784828501611c14565b801515611afe565b8035611452816121e7565b600080600080600060a0868803121561221557612215600080fd5b61221f8787611b09565b945061222e8760208801611b09565b9350604086013567ffffffffffffffff81111561224d5761224d600080fd5b61225988828901611ac1565b935050606086013567ffffffffffffffff81111561227957612279600080fd5b61228588828901611ac1565b92505061229587608088016121ef565b90509295509295909350565b600080602083850312156122b7576122b7600080fd5b823567ffffffffffffffff8111156122d1576122d1600080fd5b6122dd85828601611c37565b92509250509250929050565b60006122f3825190565b612301818560208601611ed6565b9290920192915050565b61145281836122e9565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061233f57607f821691505b602082108103611e1a57611e1a612315565b60006114526120d48381565b61236683612351565b815460001960089490940293841b1916921b91909117905550565b600061238e81848461235d565b505050565b818110156104af576123a6600082612381565b600101612393565b601f82111561238e576000818152602090206020601f850104810160208510156123d55750805b610eed6020601f860104830182612393565b815167ffffffffffffffff811115612401576124016119ec565b61240b825461232b565b6124168282856123ae565b506020601f82116001811461244b57600083156124335750848201515b600019600885021c1981166002850217855550610eed565b600084815260208120601f198516915b8281101561247b578785015182556020948501946001909201910161245b565b50848210156124985783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016124b88185611efa565b9050611aba6020830184611dcf565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612026565b60208082528101611452816124c7565b6000612513825190565b8084526020840193508360208202850161252d8560200190565b60005b848110156120845783830388528151612549848261201a565b93505060208201602098909801979150600101612530565b6080810161256f82876119d6565b61257c60208301866119d6565b61258960408301856119d6565b818103606083015261259b8184612509565b9695505050505050565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612026565b60208082528101611452816125a5565b634e487b7160e01b600052603260045260246000fd5b6000611452825190565b6000612611825190565b6020830161261e816125fd565b9250506020811015611e1a576000196020919091036008021b16919050565b6040810161264b82856119d6565b611aba60208301846119d6565b5060006114526020830183611b09565b5060006114526020830183611b6f565b67ffffffffffffffff8116611afe565b803561145281612678565b5060006114526020830183612688565b67ffffffffffffffff81166119d8565b6126bd8180612658565b6126c78382611dcf565b506126d56020820182612658565b6126e26020840182611dcf565b506126f06040820182612668565b6126fd60408401826119d6565b5061270b6060820182612693565b61238e60608401826126a3565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561275c5761275c600080fd5b60208302925061276d838584612718565b50500190565b60c0810161278182876126b3565b8181036080830152612794818587612721565b90506127a360a08301846119d6565b95945050505050565b6080810161145282846126b3565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612026565b60208082528101611452816127ba565b6040810161264b8285611dcf565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016114528161280a565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612026565b6020808252810161145281612874565b600067ffffffffffffffff8216611452565b6119d8816128b6565b6020810161145282846128c8565b6000808335601e19368590030181126128fa576128fa600080fd5b8301915050803567ffffffffffffffff81111561291957612919600080fd5b602082019150600181023603821315611c8257611c82600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061285e565b6020808252810161145281612934565b60006114528260601b90565b60006114528261299c565b6119d86129bf82611ae4565b6129a8565b6129ce81856129b3565b6014016129db81846129b3565b601401611dc781836122e9565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061285e565b60208082528101611452816129e8565b6000813561145281611b69565b600081611452565b612a6e82612a5d565b612a7a6120d482612a5d565b8255505050565b8267ffffffffffffffff811115612a9a57612a9a6119ec565b612aa4825461232b565b612aaf8282856123ae565b506000601f821160018114612ae45760008315612acc5750848201355b600019600885021c1981166002850217855550612b3e565b600084815260209020601f19841690835b82811015612b155787850135825560209485019460019092019101612af5565b5084821015612b32576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b61238e838383612a81565b612b5a82612351565b80612a7a565b8180612b6b81612a50565b9050612b778184612a65565b5050612b8660208301836128df565b612b94818360018601612b46565b50506040820180612ba482612a50565b9050610d138160028501612b51565b6104af8282612b60565b634e487b7160e01b600052601160045260246000fd5b8181038181111561145257611452612bbd565b600060018201612bf857612bf8612bbd565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612c2f81846122e9565b9050611aba81836122e9565b634e487b7160e01b600052602160045260246000fd5b60ff81166119d8565b60808101612c6882876119d6565b612c756020830186612c51565b612c8260408301856119d6565b6127a360608301846119d656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611fbd806101596000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610eb2565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f01565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f2c565b61039e565b6040516101ae9190610f67565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f8d565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f2c565b610443565b6040516101ae9190610fb4565b61015e610212366004610fd6565b610495565b34801561022357600080fd5b5061015e61023236600461100e565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae919061102d565b34801561029d57600080fd5b5061015e6102ac36600461103b565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fd6565b610727565b3480156102dd57600080fd5b506102f16102ec366004611104565b6107a7565b6040516101ae9190611191565b34801561030a57600080fd5b5061015e6103193660046111ff565b610800565b34801561032a57600080fd5b5061015e61033936600461126a565b610901565b34801561034a57600080fd5b5061015e61035936600461100e565b610947565b34801561036a57600080fd5b5061015e61037936600461128a565b610a89565b34801561038a57600080fd5b5061015e61039936600461100e565b610bcc565b600080826040516020016103b291906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b8152600401610178906114f5565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611537565b600090815260036020526040812055565b6000808260405160200161045791906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b81526004016101789061159f565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115af565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b8152600401610178906115fc565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611622565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611677565b60006106418342611687565b905060008460405160200161065691906114a6565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b8152600401610178906116f2565b6000818152602081815260408220849055600191906106bb9088018861100e565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611702565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b6c565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b8152600401610178906115fc565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b76565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c31565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c7d565b60008460405160200161086e9190611d02565b604051602081830303815290604052805190602001206040516020016108949190611d42565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d61565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611dcb565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e33565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e57565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c31565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c7d565b6000610af3602086018661100e565b610b036040870160208801611e65565b610b136060880160408901611702565b610b236080890160608a01611702565b610b3060808a018a611885565b610b4060c08c0160a08d01611e84565b604051602001610b569796959493929190611b76565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ed5565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d61565b610a815760405162461bcd60e51b815260040161017890611f3d565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610de9565b610c2081610e50565b600081815b84811015610de057610dd682878784818110610dca57610dca611f71565b90506020020135610e58565b9150600101610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610de9565b6000818310610e74576000828152602084905260409020610e83565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e86565b610ea681610e8c565b82525050565b80610ea6565b60408101610ec08285610e9d565b6103f66020830184610eac565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e8681610ecd565b600060c08284031215610f2657610f26600080fd5b50919050565b600060208284031215610f4157610f41600080fd5b813567ffffffffffffffff811115610f5b57610f5b600080fd5b61048d84828501610f11565b60208101610e868284610eac565b805b8114610c2057600080fd5b8035610e8681610f75565b600060208284031215610fa257610fa2600080fd5b610e838383610f82565b801515610ea6565b60208101610e868284610fac565b610f7781610e8c565b8035610e8681610fc2565b60008060408385031215610fec57610fec600080fd5b610ff68484610fcb565b91506110058460208501610f82565b90509250929050565b60006020828403121561102357611023600080fd5b610e838383610fcb565b60208101610e868284610e9d565b6000806040838503121561105157611051600080fd5b823567ffffffffffffffff81111561106b5761106b600080fd5b61107785828601610f11565b9250506110058460208501610f82565b63ffffffff8116610f77565b8035610e8681611087565b60008083601f8401126110b3576110b3600080fd5b50813567ffffffffffffffff8111156110ce576110ce600080fd5b6020830191508360018202830111156110e9576110e9600080fd5b9250929050565b60ff8116610f77565b8035610e86816110f0565b60008060008060006080868803121561111f5761111f600080fd5b6111298787611093565b94506111388760208801611093565b9350604086013567ffffffffffffffff81111561115757611157600080fd5b6111638882890161109e565b935093505061117587606088016110f9565b90509295509295909350565b67ffffffffffffffff8116610ea6565b60208101610e868284611181565b600060808284031215610f2657610f26600080fd5b60008083601f8401126111c9576111c9600080fd5b50813567ffffffffffffffff8111156111e4576111e4600080fd5b6020830191508360208202830111156110e9576110e9600080fd5b60008060008060c0858703121561121857611218600080fd5b611222868661119f565b9350608085013567ffffffffffffffff81111561124157611241600080fd5b61124d878288016111b4565b935093505061125f8660a08701610f82565b905092959194509250565b6000806040838503121561128057611280600080fd5b610ff68484610f82565b600080600080606085870312156112a3576112a3600080fd5b843567ffffffffffffffff8111156112bd576112bd600080fd5b6112c987828801610f11565b945050602085013567ffffffffffffffff8111156112e9576112e9600080fd5b6112f5878288016111b4565b935093505061125f8660408701610f82565b506000610e866020830183610fcb565b67ffffffffffffffff8116610f77565b8035610e8681611317565b506000610e866020830183611327565b506000610e866020830183611093565b63ffffffff8116610ea6565b6000808335601e193685900301811261137957611379600080fd5b830160208101925035905067ffffffffffffffff81111561139c5761139c600080fd5b368190038213156110e9576110e9600080fd5b82818337506000910152565b8183526020830192506113cf8284836113af565b50601f01601f19160190565b506000610e8660208301836110f9565b60ff8116610ea6565b600060c083016114048380611307565b61140e8582610e9d565b5061141c6020840184611332565b6114296020860182611181565b506114376040840184611342565b6114446040860182611352565b506114526060840184611342565b61145f6060860182611352565b5061146d608084018461135e565b85830360808701526114808382846113bb565b9250505061149160a08401846113db565b61149e60a08601826113eb565b509392505050565b60208082528101610e8381846113f4565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e86816114b7565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610efb565b60208082528101610e8681611505565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611547565b604081016115bd8285610eac565b6103f66020830184611181565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610efb565b60208082528101610e86816115ca565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e8657610e8661160c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610efb565b60208082528101610e8681611645565b80820180821115610e8657610e8661160c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e868161169a565b60006020828403121561171757611717600080fd5b610e838383611093565b60008135610e8681610fc2565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e866001600160a01b038316611763565b90565b6001600160a01b031690565b6000610e868261174c565b6000610e868261176f565b61178e8261177a565b61179981835461172e565b8255505050565b60008135610e8681611317565b60007bffffffffffffffff000000000000000000000000000000000000000061173a8460a01b90565b6000610e8667ffffffffffffffff83165b67ffffffffffffffff1690565b6117fd826117d6565b6117998183546117ad565b60008135610e8681611087565b60007fffffffff0000000000000000000000000000000000000000000000000000000061173a8460e01b90565b600063ffffffff8216610e86565b61185982611842565b611799818354611815565b600063ffffffff8361173a565b61187a82611842565b611799818354611864565b6000808335601e19368590030181126118a0576118a0600080fd5b8301915050803567ffffffffffffffff8111156118bf576118bf600080fd5b6020820191506001810236038213156110e9576110e9600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061191a57607f821691505b602082108103610f2657610f266118f0565b6000610e866117608381565b6119418361192c565b815460001960089490940293841b1916921b91909117905550565b60006107a2818484611938565b8181101561059a5761197c60008261195c565b600101611969565b601f8211156107a2576000818152602090206020601f850104810160208510156119ab5750805b6108fa6020601f860104830182611969565b8267ffffffffffffffff8111156119d6576119d66118da565b6119e08254611906565b6119eb828285611984565b506000601f821160018114611a205760008315611a085750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a515787850135825560209485019460019092019101611a31565b5084821015611a6e576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6107a28383836119bd565b60008135610e86816110f0565b600060ff8216610e86565b611aaa82611a96565b815460ff191660ff821617611799565b808280611ac681611721565b9050611ad28184611785565b50506020830180611ae2826117a0565b9050611aee81846117f4565b50506040830180611afe82611808565b9050611b0a8184611850565b5050506060820180611b1b82611808565b9050611b2a8160018501611871565b5050611b396080830183611885565b611b47818360028601611a7e565b505060a0820180611b5782611a89565b9050611b668160038501611aa1565b50505050565b61059a8282611aba565b60c08101611b84828a610e9d565b611b916020830189611181565b611b9e6040830188611352565b611bab6060830187611352565b8181036080830152611bbe8185876113bb565b9050611bcd60a08301846113eb565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611bd9565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506114ef565b60208082528101610e8681611c41565b506000610e866020830183610f82565b611ca78180611307565b611cb18382610e9d565b50611cbf6020820182611307565b611ccc6020840182610e9d565b50611cda6040820182611c8d565b611ce76040840182610eac565b50611cf56060820182611332565b6107a26060840182611181565b60808101610e868284611c9d565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611d10565b9050610e866020830184610eac565b611d6b8183610eac565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506114ef565b60208082528101610e8681611d73565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ddb565b6000610e86826117e7565b610ea681611e43565b60208101610e868284611e4e565b600060208284031215611e7a57611e7a600080fd5b610e838383611327565b600060208284031215611e9957611e99600080fd5b610e8383836110f9565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611ea3565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ee5565b67ffffffffffffffff918216919081169082820190811115610e8657610e8661160c565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205e8a2a9bc33c3a988cb2b5342dbf402d725b529ed253b9949551653847bb8a0764736f6c634300081c0033a264697066735822122072a39f97044b9862ab3c9bc3242d88725f800009f8e486e429ccbf92b16e119c64736f6c634300081c0033", } // ManagementContractABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Math/Math.go b/contracts/generated/Math/Math.go index b5911f9e1..246eb2966 100644 --- a/contracts/generated/Math/Math.go +++ b/contracts/generated/Math/Math.go @@ -32,7 +32,7 @@ var ( // MathMetaData contains all meta data concerning the Math contract. var MathMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"MathOverflowedMulDiv\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208055b3213f078c05f41b14d45f592bf02a523f3474c978b794f77f26a61bed6264736f6c63430008150033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220414fb1f0abf0470c4bfc889731211af53a844ce081ed2010bb259382b2d110fd64736f6c634300081c0033", } // MathABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MerkleProof/MerkleProof.go b/contracts/generated/MerkleProof/MerkleProof.go index 08f5a1d8a..6a66c1fbc 100644 --- a/contracts/generated/MerkleProof/MerkleProof.go +++ b/contracts/generated/MerkleProof/MerkleProof.go @@ -32,7 +32,7 @@ var ( // MerkleProofMetaData contains all meta data concerning the MerkleProof contract. var MerkleProofMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"MerkleProofInvalidMultiproof\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b03739715b97b8cd939533363ffa4c21e9ac592f7e17a0f844889d2235c2a21264736f6c63430008150033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201932f27795b64645664d78ae025beac1daff12570a84e07cd61f85cdc5a46ce864736f6c634300081c0033", } // MerkleProofABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go index 6f5f9976a..5691dd5c7 100644 --- a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go +++ b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go @@ -50,7 +50,7 @@ type StructsValueTransferMessage struct { // MerkleTreeMessageBusMetaData contains all meta data concerning the MerkleTreeMessageBus contract. var MerkleTreeMessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"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\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"}],\"name\":\"addStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"disableStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMessageInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyValueTransferInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b506200001d336200002d565b620000276200009e565b62000152565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000ef5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146200014f5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ff580620001626000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610ebc565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f0b565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f36565b61039e565b6040516101ae9190610f71565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f97565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f36565b610443565b6040516101ae9190610fc0565b61015e610212366004610fe2565b610495565b34801561022357600080fd5b5061015e61023236600461101f565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae9190611040565b34801561029d57600080fd5b5061015e6102ac36600461104e565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fe2565b610727565b3480156102dd57600080fd5b506102f16102ec366004611107565b6107a7565b6040516101ae919061119b565b34801561030a57600080fd5b5061015e610319366004611209565b610800565b34801561032a57600080fd5b5061015e610339366004611279565b610901565b34801561034a57600080fd5b5061015e61035936600461101f565b610947565b34801561036a57600080fd5b5061015e61037936600461129b565b610a89565b34801561038a57600080fd5b5061015e61039936600461101f565b610bcc565b600080826040516020016103b291906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b815260040161017890611507565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611549565b600090815260036020526040812055565b6000808260405160200161045791906114b8565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b8152600401610178906115b1565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115c1565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b81526004016101789061160e565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611634565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611689565b60006106418342611699565b905060008460405160200161065691906114b8565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b815260040161017890611704565b6000818152602081815260408220849055600191906106bb9088018861101f565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611714565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b87565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b81526004016101789061160e565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b91565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c4c565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c98565b60008460405160200161086e9190611d1d565b604051602081830303815290604052805190602001206040516020016108949190611d5d565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d7c565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611de6565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e4e565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e72565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c4c565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c98565b6000610af3602086018661101f565b610b036040870160208801611e80565b610b136060880160408901611714565b610b236080890160608a01611714565b610b3060808a018a611899565b610b4060c08c0160a08d01611ea1565b604051602001610b569796959493929190611b91565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ef4565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d7c565b610a815760405162461bcd60e51b815260040161017890611f5c565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101789190611040565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f6c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610df3565b610c2081610e5a565b600081815b84811015610dea57610dd682878784818110610dca57610dca611f90565b90506020020135610e62565b915080610de281611fa6565b915050610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610df3565b6000818310610e7e576000828152602084905260409020610e8d565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e90565b610eb081610e96565b82525050565b80610eb0565b60408101610eca8285610ea7565b6103f66020830184610eb6565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e9081610ed7565b600060c08284031215610f3057610f30600080fd5b50919050565b600060208284031215610f4b57610f4b600080fd5b813567ffffffffffffffff811115610f6557610f65600080fd5b61048d84828501610f1b565b60208101610e908284610eb6565b805b8114610c2057600080fd5b8035610e9081610f7f565b600060208284031215610fac57610fac600080fd5b600061048d8484610f8c565b801515610eb0565b60208101610e908284610fb8565b610f8181610e96565b8035610e9081610fce565b60008060408385031215610ff857610ff8600080fd5b60006110048585610fd7565b925050602061101585828601610f8c565b9150509250929050565b60006020828403121561103457611034600080fd5b600061048d8484610fd7565b60208101610e908284610ea7565b6000806040838503121561106457611064600080fd5b823567ffffffffffffffff81111561107e5761107e600080fd5b61100485828601610f1b565b63ffffffff8116610f81565b8035610e908161108a565b60008083601f8401126110b6576110b6600080fd5b50813567ffffffffffffffff8111156110d1576110d1600080fd5b6020830191508360018202830111156110ec576110ec600080fd5b9250929050565b60ff8116610f81565b8035610e90816110f3565b60008060008060006080868803121561112257611122600080fd5b600061112e8888611096565b955050602061113f88828901611096565b945050604086013567ffffffffffffffff81111561115f5761115f600080fd5b61116b888289016110a1565b9350935050606061117e888289016110fc565b9150509295509295909350565b67ffffffffffffffff8116610eb0565b60208101610e90828461118b565b600060808284031215610f3057610f30600080fd5b60008083601f8401126111d3576111d3600080fd5b50813567ffffffffffffffff8111156111ee576111ee600080fd5b6020830191508360208202830111156110ec576110ec600080fd5b60008060008060c0858703121561122257611222600080fd5b600061122e87876111a9565b945050608085013567ffffffffffffffff81111561124e5761124e600080fd5b61125a878288016111be565b935093505060a061126d87828801610f8c565b91505092959194509250565b6000806040838503121561128f5761128f600080fd5b60006110048585610f8c565b600080600080606085870312156112b4576112b4600080fd5b843567ffffffffffffffff8111156112ce576112ce600080fd5b6112da87828801610f1b565b945050602085013567ffffffffffffffff8111156112fa576112fa600080fd5b611306878288016111be565b9350935050604061126d87828801610f8c565b506000610e906020830183610fd7565b67ffffffffffffffff8116610f81565b8035610e9081611329565b506000610e906020830183611339565b506000610e906020830183611096565b63ffffffff8116610eb0565b6000808335601e193685900301811261138b5761138b600080fd5b830160208101925035905067ffffffffffffffff8111156113ae576113ae600080fd5b368190038213156110ec576110ec600080fd5b82818337506000910152565b8183526020830192506113e18284836113c1565b50601f01601f19160190565b506000610e9060208301836110fc565b60ff8116610eb0565b600060c083016114168380611319565b6114208582610ea7565b5061142e6020840184611344565b61143b602086018261118b565b506114496040840184611354565b6114566040860182611364565b506114646060840184611354565b6114716060860182611364565b5061147f6080840184611370565b85830360808701526114928382846113cd565b925050506114a360a08401846113ed565b6114b060a08601826113fd565b509392505050565b60208082528101610e8d8184611406565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e90816114c9565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610f05565b60208082528101610e9081611517565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611501565b60208082528101610e9081611559565b604081016115cf8285610eb6565b6103f6602083018461118b565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610f05565b60208082528101610e90816115dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e9057610e9061161e565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610f05565b60208082528101610e9081611657565b80820180821115610e9057610e9061161e565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e90816116ac565b60006020828403121561172957611729600080fd5b600061048d8484611096565b60008135610e9081610fce565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e906001600160a01b038316611777565b90565b6001600160a01b031690565b6000610e9082611760565b6000610e9082611783565b6117a28261178e565b6117ad818354611742565b8255505050565b60008135610e9081611329565b60007bffffffffffffffff000000000000000000000000000000000000000061174e8460a01b90565b6000610e9067ffffffffffffffff83165b67ffffffffffffffff1690565b611811826117ea565b6117ad8183546117c1565b60008135610e908161108a565b60007fffffffff0000000000000000000000000000000000000000000000000000000061174e8460e01b90565b600063ffffffff8216610e90565b61186d82611856565b6117ad818354611829565b600063ffffffff8361174e565b61188e82611856565b6117ad818354611878565b6000808335601e19368590030181126118b4576118b4600080fd5b8301915050803567ffffffffffffffff8111156118d3576118d3600080fd5b6020820191506001810236038213156110ec576110ec600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061192e57607f821691505b602082108103610f3057610f30611904565b6000610e906117748381565b61195583611940565b815460001960089490940293841b1916921b91909117905550565b60006107a281848461194c565b8181101561059a57611990600082611970565b60010161197d565b601f8211156107a2576000818152602090206020601f850104810160208510156119bf5750805b6108fa6020601f86010483018261197d565b8267ffffffffffffffff8111156119ea576119ea6118ee565b6119f4825461191a565b6119ff828285611998565b506000601f821160018114611a345760008315611a1c5750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a655787850135825560209485019460019092019101611a45565b5084821015611a8257600019601f86166008021c19848801351681555b5050505060020260010190555050565b6107a28383836119d1565b60008135610e90816110f3565b600060ff8361174e565b600060ff8216610e90565b611ac882611ab4565b6117ad818354611aaa565b808280611adf81611735565b9050611aeb8184611799565b50506020830180611afb826117b4565b9050611b078184611808565b50506040830180611b178261181c565b9050611b238184611864565b505050600181016060830180611b388261181c565b9050611b448184611885565b5050506002810160808301611b598185611899565b9150611b66828285611a92565b5050506003810160a0830180611b7b82611a9d565b90506108fa8184611abf565b61059a8282611ad3565b60c08101611b9f828a610ea7565b611bac602083018961118b565b611bb96040830188611364565b611bc66060830187611364565b8181036080830152611bd98185876113cd565b9050611be860a08301846113fd565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611bf4565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611501565b60208082528101610e9081611c5c565b506000610e906020830183610f8c565b611cc28180611319565b611ccc8382610ea7565b50611cda6020820182611319565b611ce76020840182610ea7565b50611cf56040820182611ca8565b611d026040840182610eb6565b50611d106060820182611344565b6107a2606084018261118b565b60808101610e908284611cb8565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611d2b565b9050610e906020830184610eb6565b611d868183610eb6565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611501565b60208082528101610e9081611d8e565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611501565b60208082528101610e9081611df6565b6000610e90826117fb565b610eb081611e5e565b60208101610e908284611e69565b600060208284031215611e9557611e95600080fd5b600061048d8484611339565b600060208284031215611eb657611eb6600080fd5b600061048d84846110fc565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610f05565b60408082528101611d6d81611ec2565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611501565b60208082528101610e9081611f04565b67ffffffffffffffff918216919081169082820190811115610e9057610e9061161e565b634e487b7160e01b600052603260045260246000fd5b600060018201611fb857611fb861161e565b506001019056fea2646970667358221220b765f1dcb71fc1a477b68645e3b185262574a58a520c2f06b8b8758eaac24c8364736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611fbd806101596000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610eb2565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f01565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f2c565b61039e565b6040516101ae9190610f67565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f8d565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f2c565b610443565b6040516101ae9190610fb4565b61015e610212366004610fd6565b610495565b34801561022357600080fd5b5061015e61023236600461100e565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae919061102d565b34801561029d57600080fd5b5061015e6102ac36600461103b565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fd6565b610727565b3480156102dd57600080fd5b506102f16102ec366004611104565b6107a7565b6040516101ae9190611191565b34801561030a57600080fd5b5061015e6103193660046111ff565b610800565b34801561032a57600080fd5b5061015e61033936600461126a565b610901565b34801561034a57600080fd5b5061015e61035936600461100e565b610947565b34801561036a57600080fd5b5061015e61037936600461128a565b610a89565b34801561038a57600080fd5b5061015e61039936600461100e565b610bcc565b600080826040516020016103b291906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b8152600401610178906114f5565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611537565b600090815260036020526040812055565b6000808260405160200161045791906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b81526004016101789061159f565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115af565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b8152600401610178906115fc565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611622565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611677565b60006106418342611687565b905060008460405160200161065691906114a6565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b8152600401610178906116f2565b6000818152602081815260408220849055600191906106bb9088018861100e565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611702565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b6c565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b8152600401610178906115fc565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b76565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c31565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c7d565b60008460405160200161086e9190611d02565b604051602081830303815290604052805190602001206040516020016108949190611d42565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d61565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611dcb565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e33565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e57565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c31565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c7d565b6000610af3602086018661100e565b610b036040870160208801611e65565b610b136060880160408901611702565b610b236080890160608a01611702565b610b3060808a018a611885565b610b4060c08c0160a08d01611e84565b604051602001610b569796959493929190611b76565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ed5565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d61565b610a815760405162461bcd60e51b815260040161017890611f3d565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610de9565b610c2081610e50565b600081815b84811015610de057610dd682878784818110610dca57610dca611f71565b90506020020135610e58565b9150600101610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610de9565b6000818310610e74576000828152602084905260409020610e83565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e86565b610ea681610e8c565b82525050565b80610ea6565b60408101610ec08285610e9d565b6103f66020830184610eac565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e8681610ecd565b600060c08284031215610f2657610f26600080fd5b50919050565b600060208284031215610f4157610f41600080fd5b813567ffffffffffffffff811115610f5b57610f5b600080fd5b61048d84828501610f11565b60208101610e868284610eac565b805b8114610c2057600080fd5b8035610e8681610f75565b600060208284031215610fa257610fa2600080fd5b610e838383610f82565b801515610ea6565b60208101610e868284610fac565b610f7781610e8c565b8035610e8681610fc2565b60008060408385031215610fec57610fec600080fd5b610ff68484610fcb565b91506110058460208501610f82565b90509250929050565b60006020828403121561102357611023600080fd5b610e838383610fcb565b60208101610e868284610e9d565b6000806040838503121561105157611051600080fd5b823567ffffffffffffffff81111561106b5761106b600080fd5b61107785828601610f11565b9250506110058460208501610f82565b63ffffffff8116610f77565b8035610e8681611087565b60008083601f8401126110b3576110b3600080fd5b50813567ffffffffffffffff8111156110ce576110ce600080fd5b6020830191508360018202830111156110e9576110e9600080fd5b9250929050565b60ff8116610f77565b8035610e86816110f0565b60008060008060006080868803121561111f5761111f600080fd5b6111298787611093565b94506111388760208801611093565b9350604086013567ffffffffffffffff81111561115757611157600080fd5b6111638882890161109e565b935093505061117587606088016110f9565b90509295509295909350565b67ffffffffffffffff8116610ea6565b60208101610e868284611181565b600060808284031215610f2657610f26600080fd5b60008083601f8401126111c9576111c9600080fd5b50813567ffffffffffffffff8111156111e4576111e4600080fd5b6020830191508360208202830111156110e9576110e9600080fd5b60008060008060c0858703121561121857611218600080fd5b611222868661119f565b9350608085013567ffffffffffffffff81111561124157611241600080fd5b61124d878288016111b4565b935093505061125f8660a08701610f82565b905092959194509250565b6000806040838503121561128057611280600080fd5b610ff68484610f82565b600080600080606085870312156112a3576112a3600080fd5b843567ffffffffffffffff8111156112bd576112bd600080fd5b6112c987828801610f11565b945050602085013567ffffffffffffffff8111156112e9576112e9600080fd5b6112f5878288016111b4565b935093505061125f8660408701610f82565b506000610e866020830183610fcb565b67ffffffffffffffff8116610f77565b8035610e8681611317565b506000610e866020830183611327565b506000610e866020830183611093565b63ffffffff8116610ea6565b6000808335601e193685900301811261137957611379600080fd5b830160208101925035905067ffffffffffffffff81111561139c5761139c600080fd5b368190038213156110e9576110e9600080fd5b82818337506000910152565b8183526020830192506113cf8284836113af565b50601f01601f19160190565b506000610e8660208301836110f9565b60ff8116610ea6565b600060c083016114048380611307565b61140e8582610e9d565b5061141c6020840184611332565b6114296020860182611181565b506114376040840184611342565b6114446040860182611352565b506114526060840184611342565b61145f6060860182611352565b5061146d608084018461135e565b85830360808701526114808382846113bb565b9250505061149160a08401846113db565b61149e60a08601826113eb565b509392505050565b60208082528101610e8381846113f4565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e86816114b7565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610efb565b60208082528101610e8681611505565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611547565b604081016115bd8285610eac565b6103f66020830184611181565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610efb565b60208082528101610e86816115ca565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e8657610e8661160c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610efb565b60208082528101610e8681611645565b80820180821115610e8657610e8661160c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e868161169a565b60006020828403121561171757611717600080fd5b610e838383611093565b60008135610e8681610fc2565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e866001600160a01b038316611763565b90565b6001600160a01b031690565b6000610e868261174c565b6000610e868261176f565b61178e8261177a565b61179981835461172e565b8255505050565b60008135610e8681611317565b60007bffffffffffffffff000000000000000000000000000000000000000061173a8460a01b90565b6000610e8667ffffffffffffffff83165b67ffffffffffffffff1690565b6117fd826117d6565b6117998183546117ad565b60008135610e8681611087565b60007fffffffff0000000000000000000000000000000000000000000000000000000061173a8460e01b90565b600063ffffffff8216610e86565b61185982611842565b611799818354611815565b600063ffffffff8361173a565b61187a82611842565b611799818354611864565b6000808335601e19368590030181126118a0576118a0600080fd5b8301915050803567ffffffffffffffff8111156118bf576118bf600080fd5b6020820191506001810236038213156110e9576110e9600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061191a57607f821691505b602082108103610f2657610f266118f0565b6000610e866117608381565b6119418361192c565b815460001960089490940293841b1916921b91909117905550565b60006107a2818484611938565b8181101561059a5761197c60008261195c565b600101611969565b601f8211156107a2576000818152602090206020601f850104810160208510156119ab5750805b6108fa6020601f860104830182611969565b8267ffffffffffffffff8111156119d6576119d66118da565b6119e08254611906565b6119eb828285611984565b506000601f821160018114611a205760008315611a085750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a515787850135825560209485019460019092019101611a31565b5084821015611a6e576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6107a28383836119bd565b60008135610e86816110f0565b600060ff8216610e86565b611aaa82611a96565b815460ff191660ff821617611799565b808280611ac681611721565b9050611ad28184611785565b50506020830180611ae2826117a0565b9050611aee81846117f4565b50506040830180611afe82611808565b9050611b0a8184611850565b5050506060820180611b1b82611808565b9050611b2a8160018501611871565b5050611b396080830183611885565b611b47818360028601611a7e565b505060a0820180611b5782611a89565b9050611b668160038501611aa1565b50505050565b61059a8282611aba565b60c08101611b84828a610e9d565b611b916020830189611181565b611b9e6040830188611352565b611bab6060830187611352565b8181036080830152611bbe8185876113bb565b9050611bcd60a08301846113eb565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611bd9565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506114ef565b60208082528101610e8681611c41565b506000610e866020830183610f82565b611ca78180611307565b611cb18382610e9d565b50611cbf6020820182611307565b611ccc6020840182610e9d565b50611cda6040820182611c8d565b611ce76040840182610eac565b50611cf56060820182611332565b6107a26060840182611181565b60808101610e868284611c9d565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611d10565b9050610e866020830184610eac565b611d6b8183610eac565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506114ef565b60208082528101610e8681611d73565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ddb565b6000610e86826117e7565b610ea681611e43565b60208101610e868284611e4e565b600060208284031215611e7a57611e7a600080fd5b610e838383611327565b600060208284031215611e9957611e99600080fd5b610e8383836110f9565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611ea3565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ee5565b67ffffffffffffffff918216919081169082820190811115610e8657610e8661160c565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205e8a2a9bc33c3a988cb2b5342dbf402d725b529ed253b9949551653847bb8a0764736f6c634300081c0033", } // MerkleTreeMessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MessageBus/MessageBus.go b/contracts/generated/MessageBus/MessageBus.go index b9270558c..254bec2ce 100644 --- a/contracts/generated/MessageBus/MessageBus.go +++ b/contracts/generated/MessageBus/MessageBus.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // MessageBusMetaData contains all meta data concerning the MessageBus contract. var MessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"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\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c0033", } // MessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ObsERC20/ObsERC20.go b/contracts/generated/ObsERC20/ObsERC20.go index 144601d52..1892b7c76 100644 --- a/contracts/generated/ObsERC20/ObsERC20.go +++ b/contracts/generated/ObsERC20/ObsERC20.go @@ -32,7 +32,7 @@ var ( // ObsERC20MetaData contains all meta data concerning the ObsERC20 contract. var ObsERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162000e2738038062000e278339810160408190526200005a91620001b4565b818160036200006a83826200032e565b5060046200007982826200032e565b5050505050620003fa565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620000c257620000c262000084565b6040525050565b6000620000d560405190565b9050620000e382826200009a565b919050565b60006001600160401b0382111562000104576200010462000084565b601f19601f83011660200192915050565b60005b838110156200013257818101518382015260200162000118565b50506000910152565b6000620001526200014c84620000e8565b620000c9565b9050828152602081018484840111156200016f576200016f600080fd5b6200017c84828562000115565b509392505050565b600082601f8301126200019a576200019a600080fd5b8151620001ac8482602086016200013b565b949350505050565b60008060408385031215620001cc57620001cc600080fd5b82516001600160401b03811115620001e757620001e7600080fd5b620001f58582860162000184565b602085015190935090506001600160401b03811115620002185762000218600080fd5b620002268582860162000184565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200025b57607f821691505b60208210810362000270576200027062000230565b50919050565b600062000287620002848381565b90565b92915050565b620002988362000276565b815460001960089490940293841b1916921b91909117905550565b6000620002c28184846200028d565b505050565b81811015620002e657620002dd600082620002b3565b600101620002c7565b5050565b601f821115620002c2576000818152602090206020601f85010481016020851015620003135750805b620003276020601f860104830182620002c7565b5050505050565b81516001600160401b038111156200034a576200034a62000084565b62000356825462000246565b62000363828285620002ea565b506020601f8211600181146200039b5760008315620003825750848201515b600019600885021c198116600285021785555062000327565b600084815260208120601f198516915b82811015620003cd5787850151825560209485019460019092019101620003ab565b5084821015620003eb5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a1d806200040a6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107bc565b6002545b6040516100bd91906107d0565b6100d96101053660046107de565b610206565b60126040516100bd9190610837565b6100ea610127366004610845565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea61015536600461086e565b6102c6565b606060038054610169906108b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610195906108b7565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108e3565b60405180910390fd5b606060048054610169906108b7565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a09061091e565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a093929190610988565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107d0565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109d4565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a093929190610988565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107d0565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b60006107978585610759565b92505060206107a88582860161076a565b9150509250929050565b8015155b82525050565b6020810161020082846107b2565b806107b6565b6020810161020082846107ca565b6000806000606084860312156107f6576107f6600080fd5b60006108028686610759565b935050602061081386828701610759565b92505060406108248682870161076a565b9150509250925092565b60ff81166107b6565b60208101610200828461082e565b60006020828403121561085a5761085a600080fd5b60006108668484610759565b949350505050565b6000806040838503121561088457610884600080fd5b60006108908585610759565b92505060206107a885828601610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108cb57607f821691505b6020821081036108dd576108dd6108a1565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b681610731565b60608101610996828661097f565b6109a360208301856107ca565b61086660408301846107ca565b60208101610200828461097f565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109be56fea2646970667358221220aba9443c9aef21109782a283d8f74e7df6eea5835c2ccc66f4ae7e5c36a42f3564736f6c63430008150033", + Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b50604051610dc8380380610dc883398101604081905261005591610191565b8181600361006383826102ef565b50600461007082826102ef565b50505050506103ae565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156100b5576100b561007a565b6040525050565b60006100c760405190565b90506100d38282610090565b919050565b60006001600160401b038211156100f1576100f161007a565b601f19601f83011660200192915050565b60005b8381101561011d578181015183820152602001610105565b50506000910152565b6000610139610134846100d8565b6100bc565b905082815283838301111561015057610150600080fd5b61015e836020830184610102565b9392505050565b600082601f83011261017957610179600080fd5b8151610189848260208601610126565b949350505050565b600080604083850312156101a7576101a7600080fd5b82516001600160401b038111156101c0576101c0600080fd5b6101cc85828601610165565b602085015190935090506001600160401b038111156101ed576101ed600080fd5b6101f985828601610165565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061022d57607f821691505b60208210810361023f5761023f610203565b50919050565b60006102546102518381565b90565b92915050565b61026383610245565b815460001960089490940293841b1916921b91909117905550565b600061028b81848461025a565b505050565b818110156102ab576102a360008261027e565b600101610290565b5050565b601f82111561028b576000818152602090206020601f850104810160208510156102d65750805b6102e86020601f860104830182610290565b5050505050565b81516001600160401b038111156103085761030861007a565b6103128254610219565b61031d8282856102af565b506020601f821160018114610352576000831561033a5750848201515b600019600885021c19811660028502178555506102e8565b600084815260208120601f198516915b828110156103825787850151825560209485019460019092019101610362565b508482101561039f5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a0b806103bd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107b7565b6002545b6040516100bd91906107cb565b6100d96101053660046107d9565b610206565b60126040516100bd919061082b565b6100ea610127366004610839565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea610155366004610858565b6102c6565b6060600380546101699061089d565b80601f01602080910402602001604051908101604052809291908181526020018280546101959061089d565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108c9565b60405180910390fd5b6060600480546101699061089d565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a090610904565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107cb565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109c2565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107cb565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b6107958484610759565b91506107a4846020850161076a565b90509250929050565b8015155b82525050565b6020810161020082846107ad565b806107b1565b6020810161020082846107c5565b6000806000606084860312156107f1576107f1600080fd5b6107fb8585610759565b925061080a8560208601610759565b9150610819856040860161076a565b90509250925092565b60ff81166107b1565b602081016102008284610822565b60006020828403121561084e5761084e600080fd5b61072a8383610759565b6000806040838503121561086e5761086e600080fd5b6108788484610759565b91506107a48460208501610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108b157607f821691505b6020821081036108c3576108c3610887565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b181610731565b6060810161097c8286610965565b61098960208301856107c5565b61099660408301846107c5565b949350505050565b602081016102008284610965565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109ac56fea264697066735822122034cd0cdf26fe824a96259f36e04d997508d65683b4f463a133617b1a6371975464736f6c634300081c0033", } // ObsERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ObscuroBridge/ObscuroBridge.go b/contracts/generated/ObscuroBridge/ObscuroBridge.go index d637f2de8..243d4007e 100644 --- a/contracts/generated/ObscuroBridge/ObscuroBridge.go +++ b/contracts/generated/ObscuroBridge/ObscuroBridge.go @@ -32,7 +32,7 @@ var ( // ObscuroBridgeMetaData contains all meta data concerning the ObscuroBridge contract. var ObscuroBridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messengerAddress\",\"type\":\"address\"}],\"name\":\"configure\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"promoteToAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"removeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"setRemoteBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50611b84806100306000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103b4578063d547741f146103d4578063e4c3ebc7146103f457600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611320565b610428565b6040516101769190611353565b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004611386565b610491565b005b61019f6101af366004611386565b6104eb565b3480156101c057600080fd5b506101e46101cf3660046113b8565b60009081526002602052604090206001015490565b60405161017691906113df565b3480156101fd57600080fd5b5061019f61020c3660046113ed565b6105f6565b34801561021d57600080fd5b5061019f61022c3660046113ed565b610621565b34801561023d57600080fd5b5061019f61024c36600461147c565b610672565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a0366004611386565b610737565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f4366004611386565b61078b565b34801561030557600080fd5b5061019f61031436600461150c565b610866565b34801561032557600080fd5b506101696103343660046113ed565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a366004611386565b610980565b34801561038b57600080fd5b506101e4600081565b3480156103a057600080fd5b5061019f6103af36600461150c565b6109d4565b3480156103c057600080fd5b5061019f6103cf366004611386565b610ac3565b3480156103e057600080fd5b5061019f6103ef3660046113ed565b610c5c565b34801561040057600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061048b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104bb81610c81565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105145760405162461bcd60e51b815260040161050b90611590565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b031681525060405160200161054491906115c8565b60408051601f19818403018152919052600354909150610573906001600160a01b03168260025b600080610c8e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105c090869083906004016115d6565b6000604051808303818588803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461061181610c81565b61061b8383610d9a565b50505050565b6001600160a01b0381163314610663576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066d8282610e48565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069c81610c81565b6106c67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d9a565b50600063458ffd6360e01b87878787876040516024016106ea95949392919061161d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ed906001600160a01b031682600161056b565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561076181610c81565b61066d7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e48565b610793610ecf565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190611669565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108975760405162461bcd60e51b815260040161050b906116e4565b806001600160a01b03166108a9610f38565b6001600160a01b0316146108cf5760405162461bcd60e51b815260040161050b9061174c565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff161561091f5761091a848484610fb5565b61061b565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff16156109685761091a82610fc0565b60405162461bcd60e51b815260040161050b906117b4565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109aa81610c81565b61066d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d9a565b600082116109f45760405162461bcd60e51b815260040161050b906117f6565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a4b5760405162461bcd60e51b815260040161050b90611806565b610a5783333085611032565b60006383bece4d60e01b848484604051602401610a769392919061188d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061061b906001600160a01b031682600061056b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b0e5750825b905060008267ffffffffffffffff166001148015610b2b5750303b155b905081158015610b39575080155b15610b70576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ba457845468ff00000000000000001916680100000000000000001785555b610bad8661078b565b610bd77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d9a565b50610c037fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d9a565b508315610c5457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c4b906001906118d0565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c7781610c81565b61061b8383610e48565b610c8b813361108c565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cc4919061197d565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610d17836119bd565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610d5794939291906119f5565b6020604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611a55565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e405760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610df83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161048b565b50600061048b565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e405760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161048b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f36576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb09190611669565b905090565b61066d8382846110ec565b6040516000906001600160a01b038316908281818181865af19150503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b505090508061102e5760405162461bcd60e51b815260040161050b90611aa8565b5050565b61061b84856001600160a01b03166323b872dd86868660405160240161105a93929190611ab8565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611112565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff1661102e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161050b9291906115d6565b61066d83846001600160a01b031663a9059cbb858560405160240161105a9291906115d6565b60006111276001600160a01b03841683611185565b9050805160001415801561114c57508080602001905181019061114a9190611af3565b155b1561066d57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b60606111938383600061119a565b9392505050565b6060814710156111d857306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b600080856001600160a01b031684866040516111f49190611b44565b60006040518083038185875af1925050503d8060008114611231576040519150601f19603f3d011682016040523d82523d6000602084013e611236565b606091505b5091509150611246868383611250565b9695505050505050565b60608261126557611260826112bc565b611193565b815115801561127c57506001600160a01b0384163b155b156112b557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b5080611193565b8051156112cc5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c8b57600080fd5b803561048b816112fe565b60006020828403121561133557611335600080fd5b60006113418484611315565b949350505050565b8015155b82525050565b6020810161048b8284611349565b60006001600160a01b03821661048b565b61130a81611361565b803561048b81611372565b60006020828403121561139b5761139b600080fd5b6000611341848461137b565b8061130a565b803561048b816113a7565b6000602082840312156113cd576113cd600080fd5b600061134184846113ad565b8061134d565b6020810161048b82846113d9565b6000806040838503121561140357611403600080fd5b600061140f85856113ad565b92505060206114208582860161137b565b9150509250929050565b60008083601f84011261143f5761143f600080fd5b50813567ffffffffffffffff81111561145a5761145a600080fd5b60208301915083600182028301111561147557611475600080fd5b9250929050565b60008060008060006060868803121561149757611497600080fd5b60006114a3888861137b565b955050602086013567ffffffffffffffff8111156114c3576114c3600080fd5b6114cf8882890161142a565b9450945050604086013567ffffffffffffffff8111156114f1576114f1600080fd5b6114fd8882890161142a565b92509250509295509295909350565b60008060006060848603121561152457611524600080fd5b6000611530868661137b565b9350506020611541868287016113ad565b92505060406115528682870161137b565b9150509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161048b8161155c565b61134d81611361565b80516115b583826113d9565b50602081015161066d60208401826115a0565b6040810161048b82846115a9565b604081016115e482856115a0565b61119360208301846113d9565b82818337506000910152565b8183526020830192506116118284836115f1565b50601f01601f19160190565b6060810161162b82886115a0565b818103602083015261163e8186886115fd565b905081810360408301526116538184866115fd565b979650505050505050565b805161048b81611372565b60006020828403121561167e5761167e600080fd5b6000611341848461165e565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161048b8161168a565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116de565b6020808252810161048b816116f4565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116de565b6020808252810161048b8161175c565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061158a565b6020808252810161048b816117c4565b6020808252810161048b81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b6060810161189b82866115a0565b6118a860208301856113d9565b61134160408301846115a0565b600067ffffffffffffffff821661048b565b61134d816118b5565b6020810161048b82846118c7565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b600061190c825190565b8084526020840193506119238185602086016118de565b601f01601f19169290920192915050565b8051600090606084019061194885826115a0565b50602083015184820360208601526119608282611902565b915050604083015161197560408601826113d9565b509392505050565b602080825281016111938184611934565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119d9576119d961198e565b5060010190565b63ffffffff811661134d565b60ff811661134d565b60808101611a0382876119e0565b611a1060208301866119e0565b8181036040830152611a228185611902565b9050611a3160608301846119ec565b95945050505050565b67ffffffffffffffff811661130a565b805161048b81611a3a565b600060208284031215611a6a57611a6a600080fd5b60006113418484611a4a565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061158a565b6020808252810161048b81611a76565b60608101611ac682866115a0565b611ad360208301856115a0565b61134160408301846113d9565b80151561130a565b805161048b81611ae0565b600060208284031215611b0857611b08600080fd5b60006113418484611ae8565b6020810161048b82846115a0565b6000611b2c825190565b611b3a8185602086016118de565b9290920192915050565b61048b8183611b2256fea2646970667358221220d70bea5019f2062e22f351cd0d4cb8d9f734eac087a468eb72bff8b0aa790a6364736f6c63430008150033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611b698061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103b4578063d547741f146103d4578063e4c3ebc7146103f457600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611320565b610428565b6040516101769190611349565b60405180910390f35b34801561018b57600080fd5b5061019f61019a36600461137c565b610491565b005b61019f6101af36600461137c565b6104eb565b3480156101c057600080fd5b506101e46101cf3660046113ac565b60009081526002602052604090206001015490565b60405161017691906113d1565b3480156101fd57600080fd5b5061019f61020c3660046113df565b6105f6565b34801561021d57600080fd5b5061019f61022c3660046113df565b610621565b34801561023d57600080fd5b5061019f61024c366004611469565b610672565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a036600461137c565b610737565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f436600461137c565b61078b565b34801561030557600080fd5b5061019f6103143660046114f6565b610866565b34801561032557600080fd5b506101696103343660046113df565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a36600461137c565b610980565b34801561038b57600080fd5b506101e4600081565b3480156103a057600080fd5b5061019f6103af3660046114f6565b6109d4565b3480156103c057600080fd5b5061019f6103cf36600461137c565b610ac3565b3480156103e057600080fd5b5061019f6103ef3660046113df565b610c5c565b34801561040057600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061048b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104bb81610c81565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105145760405162461bcd60e51b815260040161050b90611573565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b031681525060405160200161054491906115ab565b60408051601f19818403018152919052600354909150610573906001600160a01b03168260025b600080610c8e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105c090869083906004016115b9565b6000604051808303818588803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461061181610c81565b61061b8383610d9a565b50505050565b6001600160a01b0381163314610663576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066d8282610e48565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069c81610c81565b6106c67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d9a565b50600063458ffd6360e01b87878787876040516024016106ea959493929190611600565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ed906001600160a01b031682600161056b565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561076181610c81565b61066d7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e48565b610793610ecf565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610836919061164c565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108975760405162461bcd60e51b815260040161050b906116c5565b806001600160a01b03166108a9610f38565b6001600160a01b0316146108cf5760405162461bcd60e51b815260040161050b9061172d565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff161561091f5761091a848484610fb5565b61061b565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff16156109685761091a82610fc0565b60405162461bcd60e51b815260040161050b90611795565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109aa81610c81565b61066d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d9a565b600082116109f45760405162461bcd60e51b815260040161050b906117d7565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a4b5760405162461bcd60e51b815260040161050b906117e7565b610a5783333085611032565b60006383bece4d60e01b848484604051602401610a769392919061186e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061061b906001600160a01b031682600061056b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b0e5750825b905060008267ffffffffffffffff166001148015610b2b5750303b155b905081158015610b39575080155b15610b70576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ba457845468ff00000000000000001916680100000000000000001785555b610bad8661078b565b610bd77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d9a565b50610c037fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d9a565b508315610c5457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c4b906001906118b9565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c7781610c81565b61061b8383610e48565b610c8b813361108c565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cc49190611966565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610d17836119a6565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610d5794939291906119de565b6020604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611a3e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e405760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610df83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161048b565b50600061048b565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e405760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161048b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f36576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb0919061164c565b905090565b61066d8382846110ec565b6040516000906001600160a01b038316908281818181865af19150503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b505090508061102e5760405162461bcd60e51b815260040161050b90611a8f565b5050565b61061b84856001600160a01b03166323b872dd86868660405160240161105a93929190611a9f565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611112565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff1661102e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161050b9291906115b9565b61066d83846001600160a01b031663a9059cbb858560405160240161105a9291906115b9565b60006111276001600160a01b03841683611185565b9050805160001415801561114c57508080602001905181019061114a9190611ada565b155b1561066d57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b60606111938383600061119a565b9392505050565b6060814710156111d857306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b600080856001600160a01b031684866040516111f49190611b29565b60006040518083038185875af1925050503d8060008114611231576040519150601f19603f3d011682016040523d82523d6000602084013e611236565b606091505b5091509150611246868383611250565b9695505050505050565b60608261126557611260826112bc565b611193565b815115801561127c57506001600160a01b0384163b155b156112b557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b5080611193565b8051156112cc5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c8b57600080fd5b803561048b816112fe565b60006020828403121561133557611335600080fd5b6111938383611315565b8015155b82525050565b6020810161048b828461133f565b60006001600160a01b03821661048b565b61130a81611357565b803561048b81611368565b60006020828403121561139157611391600080fd5b6111938383611371565b8061130a565b803561048b8161139b565b6000602082840312156113c1576113c1600080fd5b61119383836113a1565b80611343565b6020810161048b82846113cb565b600080604083850312156113f5576113f5600080fd5b6113ff84846113a1565b915061140e8460208501611371565b90509250929050565b60008083601f84011261142c5761142c600080fd5b50813567ffffffffffffffff81111561144757611447600080fd5b60208301915083600182028301111561146257611462600080fd5b9250929050565b60008060008060006060868803121561148457611484600080fd5b61148e8787611371565b9450602086013567ffffffffffffffff8111156114ad576114ad600080fd5b6114b988828901611417565b9450945050604086013567ffffffffffffffff8111156114db576114db600080fd5b6114e788828901611417565b92509250509295509295909350565b60008060006060848603121561150e5761150e600080fd5b6115188585611371565b925061152785602086016113a1565b91506115368560408601611371565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161048b8161153f565b61134381611357565b805161159883826113cb565b50602081015161066d6020840182611583565b6040810161048b828461158c565b604081016115c78285611583565b61119360208301846113cb565b82818337506000910152565b8183526020830192506115f48284836115d4565b50601f01601f19160190565b6060810161160e8288611583565b81810360208301526116218186886115e0565b905081810360408301526116368184866115e0565b979650505050505050565b805161048b81611368565b60006020828403121561166157611661600080fd5b6111938383611641565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161048b8161166b565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116bf565b6020808252810161048b816116d5565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116bf565b6020808252810161048b8161173d565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061156d565b6020808252810161048b816117a5565b6020808252810161048b81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b6060810161187c8286611583565b61188960208301856113cb565b6118966040830184611583565b949350505050565b600067ffffffffffffffff821661048b565b6113438161189e565b6020810161048b82846118b0565b60005b838110156118e25781810151838201526020016118ca565b50506000910152565b60006118f5825190565b80845260208401935061190c8185602086016118c7565b601f01601f19169290920192915050565b805160009060608401906119318582611583565b506020830151848203602086015261194982826118eb565b915050604083015161195e60408601826113cb565b509392505050565b60208082528101611193818461191d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119c2576119c2611977565b5060010190565b63ffffffff8116611343565b60ff8116611343565b608081016119ec82876119c9565b6119f960208301866119c9565b8181036040830152611a0b81856118eb565b9050611a1a60608301846119d5565b95945050505050565b67ffffffffffffffff811661130a565b805161048b81611a23565b600060208284031215611a5357611a53600080fd5b6111938383611a33565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061156d565b6020808252810161048b81611a5d565b60608101611aad8286611583565b611aba6020830185611583565b61189660408301846113cb565b80151561130a565b805161048b81611ac7565b600060208284031215611aef57611aef600080fd5b6111938383611acf565b6020810161048b8284611583565b6000611b11825190565b611b1f8185602086016118c7565b9290920192915050565b61048b8183611b0756fea2646970667358221220ab0817204a72d2997c2da18c911ebc59f437a7aa94279d175a683ea0568901c064736f6c634300081c0033", } // ObscuroBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ProxyAdmin/ProxyAdmin.go b/contracts/generated/ProxyAdmin/ProxyAdmin.go index 4161fde7b..88f831a7c 100644 --- a/contracts/generated/ProxyAdmin/ProxyAdmin.go +++ b/contracts/generated/ProxyAdmin/ProxyAdmin.go @@ -32,7 +32,7 @@ var ( // ProxyAdminMetaData contains all meta data concerning the ProxyAdmin contract. var ProxyAdminMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033", } // ProxyAdminABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index 9ef2092ec..f2e4582e1 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -31,8 +31,8 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"callback\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610a78806100df6000396000f3fe60806040526004361061003e5760003560e01c8062e0d3b514610043578063349e7eca1461007b5780638129fc1c1461009257806382fbdc9c146100a7575b600080fd5b34801561004f57600080fd5b5061006361005e3660046105f0565b6100ba565b60405161007293929190610695565b60405180910390f35b34801561008757600080fd5b5061009061016f565b005b34801561009e57600080fd5b50610090610378565b6100906100b5366004610716565b6104ba565b600060208190529081526040902080546001820180546001600160a01b0390921692916100e690610774565b80601f016020809104026020016040519081016040528092919081815260200182805461011290610774565b801561015f5780601f106101345761010080835404028352916020019161015f565b820191906000526020600020905b81548152906001019060200180831161014257829003601f168201915b5050505050908060020154905083565b600061017c6001306107b6565b9050336001600160a01b038216146101af5760405162461bcd60e51b81526004016101a69061080d565b60405180910390fd5b600254600154116103755760028054600091826101cb8361081d565b91905055905060025481106101f25760405162461bcd60e51b81526004016101a690610868565b60008181526020818152604080832081516060810190925280546001600160a01b03168252600181018054929391929184019161022e90610774565b80601f016020809104026020016040519081016040528092919081815260200182805461025a90610774565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b0316826040015183602001516040516102e3919061089a565b60006040518083038185875af1925050503d8060008114610320576040519150601f19603f3d011682016040523d82523d6000602084013e610325565b606091505b505090508015610371576000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103666001830182610599565b600282016000905550505b5050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c35750825b905060008267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b15610425576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045957845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104aa906001906108c8565b60405180910390a15b5050505050565b6104c6338383346104ca565b5050565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020909101839052600180548291826105348361081d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105859082610982565b506040820151816002015590505050505050565b5080546105a590610774565b6000825580601f106105b5575050565b601f01602090049060005260206000209081019061037591905b808211156105e357600081556001016105cf565b5090565b80355b92915050565b60006020828403121561060557610605600080fd5b600061061184846105e7565b949350505050565b60006001600160a01b0382166105ea565b61063381610619565b82525050565b60005b8381101561065457818101518382015260200161063c565b50506000910152565b6000610667825190565b80845260208401935061067e818560208601610639565b601f01601f19169290920192915050565b80610633565b606081016106a3828661062a565b81810360208301526106b5818561065d565b9050610611604083018461068f565b60008083601f8401126106d9576106d9600080fd5b50813567ffffffffffffffff8111156106f4576106f4600080fd5b60208301915083600182028301111561070f5761070f600080fd5b9250929050565b6000806020838503121561072c5761072c600080fd5b823567ffffffffffffffff81111561074657610746600080fd5b610752858286016106c4565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061078857607f821691505b60208210810361079a5761079a61075e565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156105ea576105ea6107a0565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105ea816107d9565b60006001820161082f5761082f6107a0565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610807565b602080825281016105ea81610836565b6000610882825190565b610890818560208601610639565b9290920192915050565b6105ea8183610878565b60006105ea826108b2565b90565b67ffffffffffffffff1690565b610633816108a4565b602081016105ea82846108bf565b634e487b7160e01b600052604160045260246000fd5b60006105ea6108af8381565b610901836108ec565b815460001960089490940293841b1916921b91909117905550565b60006109298184846108f8565b505050565b818110156104c65761094160008261091c565b60010161092e565b601f821115610929576000818152602090206020601f850104810160208510156109705750805b6104b36020601f86010483018261092e565b815167ffffffffffffffff81111561099c5761099c6108d6565b6109a68254610774565b6109b1828285610949565b506020601f8211600181146109e657600083156109ce5750848201515b600019600885021c19811660028502178555506104b3565b600084815260208120601f198516915b82811015610a1657878501518255602094850194600190920191016109f6565b5084821015610a335783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220d17e8eed9b79a79400ab369369f2cd2a5f9a78b3253b0346382f1e69c1cf77d864736f6c63430008150033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610d91806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ad57806382fbdc9c146100c2578063929d34e9146100d557600080fd5b8062e0d3b51461005e578063349e7eca14610096575b600080fd5b34801561006a57600080fd5b5061007e6100793660046107f7565b6100f5565b60405161008d93929190610899565b60405180910390f35b3480156100a257600080fd5b506100ab6101aa565b005b3480156100b957600080fd5b506100ab61036b565b6100ab6100d0366004610922565b6104ad565b3480156100e157600080fd5b506100ab6100f03660046107f7565b6104bd565b600060208190529081526040902080546001820180546001600160a01b03909216929161012190610980565b80601f016020809104026020016040519081016040528092919081815260200182805461014d90610980565b801561019a5780601f1061016f5761010080835404028352916020019161019a565b820191906000526020600020905b81548152906001019060200180831161017d57829003601f168201915b5050505050908060020154905083565b60006101b76001306109c2565b9050336001600160a01b038216146101ea5760405162461bcd60e51b81526004016101e190610a19565b60405180910390fd5b6002546001541161036857600280546000918261020683610a29565b919050559050600254811061022d5760405162461bcd60e51b81526004016101e190610a74565b600081815260208190526040812060028101549091489161024f908390610a9a565b905060005a84546040519192506000916001600160a01b0390911690849061027b906001890190610b20565b60006040518083038160008787f1925050503d80600081146102b9576040519150601f19603f3d011682016040523d82523d6000602084013e6102be565b606091505b50509050801561030a576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906102ff60018301826107a0565b600282016000905550505b60005a905060008561031c8386610b2a565b6103269190610b3d565b875490915061033f9082906001600160a01b0316610611565b80876002015461034f9190610b2a565b6002880181905561035f906106a4565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103b65750825b905060008267ffffffffffffffff1660011480156103d35750303b155b9050811580156103e1575080155b15610418576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044c57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104a657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061049d90600190610b78565b60405180910390a15b5050505050565b6104b9338383346106d1565b5050565b60008181526020818152604080832081516060810190925280546001600160a01b0316825260018101805492939192918401916104f990610980565b80601f016020809104026020016040519081016040528092919081815260200182805461052590610980565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b031682602001516040516105a99190610ba8565b6000604051808303816000865af19150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b505090508061060c5760405162461bcd60e51b81526004016101e190610be4565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610663576040519150601f19603f3d011682016040523d82523d6000602084013e610668565b606091505b505090508061060c57604051419084156108fc029085906000818181858888f1935050505015801561069e573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104b9573d6000803e3d6000fd5b6040518060600160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060209091018390526001805482918261073b83610a29565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617815590820151600182019061078c9082610c9b565b506040820151816002015590505050505050565b5080546107ac90610980565b6000825580601f106107bc575050565b601f01602090049060005260206000209081019061036891905b808211156107ea57600081556001016107d6565b5090565b80355b92915050565b60006020828403121561080c5761080c600080fd5b61081683836107ee565b9392505050565b60006001600160a01b0382166107f1565b6108378161081d565b82525050565b60005b83811015610858578181015183820152602001610840565b50506000910152565b600061086b825190565b80845260208401935061088281856020860161083d565b601f01601f19169290920192915050565b80610837565b606081016108a7828661082e565b81810360208301526108b98185610861565b90506108c86040830184610893565b949350505050565b60008083601f8401126108e5576108e5600080fd5b50813567ffffffffffffffff81111561090057610900600080fd5b60208301915083600182028301111561091b5761091b600080fd5b9250929050565b6000806020838503121561093857610938600080fd5b823567ffffffffffffffff81111561095257610952600080fd5b61095e858286016108d0565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061099457607f821691505b6020821081036109a6576109a661096a565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156107f1576107f16109ac565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016107f1816109e5565b600060018201610a3b57610a3b6109ac565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a13565b602080825281016107f181610a42565b634e487b7160e01b600052601260045260246000fd5b600082610aa957610aa9610a84565b500490565b60008154610abb81610980565b600182168015610ad25760018114610ae757610b17565b60ff1983168652811515820286019350610b17565b60008581526020902060005b83811015610b0f57815488820152600190910190602001610af3565b505081860193505b50505092915050565b6107f18183610aae565b818103818111156107f1576107f16109ac565b81810281158282048414176107f1576107f16109ac565b60006107f182610b62565b90565b67ffffffffffffffff1690565b61083781610b54565b602081016107f18284610b6f565b6000610b90825190565b610b9e81856020860161083d565b9290920192915050565b6107f18183610b86565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a13565b602080825281016107f181610bb2565b634e487b7160e01b600052604160045260246000fd5b60006107f1610b5f8381565b610c1f83610c0a565b815460001960089490940293841b1916921b91909117905550565b600061060c818484610c16565b818110156104b957610c5a600082610c3a565b600101610c47565b601f82111561060c576000818152602090206020601f85010481016020851015610c895750805b6104a66020601f860104830182610c47565b815167ffffffffffffffff811115610cb557610cb5610bf4565b610cbf8254610980565b610cca828285610c62565b506020601f821160018114610cff5760008315610ce75750848201515b600019600885021c19811660028502178555506104a6565b600084815260208120601f198516915b82811015610d2f5787850151825560209485019460019092019101610d0f565b5084821015610d4c5783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200245eda5298d1b0b2c981784e582dfd9ea7daca2160ad0978d83e72c11e9122864736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. @@ -204,25 +204,25 @@ func (_PublicCallbacks *PublicCallbacksTransactorRaw) Transact(opts *bind.Transa // Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. // -// Solidity: function callbacks(uint256 ) view returns(address callback, bytes data, uint256 value) +// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value) func (_PublicCallbacks *PublicCallbacksCaller) Callbacks(opts *bind.CallOpts, arg0 *big.Int) (struct { - Callback common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int }, error) { var out []interface{} err := _PublicCallbacks.contract.Call(opts, &out, "callbacks", arg0) outstruct := new(struct { - Callback common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int }) if err != nil { return *outstruct, err } - outstruct.Callback = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Target = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) outstruct.Data = *abi.ConvertType(out[1], new([]byte)).(*[]byte) outstruct.Value = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) @@ -232,22 +232,22 @@ func (_PublicCallbacks *PublicCallbacksCaller) Callbacks(opts *bind.CallOpts, ar // Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. // -// Solidity: function callbacks(uint256 ) view returns(address callback, bytes data, uint256 value) +// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value) func (_PublicCallbacks *PublicCallbacksSession) Callbacks(arg0 *big.Int) (struct { - Callback common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int }, error) { return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) } // Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. // -// Solidity: function callbacks(uint256 ) view returns(address callback, bytes data, uint256 value) +// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value) func (_PublicCallbacks *PublicCallbacksCallerSession) Callbacks(arg0 *big.Int) (struct { - Callback common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int }, error) { return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) } @@ -294,6 +294,27 @@ func (_PublicCallbacks *PublicCallbacksTransactorSession) Initialize() (*types.T return _PublicCallbacks.Contract.Initialize(&_PublicCallbacks.TransactOpts) } +// ReattemptCallback is a paid mutator transaction binding the contract method 0x929d34e9. +// +// Solidity: function reattemptCallback(uint256 callbackId) returns() +func (_PublicCallbacks *PublicCallbacksTransactor) ReattemptCallback(opts *bind.TransactOpts, callbackId *big.Int) (*types.Transaction, error) { + return _PublicCallbacks.contract.Transact(opts, "reattemptCallback", callbackId) +} + +// ReattemptCallback is a paid mutator transaction binding the contract method 0x929d34e9. +// +// Solidity: function reattemptCallback(uint256 callbackId) returns() +func (_PublicCallbacks *PublicCallbacksSession) ReattemptCallback(callbackId *big.Int) (*types.Transaction, error) { + return _PublicCallbacks.Contract.ReattemptCallback(&_PublicCallbacks.TransactOpts, callbackId) +} + +// ReattemptCallback is a paid mutator transaction binding the contract method 0x929d34e9. +// +// Solidity: function reattemptCallback(uint256 callbackId) returns() +func (_PublicCallbacks *PublicCallbacksTransactorSession) ReattemptCallback(callbackId *big.Int) (*types.Transaction, error) { + return _PublicCallbacks.Contract.ReattemptCallback(&_PublicCallbacks.TransactOpts, callbackId) +} + // Register is a paid mutator transaction binding the contract method 0x82fbdc9c. // // Solidity: function register(bytes callback) payable returns() diff --git a/contracts/generated/SafeERC20/SafeERC20.go b/contracts/generated/SafeERC20/SafeERC20.go index f35b55eed..ca5037727 100644 --- a/contracts/generated/SafeERC20/SafeERC20.go +++ b/contracts/generated/SafeERC20/SafeERC20.go @@ -32,7 +32,7 @@ var ( // SafeERC20MetaData contains all meta data concerning the SafeERC20 contract. var SafeERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bfc23a0f53ebed26b1686f1a14e3c95322dd51ff86eb83ade06e6f6cebf9894a64736f6c63430008150033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220229877c421e9e3124252435a5c43b85b16e5641b8a9e7f324538707dc167719d64736f6c634300081c0033", } // SafeERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Strings/Strings.go b/contracts/generated/Strings/Strings.go index 97259d60b..1a828a8c4 100644 --- a/contracts/generated/Strings/Strings.go +++ b/contracts/generated/Strings/Strings.go @@ -32,7 +32,7 @@ var ( // StringsMetaData contains all meta data concerning the Strings contract. var StringsMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203651aa30fb1f5f18cc2014cc59e9e9021d87428d65aa7e6b2376cc1a6bcf85ba64736f6c63430008150033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c57deb36e4cf781caeca4659dcadf25b73810da016ae9d262073c51b249373d464736f6c634300081c0033", } // StringsABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index e567b546d..dac9366e9 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162004a2e38038062004a2e83398101604081905262000034916200032c565b6200003f816200005c565b6200004a8162000123565b6200005581620001dc565b50620004d1565b60006040516200006c90620002ba565b604051809103906000f08015801562000089573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401620000a991906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000f38385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003ae565b60405180910390a150505050565b60006040516200013390620002c8565b604051809103906000f08015801562000150573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016200017091906200036a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620001ba8385846200027160201b60201c565b905060008051602062004a0e83398151915281604051620001159190620003f1565b6000604051620001ec90620002d6565b604051809103906000f08015801562000209573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906200024f908490869085906200027116565b905060008051602062004a0e8339815191528160405162000115919062000428565b6000808484846040516200028590620002e4565b620002939392919062000495565b604051809103906000f080158015620002b0573d6000803e3d6000fd5b5095945050505050565b610e61806200051f83390190565b61180b806200138083390190565b610b578062002b8b83390190565b61132c80620036e283390190565b60006001600160a01b0382165b92915050565b6200031081620002f2565b81146200031c57600080fd5b50565b8051620002ff8162000305565b600060208284031215620003435762000343600080fd5b60006200035184846200031f565b949350505050565b6200036481620002f2565b82525050565b60208101620002ff828462000359565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b60408082528101620003c0816200037a565b9050620002ff602083018462000359565b600a815260208101694d65737361676542757360b01b81529050620003a8565b60408082528101620003c081620003d1565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050620003a8565b60408082528101620003c08162000403565b60005b83811015620004575781810151838201526020016200043d565b50506000910152565b60006200046b825190565b808452602084019350620004848185602086016200043a565b601f01601f19169290920192915050565b60608101620004a5828662000359565b620004b4602083018562000359565b8181036040830152620004c8818462000460565b95945050505050565b603f80620004e06000396000f3fe6080604052600080fdfea2646970667358221220c273fe59a844f09235798ada225f43dc52966aea8ebad34d2f80e332b991792d64736f6c63430008150033608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116b2806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610bf0565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c11565b34801561025157600080fd5b50610132610260366004610c1f565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610cd8565b6106b5565b6040516101829190610d6c565b3480156102be57600080fd5b506101326102cd366004610bf0565b61070e565b3480156102de57600080fd5b506101326102ed366004610bf0565b610850565b600080826040516020016103069190610f19565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f84565b9392505050565b600080826040516020016103659190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fec565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffc565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c90611049565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd60013061106f565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c4565b600061054f83426110d4565b90506000846040516020016105649190610f19565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c9061113f565b6000818152602081815260408220849055600191906105c990880188610bf0565b6001600160a01b0316815260208101919091526040016000908120906105f5608088016060890161114f565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c9565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c90611049565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115d3565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f9060019061164a565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611658565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c11565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b6000610bd58585610b97565b9250506020610be685828601610ba8565b9150509250929050565b600060208284031215610c0557610c05600080fd5b600061039b8484610b97565b60208101610a8f8284610a95565b60008060408385031215610c3557610c35600080fd5b823567ffffffffffffffff811115610c4f57610c4f600080fd5b610bd585828601610b09565b63ffffffff8116610b8c565b8035610a8f81610c5b565b60008083601f840112610c8757610c87600080fd5b50813567ffffffffffffffff811115610ca257610ca2600080fd5b602083019150836001820283011115610cbd57610cbd600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610cc4565b600080600080600060808688031215610cf357610cf3600080fd5b6000610cff8888610c67565b9550506020610d1088828901610c67565b945050604086013567ffffffffffffffff811115610d3057610d30600080fd5b610d3c88828901610c72565b93509350506060610d4f88828901610ccd565b9150509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5c565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8a565b506000610a8f6020830183610d9a565b506000610a8f6020830183610c67565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dec57610dec600080fd5b830160208101925035905067ffffffffffffffff811115610e0f57610e0f600080fd5b36819003821315610cbd57610cbd600080fd5b82818337506000910152565b818352602083019250610e42828483610e22565b50601f01601f19160190565b506000610a8f6020830183610ccd565b60ff8116610a9e565b600060c08301610e778380610d7a565b610e818582610a95565b50610e8f6020840184610da5565b610e9c6020860182610d5c565b50610eaa6040840184610db5565b610eb76040860182610dc5565b50610ec56060840184610db5565b610ed26060860182610dc5565b50610ee06080840184610dd1565b8583036080870152610ef3838284610e2e565b92505050610f0460a0840184610e4e565b610f1160a0860182610e5e565b509392505050565b6020808252810161034a8184610e67565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2a565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f81610f94565b6040810161100a8285610aa4565b61034a6020830184610d5c565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611017565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f611059565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611092565b80820180821115610a8f57610a8f611059565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f7e565b60208082528101610a8f816110e7565b60006020828403121561116457611164600080fd5b600061039b8484610c67565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8a565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c5b565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cbd57610cbd600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c457600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610cc4565b600060ff83611189565b600060ff8216610a8f565b61150a826114f6565b6111e88183546114ec565b80828061152181611170565b905061152d81846111d4565b5050602083018061153d826111ef565b90506115498184611243565b5050604083018061155982611257565b9050611565818461129f565b50505060018101606083018061157a82611257565b905061158681846112c0565b505050600281016080830161159b81856112d4565b91506115a88282856114d4565b5050506003810160a08301806115bd826114df565b905061140c8184611501565b6104a88282611515565b60c081016115e1828a610a95565b6115ee6020830189610d5c565b6115fb6040830188610dc5565b6116086060830187610dc5565b818103608083015261161b818587610e2e565b905061162a60a0830184610e5e565b98975050505050505050565b6000610a8f82611236565b610a9e81611636565b60208101610a8f8284611641565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105956fea264697066735822122054b3bb8148cdbafe0aca39b986ef2610fd18ea01fc3554d63624fda624c6d21164736f6c63430008150033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610a78806100df6000396000f3fe60806040526004361061003e5760003560e01c8062e0d3b514610043578063349e7eca1461007b5780638129fc1c1461009257806382fbdc9c146100a7575b600080fd5b34801561004f57600080fd5b5061006361005e3660046105f0565b6100ba565b60405161007293929190610695565b60405180910390f35b34801561008757600080fd5b5061009061016f565b005b34801561009e57600080fd5b50610090610378565b6100906100b5366004610716565b6104ba565b600060208190529081526040902080546001820180546001600160a01b0390921692916100e690610774565b80601f016020809104026020016040519081016040528092919081815260200182805461011290610774565b801561015f5780601f106101345761010080835404028352916020019161015f565b820191906000526020600020905b81548152906001019060200180831161014257829003601f168201915b5050505050908060020154905083565b600061017c6001306107b6565b9050336001600160a01b038216146101af5760405162461bcd60e51b81526004016101a69061080d565b60405180910390fd5b600254600154116103755760028054600091826101cb8361081d565b91905055905060025481106101f25760405162461bcd60e51b81526004016101a690610868565b60008181526020818152604080832081516060810190925280546001600160a01b03168252600181018054929391929184019161022e90610774565b80601f016020809104026020016040519081016040528092919081815260200182805461025a90610774565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b0316826040015183602001516040516102e3919061089a565b60006040518083038185875af1925050503d8060008114610320576040519150601f19603f3d011682016040523d82523d6000602084013e610325565b606091505b505090508015610371576000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103666001830182610599565b600282016000905550505b5050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c35750825b905060008267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b15610425576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045957845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104aa906001906108c8565b60405180910390a15b5050505050565b6104c6338383346104ca565b5050565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020909101839052600180548291826105348361081d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105859082610982565b506040820151816002015590505050505050565b5080546105a590610774565b6000825580601f106105b5575050565b601f01602090049060005260206000209081019061037591905b808211156105e357600081556001016105cf565b5090565b80355b92915050565b60006020828403121561060557610605600080fd5b600061061184846105e7565b949350505050565b60006001600160a01b0382166105ea565b61063381610619565b82525050565b60005b8381101561065457818101518382015260200161063c565b50506000910152565b6000610667825190565b80845260208401935061067e818560208601610639565b601f01601f19169290920192915050565b80610633565b606081016106a3828661062a565b81810360208301526106b5818561065d565b9050610611604083018461068f565b60008083601f8401126106d9576106d9600080fd5b50813567ffffffffffffffff8111156106f4576106f4600080fd5b60208301915083600182028301111561070f5761070f600080fd5b9250929050565b6000806020838503121561072c5761072c600080fd5b823567ffffffffffffffff81111561074657610746600080fd5b610752858286016106c4565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061078857607f821691505b60208210810361079a5761079a61075e565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156105ea576105ea6107a0565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016105ea816107d9565b60006001820161082f5761082f6107a0565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610807565b602080825281016105ea81610836565b6000610882825190565b610890818560208601610639565b9290920192915050565b6105ea8183610878565b60006105ea826108b2565b90565b67ffffffffffffffff1690565b610633816108a4565b602081016105ea82846108bf565b634e487b7160e01b600052604160045260246000fd5b60006105ea6108af8381565b610901836108ec565b815460001960089490940293841b1916921b91909117905550565b60006109298184846108f8565b505050565b818110156104c65761094160008261091c565b60010161092e565b601f821115610929576000818152602090206020601f850104810160208510156109705750805b6104b36020601f86010483018261092e565b815167ffffffffffffffff81111561099c5761099c6108d6565b6109a68254610774565b6109b1828285610949565b506020601f8211600181146109e657600083156109ce5750848201515b600019600885021c19811660028502178555506104b3565b600084815260208120601f198516915b82811015610a1657878501518255602094850194600190920191016109f6565b5084821015610a335783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220d17e8eed9b79a79400ab369369f2cd2a5f9a78b3253b0346382f1e69c1cf77d864736f6c6343000815003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614c16380380614c1683398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614bf6833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610e6a80612b0283390190565b61128a8061396c83390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212208d3b059fdd6dd1700d2667a504d38651d0b99a164918fd748bad9151694bcfa664736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610d91806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ad57806382fbdc9c146100c2578063929d34e9146100d557600080fd5b8062e0d3b51461005e578063349e7eca14610096575b600080fd5b34801561006a57600080fd5b5061007e6100793660046107f7565b6100f5565b60405161008d93929190610899565b60405180910390f35b3480156100a257600080fd5b506100ab6101aa565b005b3480156100b957600080fd5b506100ab61036b565b6100ab6100d0366004610922565b6104ad565b3480156100e157600080fd5b506100ab6100f03660046107f7565b6104bd565b600060208190529081526040902080546001820180546001600160a01b03909216929161012190610980565b80601f016020809104026020016040519081016040528092919081815260200182805461014d90610980565b801561019a5780601f1061016f5761010080835404028352916020019161019a565b820191906000526020600020905b81548152906001019060200180831161017d57829003601f168201915b5050505050908060020154905083565b60006101b76001306109c2565b9050336001600160a01b038216146101ea5760405162461bcd60e51b81526004016101e190610a19565b60405180910390fd5b6002546001541161036857600280546000918261020683610a29565b919050559050600254811061022d5760405162461bcd60e51b81526004016101e190610a74565b600081815260208190526040812060028101549091489161024f908390610a9a565b905060005a84546040519192506000916001600160a01b0390911690849061027b906001890190610b20565b60006040518083038160008787f1925050503d80600081146102b9576040519150601f19603f3d011682016040523d82523d6000602084013e6102be565b606091505b50509050801561030a576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906102ff60018301826107a0565b600282016000905550505b60005a905060008561031c8386610b2a565b6103269190610b3d565b875490915061033f9082906001600160a01b0316610611565b80876002015461034f9190610b2a565b6002880181905561035f906106a4565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103b65750825b905060008267ffffffffffffffff1660011480156103d35750303b155b9050811580156103e1575080155b15610418576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044c57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104a657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061049d90600190610b78565b60405180910390a15b5050505050565b6104b9338383346106d1565b5050565b60008181526020818152604080832081516060810190925280546001600160a01b0316825260018101805492939192918401916104f990610980565b80601f016020809104026020016040519081016040528092919081815260200182805461052590610980565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b031682602001516040516105a99190610ba8565b6000604051808303816000865af19150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b505090508061060c5760405162461bcd60e51b81526004016101e190610be4565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610663576040519150601f19603f3d011682016040523d82523d6000602084013e610668565b606091505b505090508061060c57604051419084156108fc029085906000818181858888f1935050505015801561069e573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104b9573d6000803e3d6000fd5b6040518060600160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060209091018390526001805482918261073b83610a29565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617815590820151600182019061078c9082610c9b565b506040820151816002015590505050505050565b5080546107ac90610980565b6000825580601f106107bc575050565b601f01602090049060005260206000209081019061036891905b808211156107ea57600081556001016107d6565b5090565b80355b92915050565b60006020828403121561080c5761080c600080fd5b61081683836107ee565b9392505050565b60006001600160a01b0382166107f1565b6108378161081d565b82525050565b60005b83811015610858578181015183820152602001610840565b50506000910152565b600061086b825190565b80845260208401935061088281856020860161083d565b601f01601f19169290920192915050565b80610837565b606081016108a7828661082e565b81810360208301526108b98185610861565b90506108c86040830184610893565b949350505050565b60008083601f8401126108e5576108e5600080fd5b50813567ffffffffffffffff81111561090057610900600080fd5b60208301915083600182028301111561091b5761091b600080fd5b9250929050565b6000806020838503121561093857610938600080fd5b823567ffffffffffffffff81111561095257610952600080fd5b61095e858286016108d0565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061099457607f821691505b6020821081036109a6576109a661096a565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156107f1576107f16109ac565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016107f1816109e5565b600060018201610a3b57610a3b6109ac565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a13565b602080825281016107f181610a42565b634e487b7160e01b600052601260045260246000fd5b600082610aa957610aa9610a84565b500490565b60008154610abb81610980565b600182168015610ad25760018114610ae757610b17565b60ff1983168652811515820286019350610b17565b60008581526020902060005b83811015610b0f57815488820152600190910190602001610af3565b505081860193505b50505092915050565b6107f18183610aae565b818103818111156107f1576107f16109ac565b81810281158282048414176107f1576107f16109ac565b60006107f182610b62565b90565b67ffffffffffffffff1690565b61083781610b54565b602081016107f18284610b6f565b6000610b90825190565b610b9e81856020860161083d565b9290920192915050565b6107f18183610b86565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a13565b602080825281016107f181610bb2565b634e487b7160e01b600052604160045260246000fd5b60006107f1610b5f8381565b610c1f83610c0a565b815460001960089490940293841b1916921b91909117905550565b600061060c818484610c16565b818110156104b957610c5a600082610c3a565b600101610c47565b601f82111561060c576000818152602090206020601f85010481016020851015610c895750805b6104a66020601f860104830182610c47565b815167ffffffffffffffff811115610cb557610cb5610bf4565b610cbf8254610980565b610cca828285610c62565b506020601f821160018114610cff5760008315610ce75750848201515b600019600885021c19811660028502178555506104a6565b600084815260208120601f198516915b82811015610d2f5787850151825560209485019460019092019101610d0f565b5084821015610d4c5783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200245eda5298d1b0b2c981784e582dfd9ea7daca2160ad0978d83e72c11e9122864736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go index 45868414a..0e7169a76 100644 --- a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go +++ b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go @@ -46,7 +46,7 @@ type StructsTransaction struct { // TransactionPostProcessorMetaData contains all meta data concerning the TransactionPostProcessor contract. var TransactionPostProcessorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610e41806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc36600461083b565b610265565b6040516100ee919061086e565b60405180910390f35b61011a61010536600461088d565b60009081526020819052604090206001015490565b6040516100ee91906108b4565b61013a6101353660046108e7565b6102fe565b005b61013a61014a3660046108e7565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610976565b61037a565b6100e16101973660046108e7565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109be565b6104d0565b61013a6101e93660046108e7565b610640565b61013a6101fc3660046109be565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610665565b6103238383610672565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610375828261071c565b505050565b60006103876001306109f5565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a4c565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a8e565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108b4565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a9e565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d9c565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806104c990610dae565b9050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561051b5750825b905060008267ffffffffffffffff1660011480156105385750303b155b905081158015610546575080155b1561057d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105b157845468ff00000000000000001916680100000000000000001785555b6105bc600087610672565b506105e77ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610672565b50831561063857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062f90600190610de2565b60405180910390a15b505050505050565b60008281526020819052604090206001015461065b81610665565b610323838361071c565b61066f813361079f565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610714576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106cc3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610714576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107fd5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610df0565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066f57600080fd5b80356102f881610801565b60006020828403121561085057610850600080fd5b600061085c8484610830565b949350505050565b8015155b82525050565b602081016102f88284610864565b80610825565b80356102f88161087c565b6000602082840312156108a2576108a2600080fd5b600061085c8484610882565b80610868565b602081016102f882846108ae565b60006001600160a01b0382166102f8565b610825816108c2565b80356102f8816108d3565b600080604083850312156108fd576108fd600080fd5b60006109098585610882565b925050602061091a858286016108dc565b9150509250929050565b60008083601f84011261093957610939600080fd5b50813567ffffffffffffffff81111561095457610954600080fd5b60208301915083602082028301111561096f5761096f600080fd5b9250929050565b6000806020838503121561098c5761098c600080fd5b823567ffffffffffffffff8111156109a6576109a6600080fd5b6109b285828601610924565b92509250509250929050565b6000602082840312156109d3576109d3600080fd5b600061085c84846108dc565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109df565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a18565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a46565b602080825281016102f881610a5c565b634e487b7160e01b600052603260045260246000fd5b60ff8116610825565b80356102f881610ab4565b5060006102f86020830183610abd565b60ff8116610868565b5060006102f86020830183610882565b5060006102f860208301836108dc565b610868816108c2565b6000808335601e1936859003018112610b2557610b25600080fd5b830160208101925035905067ffffffffffffffff811115610b4857610b48600080fd5b3681900382131561096f5761096f600080fd5b82818337506000910152565b818352602083019250610b7b828483610b5b565b50601f01601f19160190565b801515610825565b80356102f881610b87565b5060006102f86020830183610b8f565b67ffffffffffffffff8116610825565b80356102f881610baa565b5060006102f86020830183610bba565b67ffffffffffffffff8116610868565b60006101408301610bf68380610ac8565b610c008582610ad8565b50610c0e6020840184610ae1565b610c1b60208601826108ae565b50610c296040840184610ae1565b610c3660408601826108ae565b50610c446060840184610ae1565b610c5160608601826108ae565b50610c5f6080840184610af1565b610c6c6080860182610b01565b50610c7a60a0840184610ae1565b610c8760a08601826108ae565b50610c9560c0840184610b0a565b85830360c0870152610ca8838284610b67565b92505050610cb960e0840184610af1565b610cc660e0860182610b01565b50610cd5610100840184610b9a565b610ce3610100860182610864565b50610cf2610120840184610bc5565b610d00610120860182610bd5565b509392505050565b6000610d148383610be5565b9392505050565b6000823561013e1936849003018112610d3657610d36600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d8f578484038952610d6d8284610d1b565b610d778582610d08565b94505060208201602099909901989150600101610d56565b5091979650505050505050565b6020808252810161085c818486610d3f565b600060018201610dc057610dc06109df565b5060010190565b600067ffffffffffffffff82166102f8565b61086881610dc7565b602081016102f88284610dd9565b60408101610dfe8285610b01565b610d1460208301846108ae56fea2646970667358221220a2829afc1b81bbd1feb9c6e28aa15934fd8a00d5bce0d721a5aef549094dc19364736f6c63430008150033", + Bin: "0x6080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033", } // TransactionPostProcessorABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go b/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go index b1df7be69..46466682e 100644 --- a/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go +++ b/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go @@ -32,7 +32,7 @@ var ( // TransparentUpgradeableProxyMetaData contains all meta data concerning the TransparentUpgradeableProxy contract. var TransparentUpgradeableProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}]", - Bin: "0x60a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea26469706673582212209a20b849817245e3cac5f59a8de1da61769680733e5cb208d7418240470f1f7364736f6c63430008150033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220bc53b042dace43e275ea4e3c2111fb2632f7c79b2d985ac0664bd97ca15c79a164736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x60a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // TransparentUpgradeableProxyABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/WrappedERC20/WrappedERC20.go b/contracts/generated/WrappedERC20/WrappedERC20.go index 2a1a3b37f..224049396 100644 --- a/contracts/generated/WrappedERC20/WrappedERC20.go +++ b/contracts/generated/WrappedERC20/WrappedERC20.go @@ -32,7 +32,7 @@ var ( // WrappedERC20MetaData contains all meta data concerning the WrappedERC20 contract. var WrappedERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"giver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issueFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001546380380620015468339810160408190526200005a916200029e565b8181818160036200006c838262000412565b5060046200007b828262000412565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620004de565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620001ac57620001ac6200016e565b6040525050565b6000620001bf60405190565b9050620001cd828262000184565b919050565b60006001600160401b03821115620001ee57620001ee6200016e565b601f19601f83011660200192915050565b60005b838110156200021c57818101518382015260200162000202565b50506000910152565b60006200023c6200023684620001d2565b620001b3565b905082815260208101848484011115620002595762000259600080fd5b62000266848285620001ff565b509392505050565b600082601f830112620002845762000284600080fd5b81516200029684826020860162000225565b949350505050565b60008060408385031215620002b657620002b6600080fd5b82516001600160401b03811115620002d157620002d1600080fd5b620002df858286016200026e565b602085015190935090506001600160401b03811115620003025762000302600080fd5b62000310858286016200026e565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200034557607f821691505b6020821081036200035a576200035a6200031a565b50919050565b6000620001686200036e8381565b90565b6200037c8362000360565b815460001960089490940293841b1916921b91909117905550565b6000620003a681848462000371565b505050565b81811015620003ca57620003c160008262000397565b600101620003ab565b5050565b601f821115620003a6576000818152602090206020601f85010481016020851015620003f75750805b6200040b6020601f860104830182620003ab565b5050505050565b81516001600160401b038111156200042e576200042e6200016e565b6200043a825462000330565b62000447828285620003ce565b506020601f8211600181146200047f5760008315620004665750848201515b600019600885021c19811660028502178555506200040b565b600084815260208120601f198516915b82811015620004b157878501518255602094850194600190920191016200048f565b5084821015620004cf5783870151600019601f87166008021c191681555b50505050600202600101905550565b61105880620004ee6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c7c565b60405180910390f35b6101876103a0565b6040516101769190610ce0565b6101696101a2366004610d27565b610432565b6002545b6040516101769190610d6a565b6101cb6101c6366004610d27565b61044a565b005b6101696101db366004610d78565b6104b4565b6101ab6101ee366004610dc8565b60009081526007602052604090206001015490565b6101cb610211366004610de9565b6104da565b60126040516101769190610e25565b6101cb610233366004610de9565b610505565b6101ab610246366004610e33565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610de9565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d27565b6105d6565b6101ab600081565b6101696102dc366004610d27565b61060a565b6101cb6102ef366004610de9565b610618565b6101ab610302366004610e54565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e8c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e8c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610eec565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f2e565b6060600480546103af90610e8c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f3e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610fa8565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610fa8565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610fa8565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610fa8565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d6a565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fde565b6001600160a01b038316610b0c578060026000828254610b01919061100f565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d6a565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6000610c6a8484610c3e565b949350505050565b8015155b82525050565b6020810161039a8284610c72565b60005b83811015610ca5578181015183820152602001610c8d565b50506000910152565b6000610cb8825190565b808452602084019350610ccf818560208601610c8a565b601f01601f19169290920192915050565b602080825281016104d38184610cae565b60006001600160a01b03821661039a565b610c3381610cf1565b803561039a81610d02565b80610c33565b803561039a81610d16565b60008060408385031215610d3d57610d3d600080fd5b6000610d498585610d0b565b9250506020610d5a85828601610d1c565b9150509250929050565b80610c76565b6020810161039a8284610d64565b600080600060608486031215610d9057610d90600080fd5b6000610d9c8686610d0b565b9350506020610dad86828701610d0b565b9250506040610dbe86828701610d1c565b9150509250925092565b600060208284031215610ddd57610ddd600080fd5b6000610c6a8484610d1c565b60008060408385031215610dff57610dff600080fd5b6000610e0b8585610d1c565b9250506020610d5a85828601610d0b565b60ff8116610c76565b6020810161039a8284610e1c565b600060208284031215610e4857610e48600080fd5b6000610c6a8484610d0b565b60008060408385031215610e6a57610e6a600080fd5b6000610e0b8585610d0b565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610ea057607f821691505b602082108103610eb257610eb2610e76565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610eb8565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ee6565b6020808252810161039a81610efc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c7681610cf1565b6020810161039a8284610f9f565b60608101610fc48286610f9f565b610fd16020830185610d64565b610c6a6040830184610d64565b60408101610fec8285610f9f565b6104d36020830184610d64565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610ff956fea264697066735822122015a37e58522ca26bdd51e6ea23c5953be6e295684d318926ea7d989d6576fe1c64736f6c63430008150033", + Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220be3380d12a8a9c04f488bd6d863b29f9c1ea464ebf1b28b5c552d2e3f79e9fda64736f6c634300081c0033", } // WrappedERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 7880260e5..41a203467 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -46,7 +46,7 @@ type StructsTransaction struct { // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200115f3803806200115f8339810160408190526200003491620001ad565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e9190620002e8565b5060046200008d8282620002e8565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd9190620003c5565b60405180910390fd5b620000d18162000121565b506001600160a01b038116620000fb5760405162461bcd60e51b8152600401620000bd90620003d5565b600680546001600160a01b0319166001600160a01b03929092169190911790556200041e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001918162000173565b81146200019d57600080fd5b50565b8051620001808162000186565b600060208284031215620001c457620001c4600080fd5b6000620001d28484620001a0565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200021b57607f821691505b602082108103620002305762000230620001f0565b50919050565b600062000180620002448381565b90565b620002528362000236565b815460001960089490940293841b1916921b91909117905550565b60006200027c81848462000247565b505050565b81811015620002a057620002976000826200026d565b60010162000281565b5050565b601f8211156200027c576000818152602090206020601f85010481016020851015620002cd5750805b620002e16020601f86010483018262000281565b5050505050565b81516001600160401b03811115620003045762000304620001da565b62000310825462000206565b6200031d828285620002a4565b506020601f8211600181146200035557600083156200033c5750848201515b600019600885021c1981166002850217855550620002e1565b600084815260208120601f198516915b8281101562000387578785015182556020948501946001909201910162000365565b5084821015620003a55783870151600019601f87166008021c191681555b50505050600202600101905550565b620003bf8162000173565b82525050565b60208101620001808284620003b4565b602080825281016200018081602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610d31806200042e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101866101b7366004610aca565b610310565b6101156101ca366004610968565b610435565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b87565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610be8565b60005b81811015610430576103af83838381811061038457610384610c23565b90506020028101906103969190610c39565b6103a89061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610c23565b90506020028101906103f49190610c39565b6104069061010081019060e001610a38565b6001604051610416929190610c76565b60405180910390a18061042881610ca7565b915050610367565b505050565b6000336102bb81858561052b565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b610497816105e9565b50565b610430838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b815260040161033a9190610a6a565b610430838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b815260040161033a9190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b0383166107135760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610a61565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610a61565b610cdb60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9156fea264697066735822122036c31eb715ecd8e46b6b1572d2c583e9792e8561c8256d9322cb3a53e739149e64736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b506040516110e73803806110e783398101604081905261002f91610196565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b815250816003908161007791906102b8565b50600461008482826102b8565b5050506001600160a01b0381166100ba576000604051631e4fbdf760e01b81526004016100b19190610386565b60405180910390fd5b6100c38161010f565b506001600160a01b0381166100ea5760405162461bcd60e51b81526004016100b190610394565b600680546001600160a01b0319166001600160a01b03929092169190911790556103dc565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b61017d81610161565b811461018857600080fd5b50565b805161016e81610174565b6000602082840312156101ab576101ab600080fd5b6101b5838361018b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806101fc57607f821691505b60208210810361020e5761020e6101d2565b50919050565b600061016e6102208381565b90565b61022c83610214565b815460001960089490940293841b1916921b91909117905550565b6000610254818484610223565b505050565b818110156102745761026c600082610247565b600101610259565b5050565b601f821115610254576000818152602090206020601f8501048101602085101561029f5750805b6102b16020601f860104830182610259565b5050505050565b81516001600160401b038111156102d1576102d16101bc565b6102db82546101e8565b6102e6828285610278565b506020601f82116001811461031b57600083156103035750848201515b600019600885021c19811660028502178555506102b1565b600084815260208120601f198516915b8281101561034b578785015182556020948501946001909201910161032b565b50848210156103685783870151600019601f87166008021c191681555b50505050600202600101905550565b61038081610161565b82525050565b6020810161016e8284610377565b6020808252810161016e81602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610cfc806103eb6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f9919061090c565b60405180910390f35b61011561011036600461095e565b6102ad565b6040516100f991906109a0565b6002545b6040516100f991906109b4565b6101156101413660046109c2565b6102c7565b60126040516100f99190610a14565b610126610163366004610a22565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a4a565b6100ec610301565b6101866101b7366004610aaa565b610310565b6101156101ca36600461095e565b61042b565b6101266101dd366004610af2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a22565b610439565b60606003805461022a90610b37565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b37565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb818585610490565b60019150505b92915050565b6000336102d585828561049d565b6102e0858585610521565b60019150505b9392505050565b6102f5610599565b6102ff60006105df565b565b60606004805461022a90610b37565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b63565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610bc4565b60005b81811015610426576103af83838381811061038457610384610bff565b90506020028101906103969190610c15565b6103a89061010081019060e001610a22565b6001610649565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610bff565b90506020028101906103f49190610c15565b6104069061010081019060e001610a22565b6001604051610416929190610c52565b60405180910390a1600101610367565b505050565b6000336102bb818585610521565b610441610599565b6001600160a01b0381166104845760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b61048d816105df565b50565b6104268383836001610683565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461051b578181101561050c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b61051b84848484036000610683565b50505050565b6001600160a01b0383166105645760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b03821661058e57600060405163ec442f0560e01b815260040161033a9190610a4a565b610426838383610788565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067357600060405163ec442f0560e01b815260040161033a9190610a4a565b61067f60008383610788565b5050565b6001600160a01b0384166106c65760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b0383166107095760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561051b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161077a91906109b4565b60405180910390a350505050565b6001600160a01b0383166107b35780600260008282546107a89190610cb3565b9091555061082b9050565b6001600160a01b0383166000908152602081905260409020548181101561080c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661084757600280548290039055610866565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108a991906109b4565b60405180910390a3505050565b60005b838110156108d15781810151838201526020016108b9565b50506000910152565b60006108e4825190565b8084526020840193506108fb8185602086016108b6565b601f01601f19169290920192915050565b602080825281016102e681846108da565b60006001600160a01b0382166102c1565b6109378161091d565b811461048d57600080fd5b80356102c18161092e565b80610937565b80356102c18161094d565b6000806040838503121561097457610974600080fd5b61097e8484610942565b915061098d8460208501610953565b90509250929050565b8015155b82525050565b602081016102c18284610996565b8061099a565b602081016102c182846109ae565b6000806000606084860312156109da576109da600080fd5b6109e48585610942565b92506109f38560208601610942565b9150610a028560408601610953565b90509250925092565b60ff811661099a565b602081016102c18284610a0b565b600060208284031215610a3757610a37600080fd5b6102e68383610942565b61099a8161091d565b602081016102c18284610a41565b60008083601f840112610a6d57610a6d600080fd5b50813567ffffffffffffffff811115610a8857610a88600080fd5b602083019150836020820283011115610aa357610aa3600080fd5b9250929050565b60008060208385031215610ac057610ac0600080fd5b823567ffffffffffffffff811115610ada57610ada600080fd5b610ae685828601610a58565b92509250509250929050565b60008060408385031215610b0857610b08600080fd5b610b128484610942565b915061098d8460208501610942565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b4b57607f821691505b602082108103610b5d57610b5d610b21565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c3057610c30600080fd5b9190910192915050565b60006102c1610c468381565b90565b61099a81610c3a565b60408101610c608285610a41565b6102e66020830184610c49565b60608101610c7b8286610a41565b610c8860208301856109ae565b610c9560408301846109ae565b949350505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102c1576102c1610c9d56fea2646970667358221220f7b04cad41f1453ff919861d5ed5be8c01107adbd7a57bb76e5fce821d5bb64664736f6c634300081c0033", } // ZenBaseABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenTestnet/ZenTestnet.go b/contracts/generated/ZenTestnet/ZenTestnet.go index 591d96154..29a2a5f32 100644 --- a/contracts/generated/ZenTestnet/ZenTestnet.go +++ b/contracts/generated/ZenTestnet/ZenTestnet.go @@ -46,7 +46,7 @@ type StructsTransaction struct { // ZenTestnetMetaData contains all meta data concerning the ZenTestnet contract. var ZenTestnetMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6113ea806100df6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610dda565b60405180910390f35b61012061011b366004610e2c565b61038a565b6040516101049190610e73565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e87565b61012061016b366004610e95565b6103a4565b60126040516101049190610eee565b61015061018d366004610efc565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103ca565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610f2e565b6100f76103de565b6101cf61021f366004610f8e565b61042f565b610120610232366004610e2c565b610554565b6101cf610245366004610efc565b610562565b610150610258366004610fd6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610efc565b610766565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916103069061101f565b80601f01602080910402602001604051908101604052809291908181526020018280546103329061101f565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b6000336103988185856107bd565b60019150505b92915050565b6000336103b28582856107ca565b6103bd85858561086d565b60019150505b9392505050565b6103d26108e5565b6103dc6000610959565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916103069061101f565b6000546001600160a01b031633146104625760405162461bcd60e51b8152600401610459906110a5565b60405180910390fd5b60008190036104835760405162461bcd60e51b8152600401610459906110b5565b60005b8181101561054f576104ce8383838181106104a3576104a36110f0565b90506020028101906104b59190611106565b6104c79061010081019060e001610efc565b60016109d7565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1838383818110610501576105016110f0565b90506020028101906105139190611106565b6105259061010081019060e001610efc565b6001604051610535929190611143565b60405180910390a18061054781611174565b915050610486565b505050565b60003361039881858561086d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105ad5750825b905060008267ffffffffffffffff1660011480156105ca5750303b155b9050811580156105d8575080155b1561060f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064357845468ff00000000000000001916680100000000000000001785555b6001600160a01b0386166106695760405162461bcd60e51b8152600401610459906111e5565b6106dd6040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610a11565b6106e633610a23565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561075e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061075590600190611210565b60405180910390a15b505050505050565b61076e6108e5565b6001600160a01b0381166107b15760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6107ba81610959565b50565b61054f8383836001610a34565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01602090815260408083209386168352929052205460001981146108675781811015610858578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016104599392919061121e565b61086784848484036000610a34565b50505050565b6001600160a01b0383166108b05760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b0382166108da57600060405163ec442f0560e01b81526004016104599190610f2e565b61054f838383610b5e565b336109177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103dc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b038216610a0157600060405163ec442f0560e01b81526004016104599190610f2e565b610a0d60008383610b5e565b5050565b610a19610cb2565b610a0d8282610d19565b610a2b610cb2565b6107ba81610d7c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a985760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b038416610adb5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610b5757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b4e9190610e87565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610bac5781816002016000828254610ba19190611246565b90915550610c249050565b6001600160a01b03841660009081526020829052604090205482811015610c05578481846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016104599392919061121e565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610c42576002810180548390039055610c61565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ca49190610e87565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103dc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d21610cb2565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d6d84826112f4565b506004810161086783826112f4565b61076e610cb2565b60005b83811015610d9f578181015183820152602001610d87565b50506000910152565b6000610db2825190565b808452602084019350610dc9818560208601610d84565b601f01601f19169290920192915050565b602080825281016103c38184610da8565b60006001600160a01b03821661039e565b610e0581610deb565b81146107ba57600080fd5b803561039e81610dfc565b80610e05565b803561039e81610e1b565b60008060408385031215610e4257610e42600080fd5b6000610e4e8585610e10565b9250506020610e5f85828601610e21565b9150509250929050565b8015155b82525050565b6020810161039e8284610e69565b80610e6d565b6020810161039e8284610e81565b600080600060608486031215610ead57610ead600080fd5b6000610eb98686610e10565b9350506020610eca86828701610e10565b9250506040610edb86828701610e21565b9150509250925092565b60ff8116610e6d565b6020810161039e8284610ee5565b600060208284031215610f1157610f11600080fd5b6000610f1d8484610e10565b949350505050565b610e6d81610deb565b6020810161039e8284610f25565b60008083601f840112610f5157610f51600080fd5b50813567ffffffffffffffff811115610f6c57610f6c600080fd5b602083019150836020820283011115610f8757610f87600080fd5b9250929050565b60008060208385031215610fa457610fa4600080fd5b823567ffffffffffffffff811115610fbe57610fbe600080fd5b610fca85828601610f3c565b92509250509250929050565b60008060408385031215610fec57610fec600080fd5b6000610ff88585610e10565b9250506020610e5f85828601610e10565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061103357607f821691505b60208210810361104557611045611009565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e8161104b565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e193684900301811261112157611121600080fd5b9190910192915050565b600061039e6111378381565b90565b610e6d8161112b565b604081016111518285610f25565b6103c3602083018461113a565b634e487b7160e01b600052601160045260246000fd5b6000600182016111865761118661115e565b5060010190565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152905061109f565b6020808252810161039e8161118d565b600067ffffffffffffffff821661039e565b610e6d816111f5565b6020810161039e8284611207565b6060810161122c8286610f25565b6112396020830185610e81565b610f1d6040830184610e81565b8082018082111561039e5761039e61115e565b634e487b7160e01b600052604160045260246000fd5b6112788361112b565b815460001960089490940293841b1916921b91909117905550565b600061054f81848461126f565b81811015610a0d576112b3600082611293565b6001016112a0565b601f82111561054f576000818152602090206020601f850104810160208510156112e25750805b610b576020601f8601048301826112a0565b815167ffffffffffffffff81111561130e5761130e611259565b611318825461101f565b6113238282856112bb565b506020601f82116001811461135857600083156113405750848201515b600019600885021c1981166002850217855550610b57565b600084815260208120601f198516915b828110156113885787850151825560209485019460019092019101611368565b50848210156113a55783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220c92d36796669f09a165d85f5ad6ccaec7365a19d0cba54a86db26b29f35b60dd64736f6c63430008150033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6113b5806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610dd0565b60405180910390f35b61012061011b366004610e22565b61038a565b6040516101049190610e64565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e78565b61012061016b366004610e86565b6103a4565b60126040516101049190610ed8565b61015061018d366004610ee6565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103ca565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610f0e565b6100f76103de565b6101cf61021f366004610f6e565b61042f565b610120610232366004610e22565b61054a565b6101cf610245366004610ee6565b610558565b610150610258366004610fb6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610ee6565b61075c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461033290610ffb565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b6000336103988185856107b3565b60019150505b92915050565b6000336103b28582856107c0565b6103bd858585610863565b60019150505b9392505050565b6103d26108db565b6103dc600061094f565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161045990611081565b60405180910390fd5b60008190036104835760405162461bcd60e51b815260040161045990611091565b60005b81811015610545576104ce8383838181106104a3576104a36110cc565b90506020028101906104b591906110e2565b6104c79061010081019060e001610ee6565b60016109cd565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1838383818110610501576105016110cc565b905060200281019061051391906110e2565b6105259061010081019060e001610ee6565b600160405161053592919061111f565b60405180910390a1600101610486565b505050565b600033610398818585610863565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105a35750825b905060008267ffffffffffffffff1660011480156105c05750303b155b9050811580156105ce575080155b15610605576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561063957845468ff00000000000000001916680100000000000000001785555b6001600160a01b03861661065f5760405162461bcd60e51b815260040161045990611192565b6106d36040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610a07565b6106dc33610a19565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561075457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061074b906001906111bd565b60405180910390a15b505050505050565b6107646108db565b6001600160a01b0381166107a75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6107b08161094f565b50565b6105458383836001610a2a565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093861683529290522054600019811461085d578181101561084e578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b61085d84848484036000610a2a565b50505050565b6001600160a01b0383166108a65760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b0382166108d057600060405163ec442f0560e01b81526004016104599190610f0e565b610545838383610b54565b3361090d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103dc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b0382166109f757600060405163ec442f0560e01b81526004016104599190610f0e565b610a0360008383610b54565b5050565b610a0f610ca8565b610a038282610d0f565b610a21610ca8565b6107b081610d72565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a8e5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b038416610ad15760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610b4d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b449190610e78565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610ba25781816002016000828254610b979190611211565b90915550610c1a9050565b6001600160a01b03841660009081526020829052604090205482811015610bfb578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610c38576002810180548390039055610c57565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c9a9190610e78565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103dc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d17610ca8565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d6384826112bf565b506004810161085d83826112bf565b610764610ca8565b60005b83811015610d95578181015183820152602001610d7d565b50506000910152565b6000610da8825190565b808452602084019350610dbf818560208601610d7a565b601f01601f19169290920192915050565b602080825281016103c38184610d9e565b60006001600160a01b03821661039e565b610dfb81610de1565b81146107b057600080fd5b803561039e81610df2565b80610dfb565b803561039e81610e11565b60008060408385031215610e3857610e38600080fd5b610e428484610e06565b9150610e518460208501610e17565b90509250929050565b8015155b82525050565b6020810161039e8284610e5a565b80610e5e565b6020810161039e8284610e72565b600080600060608486031215610e9e57610e9e600080fd5b610ea88585610e06565b9250610eb78560208601610e06565b9150610ec68560408601610e17565b90509250925092565b60ff8116610e5e565b6020810161039e8284610ecf565b600060208284031215610efb57610efb600080fd5b6103c38383610e06565b610e5e81610de1565b6020810161039e8284610f05565b60008083601f840112610f3157610f31600080fd5b50813567ffffffffffffffff811115610f4c57610f4c600080fd5b602083019150836020820283011115610f6757610f67600080fd5b9250929050565b60008060208385031215610f8457610f84600080fd5b823567ffffffffffffffff811115610f9e57610f9e600080fd5b610faa85828601610f1c565b92509250509250929050565b60008060408385031215610fcc57610fcc600080fd5b610fd68484610e06565b9150610e518460208501610e06565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061100f57607f821691505b60208210810361102157611021610fe5565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e81611027565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19368490030181126110fd576110fd600080fd5b9190910192915050565b600061039e6111138381565b90565b610e5e81611107565b6040810161112d8285610f05565b6103c36020830184611116565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152905061107b565b6020808252810161039e8161113a565b600067ffffffffffffffff821661039e565b610e5e816111a2565b6020810161039e82846111b4565b606081016111d98286610f05565b6111e66020830185610e72565b6111f36040830184610e72565b949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039e5761039e6111fb565b634e487b7160e01b600052604160045260246000fd5b61124383611107565b815460001960089490940293841b1916921b91909117905550565b600061054581848461123a565b81811015610a035761127e60008261125e565b60010161126b565b601f821115610545576000818152602090206020601f850104810160208510156112ad5750805b610b4d6020601f86010483018261126b565b815167ffffffffffffffff8111156112d9576112d9611224565b6112e38254610ffb565b6112ee828285611286565b506020601f821160018114611323576000831561130b5750848201515b600019600885021c1981166002850217855550610b4d565b600084815260208120601f198516915b828110156113535787850151825560209485019460019092019101611333565b50848210156113705783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122021c1edec5751580cda4d7c9c56cddd69057e1d7032b01be07c5b6f4124dfb25764736f6c634300081c0033", } // ZenTestnetABI is the input ABI used to generate the binding from. diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 915d1a2c5..a0ff6d97e 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -20,7 +20,7 @@ const config: HardhatUserConfig = { sources: "src" }, solidity: { - version: "0.8.21", + version: "0.8.28", settings: { optimizer: { enabled: true, diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index 86560542e..f7ed0b43e 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.8.28; import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; @@ -17,7 +17,7 @@ contract PublicCallbacks is Initializable { } struct Callback { - address callback; + address target; bytes data; uint256 value; } @@ -32,13 +32,25 @@ contract PublicCallbacks is Initializable { } function addCallback(address callback, bytes calldata data, uint256 value) internal { - callbacks[nextCallbackId++] = Callback({callback: callback, data: data, value: value}); + callbacks[nextCallbackId++] = Callback({target: callback, data: data, value: value}); } function register(bytes calldata callback) external payable { addCallback(msg.sender, callback, msg.value); } + // reattempt a callback that failed to execute. + // This is callable from external users and fully passes over the gas given to this call. + function reattemptCallback(uint256 callbackId) external { + Callback memory callback = callbacks[callbackId]; + (bool success, ) = callback.target.call(callback.data); + require(success, "Callback execution failed"); + // nothing to refund; the callback was already paid for during its failure + } + + // System level call. As it is called during a synthetic transaction that does not have gas limit, + // the contract enforces a custom limit based on the value stored for the callback. + // It attempts to somewhat accurately refund. function executeNextCallback() external onlySelf { if (nextCallbackId > lastUnusedCallbackId) { return; // todo: change to revert if possible @@ -46,10 +58,32 @@ contract PublicCallbacks is Initializable { uint256 callbackId = lastUnusedCallbackId++; require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); - Callback memory callback = callbacks[callbackId]; - (bool success, ) = callback.callback.call{value: callback.value}(callback.data); + Callback storage callback = callbacks[callbackId]; + uint256 baseFee = block.basefee; + uint256 gas = callback.value / baseFee; + uint256 gasBefore = gasleft(); + (bool success, ) = callback.target.call{gas: gas}(callback.data); if (success) { delete callbacks[callbackId]; } + uint256 gasAfter = gasleft(); + uint256 gasRefund = (gasBefore - gasAfter) * baseFee; + internalRefund(gasRefund, callback.target); + callback.value = callback.value - gasRefund; + payForCallback(callback.value); + } + + function internalRefund(uint256 gasRefund, address to) internal { + // 22k is the max refund gas limit; 21k for a call and a bit for any accounting the contract might have. + // ordinarily such accounting should be prepared for beforehand in the callback they pay for, but we give them a + // slight buffer. + (bool success, ) = to.call{value: gasRefund, gas: 22000}(""); + if (!success) { + block.coinbase.transfer(gasRefund); // if they dont accept the refund, we gift it to coinbase. + } + } + + function payForCallback(uint256 gasPayment) internal { + block.coinbase.transfer(gasPayment); } } \ No newline at end of file From 78c706df7db724d1f7ede4e03829a29b2ba9417b Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 17:19:17 +0200 Subject: [PATCH 03/19] Reorder operations in contract. --- contracts/src/system/PublicCallbacks.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index f7ed0b43e..f9f2e9dc6 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -68,8 +68,9 @@ contract PublicCallbacks is Initializable { } uint256 gasAfter = gasleft(); uint256 gasRefund = (gasBefore - gasAfter) * baseFee; - internalRefund(gasRefund, callback.target); callback.value = callback.value - gasRefund; + + internalRefund(gasRefund, callback.target); payForCallback(callback.value); } From 9c8ee729da38cc6c52f1476086326d750e6e6c63 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 17:41:24 +0200 Subject: [PATCH 04/19] Fix for bad accounting. --- .../SystemDeployer.sol/SystemDeployer.bin | 2 +- .../PublicCallbacks/PublicCallbacks.go | 39 +++++++++++-------- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 7 ++-- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin index 62f2421c0..adca9622f 100644 --- a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin +++ b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50604051614c16380380614c1683398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614bf6833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610e6a80612b0283390190565b61128a8061396c83390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212208d3b059fdd6dd1700d2667a504d38651d0b99a164918fd748bad9151694bcfa664736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610d91806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ad57806382fbdc9c146100c2578063929d34e9146100d557600080fd5b8062e0d3b51461005e578063349e7eca14610096575b600080fd5b34801561006a57600080fd5b5061007e6100793660046107f7565b6100f5565b60405161008d93929190610899565b60405180910390f35b3480156100a257600080fd5b506100ab6101aa565b005b3480156100b957600080fd5b506100ab61036b565b6100ab6100d0366004610922565b6104ad565b3480156100e157600080fd5b506100ab6100f03660046107f7565b6104bd565b600060208190529081526040902080546001820180546001600160a01b03909216929161012190610980565b80601f016020809104026020016040519081016040528092919081815260200182805461014d90610980565b801561019a5780601f1061016f5761010080835404028352916020019161019a565b820191906000526020600020905b81548152906001019060200180831161017d57829003601f168201915b5050505050908060020154905083565b60006101b76001306109c2565b9050336001600160a01b038216146101ea5760405162461bcd60e51b81526004016101e190610a19565b60405180910390fd5b6002546001541161036857600280546000918261020683610a29565b919050559050600254811061022d5760405162461bcd60e51b81526004016101e190610a74565b600081815260208190526040812060028101549091489161024f908390610a9a565b905060005a84546040519192506000916001600160a01b0390911690849061027b906001890190610b20565b60006040518083038160008787f1925050503d80600081146102b9576040519150601f19603f3d011682016040523d82523d6000602084013e6102be565b606091505b50509050801561030a576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906102ff60018301826107a0565b600282016000905550505b60005a905060008561031c8386610b2a565b6103269190610b3d565b875490915061033f9082906001600160a01b0316610611565b80876002015461034f9190610b2a565b6002880181905561035f906106a4565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103b65750825b905060008267ffffffffffffffff1660011480156103d35750303b155b9050811580156103e1575080155b15610418576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044c57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104a657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061049d90600190610b78565b60405180910390a15b5050505050565b6104b9338383346106d1565b5050565b60008181526020818152604080832081516060810190925280546001600160a01b0316825260018101805492939192918401916104f990610980565b80601f016020809104026020016040519081016040528092919081815260200182805461052590610980565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b031682602001516040516105a99190610ba8565b6000604051808303816000865af19150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b505090508061060c5760405162461bcd60e51b81526004016101e190610be4565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610663576040519150601f19603f3d011682016040523d82523d6000602084013e610668565b606091505b505090508061060c57604051419084156108fc029085906000818181858888f1935050505015801561069e573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104b9573d6000803e3d6000fd5b6040518060600160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060209091018390526001805482918261073b83610a29565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617815590820151600182019061078c9082610c9b565b506040820151816002015590505050505050565b5080546107ac90610980565b6000825580601f106107bc575050565b601f01602090049060005260206000209081019061036891905b808211156107ea57600081556001016107d6565b5090565b80355b92915050565b60006020828403121561080c5761080c600080fd5b61081683836107ee565b9392505050565b60006001600160a01b0382166107f1565b6108378161081d565b82525050565b60005b83811015610858578181015183820152602001610840565b50506000910152565b600061086b825190565b80845260208401935061088281856020860161083d565b601f01601f19169290920192915050565b80610837565b606081016108a7828661082e565b81810360208301526108b98185610861565b90506108c86040830184610893565b949350505050565b60008083601f8401126108e5576108e5600080fd5b50813567ffffffffffffffff81111561090057610900600080fd5b60208301915083600182028301111561091b5761091b600080fd5b9250929050565b6000806020838503121561093857610938600080fd5b823567ffffffffffffffff81111561095257610952600080fd5b61095e858286016108d0565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061099457607f821691505b6020821081036109a6576109a661096a565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156107f1576107f16109ac565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016107f1816109e5565b600060018201610a3b57610a3b6109ac565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a13565b602080825281016107f181610a42565b634e487b7160e01b600052601260045260246000fd5b600082610aa957610aa9610a84565b500490565b60008154610abb81610980565b600182168015610ad25760018114610ae757610b17565b60ff1983168652811515820286019350610b17565b60008581526020902060005b83811015610b0f57815488820152600190910190602001610af3565b505081860193505b50505092915050565b6107f18183610aae565b818103818111156107f1576107f16109ac565b81810281158282048414176107f1576107f16109ac565b60006107f182610b62565b90565b67ffffffffffffffff1690565b61083781610b54565b602081016107f18284610b6f565b6000610b90825190565b610b9e81856020860161083d565b9290920192915050565b6107f18183610b86565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a13565b602080825281016107f181610bb2565b634e487b7160e01b600052604160045260246000fd5b60006107f1610b5f8381565b610c1f83610c0a565b815460001960089490940293841b1916921b91909117905550565b600061060c818484610c16565b818110156104b957610c5a600082610c3a565b600101610c47565b601f82111561060c576000818152602090206020601f85010481016020851015610c895750805b6104a66020601f860104830182610c47565b815167ffffffffffffffff811115610cb557610cb5610bf4565b610cbf8254610980565b610cca828285610c62565b506020601f821160018114610cff5760008315610ce75750848201515b600019600885021c19811660028502178555506104a6565b600084815260208120601f198516915b82811015610d2f5787850151825560209485019460019092019101610d0f565b5084821015610d4c5783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200245eda5298d1b0b2c981784e582dfd9ea7daca2160ad0978d83e72c11e9122864736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69 \ No newline at end of file +608060405234801561001057600080fd5b50604051614c53380380614c5383398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c33833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610ea780612b0283390190565b61128a806139a983390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122033c50cbe4785d88b6dc98e59a145fd28083c6b772b6e317ff391270748bab65064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610dce806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610826565b6100f6565b60405161008e94939291906108c8565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d136600461095f565b6104c0565b3480156100e257600080fd5b506100ac6100f1366004610826565b6104d0565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109bd565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109bd565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306109ff565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a56565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610a66565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610ab1565b6000818152602081905260408120600381015460028201549192909161025b908390610ad7565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b5d565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107cf565b506000600282018190556003909101555b60005a905060008561032e8386610b67565b6103389190610b7a565b905080876002015461034a9190610b67565b600288015586546103659082906001600160a01b031661062e565b61037287600201546106c1565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bb5565b60405180910390a15b5050505050565b6104cc338383346106ee565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c906109bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906109bd565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610be5565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c21565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b505090508061062957604051419084156108fc029085906000818181858888f193505050501580156106bb573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076183610a66565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b29082610cd8565b506040820151600282015560609091015160039091015550505050565b5080546107db906109bd565b6000825580601f106107eb575050565b601f01602090049060005260206000209081019061037b91905b808211156108195760008155600101610805565b5090565b80355b92915050565b60006020828403121561083b5761083b600080fd5b610845838361081d565b9392505050565b60006001600160a01b038216610820565b6108668161084c565b82525050565b60005b8381101561088757818101518382015260200161086f565b50506000910152565b600061089a825190565b8084526020840193506108b181856020860161086c565b601f01601f19169290920192915050565b80610866565b608081016108d6828761085d565b81810360208301526108e88186610890565b90506108f760408301856108c2565b61090460608301846108c2565b95945050505050565b60008083601f84011261092257610922600080fd5b50813567ffffffffffffffff81111561093d5761093d600080fd5b60208301915083600182028301111561095857610958600080fd5b9250929050565b6000806020838503121561097557610975600080fd5b823567ffffffffffffffff81111561098f5761098f600080fd5b61099b8582860161090d565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d157607f821691505b6020821081036109e3576109e36109a7565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610820576108206109e9565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082081610a22565b600060018201610a7857610a786109e9565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a50565b6020808252810161082081610a7f565b634e487b7160e01b600052601260045260246000fd5b600082610ae657610ae6610ac1565b500490565b60008154610af8816109bd565b600182168015610b0f5760018114610b2457610b54565b60ff1983168652811515820286019350610b54565b60008581526020902060005b83811015610b4c57815488820152600190910190602001610b30565b505081860193505b50505092915050565b6108208183610aeb565b81810381811115610820576108206109e9565b8181028115828204841417610820576108206109e9565b600061082082610b9f565b90565b67ffffffffffffffff1690565b61086681610b91565b602081016108208284610bac565b6000610bcd825190565b610bdb81856020860161086c565b9290920192915050565b6108208183610bc3565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a50565b6020808252810161082081610bef565b634e487b7160e01b600052604160045260246000fd5b6000610820610b9c8381565b610c5c83610c47565b815460001960089490940293841b1916921b91909117905550565b6000610629818484610c53565b818110156104cc57610c97600082610c77565b600101610c84565b601f821115610629576000818152602090206020601f85010481016020851015610cc65750805b6104b96020601f860104830182610c84565b815167ffffffffffffffff811115610cf257610cf2610c31565b610cfc82546109bd565b610d07828285610c9f565b506020601f821160018114610d3c5760008315610d245750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610d6c5787850151825560209485019460019092019101610d4c565b5084821015610d895783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122066f93efbc39d0271f5362f9b5622499ae4fd76e258ad990aeaf45df90b28957264736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69 \ No newline at end of file diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index f2e4582e1..4c5737055 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -31,8 +31,8 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610d91806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ad57806382fbdc9c146100c2578063929d34e9146100d557600080fd5b8062e0d3b51461005e578063349e7eca14610096575b600080fd5b34801561006a57600080fd5b5061007e6100793660046107f7565b6100f5565b60405161008d93929190610899565b60405180910390f35b3480156100a257600080fd5b506100ab6101aa565b005b3480156100b957600080fd5b506100ab61036b565b6100ab6100d0366004610922565b6104ad565b3480156100e157600080fd5b506100ab6100f03660046107f7565b6104bd565b600060208190529081526040902080546001820180546001600160a01b03909216929161012190610980565b80601f016020809104026020016040519081016040528092919081815260200182805461014d90610980565b801561019a5780601f1061016f5761010080835404028352916020019161019a565b820191906000526020600020905b81548152906001019060200180831161017d57829003601f168201915b5050505050908060020154905083565b60006101b76001306109c2565b9050336001600160a01b038216146101ea5760405162461bcd60e51b81526004016101e190610a19565b60405180910390fd5b6002546001541161036857600280546000918261020683610a29565b919050559050600254811061022d5760405162461bcd60e51b81526004016101e190610a74565b600081815260208190526040812060028101549091489161024f908390610a9a565b905060005a84546040519192506000916001600160a01b0390911690849061027b906001890190610b20565b60006040518083038160008787f1925050503d80600081146102b9576040519150601f19603f3d011682016040523d82523d6000602084013e6102be565b606091505b50509050801561030a576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906102ff60018301826107a0565b600282016000905550505b60005a905060008561031c8386610b2a565b6103269190610b3d565b875490915061033f9082906001600160a01b0316610611565b80876002015461034f9190610b2a565b6002880181905561035f906106a4565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103b65750825b905060008267ffffffffffffffff1660011480156103d35750303b155b9050811580156103e1575080155b15610418576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044c57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104a657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061049d90600190610b78565b60405180910390a15b5050505050565b6104b9338383346106d1565b5050565b60008181526020818152604080832081516060810190925280546001600160a01b0316825260018101805492939192918401916104f990610980565b80601f016020809104026020016040519081016040528092919081815260200182805461052590610980565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b031682602001516040516105a99190610ba8565b6000604051808303816000865af19150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b505090508061060c5760405162461bcd60e51b81526004016101e190610be4565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610663576040519150601f19603f3d011682016040523d82523d6000602084013e610668565b606091505b505090508061060c57604051419084156108fc029085906000818181858888f1935050505015801561069e573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104b9573d6000803e3d6000fd5b6040518060600160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060209091018390526001805482918261073b83610a29565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617815590820151600182019061078c9082610c9b565b506040820151816002015590505050505050565b5080546107ac90610980565b6000825580601f106107bc575050565b601f01602090049060005260206000209081019061036891905b808211156107ea57600081556001016107d6565b5090565b80355b92915050565b60006020828403121561080c5761080c600080fd5b61081683836107ee565b9392505050565b60006001600160a01b0382166107f1565b6108378161081d565b82525050565b60005b83811015610858578181015183820152602001610840565b50506000910152565b600061086b825190565b80845260208401935061088281856020860161083d565b601f01601f19169290920192915050565b80610837565b606081016108a7828661082e565b81810360208301526108b98185610861565b90506108c86040830184610893565b949350505050565b60008083601f8401126108e5576108e5600080fd5b50813567ffffffffffffffff81111561090057610900600080fd5b60208301915083600182028301111561091b5761091b600080fd5b9250929050565b6000806020838503121561093857610938600080fd5b823567ffffffffffffffff81111561095257610952600080fd5b61095e858286016108d0565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061099457607f821691505b6020821081036109a6576109a661096a565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156107f1576107f16109ac565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016107f1816109e5565b600060018201610a3b57610a3b6109ac565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a13565b602080825281016107f181610a42565b634e487b7160e01b600052601260045260246000fd5b600082610aa957610aa9610a84565b500490565b60008154610abb81610980565b600182168015610ad25760018114610ae757610b17565b60ff1983168652811515820286019350610b17565b60008581526020902060005b83811015610b0f57815488820152600190910190602001610af3565b505081860193505b50505092915050565b6107f18183610aae565b818103818111156107f1576107f16109ac565b81810281158282048414176107f1576107f16109ac565b60006107f182610b62565b90565b67ffffffffffffffff1690565b61083781610b54565b602081016107f18284610b6f565b6000610b90825190565b610b9e81856020860161083d565b9290920192915050565b6107f18183610b86565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a13565b602080825281016107f181610bb2565b634e487b7160e01b600052604160045260246000fd5b60006107f1610b5f8381565b610c1f83610c0a565b815460001960089490940293841b1916921b91909117905550565b600061060c818484610c16565b818110156104b957610c5a600082610c3a565b600101610c47565b601f82111561060c576000818152602090206020601f85010481016020851015610c895750805b6104a66020601f860104830182610c47565b815167ffffffffffffffff811115610cb557610cb5610bf4565b610cbf8254610980565b610cca828285610c62565b506020601f821160018114610cff5760008315610ce75750848201515b600019600885021c19811660028502178555506104a6565b600084815260208120601f198516915b82811015610d2f5787850151825560209485019460019092019101610d0f565b5084821015610d4c5783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200245eda5298d1b0b2c981784e582dfd9ea7daca2160ad0978d83e72c11e9122864736f6c634300081c0033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610dce806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610826565b6100f6565b60405161008e94939291906108c8565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d136600461095f565b6104c0565b3480156100e257600080fd5b506100ac6100f1366004610826565b6104d0565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109bd565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109bd565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306109ff565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a56565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610a66565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610ab1565b6000818152602081905260408120600381015460028201549192909161025b908390610ad7565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b5d565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107cf565b506000600282018190556003909101555b60005a905060008561032e8386610b67565b6103389190610b7a565b905080876002015461034a9190610b67565b600288015586546103659082906001600160a01b031661062e565b61037287600201546106c1565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bb5565b60405180910390a15b5050505050565b6104cc338383346106ee565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c906109bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906109bd565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610be5565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c21565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b505090508061062957604051419084156108fc029085906000818181858888f193505050501580156106bb573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076183610a66565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b29082610cd8565b506040820151600282015560609091015160039091015550505050565b5080546107db906109bd565b6000825580601f106107eb575050565b601f01602090049060005260206000209081019061037b91905b808211156108195760008155600101610805565b5090565b80355b92915050565b60006020828403121561083b5761083b600080fd5b610845838361081d565b9392505050565b60006001600160a01b038216610820565b6108668161084c565b82525050565b60005b8381101561088757818101518382015260200161086f565b50506000910152565b600061089a825190565b8084526020840193506108b181856020860161086c565b601f01601f19169290920192915050565b80610866565b608081016108d6828761085d565b81810360208301526108e88186610890565b90506108f760408301856108c2565b61090460608301846108c2565b95945050505050565b60008083601f84011261092257610922600080fd5b50813567ffffffffffffffff81111561093d5761093d600080fd5b60208301915083600182028301111561095857610958600080fd5b9250929050565b6000806020838503121561097557610975600080fd5b823567ffffffffffffffff81111561098f5761098f600080fd5b61099b8582860161090d565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d157607f821691505b6020821081036109e3576109e36109a7565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610820576108206109e9565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082081610a22565b600060018201610a7857610a786109e9565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a50565b6020808252810161082081610a7f565b634e487b7160e01b600052601260045260246000fd5b600082610ae657610ae6610ac1565b500490565b60008154610af8816109bd565b600182168015610b0f5760018114610b2457610b54565b60ff1983168652811515820286019350610b54565b60008581526020902060005b83811015610b4c57815488820152600190910190602001610b30565b505081860193505b50505092915050565b6108208183610aeb565b81810381811115610820576108206109e9565b8181028115828204841417610820576108206109e9565b600061082082610b9f565b90565b67ffffffffffffffff1690565b61086681610b91565b602081016108208284610bac565b6000610bcd825190565b610bdb81856020860161086c565b9290920192915050565b6108208183610bc3565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a50565b6020808252810161082081610bef565b634e487b7160e01b600052604160045260246000fd5b6000610820610b9c8381565b610c5c83610c47565b815460001960089490940293841b1916921b91909117905550565b6000610629818484610c53565b818110156104cc57610c97600082610c77565b600101610c84565b601f821115610629576000818152602090206020601f85010481016020851015610cc65750805b6104b96020601f860104830182610c84565b815167ffffffffffffffff811115610cf257610cf2610c31565b610cfc82546109bd565b610d07828285610c9f565b506020601f821160018114610d3c5760008315610d245750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610d6c5787850151825560209485019460019092019101610d4c565b5084821015610d895783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122066f93efbc39d0271f5362f9b5622499ae4fd76e258ad990aeaf45df90b28957264736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. @@ -204,19 +204,21 @@ func (_PublicCallbacks *PublicCallbacksTransactorRaw) Transact(opts *bind.Transa // Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. // -// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value) +// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value, uint256 baseFee) func (_PublicCallbacks *PublicCallbacksCaller) Callbacks(opts *bind.CallOpts, arg0 *big.Int) (struct { - Target common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int + BaseFee *big.Int }, error) { var out []interface{} err := _PublicCallbacks.contract.Call(opts, &out, "callbacks", arg0) outstruct := new(struct { - Target common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int + BaseFee *big.Int }) if err != nil { return *outstruct, err @@ -225,6 +227,7 @@ func (_PublicCallbacks *PublicCallbacksCaller) Callbacks(opts *bind.CallOpts, ar outstruct.Target = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) outstruct.Data = *abi.ConvertType(out[1], new([]byte)).(*[]byte) outstruct.Value = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.BaseFee = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) return *outstruct, err @@ -232,22 +235,24 @@ func (_PublicCallbacks *PublicCallbacksCaller) Callbacks(opts *bind.CallOpts, ar // Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. // -// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value) +// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value, uint256 baseFee) func (_PublicCallbacks *PublicCallbacksSession) Callbacks(arg0 *big.Int) (struct { - Target common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int + BaseFee *big.Int }, error) { return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) } // Callbacks is a free data retrieval call binding the contract method 0x00e0d3b5. // -// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value) +// Solidity: function callbacks(uint256 ) view returns(address target, bytes data, uint256 value, uint256 baseFee) func (_PublicCallbacks *PublicCallbacksCallerSession) Callbacks(arg0 *big.Int) (struct { - Target common.Address - Data []byte - Value *big.Int + Target common.Address + Data []byte + Value *big.Int + BaseFee *big.Int }, error) { return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) } diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index dac9366e9..c3e06c17f 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614c16380380614c1683398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614bf6833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614bf6833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610e6a80612b0283390190565b61128a8061396c83390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212208d3b059fdd6dd1700d2667a504d38651d0b99a164918fd748bad9151694bcfa664736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610d91806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ad57806382fbdc9c146100c2578063929d34e9146100d557600080fd5b8062e0d3b51461005e578063349e7eca14610096575b600080fd5b34801561006a57600080fd5b5061007e6100793660046107f7565b6100f5565b60405161008d93929190610899565b60405180910390f35b3480156100a257600080fd5b506100ab6101aa565b005b3480156100b957600080fd5b506100ab61036b565b6100ab6100d0366004610922565b6104ad565b3480156100e157600080fd5b506100ab6100f03660046107f7565b6104bd565b600060208190529081526040902080546001820180546001600160a01b03909216929161012190610980565b80601f016020809104026020016040519081016040528092919081815260200182805461014d90610980565b801561019a5780601f1061016f5761010080835404028352916020019161019a565b820191906000526020600020905b81548152906001019060200180831161017d57829003601f168201915b5050505050908060020154905083565b60006101b76001306109c2565b9050336001600160a01b038216146101ea5760405162461bcd60e51b81526004016101e190610a19565b60405180910390fd5b6002546001541161036857600280546000918261020683610a29565b919050559050600254811061022d5760405162461bcd60e51b81526004016101e190610a74565b600081815260208190526040812060028101549091489161024f908390610a9a565b905060005a84546040519192506000916001600160a01b0390911690849061027b906001890190610b20565b60006040518083038160008787f1925050503d80600081146102b9576040519150601f19603f3d011682016040523d82523d6000602084013e6102be565b606091505b50509050801561030a576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906102ff60018301826107a0565b600282016000905550505b60005a905060008561031c8386610b2a565b6103269190610b3d565b875490915061033f9082906001600160a01b0316610611565b80876002015461034f9190610b2a565b6002880181905561035f906106a4565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103b65750825b905060008267ffffffffffffffff1660011480156103d35750303b155b9050811580156103e1575080155b15610418576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044c57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104a657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061049d90600190610b78565b60405180910390a15b5050505050565b6104b9338383346106d1565b5050565b60008181526020818152604080832081516060810190925280546001600160a01b0316825260018101805492939192918401916104f990610980565b80601f016020809104026020016040519081016040528092919081815260200182805461052590610980565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b505050505081526020016002820154815250509050600081600001516001600160a01b031682602001516040516105a99190610ba8565b6000604051808303816000865af19150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b505090508061060c5760405162461bcd60e51b81526004016101e190610be4565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610663576040519150601f19603f3d011682016040523d82523d6000602084013e610668565b606091505b505090508061060c57604051419084156108fc029085906000818181858888f1935050505015801561069e573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104b9573d6000803e3d6000fd5b6040518060600160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060209091018390526001805482918261073b83610a29565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617815590820151600182019061078c9082610c9b565b506040820151816002015590505050505050565b5080546107ac90610980565b6000825580601f106107bc575050565b601f01602090049060005260206000209081019061036891905b808211156107ea57600081556001016107d6565b5090565b80355b92915050565b60006020828403121561080c5761080c600080fd5b61081683836107ee565b9392505050565b60006001600160a01b0382166107f1565b6108378161081d565b82525050565b60005b83811015610858578181015183820152602001610840565b50506000910152565b600061086b825190565b80845260208401935061088281856020860161083d565b601f01601f19169290920192915050565b80610837565b606081016108a7828661082e565b81810360208301526108b98185610861565b90506108c86040830184610893565b949350505050565b60008083601f8401126108e5576108e5600080fd5b50813567ffffffffffffffff81111561090057610900600080fd5b60208301915083600182028301111561091b5761091b600080fd5b9250929050565b6000806020838503121561093857610938600080fd5b823567ffffffffffffffff81111561095257610952600080fd5b61095e858286016108d0565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061099457607f821691505b6020821081036109a6576109a661096a565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156107f1576107f16109ac565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016107f1816109e5565b600060018201610a3b57610a3b6109ac565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a13565b602080825281016107f181610a42565b634e487b7160e01b600052601260045260246000fd5b600082610aa957610aa9610a84565b500490565b60008154610abb81610980565b600182168015610ad25760018114610ae757610b17565b60ff1983168652811515820286019350610b17565b60008581526020902060005b83811015610b0f57815488820152600190910190602001610af3565b505081860193505b50505092915050565b6107f18183610aae565b818103818111156107f1576107f16109ac565b81810281158282048414176107f1576107f16109ac565b60006107f182610b62565b90565b67ffffffffffffffff1690565b61083781610b54565b602081016107f18284610b6f565b6000610b90825190565b610b9e81856020860161083d565b9290920192915050565b6107f18183610b86565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a13565b602080825281016107f181610bb2565b634e487b7160e01b600052604160045260246000fd5b60006107f1610b5f8381565b610c1f83610c0a565b815460001960089490940293841b1916921b91909117905550565b600061060c818484610c16565b818110156104b957610c5a600082610c3a565b600101610c47565b601f82111561060c576000818152602090206020601f85010481016020851015610c895750805b6104a66020601f860104830182610c47565b815167ffffffffffffffff811115610cb557610cb5610bf4565b610cbf8254610980565b610cca828285610c62565b506020601f821160018114610cff5760008315610ce75750848201515b600019600885021c19811660028502178555506104a6565b600084815260208120601f198516915b82811015610d2f5787850151825560209485019460019092019101610d0f565b5084821015610d4c5783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200245eda5298d1b0b2c981784e582dfd9ea7daca2160ad0978d83e72c11e9122864736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614c53380380614c5383398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c33833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610ea780612b0283390190565b61128a806139a983390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122033c50cbe4785d88b6dc98e59a145fd28083c6b772b6e317ff391270748bab65064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610dce806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610826565b6100f6565b60405161008e94939291906108c8565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d136600461095f565b6104c0565b3480156100e257600080fd5b506100ac6100f1366004610826565b6104d0565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109bd565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109bd565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306109ff565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a56565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610a66565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610ab1565b6000818152602081905260408120600381015460028201549192909161025b908390610ad7565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b5d565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107cf565b506000600282018190556003909101555b60005a905060008561032e8386610b67565b6103389190610b7a565b905080876002015461034a9190610b67565b600288015586546103659082906001600160a01b031661062e565b61037287600201546106c1565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bb5565b60405180910390a15b5050505050565b6104cc338383346106ee565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c906109bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906109bd565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610be5565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c21565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b505090508061062957604051419084156108fc029085906000818181858888f193505050501580156106bb573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076183610a66565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b29082610cd8565b506040820151600282015560609091015160039091015550505050565b5080546107db906109bd565b6000825580601f106107eb575050565b601f01602090049060005260206000209081019061037b91905b808211156108195760008155600101610805565b5090565b80355b92915050565b60006020828403121561083b5761083b600080fd5b610845838361081d565b9392505050565b60006001600160a01b038216610820565b6108668161084c565b82525050565b60005b8381101561088757818101518382015260200161086f565b50506000910152565b600061089a825190565b8084526020840193506108b181856020860161086c565b601f01601f19169290920192915050565b80610866565b608081016108d6828761085d565b81810360208301526108e88186610890565b90506108f760408301856108c2565b61090460608301846108c2565b95945050505050565b60008083601f84011261092257610922600080fd5b50813567ffffffffffffffff81111561093d5761093d600080fd5b60208301915083600182028301111561095857610958600080fd5b9250929050565b6000806020838503121561097557610975600080fd5b823567ffffffffffffffff81111561098f5761098f600080fd5b61099b8582860161090d565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d157607f821691505b6020821081036109e3576109e36109a7565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610820576108206109e9565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082081610a22565b600060018201610a7857610a786109e9565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a50565b6020808252810161082081610a7f565b634e487b7160e01b600052601260045260246000fd5b600082610ae657610ae6610ac1565b500490565b60008154610af8816109bd565b600182168015610b0f5760018114610b2457610b54565b60ff1983168652811515820286019350610b54565b60008581526020902060005b83811015610b4c57815488820152600190910190602001610b30565b505081860193505b50505092915050565b6108208183610aeb565b81810381811115610820576108206109e9565b8181028115828204841417610820576108206109e9565b600061082082610b9f565b90565b67ffffffffffffffff1690565b61086681610b91565b602081016108208284610bac565b6000610bcd825190565b610bdb81856020860161086c565b9290920192915050565b6108208183610bc3565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a50565b6020808252810161082081610bef565b634e487b7160e01b600052604160045260246000fd5b6000610820610b9c8381565b610c5c83610c47565b815460001960089490940293841b1916921b91909117905550565b6000610629818484610c53565b818110156104cc57610c97600082610c77565b600101610c84565b601f821115610629576000818152602090206020601f85010481016020851015610cc65750805b6104b96020601f860104830182610c84565b815167ffffffffffffffff811115610cf257610cf2610c31565b610cfc82546109bd565b610d07828285610c9f565b506020601f821160018114610d3c5760008315610d245750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610d6c5787850151825560209485019460019092019101610d4c565b5084821015610d895783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122066f93efbc39d0271f5362f9b5622499ae4fd76e258ad990aeaf45df90b28957264736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index f9f2e9dc6..8caab1457 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -20,6 +20,7 @@ contract PublicCallbacks is Initializable { address target; bytes data; uint256 value; + uint256 baseFee; } mapping(uint256 => Callback) public callbacks; @@ -32,7 +33,7 @@ contract PublicCallbacks is Initializable { } function addCallback(address callback, bytes calldata data, uint256 value) internal { - callbacks[nextCallbackId++] = Callback({target: callback, data: data, value: value}); + callbacks[nextCallbackId++] = Callback({target: callback, data: data, value: value, baseFee: block.basefee}); } function register(bytes calldata callback) external payable { @@ -59,7 +60,7 @@ contract PublicCallbacks is Initializable { uint256 callbackId = lastUnusedCallbackId++; require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); Callback storage callback = callbacks[callbackId]; - uint256 baseFee = block.basefee; + uint256 baseFee = callback.baseFee; uint256 gas = callback.value / baseFee; uint256 gasBefore = gasleft(); (bool success, ) = callback.target.call{gas: gas}(callback.data); @@ -69,7 +70,7 @@ contract PublicCallbacks is Initializable { uint256 gasAfter = gasleft(); uint256 gasRefund = (gasBefore - gasAfter) * baseFee; callback.value = callback.value - gasRefund; - + internalRefund(gasRefund, callback.target); payForCallback(callback.value); } From d92cf19b40eefdef38bba779db30747b01a88855 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 17:54:28 +0200 Subject: [PATCH 05/19] Removing previously false added files from github. --- .../OwnableUpgradeable.json | 99 --- .../Initializable.sol/Initializable.json | 25 - .../ERC20Upgradeable.json | 333 ------- .../ContextUpgradeable.json | 25 - .../AccessControl.sol/AccessControl.json | 227 ----- .../IAccessControl.sol/IAccessControl.json | 195 ----- .../contracts/access/Ownable.sol/Ownable.json | 76 -- .../interfaces/IERC1967.sol/IERC1967.json | 47 - .../draft-IERC6093.sol/IERC1155Errors.json | 104 --- .../draft-IERC6093.sol/IERC20Errors.json | 88 -- .../draft-IERC6093.sol/IERC721Errors.json | 105 --- .../ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin | 1 - .../ERC1967Proxy.sol/ERC1967Proxy.json | 67 -- .../ERC1967/ERC1967Utils.sol/ERC1967Utils.bin | 1 - .../ERC1967Utils.sol/ERC1967Utils.json | 85 -- .../contracts/proxy/Proxy.sol/Proxy.json | 6 - .../proxy/beacon/IBeacon.sol/IBeacon.json | 15 - .../transparent/ProxyAdmin.sol/ProxyAdmin.bin | 1 - .../ProxyAdmin.sol/ProxyAdmin.json | 123 --- .../ITransparentUpgradeableProxy.json | 65 -- .../TransparentUpgradeableProxy.bin | 1 - .../TransparentUpgradeableProxy.json | 107 --- .../Initializable.sol/Initializable.json | 25 - .../token/ERC20/ERC20.sol/ERC20.json | 310 ------- .../token/ERC20/IERC20.sol/IERC20.json | 185 ---- .../IERC20Metadata.sol/IERC20Metadata.json | 224 ----- .../IERC20Permit.sol/IERC20Permit.json | 77 -- .../ERC20/utils/SafeERC20.sol/SafeERC20.bin | 1 - .../ERC20/utils/SafeERC20.sol/SafeERC20.json | 34 - .../contracts/utils/Address.sol/Address.bin | 1 - .../contracts/utils/Address.sol/Address.json | 29 - .../utils/StorageSlot.sol/StorageSlot.bin | 1 - .../contracts/utils/Strings.sol/Strings.bin | 1 - .../contracts/utils/Strings.sol/Strings.json | 18 - .../utils/cryptography/ECDSA.sol/ECDSA.bin | 1 - .../utils/cryptography/ECDSA.sol/ECDSA.json | 29 - .../MerkleProof.sol/MerkleProof.bin | 1 - .../MerkleProof.sol/MerkleProof.json | 7 - .../MessageHashUtils.sol/MessageHashUtils.bin | 1 - .../introspection/ERC165.sol/ERC165.json | 21 - .../introspection/IERC165.sol/IERC165.json | 21 - .../contracts/utils/math/Math.sol/Math.bin | 1 - .../contracts/utils/math/Math.sol/Math.json | 7 - .../utils/math/SignedMath.sol/SignedMath.bin | 1 - .../src/bridge/IBridge.sol/IBridge.json | 61 -- .../ITokenFactory.sol/ITokenFactory.json | 25 - .../IObscuroBridgeAdmin.json | 51 -- .../L1/ObscuroBridge.sol/ObscuroBridge.bin | 1 - .../L1/ObscuroBridge.sol/ObscuroBridge.json | 474 ---------- .../L2/EthereumBridge.sol/EthereumBridge.bin | 1 - .../L2/EthereumBridge.sol/EthereumBridge.json | 253 ------ .../ConstantSupplyERC20.bin | 1 - .../ConstantSupplyERC20.json | 331 ------- .../src/common/ObsERC20.sol/ObsERC20.bin | 1 - .../src/common/ObsERC20.sol/ObsERC20.json | 326 ------- .../common/WrappedERC20.sol/WrappedERC20.bin | 1 - .../common/WrappedERC20.sol/WrappedERC20.json | 600 ------------- .../ContractTransparencyConfig.json | 39 - .../ManagementContract.bin | 1 - .../ManagementContract.json | 825 ------------------ .../IMerkleTreeMessageBus.json | 133 --- .../IMessageBus.sol/IMessageBus.json | 311 ------- .../messaging/IValueBus.sol/IValueBus.json | 16 - .../MerkleTreeMessageBus.bin | 1 - .../MerkleTreeMessageBus.json | 565 ------------ .../messaging/MessageBus.sol/MessageBus.bin | 1 - .../messaging/MessageBus.sol/MessageBus.json | 434 --------- .../CrossChainEnabledObscuro.json | 38 - .../CrossChainMessenger.bin | 1 - .../CrossChainMessenger.json | 199 ----- .../ICrossChainMessenger.json | 73 -- .../exported/src/system/Logger.sol/Logger.bin | 1 - .../src/system/Logger.sol/Logger.json | 15 - .../OnBlockEndCallback.json | 67 -- .../SystemDeployer.sol/SystemDeployer.bin | 1 - .../SystemDeployer.sol/SystemDeployer.json | 32 - .../src/system/Transaction.sol/Structs.bin | 1 - .../TransactionPostProcessor.bin | 1 - .../TransactionPostProcessor.json | 367 -------- .../GasConsumerBalance.bin | 1 - .../GasConsumerBalance.json | 47 - .../zen/ZenBase.sol/ITransactionDecoder.json | 73 -- .../exported/src/zen/ZenBase.sol/ZenBase.bin | 1 - .../exported/src/zen/ZenBase.sol/ZenBase.json | 479 ---------- .../ZenTestnet.sol/ITransactionDecoder.json | 73 -- .../src/zen/ZenTestnet.sol/ZenTestnet.bin | 1 - .../src/zen/ZenTestnet.sol/ZenTestnet.json | 509 ----------- 87 files changed, 9224 deletions(-) delete mode 100644 contracts/exported/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json delete mode 100644 contracts/exported/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json delete mode 100644 contracts/exported/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol/ERC20Upgradeable.json delete mode 100644 contracts/exported/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json delete mode 100644 contracts/exported/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.json delete mode 100644 contracts/exported/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.json delete mode 100644 contracts/exported/@openzeppelin/contracts/access/Ownable.sol/Ownable.json delete mode 100644 contracts/exported/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.json delete mode 100644 contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.json delete mode 100644 contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.json delete mode 100644 contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json delete mode 100644 contracts/exported/@openzeppelin/contracts/proxy/utils/Initializable.sol/Initializable.json delete mode 100644 contracts/exported/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json delete mode 100644 contracts/exported/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json delete mode 100644 contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json delete mode 100644 contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol/IERC20Permit.json delete mode 100644 contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.json delete mode 100644 contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin delete mode 100644 contracts/exported/src/bridge/IBridge.sol/IBridge.json delete mode 100644 contracts/exported/src/bridge/ITokenFactory.sol/ITokenFactory.json delete mode 100644 contracts/exported/src/bridge/L1/IObscuroBridgeAdmin.sol/IObscuroBridgeAdmin.json delete mode 100644 contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin delete mode 100644 contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.json delete mode 100644 contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin delete mode 100644 contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.json delete mode 100644 contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin delete mode 100644 contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.json delete mode 100644 contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin delete mode 100644 contracts/exported/src/common/ObsERC20.sol/ObsERC20.json delete mode 100644 contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin delete mode 100644 contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.json delete mode 100644 contracts/exported/src/lib/ContractTransparencyConfig.sol/ContractTransparencyConfig.json delete mode 100644 contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin delete mode 100644 contracts/exported/src/management/ManagementContract.sol/ManagementContract.json delete mode 100644 contracts/exported/src/messaging/IMerkleTreeMessageBus.sol/IMerkleTreeMessageBus.json delete mode 100644 contracts/exported/src/messaging/IMessageBus.sol/IMessageBus.json delete mode 100644 contracts/exported/src/messaging/IValueBus.sol/IValueBus.json delete mode 100644 contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin delete mode 100644 contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.json delete mode 100644 contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin delete mode 100644 contracts/exported/src/messaging/MessageBus.sol/MessageBus.json delete mode 100644 contracts/exported/src/messaging/messenger/CrossChainEnabledObscuro.sol/CrossChainEnabledObscuro.json delete mode 100644 contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin delete mode 100644 contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.json delete mode 100644 contracts/exported/src/messaging/messenger/ICrossChainMessenger.sol/ICrossChainMessenger.json delete mode 100644 contracts/exported/src/system/Logger.sol/Logger.bin delete mode 100644 contracts/exported/src/system/Logger.sol/Logger.json delete mode 100644 contracts/exported/src/system/OnBlockEndCallback.sol/OnBlockEndCallback.json delete mode 100644 contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin delete mode 100644 contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.json delete mode 100644 contracts/exported/src/system/Transaction.sol/Structs.bin delete mode 100644 contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin delete mode 100644 contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.json delete mode 100644 contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin delete mode 100644 contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.json delete mode 100644 contracts/exported/src/zen/ZenBase.sol/ITransactionDecoder.json delete mode 100644 contracts/exported/src/zen/ZenBase.sol/ZenBase.bin delete mode 100644 contracts/exported/src/zen/ZenBase.sol/ZenBase.json delete mode 100644 contracts/exported/src/zen/ZenTestnet.sol/ITransactionDecoder.json delete mode 100644 contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin delete mode 100644 contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.json diff --git a/contracts/exported/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json b/contracts/exported/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json deleted file mode 100644 index ff44118b5..000000000 --- a/contracts/exported/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json +++ /dev/null @@ -1,99 +0,0 @@ -[ - { - "inputs": [], - "name": "InvalidInitialization", - "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" - }, - { - "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" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json b/contracts/exported/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json deleted file mode 100644 index 1ad5facb8..000000000 --- a/contracts/exported/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json +++ /dev/null @@ -1,25 +0,0 @@ -[ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/contracts/exported/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol/ERC20Upgradeable.json b/contracts/exported/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol/ERC20Upgradeable.json deleted file mode 100644 index c6a2a9b44..000000000 --- a/contracts/exported/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol/ERC20Upgradeable.json +++ /dev/null @@ -1,333 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json b/contracts/exported/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json deleted file mode 100644 index 1ad5facb8..000000000 --- a/contracts/exported/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json +++ /dev/null @@ -1,25 +0,0 @@ -[ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.json b/contracts/exported/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.json deleted file mode 100644 index 5756029d9..000000000 --- a/contracts/exported/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.json +++ /dev/null @@ -1,227 +0,0 @@ -[ - { - "inputs": [], - "name": "AccessControlBadConfirmation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "name": "AccessControlUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.json b/contracts/exported/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.json deleted file mode 100644 index eb8c7b2a0..000000000 --- a/contracts/exported/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.json +++ /dev/null @@ -1,195 +0,0 @@ -[ - { - "inputs": [], - "name": "AccessControlBadConfirmation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "name": "AccessControlUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/access/Ownable.sol/Ownable.json b/contracts/exported/@openzeppelin/contracts/access/Ownable.sol/Ownable.json deleted file mode 100644 index d281aea31..000000000 --- a/contracts/exported/@openzeppelin/contracts/access/Ownable.sol/Ownable.json +++ /dev/null @@ -1,76 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.json b/contracts/exported/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.json deleted file mode 100644 index 0855e48e6..000000000 --- a/contracts/exported/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.json b/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.json deleted file mode 100644 index f2d2b1dca..000000000 --- a/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.json +++ /dev/null @@ -1,104 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC1155InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC1155InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "idsLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valuesLength", - "type": "uint256" - } - ], - "name": "ERC1155InvalidArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ERC1155InvalidOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC1155InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC1155InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC1155MissingApprovalForAll", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.json b/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.json deleted file mode 100644 index d2e35dd43..000000000 --- a/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.json +++ /dev/null @@ -1,88 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.json b/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.json deleted file mode 100644 index 719d8f9c2..000000000 --- a/contracts/exported/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.json +++ /dev/null @@ -1,105 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC721IncorrectOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC721InsufficientApproval", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC721InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ERC721InvalidOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC721InvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC721InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC721InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC721NonexistentToken", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin deleted file mode 100644 index 8c9003d4f..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.bin +++ /dev/null @@ -1 +0,0 @@ -60806040526040516104c83803806104c883398101604081905261002291610365565b61002c8282610033565b5050610403565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610182565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf91906103c9565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012691906103f9565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a3565b925050505b92915050565b34156101a15760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b8576101b3826101f9565b6101f2565b81511580156101cf57506001600160a01b0384163b155b156101ef5783604051639996b31560e01b81526004016100bf91906103c9565b50805b9392505050565b8051156102095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b60006001600160a01b03821661017c565b61023f81610225565b811461022257600080fd5b805161017c81610236565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561029057610290610255565b6040525050565b60006102a260405190565b90506102ae828261026b565b919050565b60006001600160401b038211156102cc576102cc610255565b601f19601f83011660200192915050565b60005b838110156102f85781810151838201526020016102e0565b50506000910152565b600061031461030f846102b3565b610297565b905082815283838301111561032b5761032b600080fd5b6101f28360208301846102dd565b600082601f83011261034d5761034d600080fd5b815161035d848260208601610301565b949350505050565b6000806040838503121561037b5761037b600080fd5b610385848461024a565b60208401519092506001600160401b038111156103a4576103a4600080fd5b6103b085828601610339565b9150509250929050565b6103c381610225565b82525050565b6020810161017c82846103ba565b60006103e1825190565b6103ef8185602086016102dd565b9290920192915050565b61017c81836103d7565b60b7806104116000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea264697066735822122066d3d78a32860920cee3e1088ebb8679b983ca693d9bf0e5254c68f2d35e4d1364736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json deleted file mode 100644 index 68d9d9850..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "ERC1967InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "ERC1967NonPayable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin deleted file mode 100644 index a8f4af4e1..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220119e23d3037aca42a1fe273a94ec7561409ce1c2bff988010f652b59a5870b8864736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.json b/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.json deleted file mode 100644 index 50c0c71d7..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol/ERC1967Utils.json +++ /dev/null @@ -1,85 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "ERC1967InvalidAdmin", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "ERC1967InvalidBeacon", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "ERC1967InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "ERC1967NonPayable", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.json b/contracts/exported/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.json deleted file mode 100644 index ddd6adbd1..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "stateMutability": "payable", - "type": "fallback" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.json b/contracts/exported/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.json deleted file mode 100644 index 9251ac784..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin b/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin deleted file mode 100644 index a46a2aa45..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json b/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json deleted file mode 100644 index e14e59a3b..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +++ /dev/null @@ -1,123 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json b/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json deleted file mode 100644 index ed8b348ff..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +++ /dev/null @@ -1,65 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin b/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin deleted file mode 100644 index 4152ad971..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.bin +++ /dev/null @@ -1 +0,0 @@ -60a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json b/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json deleted file mode 100644 index 5ec0648f4..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +++ /dev/null @@ -1,107 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "ERC1967InvalidAdmin", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "ERC1967InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "ERC1967NonPayable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProxyDeniedAdminAccess", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/proxy/utils/Initializable.sol/Initializable.json b/contracts/exported/@openzeppelin/contracts/proxy/utils/Initializable.sol/Initializable.json deleted file mode 100644 index 1ad5facb8..000000000 --- a/contracts/exported/@openzeppelin/contracts/proxy/utils/Initializable.sol/Initializable.json +++ /dev/null @@ -1,25 +0,0 @@ -[ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json b/contracts/exported/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json deleted file mode 100644 index 048513c1d..000000000 --- a/contracts/exported/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json +++ /dev/null @@ -1,310 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json b/contracts/exported/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json deleted file mode 100644 index 018d96628..000000000 --- a/contracts/exported/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json +++ /dev/null @@ -1,185 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json b/contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json deleted file mode 100644 index 5b642374c..000000000 --- a/contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json +++ /dev/null @@ -1,224 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol/IERC20Permit.json b/contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol/IERC20Permit.json deleted file mode 100644 index 5e4127785..000000000 --- a/contracts/exported/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol/IERC20Permit.json +++ /dev/null @@ -1,77 +0,0 @@ -[ - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin b/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin deleted file mode 100644 index f37e6f03c..000000000 --- a/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220229877c421e9e3124252435a5c43b85b16e5641b8a9e7f324538707dc167719d64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json b/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json deleted file mode 100644 index ef894403d..000000000 --- a/contracts/exported/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "currentAllowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestedDecrease", - "type": "uint256" - } - ], - "name": "SafeERC20FailedDecreaseAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin b/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin deleted file mode 100644 index d0749f626..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e6433e77b77d7f243f1afe2a29c6dd689e492ac368400ed7ccecd0f7cdb49c0964736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.json b/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.json deleted file mode 100644 index e1a1ad855..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/Address.sol/Address.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "AddressInsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin b/contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin deleted file mode 100644 index d4c3afaaa..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122018378492121da604a072d6957bb77cff105810cb3788af4f64cdc4144375712d64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin b/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin deleted file mode 100644 index c8d231930..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c57deb36e4cf781caeca4659dcadf25b73810da016ae9d262073c51b249373d464736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.json b/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.json deleted file mode 100644 index 4793f6ae6..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/Strings.sol/Strings.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "StringsInsufficientHexLength", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin b/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin deleted file mode 100644 index 82c458bee..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c608f31ab95dd3b5ce51dc7fda8d8594f29d5172a355d98cbccb0212cf5c103b64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.json b/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.json deleted file mode 100644 index 618c81ce0..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin b/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin deleted file mode 100644 index 1d4d2bd59..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201932f27795b64645664d78ae025beac1daff12570a84e07cd61f85cdc5a46ce864736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.json b/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.json deleted file mode 100644 index 6cf45c643..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol/MerkleProof.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "inputs": [], - "name": "MerkleProofInvalidMultiproof", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin b/contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin deleted file mode 100644 index 0fa68715c..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol/MessageHashUtils.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122080d60d3b8da7a9693a8187b90a6a885a7af674926bcf30e29c04a211e3f2573064736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.json b/contracts/exported/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.json deleted file mode 100644 index 53fa00071..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json b/contracts/exported/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json deleted file mode 100644 index 53fa00071..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin b/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin deleted file mode 100644 index 128f3f703..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220414fb1f0abf0470c4bfc889731211af53a844ce081ed2010bb259382b2d110fd64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.json b/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.json deleted file mode 100644 index e75de3c86..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/math/Math.sol/Math.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "inputs": [], - "name": "MathOverflowedMulDiv", - "type": "error" - } -] diff --git a/contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin b/contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin deleted file mode 100644 index f6262d3db..000000000 --- a/contracts/exported/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa894d47e0b47753da58c993835c3a10cd9c51f5abc94eade559e96506320e3764736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/bridge/IBridge.sol/IBridge.json b/contracts/exported/src/bridge/IBridge.sol/IBridge.json deleted file mode 100644 index 2d3c54d3c..000000000 --- a/contracts/exported/src/bridge/IBridge.sol/IBridge.json +++ /dev/null @@ -1,61 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "receiveAssets", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "sendERC20", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "sendNative", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/contracts/exported/src/bridge/ITokenFactory.sol/ITokenFactory.json b/contracts/exported/src/bridge/ITokenFactory.sol/ITokenFactory.json deleted file mode 100644 index aaeb96d76..000000000 --- a/contracts/exported/src/bridge/ITokenFactory.sol/ITokenFactory.json +++ /dev/null @@ -1,25 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "crossChainAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "onCreateTokenCommand", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/bridge/L1/IObscuroBridgeAdmin.sol/IObscuroBridgeAdmin.json b/contracts/exported/src/bridge/L1/IObscuroBridgeAdmin.sol/IObscuroBridgeAdmin.json deleted file mode 100644 index e557c140f..000000000 --- a/contracts/exported/src/bridge/L1/IObscuroBridgeAdmin.sol/IObscuroBridgeAdmin.json +++ /dev/null @@ -1,51 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "removeToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "bridge", - "type": "address" - } - ], - "name": "setRemoteBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "whitelistToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin b/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin deleted file mode 100644 index 1f76aeaa9..000000000 --- a/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.bin +++ /dev/null @@ -1 +0,0 @@ -60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611b698061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103b4578063d547741f146103d4578063e4c3ebc7146103f457600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611320565b610428565b6040516101769190611349565b60405180910390f35b34801561018b57600080fd5b5061019f61019a36600461137c565b610491565b005b61019f6101af36600461137c565b6104eb565b3480156101c057600080fd5b506101e46101cf3660046113ac565b60009081526002602052604090206001015490565b60405161017691906113d1565b3480156101fd57600080fd5b5061019f61020c3660046113df565b6105f6565b34801561021d57600080fd5b5061019f61022c3660046113df565b610621565b34801561023d57600080fd5b5061019f61024c366004611469565b610672565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a036600461137c565b610737565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f436600461137c565b61078b565b34801561030557600080fd5b5061019f6103143660046114f6565b610866565b34801561032557600080fd5b506101696103343660046113df565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a36600461137c565b610980565b34801561038b57600080fd5b506101e4600081565b3480156103a057600080fd5b5061019f6103af3660046114f6565b6109d4565b3480156103c057600080fd5b5061019f6103cf36600461137c565b610ac3565b3480156103e057600080fd5b5061019f6103ef3660046113df565b610c5c565b34801561040057600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061048b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104bb81610c81565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105145760405162461bcd60e51b815260040161050b90611573565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b031681525060405160200161054491906115ab565b60408051601f19818403018152919052600354909150610573906001600160a01b03168260025b600080610c8e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105c090869083906004016115b9565b6000604051808303818588803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461061181610c81565b61061b8383610d9a565b50505050565b6001600160a01b0381163314610663576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066d8282610e48565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069c81610c81565b6106c67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d9a565b50600063458ffd6360e01b87878787876040516024016106ea959493929190611600565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ed906001600160a01b031682600161056b565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561076181610c81565b61066d7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e48565b610793610ecf565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610836919061164c565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108975760405162461bcd60e51b815260040161050b906116c5565b806001600160a01b03166108a9610f38565b6001600160a01b0316146108cf5760405162461bcd60e51b815260040161050b9061172d565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff161561091f5761091a848484610fb5565b61061b565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff16156109685761091a82610fc0565b60405162461bcd60e51b815260040161050b90611795565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109aa81610c81565b61066d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d9a565b600082116109f45760405162461bcd60e51b815260040161050b906117d7565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a4b5760405162461bcd60e51b815260040161050b906117e7565b610a5783333085611032565b60006383bece4d60e01b848484604051602401610a769392919061186e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061061b906001600160a01b031682600061056b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b0e5750825b905060008267ffffffffffffffff166001148015610b2b5750303b155b905081158015610b39575080155b15610b70576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ba457845468ff00000000000000001916680100000000000000001785555b610bad8661078b565b610bd77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d9a565b50610c037fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d9a565b508315610c5457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c4b906001906118b9565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c7781610c81565b61061b8383610e48565b610c8b813361108c565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cc49190611966565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610d17836119a6565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610d5794939291906119de565b6020604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611a3e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e405760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610df83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161048b565b50600061048b565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e405760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161048b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f36576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb0919061164c565b905090565b61066d8382846110ec565b6040516000906001600160a01b038316908281818181865af19150503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b505090508061102e5760405162461bcd60e51b815260040161050b90611a8f565b5050565b61061b84856001600160a01b03166323b872dd86868660405160240161105a93929190611a9f565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611112565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff1661102e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161050b9291906115b9565b61066d83846001600160a01b031663a9059cbb858560405160240161105a9291906115b9565b60006111276001600160a01b03841683611185565b9050805160001415801561114c57508080602001905181019061114a9190611ada565b155b1561066d57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b60606111938383600061119a565b9392505050565b6060814710156111d857306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b600080856001600160a01b031684866040516111f49190611b29565b60006040518083038185875af1925050503d8060008114611231576040519150601f19603f3d011682016040523d82523d6000602084013e611236565b606091505b5091509150611246868383611250565b9695505050505050565b60608261126557611260826112bc565b611193565b815115801561127c57506001600160a01b0384163b155b156112b557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161050b9190611af9565b5080611193565b8051156112cc5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c8b57600080fd5b803561048b816112fe565b60006020828403121561133557611335600080fd5b6111938383611315565b8015155b82525050565b6020810161048b828461133f565b60006001600160a01b03821661048b565b61130a81611357565b803561048b81611368565b60006020828403121561139157611391600080fd5b6111938383611371565b8061130a565b803561048b8161139b565b6000602082840312156113c1576113c1600080fd5b61119383836113a1565b80611343565b6020810161048b82846113cb565b600080604083850312156113f5576113f5600080fd5b6113ff84846113a1565b915061140e8460208501611371565b90509250929050565b60008083601f84011261142c5761142c600080fd5b50813567ffffffffffffffff81111561144757611447600080fd5b60208301915083600182028301111561146257611462600080fd5b9250929050565b60008060008060006060868803121561148457611484600080fd5b61148e8787611371565b9450602086013567ffffffffffffffff8111156114ad576114ad600080fd5b6114b988828901611417565b9450945050604086013567ffffffffffffffff8111156114db576114db600080fd5b6114e788828901611417565b92509250509295509295909350565b60008060006060848603121561150e5761150e600080fd5b6115188585611371565b925061152785602086016113a1565b91506115368560408601611371565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161048b8161153f565b61134381611357565b805161159883826113cb565b50602081015161066d6020840182611583565b6040810161048b828461158c565b604081016115c78285611583565b61119360208301846113cb565b82818337506000910152565b8183526020830192506115f48284836115d4565b50601f01601f19160190565b6060810161160e8288611583565b81810360208301526116218186886115e0565b905081810360408301526116368184866115e0565b979650505050505050565b805161048b81611368565b60006020828403121561166157611661600080fd5b6111938383611641565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161048b8161166b565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116bf565b6020808252810161048b816116d5565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116bf565b6020808252810161048b8161173d565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061156d565b6020808252810161048b816117a5565b6020808252810161048b81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b6060810161187c8286611583565b61188960208301856113cb565b6118966040830184611583565b949350505050565b600067ffffffffffffffff821661048b565b6113438161189e565b6020810161048b82846118b0565b60005b838110156118e25781810151838201526020016118ca565b50506000910152565b60006118f5825190565b80845260208401935061190c8185602086016118c7565b601f01601f19169290920192915050565b805160009060608401906119318582611583565b506020830151848203602086015261194982826118eb565b915050604083015161195e60408601826113cb565b509392505050565b60208082528101611193818461191d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119c2576119c2611977565b5060010190565b63ffffffff8116611343565b60ff8116611343565b608081016119ec82876119c9565b6119f960208301866119c9565b8181036040830152611a0b81856118eb565b9050611a1a60608301846119d5565b95945050505050565b67ffffffffffffffff811661130a565b805161048b81611a23565b600060208284031215611a5357611a53600080fd5b6111938383611a33565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061156d565b6020808252810161048b81611a5d565b60608101611aad8286611583565b611aba6020830185611583565b61189660408301846113cb565b80151561130a565b805161048b81611ac7565b600060208284031215611aef57611aef600080fd5b6111938383611acf565b6020810161048b8284611583565b6000611b11825190565b611b1f8185602086016118c7565b9290920192915050565b61048b8183611b0756fea2646970667358221220ab0817204a72d2997c2da18c911ebc59f437a7aa94279d175a683ea0568901c064736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.json b/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.json deleted file mode 100644 index 6ae91f2b2..000000000 --- a/contracts/exported/src/bridge/L1/ObscuroBridge.sol/ObscuroBridge.json +++ /dev/null @@ -1,474 +0,0 @@ -[ - { - "inputs": [], - "name": "AccessControlBadConfirmation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "name": "AccessControlUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "AddressInsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ERC20_TOKEN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "NATIVE_TOKEN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "messengerAddress", - "type": "address" - } - ], - "name": "configure", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "messenger", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "promoteToAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "receiveAssets", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "removeToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "sendERC20", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "sendNative", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "bridge", - "type": "address" - } - ], - "name": "setRemoteBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "whitelistToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin b/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin deleted file mode 100644 index 453dd2d7f..000000000 --- a/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.bin +++ /dev/null @@ -1 +0,0 @@ -60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b5061290f8061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610271576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610cd7565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610d21565b3480156100fe57600080fd5b5061012861010d366004610d64565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610d99565b60405180910390f35b61015161014c366004610d64565b6102b4565b005b34801561015f57600080fd5b5061015161016e366004610df9565b610429565b34801561017f57600080fd5b5061015161018e366004610e86565b610583565b34801561019f57600080fd5b506101516101ae366004610d64565b6106ed565b3480156101bf57600080fd5b506101516101ce366004610ecf565b6107c8565b3480156101df57600080fd5b5061020e6101ee366004610d64565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610f20565b34801561022757600080fd5b50610128610236366004610d64565b6003602052600090815260409020546001600160a01b031681565b34801561025d57600080fd5b5061015161026c366004610ecf565b6108fd565b34801561027d57600080fd5b506102a761028c366004610d64565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610f4d565b600034116102d45760405162461bcd60e51b81526004016100d190610f8d565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b91610328916001600160a01b039091169034908690602401610fa3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526005549091506103a6906001600160a01b03168260005b600080610a7e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103f39086908390600401610fd3565b6000604051808303818588803b15801561040c57600080fd5b505af1158015610420573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b039182169116331461045a5760405162461bcd60e51b81526004016100d190611046565b806001600160a01b031661046c610b8a565b6001600160a01b0316146104925760405162461bcd60e51b81526004016100d1906110ae565b6000858585856040516104a490610c70565b6104b194939291906110ea565b604051809103906000f0801580156104cd573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610571908a9084908b908b908b908b9061111b565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105ce5750825b905060008267ffffffffffffffff1660011480156105eb5750303b155b9050811580156105f9575080155b15610630576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561066457845468ff00000000000000001916680100000000000000001785555b61066d876106ed565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561042057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106dc90600190611185565b60405180910390a150505050505050565b6106f5610c07565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610798919061119e565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146107f95760405162461bcd60e51b81526004016100d190611046565b806001600160a01b031661080b610b8a565b6001600160a01b0316146108315760405162461bcd60e51b81526004016100d1906110ae565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061087c5760405162461bcd60e51b81526004016100d190611215565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906108c39087908990600401610fd3565b600060405180830381600087803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166109345760405162461bcd60e51b81526004016100d190611257565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906109909033908790600401610fd3565b600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b926109fd9291169087908790602401610fa3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610a77906001600160a01b031682600061039e565b5050505050565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610ab49190611306565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610b0783611346565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610b47949392919061137e565b6020604051808303816000875af1158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042091906113de565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c02919061119e565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c6e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114dc806113fe83390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610ce781610c7d565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610ce781610ced565b60006001600160a01b038216610ce7565b610d4b81610d31565b8114610d5657600080fd5b50565b8035610ce781610d42565b600060208284031215610d7957610d79600080fd5b610d838383610d59565b9392505050565b610d9381610d31565b82525050565b60208101610ce78284610d8a565b60008083601f840112610dbc57610dbc600080fd5b50813567ffffffffffffffff811115610dd757610dd7600080fd5b602083019150836001820283011115610df257610df2600080fd5b9250929050565b600080600080600060608688031215610e1457610e14600080fd5b610e1e8787610d59565b9450602086013567ffffffffffffffff811115610e3d57610e3d600080fd5b610e4988828901610da7565b9450945050604086013567ffffffffffffffff811115610e6b57610e6b600080fd5b610e7788828901610da7565b92509250509295509295909350565b60008060408385031215610e9c57610e9c600080fd5b610ea68484610d59565b9150610eb58460208501610d59565b90509250929050565b80610d4b565b8035610ce781610ebe565b600080600060608486031215610ee757610ee7600080fd5b610ef18585610d59565b9250610f008560208601610ec4565b9150610f0f8560408601610d59565b90509250925092565b801515610d93565b60208101610ce78284610f18565b6000610ce782610d31565b6000610ce782610f2e565b610d9381610f39565b60208101610ce78284610f44565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610d1b565b60208082528101610ce781610f5b565b80610d93565b60608101610fb18286610d8a565b610fbe6020830185610f9d565b610fcb6040830184610d8a565b949350505050565b60408101610fe18285610d8a565b610d836020830184610f9d565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610cd1565b60208082528101610ce781610fee565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610cd1565b60208082528101610ce781611056565b82818337506000910152565b8183526020830192506110de8284836110be565b50601f01601f19160190565b604080825281016110fc8186886110ca565b905081810360208301526111118184866110ca565b9695505050505050565b608081016111298289610d8a565b6111366020830188610d8a565b81810360408301526111498186886110ca565b9050818103606083015261115e8184866110ca565b98975050505050505050565b600067ffffffffffffffff8216610ce7565b610d938161116a565b60208101610ce7828461117c565b8051610ce781610d42565b6000602082840312156111b3576111b3600080fd5b610d838383611193565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610cd1565b60208082528101610ce7816111bd565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610d1b565b60208082528101610ce781611225565b60005b8381101561128257818101518382015260200161126a565b50506000910152565b6000611295825190565b8084526020840193506112ac818560208601611267565b601f01601f19169290920192915050565b805160009060608401906112d18582610d8a565b50602083015184820360208601526112e9828261128b565b91505060408301516112fe6040860182610f9d565b509392505050565b60208082528101610d8381846112bd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820161136257611362611317565b5060010190565b63ffffffff8116610d93565b60ff8116610d93565b6080810161138c8287611369565b6113996020830186611369565b81810360408301526113ab818561128b565b90506113ba6060830184611375565b95945050505050565b67ffffffffffffffff8116610d4b565b8051610ce7816113c3565b6000602082840312156113f3576113f3600080fd5b610d8383836113d356fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220be3380d12a8a9c04f488bd6d863b29f9c1ea464ebf1b28b5c552d2e3f79e9fda64736f6c634300081c0033a2646970667358221220d25847c7c6f03a8709a552d0b6870c4d559040f42b2743311507e6b47eb837ea64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.json b/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.json deleted file mode 100644 index 9d3789b5e..000000000 --- a/contracts/exported/src/bridge/L2/EthereumBridge.sol/EthereumBridge.json +++ /dev/null @@ -1,253 +0,0 @@ -[ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "remoteAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "CreatedWrappedToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "messengerAddress", - "type": "address" - } - ], - "name": "configure", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "wrappedToken", - "type": "address" - } - ], - "name": "hasTokenMapping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "messenger", - "type": "address" - }, - { - "internalType": "address", - "name": "remoteBridge", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "localToRemoteToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "crossChainAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "onCreateTokenCommand", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "receiveAssets", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "remoteToLocalToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "sendERC20", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "sendNative", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "wrappedTokens", - "outputs": [ - { - "internalType": "contract WrappedERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } -] diff --git a/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin b/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin deleted file mode 100644 index a14c7a33b..000000000 --- a/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b50604051610e35380380610e3583398101604081905261002f916102dd565b8282600361003d8382610442565b50600461004a8282610442565b50505061005d338261006560201b60201c565b505050610594565b6001600160a01b03821661009857600060405163ec442f0560e01b815260040161008f9190610521565b60405180910390fd5b6100a4600083836100a8565b5050565b6001600160a01b0383166100d35780600260008282546100c89190610545565b909155506101329050565b6001600160a01b038316600090815260208190526040902054818110156101135783818360405163391434e360e21b815260040161008f9392919061055e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661014e5760028054829003905561016d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101b09190610586565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156101f8576101f86101bd565b6040525050565b600061020a60405190565b905061021682826101d3565b919050565b60006001600160401b03821115610234576102346101bd565b601f19601f83011660200192915050565b60005b83811015610260578181015183820152602001610248565b50506000910152565b600061027c6102778461021b565b6101ff565b905082815283838301111561029357610293600080fd5b6102a1836020830184610245565b9392505050565b600082601f8301126102bc576102bc600080fd5b81516102cc848260208601610269565b949350505050565b80515b92915050565b6000806000606084860312156102f5576102f5600080fd5b83516001600160401b0381111561030e5761030e600080fd5b61031a868287016102a8565b602086015190945090506001600160401b0381111561033b5761033b600080fd5b610347868287016102a8565b92505061035785604086016102d4565b90509250925092565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061038a57607f821691505b60208210810361039c5761039c610360565b50919050565b60006102d76103ae8381565b90565b6103ba836103a2565b815460001960089490940293841b1916921b91909117905550565b60006103e28184846103b1565b505050565b818110156100a4576103fa6000826103d5565b6001016103e7565b601f8211156103e2576000818152602090206020601f850104810160208510156104295750805b61043b6020601f8601048301826103e7565b5050505050565b81516001600160401b0381111561045b5761045b6101bd565b6104658254610376565b610470828285610402565b506020601f8211600181146104a5576000831561048d5750848201515b600019600885021c198116600285021785555061043b565b600084815260208120601f198516915b828110156104d557878501518255602094850194600190920191016104b5565b50848210156104f25783870151600019601f87166008021c191681555b50505050600202600101905550565b60006001600160a01b0382166102d7565b61051b81610501565b82525050565b602081016102d78284610512565b634e487b7160e01b600052601160045260246000fd5b808201808211156102d7576102d761052f565b8061051b565b6060810161056c8286610512565b6105796020830185610558565b6102cc6040830184610558565b602081016102d78284610558565b610892806105a36000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610142578063a9059cbb1461014a578063dd62ed3e1461015d57600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b0610196565b6040516100bd919061063c565b60405180910390f35b6100d96100d4366004610698565b610228565b6040516100bd91906106da565b6002545b6040516100bd91906106ee565b6100d96101053660046106fc565b610242565b60126040516100bd919061074e565b6100ea61012736600461075c565b6001600160a01b031660009081526020819052604090205490565b6100b0610266565b6100d9610158366004610698565b610275565b6100ea61016b36600461077b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101a5906107c0565b80601f01602080910402602001604051908101604052809291908181526020018280546101d1906107c0565b801561021e5780601f106101f35761010080835404028352916020019161021e565b820191906000526020600020905b81548152906001019060200180831161020157829003601f168201915b5050505050905090565b600033610236818585610283565b60019150505b92915050565b600033610250858285610295565b61025b858585610322565b506001949350505050565b6060600480546101a5906107c0565b600033610236818585610322565b61029083838360016103b3565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461031c578181101561030d578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610304939291906107f5565b60405180910390fd5b61031c848484840360006103b3565b50505050565b6001600160a01b0383166103655760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b0382166103a85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6102908383836104b8565b6001600160a01b0384166103f65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b0383166104395760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103049190610825565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561031c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104aa91906106ee565b60405180910390a350505050565b6001600160a01b0383166104e35780600260008282546104d89190610849565b9091555061055b9050565b6001600160a01b0383166000908152602081905260409020548181101561053c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610304939291906107f5565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661057757600280548290039055610596565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105d991906106ee565b60405180910390a3505050565b60005b838110156106015781810151838201526020016105e9565b50506000910152565b6000610614825190565b80845260208401935061062b8185602086016105e6565b601f01601f19169290920192915050565b6020808252810161064d818461060a565b9392505050565b60006001600160a01b03821661023c565b61066e81610654565b811461067957600080fd5b50565b803561023c81610665565b8061066e565b803561023c81610687565b600080604083850312156106ae576106ae600080fd5b6106b8848461067c565b91506106c7846020850161068d565b90509250929050565b8015155b82525050565b6020810161023c82846106d0565b806106d4565b6020810161023c82846106e8565b60008060006060848603121561071457610714600080fd5b61071e858561067c565b925061072d856020860161067c565b915061073c856040860161068d565b90509250925092565b60ff81166106d4565b6020810161023c8284610745565b60006020828403121561077157610771600080fd5b61064d838361067c565b6000806040838503121561079157610791600080fd5b61079b848461067c565b91506106c7846020850161067c565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107d457607f821691505b6020821081036107e6576107e66107aa565b50919050565b6106d481610654565b6060810161080382866107ec565b61081060208301856106e8565b61081d60408301846106e8565b949350505050565b6020810161023c82846107ec565b634e487b7160e01b600052601160045260246000fd5b8082018082111561023c5761023c61083356fea2646970667358221220fe5b081ab8295c13082e93f4d009a2615ec46fcb0f111b183ee53af0eaa9513f64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.json b/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.json deleted file mode 100644 index 596be8725..000000000 --- a/contracts/exported/src/common/ConstantSupplyERC20.sol/ConstantSupplyERC20.json +++ /dev/null @@ -1,331 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "initialSupply", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin b/contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin deleted file mode 100644 index 500164a5a..000000000 --- a/contracts/exported/src/common/ObsERC20.sol/ObsERC20.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b50604051610dc8380380610dc883398101604081905261005591610191565b8181600361006383826102ef565b50600461007082826102ef565b50505050506103ae565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156100b5576100b561007a565b6040525050565b60006100c760405190565b90506100d38282610090565b919050565b60006001600160401b038211156100f1576100f161007a565b601f19601f83011660200192915050565b60005b8381101561011d578181015183820152602001610105565b50506000910152565b6000610139610134846100d8565b6100bc565b905082815283838301111561015057610150600080fd5b61015e836020830184610102565b9392505050565b600082601f83011261017957610179600080fd5b8151610189848260208601610126565b949350505050565b600080604083850312156101a7576101a7600080fd5b82516001600160401b038111156101c0576101c0600080fd5b6101cc85828601610165565b602085015190935090506001600160401b038111156101ed576101ed600080fd5b6101f985828601610165565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061022d57607f821691505b60208210810361023f5761023f610203565b50919050565b60006102546102518381565b90565b92915050565b61026383610245565b815460001960089490940293841b1916921b91909117905550565b600061028b81848461025a565b505050565b818110156102ab576102a360008261027e565b600101610290565b5050565b601f82111561028b576000818152602090206020601f850104810160208510156102d65750805b6102e86020601f860104830182610290565b5050505050565b81516001600160401b038111156103085761030861007a565b6103128254610219565b61031d8282856102af565b506020601f821160018114610352576000831561033a5750848201515b600019600885021c19811660028502178555506102e8565b600084815260208120601f198516915b828110156103825787850151825560209485019460019092019101610362565b508482101561039f5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a0b806103bd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107b7565b6002545b6040516100bd91906107cb565b6100d96101053660046107d9565b610206565b60126040516100bd919061082b565b6100ea610127366004610839565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea610155366004610858565b6102c6565b6060600380546101699061089d565b80601f01602080910402602001604051908101604052809291908181526020018280546101959061089d565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108c9565b60405180910390fd5b6060600480546101699061089d565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a090610904565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107cb565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109c2565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107cb565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b6107958484610759565b91506107a4846020850161076a565b90509250929050565b8015155b82525050565b6020810161020082846107ad565b806107b1565b6020810161020082846107c5565b6000806000606084860312156107f1576107f1600080fd5b6107fb8585610759565b925061080a8560208601610759565b9150610819856040860161076a565b90509250925092565b60ff81166107b1565b602081016102008284610822565b60006020828403121561084e5761084e600080fd5b61072a8383610759565b6000806040838503121561086e5761086e600080fd5b6108788484610759565b91506107a48460208501610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108b157607f821691505b6020821081036108c3576108c3610887565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b181610731565b6060810161097c8286610965565b61098960208301856107c5565b61099660408301846107c5565b949350505050565b602081016102008284610965565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109ac56fea264697066735822122034cd0cdf26fe824a96259f36e04d997508d65683b4f463a133617b1a6371975464736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/common/ObsERC20.sol/ObsERC20.json b/contracts/exported/src/common/ObsERC20.sol/ObsERC20.json deleted file mode 100644 index fad232617..000000000 --- a/contracts/exported/src/common/ObsERC20.sol/ObsERC20.json +++ /dev/null @@ -1,326 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin b/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin deleted file mode 100644 index 6bd11b2f3..000000000 --- a/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220be3380d12a8a9c04f488bd6d863b29f9c1ea464ebf1b28b5c552d2e3f79e9fda64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.json b/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.json deleted file mode 100644 index d2bee51ce..000000000 --- a/contracts/exported/src/common/WrappedERC20.sol/WrappedERC20.json +++ /dev/null @@ -1,600 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AccessControlBadConfirmation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "name": "AccessControlUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "giver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "issueFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/lib/ContractTransparencyConfig.sol/ContractTransparencyConfig.json b/contracts/exported/src/lib/ContractTransparencyConfig.sol/ContractTransparencyConfig.json deleted file mode 100644 index 809fecebd..000000000 --- a/contracts/exported/src/lib/ContractTransparencyConfig.sol/ContractTransparencyConfig.json +++ /dev/null @@ -1,39 +0,0 @@ -[ - { - "inputs": [], - "name": "visibilityRules", - "outputs": [ - { - "components": [ - { - "internalType": "enum ContractTransparencyConfig.ContractCfg", - "name": "contractCfg", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "eventSignature", - "type": "bytes32" - }, - { - "internalType": "enum ContractTransparencyConfig.Field[]", - "name": "visibleTo", - "type": "uint8[]" - } - ], - "internalType": "struct ContractTransparencyConfig.EventLogConfig[]", - "name": "eventLogConfigs", - "type": "tuple[]" - } - ], - "internalType": "struct ContractTransparencyConfig.VisibilityConfig", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "pure", - "type": "function" - } -] diff --git a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin deleted file mode 100644 index 1b3649e5d..000000000 --- a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b614ddb8061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638129fc1c11610104578063a25eb31c116100a2578063db5d91b111610071578063db5d91b114610475578063e34fbfc8146104a1578063e874eb20146104b3578063f2fde38b146104c657600080fd5b8063a25eb31c1461042c578063a4ab2faa1461043f578063a52f433c14610452578063d4fab8871461046257600080fd5b806387059edb116100de57806387059edb146103a95780638da5cb5b146103bc57806398077e86146103ec578063a1a227fa1461040c57600080fd5b80638129fc1c1461035d5780638236a7ba14610365578063841548261461038657600080fd5b8063476657381161017c5780636a30d26c1161014b5780636a30d26c146103255780636b9707d61461033a578063715018a61461034d578063728109961461035557600080fd5b806347665738146102cb5780635371a216146102de578063568699c8146102f157806368e103831461031257600080fd5b80632f0cb9e3116101b85780632f0cb9e3146102255780633e60a22f1461025557806343348b2f14610296578063440c953b146102c257600080fd5b80620ddd27146101de57806303e72e48146101fd578063073b6ef314610212575b600080fd5b6101e7600e5481565b6040516101f491906119de565b60405180910390f35b61021061020b366004611b14565b6104d9565b005b610210610220366004611c89565b6105e1565b610248610233366004611d57565b600c6020526000908152604090205460ff1681565b6040516101f49190611d7e565b610289610263366004611d8c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101f49190611dd8565b6102486102a4366004611de6565b6001600160a01b031660009081526020819052604090205460ff1690565b6101e760055481565b6102106102d9366004611de6565b6107d8565b6102106102ec366004611e6b565b610878565b6103046102ff366004611d57565b610a1d565b6040516101f4929190611f6d565b610210610320366004611f8d565b610a73565b61032d610b17565b6040516101f49190612090565b610210610348366004611de6565b610bf0565b610210610c80565b610210610c94565b610210610d19565b610378610373366004611d57565b610ef4565b6040516101f49291906120a1565b610248610394366004611d57565b600d6020526000908152604090205460ff1681565b6103786103b7366004611d57565b610fdc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610289565b6103ff6103fa366004611d57565b611053565b6040516101f491906120af565b600a5461041f906001600160a01b031681565b6040516101f49190612102565b61021061043a36600461213a565b6110ff565b61024861044d3660046121ac565b611207565b600454610100900460ff16610248565b6102106104703660046121fa565b611285565b610248610483366004611de6565b6001600160a01b031660009081526001602052604090205460ff1690565b6102106104af3660046122a1565b5050565b600b5461041f906001600160a01b031681565b6102106104d4366004611de6565b611361565b6104e16113b8565b60006001600160a01b03166003836040516104fc919061230b565b908152604051908190036020019020546001600160a01b03160361055857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161055683826123e7565b505b80600383604051610569919061230b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906105d590849084906124a7565b60405180910390a15050565b60008281526008602052604090205481146106175760405162461bcd60e51b815260040161060e906124f9565b60405180910390fd5b6000610685898989896040516020016106339493929190612561565b6040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166106c05760405162461bcd60e51b815260040161060e906125d7565b600e8990556000805b87518110156107b357600b5488516001600160a01b039091169063b6aed0cb908a90849081106106fb576106fb6125e7565b602002602001015161070c90612607565b426040518363ffffffff1660e01b815260040161072a92919061263d565b600060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050508188828151811061076f5761076f6125e7565b602002602001015161078090612607565b60405160200161079192919061263d565b60408051601f19818403018152919052805160209091012091506001016106c9565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6107e06113b8565b6001600160a01b03811660009081526020819052604090205460ff166108185760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061086d908390611dd8565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906108c7908790879087908790600401612773565b60006040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b5050505060008460405160200161090a91906127ac565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff16156109525760405162461bcd60e51b815260040161060e906127ec565b6001600c60008760405160200161096991906127ac565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad21916109c291908901908901611de6565b87604001356040518363ffffffff1660e01b81526004016109e49291906127fc565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610a4785610fdc565b9150915081610a5c5760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610a965760405162461bcd60e51b815260040161060e90612864565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610b08908790611dd8565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610be7578382906000526020600020018054610b5a9061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b869061232b565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081526020019060010190610b3b565b50505050905090565b610bf86113b8565b6001600160a01b03811660009081526001602052604090205460ff16610c305760405162461bcd60e51b815260040161060e906128a6565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479061086d908390611dd8565b610c886113b8565b610c926000611458565b565b610c9c6113b8565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610ce5903390600401611dd8565b600060405180830381600087803b158015610cff57600080fd5b505af1158015610d13573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d645750825b905060008267ffffffffffffffff166001148015610d815750303b155b905081158015610d8f575080155b15610dc6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610dfa57845468ff00000000000000001916680100000000000000001785555b610e03336114d6565b60006005556001600955604051610e19906119c9565b604051809103906000f080158015610e35573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610e9e91611dd8565b60405180910390a18315610eed57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b08906001906128d1565b5050505050565b604080516060808201835260008083526020808401839052838501829052858252600681528482208551938401909552845483526001850180549295869493909284019190610f429061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e9061232b565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361104057505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61104981610ef4565b9250925050915091565b6002818154811061106357600080fd5b90600052602060002001600091509050805461107e9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546110aa9061232b565b80156110f75780601f106110cc576101008083540402835291602001916110f7565b820191906000526020600020905b8154815290600101906020018083116110da57829003601f168201915b505050505081565b600061114d833561111360208601866128df565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166111885760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b03811660009081526001602052604090205460ff166111c05760405162461bcd60e51b815260040161060e906128a6565b6111c9836114e7565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906111fa908535906119de565b60405180910390a1505050565b600080805b835181101561126c5781848281518110611228576112286125e7565b602002602001015161123990612607565b60405160200161124a92919061263d565b60408051601f198184030181529190528051602090910120915060010161120c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806112be5760405162461bcd60e51b815260040161060e9061298c565b81156113365760006112f28787866040516020016112de939291906129c4565b60405160208183030381529060405261158b565b90506000611300828761142c565b9050876001600160a01b0316816001600160a01b0316146113335760405162461bcd60e51b815260040161060e90612a40565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6113696113b8565b6001600160a01b0381166113ac5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b6113b581611458565b50565b336113ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c9257336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b60008060008061143c86866115c6565b92509250925061144c8282611613565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6114de611715565b6113b58161177c565b8035600090815260066020526040902081906115038282612bb3565b50506009546000908152600760205260409020813590819055611527600143612bd3565b4060405160200161153992919061263d565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549161156f83612be6565b9190505550600554816040013511156113b55760400135600555565b60006115978251611784565b826040516020016115a9929190612bff565b604051602081830303815290604052805190602001209050919050565b600080600083516041036116005760208401516040850151606086015160001a6115f288828585611825565b95509550955050505061160c565b50508151600091506002905b9250925092565b600082600381111561162757611627612c3b565b03611630575050565b600182600381111561164457611644612c3b565b0361167b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561168f5761168f612c3b565b036116c8576040517ffce698f700000000000000000000000000000000000000000000000000000000815261060e9082906004016119de565b60038260038111156116dc576116dc612c3b565b036104af57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161060e91906119de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c92576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611369611715565b60606000611791836118e7565b600101905060008167ffffffffffffffff8111156117b1576117b16119ec565b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117e5575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186057506000915060039050826118dd565b6000600188888888604051600081526020016040526040516118859493929190612c5a565b6020604051602081039080840390855afa1580156118a7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d3575060009250600191508290506118dd565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061195c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061197a57662386f26fc10000830492506010015b6305f5e1008310611992576305f5e100830492506008015b61271083106119a657612710830492506004015b606483106119b8576064830492506002015b600a83106114525760010192915050565b61211680612c9083390190565b805b82525050565b6020810161145282846119d6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611a2857611a286119ec565b6040525050565b6000611a3a60405190565b9050611a468282611a02565b919050565b600067ffffffffffffffff821115611a6557611a656119ec565b601f19601f83011660200192915050565b82818337506000910152565b6000611a95611a9084611a4b565b611a2f565b9050828152838383011115611aac57611aac600080fd5b611aba836020830184611a76565b9392505050565b600082601f830112611ad557611ad5600080fd5b611aba83833560208501611a82565b60006001600160a01b038216611452565b611afe81611ae4565b81146113b557600080fd5b803561145281611af5565b60008060408385031215611b2a57611b2a600080fd5b823567ffffffffffffffff811115611b4457611b44600080fd5b611b5085828601611ac1565b925050611b608460208501611b09565b90509250929050565b80611afe565b803561145281611b69565b600067ffffffffffffffff821115611b9457611b946119ec565b5060209081020190565b6000611bac611a9084611b7a565b83815290506020808201908402830185811115611bcb57611bcb600080fd5b835b81811015611c0a57803567ffffffffffffffff811115611bef57611bef600080fd5b611bfb88828801611ac1565b84525060209283019201611bcd565b5050509392505050565b600082601f830112611c2857611c28600080fd5b611aba83833560208501611b9e565b60008083601f840112611c4c57611c4c600080fd5b50813567ffffffffffffffff811115611c6757611c67600080fd5b602083019150836001820283011115611c8257611c82600080fd5b9250929050565b60008060008060008060008060e0898b031215611ca857611ca8600080fd5b611cb28a8a611b6f565b9750611cc18a60208b01611b6f565b9650611cd08a60408b01611b6f565b9550606089013567ffffffffffffffff811115611cef57611cef600080fd5b611cfb8b828c01611c14565b955050608089013567ffffffffffffffff811115611d1b57611d1b600080fd5b611d278b828c01611c37565b9450945050611d398a60a08b01611b6f565b9150611d488a60c08b01611b6f565b90509295985092959890939650565b600060208284031215611d6c57611d6c600080fd5b611aba8383611b6f565b8015156119d8565b602081016114528284611d76565b600060208284031215611da157611da1600080fd5b813567ffffffffffffffff811115611dbb57611dbb600080fd5b611dc784828501611ac1565b949350505050565b6119d881611ae4565b602081016114528284611dcf565b600060208284031215611dfb57611dfb600080fd5b611aba8383611b09565b600060808284031215611e1a57611e1a600080fd5b50919050565b60008083601f840112611e3557611e35600080fd5b50813567ffffffffffffffff811115611e5057611e50600080fd5b602083019150836020820283011115611c8257611c82600080fd5b60008060008060c08587031215611e8457611e84600080fd5b611e8e8686611e05565b9350608085013567ffffffffffffffff811115611ead57611ead600080fd5b611eb987828801611e20565b9350935050611ecb8660a08701611b6f565b905092959194509250565b60005b83811015611ef1578181015183820152602001611ed9565b50506000910152565b6000611f04825190565b808452602084019350611f1b818560208601611ed6565b601f01601f19169290920192915050565b80516000906060840190611f4085826119d6565b5060208301518482036020860152611f588282611efa565b915050604083015161181d60408601826119d6565b60408101611f7b82856119d6565b8181036020830152611dc78184611f2c565b600080600080600060608688031215611fa857611fa8600080fd5b611fb28787611b09565b9450602086013567ffffffffffffffff811115611fd157611fd1600080fd5b611fdd88828901611c37565b9450945050604086013567ffffffffffffffff811115611fff57611fff600080fd5b61200b88828901611c37565b92509250509295509295909350565b6000611aba8383611efa565b60200190565b6000612036825190565b808452602084019350836020820285016120508560200190565b60005b84811015612084578383038852815161206c848261201a565b93505060208201602098909801979150600101612053565b50909695505050505050565b60208082528101611aba818461202c565b60408101611f7b8285611d76565b60208082528101611aba8184611efa565b60006114526001600160a01b0383166120d7565b90565b6001600160a01b031690565b6000611452826120c0565b6000611452826120e3565b6119d8816120ee565b6020810161145282846120f9565b600060608284031215611e1a57611e1a600080fd5b600060208284031215611e1a57611e1a600080fd5b6000806040838503121561215057612150600080fd5b823567ffffffffffffffff81111561216a5761216a600080fd5b61217685828601612110565b925050602083013567ffffffffffffffff81111561219657612196600080fd5b6121a285828601612125565b9150509250929050565b6000602082840312156121c1576121c1600080fd5b813567ffffffffffffffff8111156121db576121db600080fd5b611dc784828501611c14565b801515611afe565b8035611452816121e7565b600080600080600060a0868803121561221557612215600080fd5b61221f8787611b09565b945061222e8760208801611b09565b9350604086013567ffffffffffffffff81111561224d5761224d600080fd5b61225988828901611ac1565b935050606086013567ffffffffffffffff81111561227957612279600080fd5b61228588828901611ac1565b92505061229587608088016121ef565b90509295509295909350565b600080602083850312156122b7576122b7600080fd5b823567ffffffffffffffff8111156122d1576122d1600080fd5b6122dd85828601611c37565b92509250509250929050565b60006122f3825190565b612301818560208601611ed6565b9290920192915050565b61145281836122e9565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061233f57607f821691505b602082108103611e1a57611e1a612315565b60006114526120d48381565b61236683612351565b815460001960089490940293841b1916921b91909117905550565b600061238e81848461235d565b505050565b818110156104af576123a6600082612381565b600101612393565b601f82111561238e576000818152602090206020601f850104810160208510156123d55750805b610eed6020601f860104830182612393565b815167ffffffffffffffff811115612401576124016119ec565b61240b825461232b565b6124168282856123ae565b506020601f82116001811461244b57600083156124335750848201515b600019600885021c1981166002850217855550610eed565b600084815260208120601f198516915b8281101561247b578785015182556020948501946001909201910161245b565b50848210156124985783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016124b88185611efa565b9050611aba6020830184611dcf565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612026565b60208082528101611452816124c7565b6000612513825190565b8084526020840193508360208202850161252d8560200190565b60005b848110156120845783830388528151612549848261201a565b93505060208201602098909801979150600101612530565b6080810161256f82876119d6565b61257c60208301866119d6565b61258960408301856119d6565b818103606083015261259b8184612509565b9695505050505050565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612026565b60208082528101611452816125a5565b634e487b7160e01b600052603260045260246000fd5b6000611452825190565b6000612611825190565b6020830161261e816125fd565b9250506020811015611e1a576000196020919091036008021b16919050565b6040810161264b82856119d6565b611aba60208301846119d6565b5060006114526020830183611b09565b5060006114526020830183611b6f565b67ffffffffffffffff8116611afe565b803561145281612678565b5060006114526020830183612688565b67ffffffffffffffff81166119d8565b6126bd8180612658565b6126c78382611dcf565b506126d56020820182612658565b6126e26020840182611dcf565b506126f06040820182612668565b6126fd60408401826119d6565b5061270b6060820182612693565b61238e60608401826126a3565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561275c5761275c600080fd5b60208302925061276d838584612718565b50500190565b60c0810161278182876126b3565b8181036080830152612794818587612721565b90506127a360a08301846119d6565b95945050505050565b6080810161145282846126b3565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612026565b60208082528101611452816127ba565b6040810161264b8285611dcf565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016114528161280a565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612026565b6020808252810161145281612874565b600067ffffffffffffffff8216611452565b6119d8816128b6565b6020810161145282846128c8565b6000808335601e19368590030181126128fa576128fa600080fd5b8301915050803567ffffffffffffffff81111561291957612919600080fd5b602082019150600181023603821315611c8257611c82600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061285e565b6020808252810161145281612934565b60006114528260601b90565b60006114528261299c565b6119d86129bf82611ae4565b6129a8565b6129ce81856129b3565b6014016129db81846129b3565b601401611dc781836122e9565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061285e565b60208082528101611452816129e8565b6000813561145281611b69565b600081611452565b612a6e82612a5d565b612a7a6120d482612a5d565b8255505050565b8267ffffffffffffffff811115612a9a57612a9a6119ec565b612aa4825461232b565b612aaf8282856123ae565b506000601f821160018114612ae45760008315612acc5750848201355b600019600885021c1981166002850217855550612b3e565b600084815260209020601f19841690835b82811015612b155787850135825560209485019460019092019101612af5565b5084821015612b32576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b61238e838383612a81565b612b5a82612351565b80612a7a565b8180612b6b81612a50565b9050612b778184612a65565b5050612b8660208301836128df565b612b94818360018601612b46565b50506040820180612ba482612a50565b9050610d138160028501612b51565b6104af8282612b60565b634e487b7160e01b600052601160045260246000fd5b8181038181111561145257611452612bbd565b600060018201612bf857612bf8612bbd565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612c2f81846122e9565b9050611aba81836122e9565b634e487b7160e01b600052602160045260246000fd5b60ff81166119d8565b60808101612c6882876119d6565b612c756020830186612c51565b612c8260408301856119d6565b6127a360608301846119d656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611fbd806101596000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610eb2565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f01565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f2c565b61039e565b6040516101ae9190610f67565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f8d565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f2c565b610443565b6040516101ae9190610fb4565b61015e610212366004610fd6565b610495565b34801561022357600080fd5b5061015e61023236600461100e565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae919061102d565b34801561029d57600080fd5b5061015e6102ac36600461103b565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fd6565b610727565b3480156102dd57600080fd5b506102f16102ec366004611104565b6107a7565b6040516101ae9190611191565b34801561030a57600080fd5b5061015e6103193660046111ff565b610800565b34801561032a57600080fd5b5061015e61033936600461126a565b610901565b34801561034a57600080fd5b5061015e61035936600461100e565b610947565b34801561036a57600080fd5b5061015e61037936600461128a565b610a89565b34801561038a57600080fd5b5061015e61039936600461100e565b610bcc565b600080826040516020016103b291906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b8152600401610178906114f5565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611537565b600090815260036020526040812055565b6000808260405160200161045791906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b81526004016101789061159f565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115af565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b8152600401610178906115fc565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611622565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611677565b60006106418342611687565b905060008460405160200161065691906114a6565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b8152600401610178906116f2565b6000818152602081815260408220849055600191906106bb9088018861100e565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611702565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b6c565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b8152600401610178906115fc565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b76565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c31565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c7d565b60008460405160200161086e9190611d02565b604051602081830303815290604052805190602001206040516020016108949190611d42565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d61565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611dcb565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e33565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e57565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c31565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c7d565b6000610af3602086018661100e565b610b036040870160208801611e65565b610b136060880160408901611702565b610b236080890160608a01611702565b610b3060808a018a611885565b610b4060c08c0160a08d01611e84565b604051602001610b569796959493929190611b76565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ed5565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d61565b610a815760405162461bcd60e51b815260040161017890611f3d565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610de9565b610c2081610e50565b600081815b84811015610de057610dd682878784818110610dca57610dca611f71565b90506020020135610e58565b9150600101610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610de9565b6000818310610e74576000828152602084905260409020610e83565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e86565b610ea681610e8c565b82525050565b80610ea6565b60408101610ec08285610e9d565b6103f66020830184610eac565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e8681610ecd565b600060c08284031215610f2657610f26600080fd5b50919050565b600060208284031215610f4157610f41600080fd5b813567ffffffffffffffff811115610f5b57610f5b600080fd5b61048d84828501610f11565b60208101610e868284610eac565b805b8114610c2057600080fd5b8035610e8681610f75565b600060208284031215610fa257610fa2600080fd5b610e838383610f82565b801515610ea6565b60208101610e868284610fac565b610f7781610e8c565b8035610e8681610fc2565b60008060408385031215610fec57610fec600080fd5b610ff68484610fcb565b91506110058460208501610f82565b90509250929050565b60006020828403121561102357611023600080fd5b610e838383610fcb565b60208101610e868284610e9d565b6000806040838503121561105157611051600080fd5b823567ffffffffffffffff81111561106b5761106b600080fd5b61107785828601610f11565b9250506110058460208501610f82565b63ffffffff8116610f77565b8035610e8681611087565b60008083601f8401126110b3576110b3600080fd5b50813567ffffffffffffffff8111156110ce576110ce600080fd5b6020830191508360018202830111156110e9576110e9600080fd5b9250929050565b60ff8116610f77565b8035610e86816110f0565b60008060008060006080868803121561111f5761111f600080fd5b6111298787611093565b94506111388760208801611093565b9350604086013567ffffffffffffffff81111561115757611157600080fd5b6111638882890161109e565b935093505061117587606088016110f9565b90509295509295909350565b67ffffffffffffffff8116610ea6565b60208101610e868284611181565b600060808284031215610f2657610f26600080fd5b60008083601f8401126111c9576111c9600080fd5b50813567ffffffffffffffff8111156111e4576111e4600080fd5b6020830191508360208202830111156110e9576110e9600080fd5b60008060008060c0858703121561121857611218600080fd5b611222868661119f565b9350608085013567ffffffffffffffff81111561124157611241600080fd5b61124d878288016111b4565b935093505061125f8660a08701610f82565b905092959194509250565b6000806040838503121561128057611280600080fd5b610ff68484610f82565b600080600080606085870312156112a3576112a3600080fd5b843567ffffffffffffffff8111156112bd576112bd600080fd5b6112c987828801610f11565b945050602085013567ffffffffffffffff8111156112e9576112e9600080fd5b6112f5878288016111b4565b935093505061125f8660408701610f82565b506000610e866020830183610fcb565b67ffffffffffffffff8116610f77565b8035610e8681611317565b506000610e866020830183611327565b506000610e866020830183611093565b63ffffffff8116610ea6565b6000808335601e193685900301811261137957611379600080fd5b830160208101925035905067ffffffffffffffff81111561139c5761139c600080fd5b368190038213156110e9576110e9600080fd5b82818337506000910152565b8183526020830192506113cf8284836113af565b50601f01601f19160190565b506000610e8660208301836110f9565b60ff8116610ea6565b600060c083016114048380611307565b61140e8582610e9d565b5061141c6020840184611332565b6114296020860182611181565b506114376040840184611342565b6114446040860182611352565b506114526060840184611342565b61145f6060860182611352565b5061146d608084018461135e565b85830360808701526114808382846113bb565b9250505061149160a08401846113db565b61149e60a08601826113eb565b509392505050565b60208082528101610e8381846113f4565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e86816114b7565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610efb565b60208082528101610e8681611505565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611547565b604081016115bd8285610eac565b6103f66020830184611181565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610efb565b60208082528101610e86816115ca565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e8657610e8661160c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610efb565b60208082528101610e8681611645565b80820180821115610e8657610e8661160c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e868161169a565b60006020828403121561171757611717600080fd5b610e838383611093565b60008135610e8681610fc2565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e866001600160a01b038316611763565b90565b6001600160a01b031690565b6000610e868261174c565b6000610e868261176f565b61178e8261177a565b61179981835461172e565b8255505050565b60008135610e8681611317565b60007bffffffffffffffff000000000000000000000000000000000000000061173a8460a01b90565b6000610e8667ffffffffffffffff83165b67ffffffffffffffff1690565b6117fd826117d6565b6117998183546117ad565b60008135610e8681611087565b60007fffffffff0000000000000000000000000000000000000000000000000000000061173a8460e01b90565b600063ffffffff8216610e86565b61185982611842565b611799818354611815565b600063ffffffff8361173a565b61187a82611842565b611799818354611864565b6000808335601e19368590030181126118a0576118a0600080fd5b8301915050803567ffffffffffffffff8111156118bf576118bf600080fd5b6020820191506001810236038213156110e9576110e9600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061191a57607f821691505b602082108103610f2657610f266118f0565b6000610e866117608381565b6119418361192c565b815460001960089490940293841b1916921b91909117905550565b60006107a2818484611938565b8181101561059a5761197c60008261195c565b600101611969565b601f8211156107a2576000818152602090206020601f850104810160208510156119ab5750805b6108fa6020601f860104830182611969565b8267ffffffffffffffff8111156119d6576119d66118da565b6119e08254611906565b6119eb828285611984565b506000601f821160018114611a205760008315611a085750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a515787850135825560209485019460019092019101611a31565b5084821015611a6e576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6107a28383836119bd565b60008135610e86816110f0565b600060ff8216610e86565b611aaa82611a96565b815460ff191660ff821617611799565b808280611ac681611721565b9050611ad28184611785565b50506020830180611ae2826117a0565b9050611aee81846117f4565b50506040830180611afe82611808565b9050611b0a8184611850565b5050506060820180611b1b82611808565b9050611b2a8160018501611871565b5050611b396080830183611885565b611b47818360028601611a7e565b505060a0820180611b5782611a89565b9050611b668160038501611aa1565b50505050565b61059a8282611aba565b60c08101611b84828a610e9d565b611b916020830189611181565b611b9e6040830188611352565b611bab6060830187611352565b8181036080830152611bbe8185876113bb565b9050611bcd60a08301846113eb565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611bd9565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506114ef565b60208082528101610e8681611c41565b506000610e866020830183610f82565b611ca78180611307565b611cb18382610e9d565b50611cbf6020820182611307565b611ccc6020840182610e9d565b50611cda6040820182611c8d565b611ce76040840182610eac565b50611cf56060820182611332565b6107a26060840182611181565b60808101610e868284611c9d565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611d10565b9050610e866020830184610eac565b611d6b8183610eac565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506114ef565b60208082528101610e8681611d73565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ddb565b6000610e86826117e7565b610ea681611e43565b60208101610e868284611e4e565b600060208284031215611e7a57611e7a600080fd5b610e838383611327565b600060208284031215611e9957611e99600080fd5b610e8383836110f9565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611ea3565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ee5565b67ffffffffffffffff918216919081169082820190811115610e8657610e8661160c565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205e8a2a9bc33c3a988cb2b5342dbf402d725b529ed253b9949551653847bb8a0764736f6c634300081c0033a264697066735822122072a39f97044b9862ab3c9bc3242d88725f800009f8e486e429ccbf92b16e119c64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.json b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.json deleted file mode 100644 index ec53ed9ee..000000000 --- a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.json +++ /dev/null @@ -1,825 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "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" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "ImportantContractAddressUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "messageBusAddress", - "type": "address" - } - ], - "name": "LogManagementContractCreated", - "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": false, - "internalType": "bytes32", - "name": "rollupHash", - "type": "bytes32" - } - ], - "name": "RollupAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "enclaveID", - "type": "address" - } - ], - "name": "SequencerEnclaveGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "enclaveID", - "type": "address" - } - ], - "name": "SequencerEnclaveRevoked", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "Hash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "Signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "LastSequenceNumber", - "type": "uint256" - } - ], - "internalType": "struct Structs.MetaRollup", - "name": "r", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage[]", - "name": "messages", - "type": "tuple[]" - } - ], - "internalType": "struct Structs.HeaderCrossChainData", - "name": "", - "type": "tuple" - } - ], - "name": "AddRollup", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "name": "Attested", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "internalType": "struct Structs.ValueTransferMessage", - "name": "_msg", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "ExtractNativeValue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "GetImportantContractKeys", - "outputs": [ - { - "internalType": "string[]", - "name": "", - "type": "string[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "rollupHash", - "type": "bytes32" - } - ], - "name": "GetRollupByHash", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "Hash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "Signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "LastSequenceNumber", - "type": "uint256" - } - ], - "internalType": "struct Structs.MetaRollup", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "name": "GetRollupByNumber", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "Hash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "Signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "LastSequenceNumber", - "type": "uint256" - } - ], - "internalType": "struct Structs.MetaRollup", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "name": "GetUniqueForkID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "Hash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "Signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "LastSequenceNumber", - "type": "uint256" - } - ], - "internalType": "struct Structs.MetaRollup", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "name": "GrantSequencerEnclave", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_enclaveID", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initSecret", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_genesisAttestation", - "type": "string" - } - ], - "name": "InitializeNetworkSecret", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "name": "IsSequencerEnclave", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "IsWithdrawalAvailable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "requestReport", - "type": "string" - } - ], - "name": "RequestNetworkSecret", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "attesterID", - "type": "address" - }, - { - "internalType": "address", - "name": "requesterID", - "type": "address" - }, - { - "internalType": "bytes", - "name": "attesterSig", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "responseSecret", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "verifyAttester", - "type": "bool" - } - ], - "name": "RespondNetworkSecret", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RetrieveAllBridgeFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "name": "RevokeSequencerEnclave", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "SetImportantContractAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_lastBatchHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "blockNum", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "crossChainHashes", - "type": "bytes[]" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "rollupNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "forkID", - "type": "bytes32" - } - ], - "name": "addCrossChainMessagesRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "name": "importantContractAddresses", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "importantContractKeys", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "crossChainHashes", - "type": "bytes[]" - } - ], - "name": "isBundleAvailable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "isBundleSaved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "isWithdrawalSpent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastBatchHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastBatchSeqNo", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "merkleMessageBus", - "outputs": [ - { - "internalType": "contract IMerkleTreeMessageBus", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "messageBus", - "outputs": [ - { - "internalType": "contract IMessageBus", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/messaging/IMerkleTreeMessageBus.sol/IMerkleTreeMessageBus.json b/contracts/exported/src/messaging/IMerkleTreeMessageBus.sol/IMerkleTreeMessageBus.json deleted file mode 100644 index 2d376b075..000000000 --- a/contracts/exported/src/messaging/IMerkleTreeMessageBus.sol/IMerkleTreeMessageBus.json +++ /dev/null @@ -1,133 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "activationTime", - "type": "uint256" - } - ], - "name": "addStateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - } - ], - "name": "disableStateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "message", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyMessageInclusion", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "internalType": "struct Structs.ValueTransferMessage", - "name": "message", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyValueTransferInclusion", - "outputs": [], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/src/messaging/IMessageBus.sol/IMessageBus.json b/contracts/exported/src/messaging/IMessageBus.sol/IMessageBus.json deleted file mode 100644 index 9053d4d19..000000000 --- a/contracts/exported/src/messaging/IMessageBus.sol/IMessageBus.json +++ /dev/null @@ -1,311 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "name": "LogMessagePublished", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "name": "ValueTransfer", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - } - ], - "name": "getMessageTimeOfFinality", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "name": "publishMessage", - "outputs": [ - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "receiveValueFromL2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "retrieveAllFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sendValueToL2", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "finalAfterTimestamp", - "type": "uint256" - } - ], - "name": "storeCrossChainMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - } - ], - "name": "verifyMessageFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/src/messaging/IValueBus.sol/IValueBus.json b/contracts/exported/src/messaging/IValueBus.sol/IValueBus.json deleted file mode 100644 index 9053654bc..000000000 --- a/contracts/exported/src/messaging/IValueBus.sol/IValueBus.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "inputs": [], - "name": "retrieveValue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sendValue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin b/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin deleted file mode 100644 index b39f2f4d5..000000000 --- a/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611fbd806101596000396000f3fe6080604052600436106100ec5760003560e01c80639730886d1161008a578063b6aed0cb11610059578063b6aed0cb1461031e578063c4d66de81461033e578063e138a8d21461035e578063f2fde38b1461037e57610160565b80639730886d1461029157806399a3ad21146102b1578063b1454caa146102d1578063b201246f146102fe57610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063715018a6146102375780638da5cb5b1461024c57610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401610eb2565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890610f01565b60405180910390fd5b34801561018d57600080fd5b506101a161019c366004610f2c565b61039e565b6040516101ae9190610f67565b60405180910390f35b3480156101c357600080fd5b5061015e6101d2366004610f8d565b6103fd565b3480156101e357600080fd5b506101f76101f2366004610f2c565b610443565b6040516101ae9190610fb4565b61015e610212366004610fd6565b610495565b34801561022357600080fd5b5061015e61023236600461100e565b61051f565b34801561024357600080fd5b5061015e61059e565b34801561025857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae919061102d565b34801561029d57600080fd5b5061015e6102ac36600461103b565b6105b2565b3480156102bd57600080fd5b5061015e6102cc366004610fd6565b610727565b3480156102dd57600080fd5b506102f16102ec366004611104565b6107a7565b6040516101ae9190611191565b34801561030a57600080fd5b5061015e6103193660046111ff565b610800565b34801561032a57600080fd5b5061015e61033936600461126a565b610901565b34801561034a57600080fd5b5061015e61035936600461100e565b610947565b34801561036a57600080fd5b5061015e61037936600461128a565b610a89565b34801561038a57600080fd5b5061015e61039936600461100e565b610bcc565b600080826040516020016103b291906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103f65760405162461bcd60e51b8152600401610178906114f5565b9392505050565b610405610c23565b60008181526003602052604081205490036104325760405162461bcd60e51b815260040161017890611537565b600090815260036020526040812055565b6000808260405160200161045791906114a6565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061048d5750428111155b949350505050565b6000341180156104a457508034145b6104c05760405162461bcd60e51b81526004016101789061159f565b60006104cb33610c97565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516105129291906115af565b60405180910390a3505050565b610527610c23565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b505090508061059a5760405162461bcd60e51b8152600401610178906115fc565b5050565b6105a6610c23565b6105b06000610cf5565b565b60006105bf600130611622565b90506105f27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806106195750336001600160a01b038216145b6106355760405162461bcd60e51b815260040161017890611677565b60006106418342611687565b905060008460405160200161065691906114a6565b60408051601f1981840301815291815281516020928301206000818152928390529120549091501561069a5760405162461bcd60e51b8152600401610178906116f2565b6000818152602081815260408220849055600191906106bb9088018861100e565b6001600160a01b0316815260208101919091526040016000908120906106e76080880160608901611702565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161071e8282611b6c565b50505050505050565b61072f610c23565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461077c576040519150601f19603f3d011682016040523d82523d6000602084013e610781565b606091505b50509050806107a25760405162461bcd60e51b8152600401610178906115fc565b505050565b60006107b233610c97565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107ef9796959493929190611b76565b60405180910390a195945050505050565b600081815260036020526040812054900361082d5760405162461bcd60e51b815260040161017890611c31565b60008181526003602052604090205442101561085b5760405162461bcd60e51b815260040161017890611c7d565b60008460405160200161086e9190611d02565b604051602081830303815290604052805190602001206040516020016108949190611d42565b6040516020818303038152906040528051906020012090506108de848484846040516020016108c39190611d61565b60405160208183030381529060405280519060200120610d7e565b6108fa5760405162461bcd60e51b815260040161017890611dcb565b5050505050565b610909610c23565b600082815260036020526040902054156109355760405162461bcd60e51b815260040161017890611e33565b60009182526003602052604090912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109925750825b905060008267ffffffffffffffff1660011480156109af5750303b155b9050811580156109bd575080155b156109f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845468ff00000000000000001916680100000000000000001785555b610a3186610d96565b8315610a8157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610a7890600190611e57565b60405180910390a15b505050505050565b6000818152600360205260408120549003610ab65760405162461bcd60e51b815260040161017890611c31565b600081815260036020526040902054421015610ae45760405162461bcd60e51b815260040161017890611c7d565b6000610af3602086018661100e565b610b036040870160208801611e65565b610b136060880160408901611702565b610b236080890160608a01611702565b610b3060808a018a611885565b610b4060c08c0160a08d01611e84565b604051602001610b569796959493929190611b76565b604051602081830303815290604052805190602001209050600081604051602001610b819190611ed5565b604051602081830303815290604052805190602001209050610bb0858585846040516020016108c39190611d61565b610a815760405162461bcd60e51b815260040161017890611f3d565b610bd4610c23565b6001600160a01b038116610c175760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b610c2081610cf5565b50565b33610c557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105b057336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610178919061102d565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610cca8385611f4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600082610d8c868685610da7565b1495945050505050565b610d9e610de9565b610c2081610e50565b600081815b84811015610de057610dd682878784818110610dca57610dca611f71565b90506020020135610e58565b9150600101610dac565b50949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166105b0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd4610de9565b6000818310610e74576000828152602084905260409020610e83565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610e86565b610ea681610e8c565b82525050565b80610ea6565b60408101610ec08285610e9d565b6103f66020830184610eac565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610e8681610ecd565b600060c08284031215610f2657610f26600080fd5b50919050565b600060208284031215610f4157610f41600080fd5b813567ffffffffffffffff811115610f5b57610f5b600080fd5b61048d84828501610f11565b60208101610e868284610eac565b805b8114610c2057600080fd5b8035610e8681610f75565b600060208284031215610fa257610fa2600080fd5b610e838383610f82565b801515610ea6565b60208101610e868284610fac565b610f7781610e8c565b8035610e8681610fc2565b60008060408385031215610fec57610fec600080fd5b610ff68484610fcb565b91506110058460208501610f82565b90509250929050565b60006020828403121561102357611023600080fd5b610e838383610fcb565b60208101610e868284610e9d565b6000806040838503121561105157611051600080fd5b823567ffffffffffffffff81111561106b5761106b600080fd5b61107785828601610f11565b9250506110058460208501610f82565b63ffffffff8116610f77565b8035610e8681611087565b60008083601f8401126110b3576110b3600080fd5b50813567ffffffffffffffff8111156110ce576110ce600080fd5b6020830191508360018202830111156110e9576110e9600080fd5b9250929050565b60ff8116610f77565b8035610e86816110f0565b60008060008060006080868803121561111f5761111f600080fd5b6111298787611093565b94506111388760208801611093565b9350604086013567ffffffffffffffff81111561115757611157600080fd5b6111638882890161109e565b935093505061117587606088016110f9565b90509295509295909350565b67ffffffffffffffff8116610ea6565b60208101610e868284611181565b600060808284031215610f2657610f26600080fd5b60008083601f8401126111c9576111c9600080fd5b50813567ffffffffffffffff8111156111e4576111e4600080fd5b6020830191508360208202830111156110e9576110e9600080fd5b60008060008060c0858703121561121857611218600080fd5b611222868661119f565b9350608085013567ffffffffffffffff81111561124157611241600080fd5b61124d878288016111b4565b935093505061125f8660a08701610f82565b905092959194509250565b6000806040838503121561128057611280600080fd5b610ff68484610f82565b600080600080606085870312156112a3576112a3600080fd5b843567ffffffffffffffff8111156112bd576112bd600080fd5b6112c987828801610f11565b945050602085013567ffffffffffffffff8111156112e9576112e9600080fd5b6112f5878288016111b4565b935093505061125f8660408701610f82565b506000610e866020830183610fcb565b67ffffffffffffffff8116610f77565b8035610e8681611317565b506000610e866020830183611327565b506000610e866020830183611093565b63ffffffff8116610ea6565b6000808335601e193685900301811261137957611379600080fd5b830160208101925035905067ffffffffffffffff81111561139c5761139c600080fd5b368190038213156110e9576110e9600080fd5b82818337506000910152565b8183526020830192506113cf8284836113af565b50601f01601f19160190565b506000610e8660208301836110f9565b60ff8116610ea6565b600060c083016114048380611307565b61140e8582610e9d565b5061141c6020840184611332565b6114296020860182611181565b506114376040840184611342565b6114446040860182611352565b506114526060840184611342565b61145f6060860182611352565b5061146d608084018461135e565b85830360808701526114808382846113bb565b9250505061149160a08401846113db565b61149e60a08601826113eb565b509392505050565b60208082528101610e8381846113f4565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610e86816114b7565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610efb565b60208082528101610e8681611505565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611547565b604081016115bd8285610eac565b6103f66020830184611181565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610efb565b60208082528101610e86816115ca565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610e8657610e8661160c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610efb565b60208082528101610e8681611645565b80820180821115610e8657610e8661160c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e868161169a565b60006020828403121561171757611717600080fd5b610e838383611093565b60008135610e8681610fc2565b60006001600160a01b03835b81169019929092169190911792915050565b6000610e866001600160a01b038316611763565b90565b6001600160a01b031690565b6000610e868261174c565b6000610e868261176f565b61178e8261177a565b61179981835461172e565b8255505050565b60008135610e8681611317565b60007bffffffffffffffff000000000000000000000000000000000000000061173a8460a01b90565b6000610e8667ffffffffffffffff83165b67ffffffffffffffff1690565b6117fd826117d6565b6117998183546117ad565b60008135610e8681611087565b60007fffffffff0000000000000000000000000000000000000000000000000000000061173a8460e01b90565b600063ffffffff8216610e86565b61185982611842565b611799818354611815565b600063ffffffff8361173a565b61187a82611842565b611799818354611864565b6000808335601e19368590030181126118a0576118a0600080fd5b8301915050803567ffffffffffffffff8111156118bf576118bf600080fd5b6020820191506001810236038213156110e9576110e9600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061191a57607f821691505b602082108103610f2657610f266118f0565b6000610e866117608381565b6119418361192c565b815460001960089490940293841b1916921b91909117905550565b60006107a2818484611938565b8181101561059a5761197c60008261195c565b600101611969565b601f8211156107a2576000818152602090206020601f850104810160208510156119ab5750805b6108fa6020601f860104830182611969565b8267ffffffffffffffff8111156119d6576119d66118da565b6119e08254611906565b6119eb828285611984565b506000601f821160018114611a205760008315611a085750848201355b600019600885021c1981166002850217855550610a81565b600084815260209020601f19841690835b82811015611a515787850135825560209485019460019092019101611a31565b5084821015611a6e576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6107a28383836119bd565b60008135610e86816110f0565b600060ff8216610e86565b611aaa82611a96565b815460ff191660ff821617611799565b808280611ac681611721565b9050611ad28184611785565b50506020830180611ae2826117a0565b9050611aee81846117f4565b50506040830180611afe82611808565b9050611b0a8184611850565b5050506060820180611b1b82611808565b9050611b2a8160018501611871565b5050611b396080830183611885565b611b47818360028601611a7e565b505060a0820180611b5782611a89565b9050611b668160038501611aa1565b50505050565b61059a8282611aba565b60c08101611b84828a610e9d565b611b916020830189611181565b611b9e6040830188611352565b611bab6060830187611352565b8181036080830152611bbe8185876113bb565b9050611bcd60a08301846113eb565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611bd9565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506114ef565b60208082528101610e8681611c41565b506000610e866020830183610f82565b611ca78180611307565b611cb18382610e9d565b50611cbf6020820182611307565b611ccc6020840182610e9d565b50611cda6040820182611c8d565b611ce76040840182610eac565b50611cf56060820182611332565b6107a26060840182611181565b60808101610e868284611c9d565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611d10565b9050610e866020830184610eac565b611d6b8183610eac565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506114ef565b60208082528101610e8681611d73565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ddb565b6000610e86826117e7565b610ea681611e43565b60208101610e868284611e4e565b600060208284031215611e7a57611e7a600080fd5b610e838383611327565b600060208284031215611e9957611e99600080fd5b610e8383836110f9565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610efb565b60408082528101611d5281611ea3565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506114ef565b60208082528101610e8681611ee5565b67ffffffffffffffff918216919081169082820190811115610e8657610e8661160c565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205e8a2a9bc33c3a988cb2b5342dbf402d725b529ed253b9949551653847bb8a0764736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.json b/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.json deleted file mode 100644 index 72f35cdc4..000000000 --- a/contracts/exported/src/messaging/MerkleTreeMessageBus.sol/MerkleTreeMessageBus.json +++ /dev/null @@ -1,565 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "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" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "name": "LogMessagePublished", - "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": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "name": "ValueTransfer", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "activationTime", - "type": "uint256" - } - ], - "name": "addStateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - } - ], - "name": "disableStateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - } - ], - "name": "getMessageTimeOfFinality", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "name": "publishMessage", - "outputs": [ - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "receiveValueFromL2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "retrieveAllFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sendValueToL2", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "finalAfterTimestamp", - "type": "uint256" - } - ], - "name": "storeCrossChainMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - } - ], - "name": "verifyMessageFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "message", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyMessageInclusion", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "internalType": "struct Structs.ValueTransferMessage", - "name": "message", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyValueTransferInclusion", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } -] diff --git a/contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin b/contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin deleted file mode 100644 index ae6dce680..000000000 --- a/contracts/exported/src/messaging/MessageBus.sol/MessageBus.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/messaging/MessageBus.sol/MessageBus.json b/contracts/exported/src/messaging/MessageBus.sol/MessageBus.json deleted file mode 100644 index 4a9775456..000000000 --- a/contracts/exported/src/messaging/MessageBus.sol/MessageBus.json +++ /dev/null @@ -1,434 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "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" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "name": "LogMessagePublished", - "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": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "name": "ValueTransfer", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - } - ], - "name": "getMessageTimeOfFinality", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "name": "publishMessage", - "outputs": [ - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "receiveValueFromL2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "retrieveAllFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sendValueToL2", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "finalAfterTimestamp", - "type": "uint256" - } - ], - "name": "storeCrossChainMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "crossChainMessage", - "type": "tuple" - } - ], - "name": "verifyMessageFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } -] diff --git a/contracts/exported/src/messaging/messenger/CrossChainEnabledObscuro.sol/CrossChainEnabledObscuro.json b/contracts/exported/src/messaging/messenger/CrossChainEnabledObscuro.sol/CrossChainEnabledObscuro.json deleted file mode 100644 index b3a80c510..000000000 --- a/contracts/exported/src/messaging/messenger/CrossChainEnabledObscuro.sol/CrossChainEnabledObscuro.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "messengerAddress", - "type": "address" - } - ], - "name": "configure", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin b/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin deleted file mode 100644 index ecf008f75..000000000 --- a/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052348015600f57600080fd5b50610fe48061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078c565b61010c565b005b61009f61009a366004610884565b610211565b6040516100ac9190610933565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac9190610953565b61008a6100e3366004610961565b610292565b6000546001600160a01b03166100c8565b61008a6101073660046109a4565b610388565b610118848484846104e8565b61012560208501856109a4565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109c3565b8101906101619190610b96565b905060008082600001516001600160a01b03165a84602001516040516101879190610bf3565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610933565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c4c565b60405160208183030381529060405290505b9392505050565b61029b816105e1565b6102a860208201826109a4565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d760808301836109c3565b8101906102e49190610b96565b905060008082600001516001600160a01b03165a846020015160405161030a9190610bf3565b60006040518083038160008787f1925050503d8060008114610348576040519150601f19603f3d011682016040523d82523d6000602084013e61034d565b606091505b509150915081610372578060405163a5fa8d2b60e01b81526004016101ef9190610933565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d35750825b905060008267ffffffffffffffff1660011480156103f05750303b155b9050811580156103fe575080155b15610435576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046957845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104e057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d790600190610c78565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610537908790879087908790600401610ea7565b60006040518083038186803b15801561054f57600080fd5b505afa158015610563573d6000803e3d6000fd5b5050505060008460405160200161057a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c729061062a908490600401610ee5565b602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190610f4d565b6106875760405162461bcd60e51b81526004016101ef90610f9e565b60008160405160200161069a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071357610713600080fd5b50919050565b60008083601f84011261072e5761072e600080fd5b50813567ffffffffffffffff81111561074957610749600080fd5b60208301915083602082028301111561076457610764600080fd5b9250929050565b805b811461077857600080fd5b50565b80356107868161076b565b92915050565b600080600080606085870312156107a5576107a5600080fd5b843567ffffffffffffffff8111156107bf576107bf600080fd5b6107cb878288016106fe565b945050602085013567ffffffffffffffff8111156107eb576107eb600080fd5b6107f787828801610719565b9350935050610809866040870161077b565b905092959194509250565b60006001600160a01b038216610786565b61076d81610814565b803561078681610825565b60008083601f84011261084e5761084e600080fd5b50813567ffffffffffffffff81111561086957610869600080fd5b60208301915083600182028301111561076457610764600080fd5b60008060006040848603121561089c5761089c600080fd5b6108a6858561082e565b9250602084013567ffffffffffffffff8111156108c5576108c5600080fd5b6108d186828701610839565b92509250509250925092565b60005b838110156108f85781810151838201526020016108e0565b50506000910152565b600061090b825190565b8084526020840193506109228185602086016108dd565b601f01601f19169290920192915050565b6020808252810161028b8184610901565b61094d81610814565b82525050565b602081016107868284610944565b60006020828403121561097657610976600080fd5b813567ffffffffffffffff81111561099057610990600080fd5b61099c848285016106fe565b949350505050565b6000602082840312156109b9576109b9600080fd5b61028b838361082e565b6000808335601e19368590030181126109de576109de600080fd5b8301915050803567ffffffffffffffff8111156109fd576109fd600080fd5b60208201915060018102360382131561076457610764600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a6d57610a6d610a18565b6040525050565b6000610a7f60405190565b9050610a8b8282610a47565b919050565b600067ffffffffffffffff821115610aaa57610aaa610a18565b601f19601f83011660200192915050565b82818337506000910152565b6000610ada610ad584610a90565b610a74565b9050828152838383011115610af157610af1600080fd5b61028b836020830184610abb565b600082601f830112610b1357610b13600080fd5b61028b83833560208501610ac7565b600060608284031215610b3757610b37600080fd5b610b416060610a74565b9050610b4d838361082e565b8152602082013567ffffffffffffffff811115610b6c57610b6c600080fd5b610b7884828501610aff565b602083015250610b8b836040840161077b565b604082015292915050565b600060208284031215610bab57610bab600080fd5b813567ffffffffffffffff811115610bc557610bc5600080fd5b61099c84828501610b22565b6000610bdb825190565b610be98185602086016108dd565b9290920192915050565b6107868183610bd1565b8061094d565b80516000906060840190610c178582610944565b5060208301518482036020860152610c2f8282610901565b9150506040830151610c446040860182610bfd565b509392505050565b6020808252810161028b8184610c03565b600067ffffffffffffffff8216610786565b61094d81610c5d565b602081016107868284610c6f565b506000610786602083018361082e565b67ffffffffffffffff811661076d565b803561078681610c96565b5060006107866020830183610ca6565b67ffffffffffffffff811661094d565b63ffffffff811661076d565b803561078681610cd1565b5060006107866020830183610cdd565b63ffffffff811661094d565b6000808335601e1936859003018112610d1f57610d1f600080fd5b830160208101925035905067ffffffffffffffff811115610d4257610d42600080fd5b3681900382131561076457610764600080fd5b818352602083019250610d69828483610abb565b50601f01601f19160190565b60ff811661076d565b803561078681610d75565b5060006107866020830183610d7e565b60ff811661094d565b600060c08301610db28380610c86565b610dbc8582610944565b50610dca6020840184610cb1565b610dd76020860182610cc1565b50610de56040840184610ce8565b610df26040860182610cf8565b50610e006060840184610ce8565b610e0d6060860182610cf8565b50610e1b6080840184610d04565b8583036080870152610e2e838284610d55565b92505050610e3f60a0840184610d89565b610c4460a0860182610d99565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610e9057610e90600080fd5b602083029250610ea1838584610e4c565b50500190565b60608082528101610eb88187610da2565b90508181036020830152610ecd818587610e55565b9050610edc6040830184610bfd565b95945050505050565b6020808252810161028b8184610da2565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078681610ef6565b80151561076d565b805161078681610f3a565b600060208284031215610f6257610f62600080fd5b61028b8383610f42565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f24565b6020808252810161078681610f6c56fea264697066735822122055cdc73260ce1332c22b35dd79ea4bf3199b50f11a946e6ed8b35482d371c1f864736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.json b/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.json deleted file mode 100644 index 521bf1567..000000000 --- a/contracts/exported/src/messaging/messenger/CrossChainMessenger.sol/CrossChainMessenger.json +++ /dev/null @@ -1,199 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes", - "name": "error", - "type": "bytes" - } - ], - "name": "CallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [], - "name": "crossChainSender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - } - ], - "name": "encodeCall", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "messageBusAddr", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "messageBus", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "message", - "type": "tuple" - } - ], - "name": "relayMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "message", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "relayMessageWithProof", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/messaging/messenger/ICrossChainMessenger.sol/ICrossChainMessenger.json b/contracts/exported/src/messaging/messenger/ICrossChainMessenger.sol/ICrossChainMessenger.json deleted file mode 100644 index 3fa46fd73..000000000 --- a/contracts/exported/src/messaging/messenger/ICrossChainMessenger.sol/ICrossChainMessenger.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "crossChainSender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "messageBus", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "nonce", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "topic", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "payload", - "type": "bytes" - }, - { - "internalType": "uint8", - "name": "consistencyLevel", - "type": "uint8" - } - ], - "internalType": "struct Structs.CrossChainMessage", - "name": "message", - "type": "tuple" - } - ], - "name": "relayMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/system/Logger.sol/Logger.bin b/contracts/exported/src/system/Logger.sol/Logger.bin deleted file mode 100644 index d46b709c4..000000000 --- a/contracts/exported/src/system/Logger.sol/Logger.bin +++ /dev/null @@ -1 +0,0 @@ -6101af610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632e3c2a4d1461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046100eb565b61005c565b005b7f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480828260405161008d92919061015f565b60405180910390a15050565b60008083601f8401126100ae576100ae600080fd5b50813567ffffffffffffffff8111156100c9576100c9600080fd5b6020830191508360018202830111156100e4576100e4600080fd5b9250929050565b6000806020838503121561010157610101600080fd5b823567ffffffffffffffff81111561011b5761011b600080fd5b61012785828601610099565b92509250509250929050565b82818337506000910152565b818352602083019250610153828483610133565b50601f01601f19160190565b6020808252810161017181848661013f565b94935050505056fea264697066735822122074c816dc8a29f612e0f1c16fd3894703d303c4edadf0c07edb14dbda4a97219564736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/system/Logger.sol/Logger.json b/contracts/exported/src/system/Logger.sol/Logger.json deleted file mode 100644 index 43ff5ce7b..000000000 --- a/contracts/exported/src/system/Logger.sol/Logger.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "message", - "type": "string" - } - ], - "name": "LogMessage", - "type": "event" - } -] diff --git a/contracts/exported/src/system/OnBlockEndCallback.sol/OnBlockEndCallback.json b/contracts/exported/src/system/OnBlockEndCallback.sol/OnBlockEndCallback.json deleted file mode 100644 index be42ae91f..000000000 --- a/contracts/exported/src/system/OnBlockEndCallback.sol/OnBlockEndCallback.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "txType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "successful", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "gasUsed", - "type": "uint64" - } - ], - "internalType": "struct Structs.Transaction[]", - "name": "transactions", - "type": "tuple[]" - } - ], - "name": "onBlockEnd", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin deleted file mode 100644 index adca9622f..000000000 --- a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b50604051614c53380380614c5383398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c33833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610ea780612b0283390190565b61128a806139a983390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122033c50cbe4785d88b6dc98e59a145fd28083c6b772b6e317ff391270748bab65064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610dce806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610826565b6100f6565b60405161008e94939291906108c8565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d136600461095f565b6104c0565b3480156100e257600080fd5b506100ac6100f1366004610826565b6104d0565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109bd565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109bd565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306109ff565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a56565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610a66565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610ab1565b6000818152602081905260408120600381015460028201549192909161025b908390610ad7565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b5d565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107cf565b506000600282018190556003909101555b60005a905060008561032e8386610b67565b6103389190610b7a565b905080876002015461034a9190610b67565b600288015586546103659082906001600160a01b031661062e565b61037287600201546106c1565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bb5565b60405180910390a15b5050505050565b6104cc338383346106ee565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c906109bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906109bd565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610be5565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c21565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b505090508061062957604051419084156108fc029085906000818181858888f193505050501580156106bb573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076183610a66565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b29082610cd8565b506040820151600282015560609091015160039091015550505050565b5080546107db906109bd565b6000825580601f106107eb575050565b601f01602090049060005260206000209081019061037b91905b808211156108195760008155600101610805565b5090565b80355b92915050565b60006020828403121561083b5761083b600080fd5b610845838361081d565b9392505050565b60006001600160a01b038216610820565b6108668161084c565b82525050565b60005b8381101561088757818101518382015260200161086f565b50506000910152565b600061089a825190565b8084526020840193506108b181856020860161086c565b601f01601f19169290920192915050565b80610866565b608081016108d6828761085d565b81810360208301526108e88186610890565b90506108f760408301856108c2565b61090460608301846108c2565b95945050505050565b60008083601f84011261092257610922600080fd5b50813567ffffffffffffffff81111561093d5761093d600080fd5b60208301915083600182028301111561095857610958600080fd5b9250929050565b6000806020838503121561097557610975600080fd5b823567ffffffffffffffff81111561098f5761098f600080fd5b61099b8582860161090d565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d157607f821691505b6020821081036109e3576109e36109a7565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610820576108206109e9565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082081610a22565b600060018201610a7857610a786109e9565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a50565b6020808252810161082081610a7f565b634e487b7160e01b600052601260045260246000fd5b600082610ae657610ae6610ac1565b500490565b60008154610af8816109bd565b600182168015610b0f5760018114610b2457610b54565b60ff1983168652811515820286019350610b54565b60008581526020902060005b83811015610b4c57815488820152600190910190602001610b30565b505081860193505b50505092915050565b6108208183610aeb565b81810381811115610820576108206109e9565b8181028115828204841417610820576108206109e9565b600061082082610b9f565b90565b67ffffffffffffffff1690565b61086681610b91565b602081016108208284610bac565b6000610bcd825190565b610bdb81856020860161086c565b9290920192915050565b6108208183610bc3565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a50565b6020808252810161082081610bef565b634e487b7160e01b600052604160045260246000fd5b6000610820610b9c8381565b610c5c83610c47565b815460001960089490940293841b1916921b91909117905550565b6000610629818484610c53565b818110156104cc57610c97600082610c77565b600101610c84565b601f821115610629576000818152602090206020601f85010481016020851015610cc65750805b6104b96020601f860104830182610c84565b815167ffffffffffffffff811115610cf257610cf2610c31565b610cfc82546109bd565b610d07828285610c9f565b506020601f821160018114610d3c5760008315610d245750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610d6c5787850151825560209485019460019092019101610d4c565b5084821015610d895783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122066f93efbc39d0271f5362f9b5622499ae4fd76e258ad990aeaf45df90b28957264736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69 \ No newline at end of file diff --git a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.json b/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.json deleted file mode 100644 index 5ac6b4e0e..000000000 --- a/contracts/exported/src/system/SystemDeployer.sol/SystemDeployer.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "eoaAdmin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "SystemContractDeployed", - "type": "event" - } -] diff --git a/contracts/exported/src/system/Transaction.sol/Structs.bin b/contracts/exported/src/system/Transaction.sol/Structs.bin deleted file mode 100644 index 2c25bca86..000000000 --- a/contracts/exported/src/system/Transaction.sol/Structs.bin +++ /dev/null @@ -1 +0,0 @@ -60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220103f40f9f1f0afb9557ce8cbaf46aede3cb15787d4213cffd7b27789680f3abb64736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin b/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin deleted file mode 100644 index 13ff7f05d..000000000 --- a/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.json b/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.json deleted file mode 100644 index 523e5a44d..000000000 --- a/contracts/exported/src/system/TransactionPostProcessor.sol/TransactionPostProcessor.json +++ /dev/null @@ -1,367 +0,0 @@ -[ - { - "inputs": [], - "name": "AccessControlBadConfirmation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "name": "AccessControlUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "transactionsLength", - "type": "uint256" - } - ], - "name": "TransactionsConverted", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EOA_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "callbackAddress", - "type": "address" - } - ], - "name": "addOnBlockEndCallback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "eoaAdmin", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "txType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "successful", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "gasUsed", - "type": "uint64" - } - ], - "internalType": "struct Structs.Transaction[]", - "name": "transactions", - "type": "tuple[]" - } - ], - "name": "onBlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin b/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin deleted file mode 100644 index 3057b2ae5..000000000 --- a/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052348015600f57600080fd5b50600080546001600160a01b03191633179055610239806100316000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806373cc802a1461005157806383197ef0146100a85780638da5cb5b146100b0578063c1cfb99a146100a6575b600080fd5b6100a661005f366004610185565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100e6565b6000546100d09073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100dd91906101ba565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff163314610140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610137906101c8565b60405180910390fd5b30ff5b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b61016c81610143565b811461017757600080fd5b50565b803561015d81610163565b60006020828403121561019a5761019a600080fd5b6101a4838361017a565b9392505050565b6101b481610143565b82525050565b6020810161015d82846101ab565b6020808252810161015d81601581527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060208201526040019056fea2646970667358221220eb83c2ccc2dee5bbd5dc37fdcbf0d1fe7c4fb313229649df273a57945213486564736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.json b/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.json deleted file mode 100644 index 90567f005..000000000 --- a/contracts/exported/src/testing/GasConsumerBalance.sol/GasConsumerBalance.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "destroy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "get_balance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "resetOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/zen/ZenBase.sol/ITransactionDecoder.json b/contracts/exported/src/zen/ZenBase.sol/ITransactionDecoder.json deleted file mode 100644 index 6aeb86f4a..000000000 --- a/contracts/exported/src/zen/ZenBase.sol/ITransactionDecoder.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "txType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "successful", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "gasUsed", - "type": "uint64" - } - ], - "internalType": "struct Structs.Transaction", - "name": "txData", - "type": "tuple" - } - ], - "name": "recoverSender", - "outputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/src/zen/ZenBase.sol/ZenBase.bin b/contracts/exported/src/zen/ZenBase.sol/ZenBase.bin deleted file mode 100644 index b41209d7f..000000000 --- a/contracts/exported/src/zen/ZenBase.sol/ZenBase.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b506040516110e73803806110e783398101604081905261002f91610196565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b815250816003908161007791906102b8565b50600461008482826102b8565b5050506001600160a01b0381166100ba576000604051631e4fbdf760e01b81526004016100b19190610386565b60405180910390fd5b6100c38161010f565b506001600160a01b0381166100ea5760405162461bcd60e51b81526004016100b190610394565b600680546001600160a01b0319166001600160a01b03929092169190911790556103dc565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b61017d81610161565b811461018857600080fd5b50565b805161016e81610174565b6000602082840312156101ab576101ab600080fd5b6101b5838361018b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806101fc57607f821691505b60208210810361020e5761020e6101d2565b50919050565b600061016e6102208381565b90565b61022c83610214565b815460001960089490940293841b1916921b91909117905550565b6000610254818484610223565b505050565b818110156102745761026c600082610247565b600101610259565b5050565b601f821115610254576000818152602090206020601f8501048101602085101561029f5750805b6102b16020601f860104830182610259565b5050505050565b81516001600160401b038111156102d1576102d16101bc565b6102db82546101e8565b6102e6828285610278565b506020601f82116001811461031b57600083156103035750848201515b600019600885021c19811660028502178555506102b1565b600084815260208120601f198516915b8281101561034b578785015182556020948501946001909201910161032b565b50848210156103685783870151600019601f87166008021c191681555b50505050600202600101905550565b61038081610161565b82525050565b6020810161016e8284610377565b6020808252810161016e81602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610cfc806103eb6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f9919061090c565b60405180910390f35b61011561011036600461095e565b6102ad565b6040516100f991906109a0565b6002545b6040516100f991906109b4565b6101156101413660046109c2565b6102c7565b60126040516100f99190610a14565b610126610163366004610a22565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a4a565b6100ec610301565b6101866101b7366004610aaa565b610310565b6101156101ca36600461095e565b61042b565b6101266101dd366004610af2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a22565b610439565b60606003805461022a90610b37565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b37565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb818585610490565b60019150505b92915050565b6000336102d585828561049d565b6102e0858585610521565b60019150505b9392505050565b6102f5610599565b6102ff60006105df565b565b60606004805461022a90610b37565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b63565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610bc4565b60005b81811015610426576103af83838381811061038457610384610bff565b90506020028101906103969190610c15565b6103a89061010081019060e001610a22565b6001610649565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610bff565b90506020028101906103f49190610c15565b6104069061010081019060e001610a22565b6001604051610416929190610c52565b60405180910390a1600101610367565b505050565b6000336102bb818585610521565b610441610599565b6001600160a01b0381166104845760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b61048d816105df565b50565b6104268383836001610683565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461051b578181101561050c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b61051b84848484036000610683565b50505050565b6001600160a01b0383166105645760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b03821661058e57600060405163ec442f0560e01b815260040161033a9190610a4a565b610426838383610788565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067357600060405163ec442f0560e01b815260040161033a9190610a4a565b61067f60008383610788565b5050565b6001600160a01b0384166106c65760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b0383166107095760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561051b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161077a91906109b4565b60405180910390a350505050565b6001600160a01b0383166107b35780600260008282546107a89190610cb3565b9091555061082b9050565b6001600160a01b0383166000908152602081905260409020548181101561080c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661084757600280548290039055610866565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108a991906109b4565b60405180910390a3505050565b60005b838110156108d15781810151838201526020016108b9565b50506000910152565b60006108e4825190565b8084526020840193506108fb8185602086016108b6565b601f01601f19169290920192915050565b602080825281016102e681846108da565b60006001600160a01b0382166102c1565b6109378161091d565b811461048d57600080fd5b80356102c18161092e565b80610937565b80356102c18161094d565b6000806040838503121561097457610974600080fd5b61097e8484610942565b915061098d8460208501610953565b90509250929050565b8015155b82525050565b602081016102c18284610996565b8061099a565b602081016102c182846109ae565b6000806000606084860312156109da576109da600080fd5b6109e48585610942565b92506109f38560208601610942565b9150610a028560408601610953565b90509250925092565b60ff811661099a565b602081016102c18284610a0b565b600060208284031215610a3757610a37600080fd5b6102e68383610942565b61099a8161091d565b602081016102c18284610a41565b60008083601f840112610a6d57610a6d600080fd5b50813567ffffffffffffffff811115610a8857610a88600080fd5b602083019150836020820283011115610aa357610aa3600080fd5b9250929050565b60008060208385031215610ac057610ac0600080fd5b823567ffffffffffffffff811115610ada57610ada600080fd5b610ae685828601610a58565b92509250509250929050565b60008060408385031215610b0857610b08600080fd5b610b128484610942565b915061098d8460208501610942565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b4b57607f821691505b602082108103610b5d57610b5d610b21565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c3057610c30600080fd5b9190910192915050565b60006102c1610c468381565b90565b61099a81610c3a565b60408101610c608285610a41565b6102e66020830184610c49565b60608101610c7b8286610a41565b610c8860208301856109ae565b610c9560408301846109ae565b949350505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102c1576102c1610c9d56fea2646970667358221220f7b04cad41f1453ff919861d5ed5be8c01107adbd7a57bb76e5fce821d5bb64664736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/zen/ZenBase.sol/ZenBase.json b/contracts/exported/src/zen/ZenBase.sol/ZenBase.json deleted file mode 100644 index 853204151..000000000 --- a/contracts/exported/src/zen/ZenBase.sol/ZenBase.json +++ /dev/null @@ -1,479 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "transactionPostProcessor", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "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": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TransactionProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "txType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "successful", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "gasUsed", - "type": "uint64" - } - ], - "internalType": "struct Structs.Transaction[]", - "name": "transactions", - "type": "tuple[]" - } - ], - "name": "onBlockEnd", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/exported/src/zen/ZenTestnet.sol/ITransactionDecoder.json b/contracts/exported/src/zen/ZenTestnet.sol/ITransactionDecoder.json deleted file mode 100644 index 6aeb86f4a..000000000 --- a/contracts/exported/src/zen/ZenTestnet.sol/ITransactionDecoder.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "txType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "successful", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "gasUsed", - "type": "uint64" - } - ], - "internalType": "struct Structs.Transaction", - "name": "txData", - "type": "tuple" - } - ], - "name": "recoverSender", - "outputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin b/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin deleted file mode 100644 index 3b01c37e5..000000000 --- a/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6113b5806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610dd0565b60405180910390f35b61012061011b366004610e22565b61038a565b6040516101049190610e64565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e78565b61012061016b366004610e86565b6103a4565b60126040516101049190610ed8565b61015061018d366004610ee6565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103ca565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610f0e565b6100f76103de565b6101cf61021f366004610f6e565b61042f565b610120610232366004610e22565b61054a565b6101cf610245366004610ee6565b610558565b610150610258366004610fb6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610ee6565b61075c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461033290610ffb565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b6000336103988185856107b3565b60019150505b92915050565b6000336103b28582856107c0565b6103bd858585610863565b60019150505b9392505050565b6103d26108db565b6103dc600061094f565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161045990611081565b60405180910390fd5b60008190036104835760405162461bcd60e51b815260040161045990611091565b60005b81811015610545576104ce8383838181106104a3576104a36110cc565b90506020028101906104b591906110e2565b6104c79061010081019060e001610ee6565b60016109cd565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1838383818110610501576105016110cc565b905060200281019061051391906110e2565b6105259061010081019060e001610ee6565b600160405161053592919061111f565b60405180910390a1600101610486565b505050565b600033610398818585610863565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105a35750825b905060008267ffffffffffffffff1660011480156105c05750303b155b9050811580156105ce575080155b15610605576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561063957845468ff00000000000000001916680100000000000000001785555b6001600160a01b03861661065f5760405162461bcd60e51b815260040161045990611192565b6106d36040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610a07565b6106dc33610a19565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561075457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061074b906001906111bd565b60405180910390a15b505050505050565b6107646108db565b6001600160a01b0381166107a75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6107b08161094f565b50565b6105458383836001610a2a565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093861683529290522054600019811461085d578181101561084e578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b61085d84848484036000610a2a565b50505050565b6001600160a01b0383166108a65760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b0382166108d057600060405163ec442f0560e01b81526004016104599190610f0e565b610545838383610b54565b3361090d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103dc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b0382166109f757600060405163ec442f0560e01b81526004016104599190610f0e565b610a0360008383610b54565b5050565b610a0f610ca8565b610a038282610d0f565b610a21610ca8565b6107b081610d72565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a8e5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b038416610ad15760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610b4d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b449190610e78565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610ba25781816002016000828254610b979190611211565b90915550610c1a9050565b6001600160a01b03841660009081526020829052604090205482811015610bfb578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610c38576002810180548390039055610c57565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c9a9190610e78565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103dc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d17610ca8565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d6384826112bf565b506004810161085d83826112bf565b610764610ca8565b60005b83811015610d95578181015183820152602001610d7d565b50506000910152565b6000610da8825190565b808452602084019350610dbf818560208601610d7a565b601f01601f19169290920192915050565b602080825281016103c38184610d9e565b60006001600160a01b03821661039e565b610dfb81610de1565b81146107b057600080fd5b803561039e81610df2565b80610dfb565b803561039e81610e11565b60008060408385031215610e3857610e38600080fd5b610e428484610e06565b9150610e518460208501610e17565b90509250929050565b8015155b82525050565b6020810161039e8284610e5a565b80610e5e565b6020810161039e8284610e72565b600080600060608486031215610e9e57610e9e600080fd5b610ea88585610e06565b9250610eb78560208601610e06565b9150610ec68560408601610e17565b90509250925092565b60ff8116610e5e565b6020810161039e8284610ecf565b600060208284031215610efb57610efb600080fd5b6103c38383610e06565b610e5e81610de1565b6020810161039e8284610f05565b60008083601f840112610f3157610f31600080fd5b50813567ffffffffffffffff811115610f4c57610f4c600080fd5b602083019150836020820283011115610f6757610f67600080fd5b9250929050565b60008060208385031215610f8457610f84600080fd5b823567ffffffffffffffff811115610f9e57610f9e600080fd5b610faa85828601610f1c565b92509250509250929050565b60008060408385031215610fcc57610fcc600080fd5b610fd68484610e06565b9150610e518460208501610e06565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061100f57607f821691505b60208210810361102157611021610fe5565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e81611027565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19368490030181126110fd576110fd600080fd5b9190910192915050565b600061039e6111138381565b90565b610e5e81611107565b6040810161112d8285610f05565b6103c36020830184611116565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152905061107b565b6020808252810161039e8161113a565b600067ffffffffffffffff821661039e565b610e5e816111a2565b6020810161039e82846111b4565b606081016111d98286610f05565b6111e66020830185610e72565b6111f36040830184610e72565b949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039e5761039e6111fb565b634e487b7160e01b600052604160045260246000fd5b61124383611107565b815460001960089490940293841b1916921b91909117905550565b600061054581848461123a565b81811015610a035761127e60008261125e565b60010161126b565b601f821115610545576000818152602090206020601f850104810160208510156112ad5750805b610b4d6020601f86010483018261126b565b815167ffffffffffffffff8111156112d9576112d9611224565b6112e38254610ffb565b6112ee828285611286565b506020601f821160018114611323576000831561130b5750848201515b600019600885021c1981166002850217855550610b4d565b600084815260208120601f198516915b828110156113535787850151825560209485019460019092019101611333565b50848210156113705783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122021c1edec5751580cda4d7c9c56cddd69057e1d7032b01be07c5b6f4124dfb25764736f6c634300081c0033 \ No newline at end of file diff --git a/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.json b/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.json deleted file mode 100644 index 7dfcece4c..000000000 --- a/contracts/exported/src/zen/ZenTestnet.sol/ZenTestnet.json +++ /dev/null @@ -1,509 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "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" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "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": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TransactionProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "transactionPostProcessor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "txType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "successful", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "gasUsed", - "type": "uint64" - } - ], - "internalType": "struct Structs.Transaction[]", - "name": "transactions", - "type": "tuple[]" - } - ], - "name": "onBlockEnd", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] From a0e909f4d277f4f18d983560822c99b0acaa16a5 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 17:54:48 +0200 Subject: [PATCH 06/19] changed gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c9c85f15f..2d815bd8a 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,4 @@ yalc.lock contracts/typechain-types/ contracts/tsconfig.json contracts/package-lock.json +contracts/exported/ \ No newline at end of file From 57830b49a1e55fca7da06c3a3c90ec9c6b3acae7 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 17:59:58 +0200 Subject: [PATCH 07/19] Added a README. --- contracts/src/system/README | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 contracts/src/system/README diff --git a/contracts/src/system/README b/contracts/src/system/README new file mode 100644 index 000000000..98c021d50 --- /dev/null +++ b/contracts/src/system/README @@ -0,0 +1,19 @@ +# Public Callbacks Contract + +The PublicCallbacks contract provides a mechanism for registering and executing callbacks in a gas-efficient manner. It is designed to be used by contracts that need to hide their gas cost whenever executing something and make the state change immutable if proxied. + +## Key Features + +- Register callbacks with associated value for gas payment +- Automatic gas refunds for unused gas +- Ability to reattempt failed callbacks +- Gas-limited execution to prevent abuse + +## Usage + +Any contract can call `registerCallback` to register a callback. The callback is built from the msg.sender and encoded data to be passed to the msg.sender when doing a callback. The value paid for is converted to gas and refunded if unused. We use the base fee at the time of registration to calculate the gas refund, so there is no issue of the price changing between registration and execution. Execution also uses no baseFee unlimited call. + +## Internal + +The contract uses a queue made out of a mapping and two uints. One points to where callbacks are added and the other lags behind pointing to the oldest callback. +The synthetic call DOES NOT fail if the underlying callback fails. Instead for now it gifts the stored value to coinbase and does not delete the callback, allowing for reattempting externally with whatever gas chosen. This might be a bit of a security risk, but its a failsafe as contracts normally do not have custom recovery logic if a callback fails. From 40b6654fa1d6e0b61812beeedd1cdee6f9d651da Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 18:01:34 +0200 Subject: [PATCH 08/19] Adding delete when reattempting. --- contracts/generated/PublicCallbacks/PublicCallbacks.go | 2 +- contracts/generated/SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index 4c5737055..9dc65630c 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610dce806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610826565b6100f6565b60405161008e94939291906108c8565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d136600461095f565b6104c0565b3480156100e257600080fd5b506100ac6100f1366004610826565b6104d0565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109bd565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109bd565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306109ff565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a56565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610a66565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610ab1565b6000818152602081905260408120600381015460028201549192909161025b908390610ad7565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b5d565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107cf565b506000600282018190556003909101555b60005a905060008561032e8386610b67565b6103389190610b7a565b905080876002015461034a9190610b67565b600288015586546103659082906001600160a01b031661062e565b61037287600201546106c1565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bb5565b60405180910390a15b5050505050565b6104cc338383346106ee565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c906109bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906109bd565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610be5565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c21565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b505090508061062957604051419084156108fc029085906000818181858888f193505050501580156106bb573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076183610a66565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b29082610cd8565b506040820151600282015560609091015160039091015550505050565b5080546107db906109bd565b6000825580601f106107eb575050565b601f01602090049060005260206000209081019061037b91905b808211156108195760008155600101610805565b5090565b80355b92915050565b60006020828403121561083b5761083b600080fd5b610845838361081d565b9392505050565b60006001600160a01b038216610820565b6108668161084c565b82525050565b60005b8381101561088757818101518382015260200161086f565b50506000910152565b600061089a825190565b8084526020840193506108b181856020860161086c565b601f01601f19169290920192915050565b80610866565b608081016108d6828761085d565b81810360208301526108e88186610890565b90506108f760408301856108c2565b61090460608301846108c2565b95945050505050565b60008083601f84011261092257610922600080fd5b50813567ffffffffffffffff81111561093d5761093d600080fd5b60208301915083600182028301111561095857610958600080fd5b9250929050565b6000806020838503121561097557610975600080fd5b823567ffffffffffffffff81111561098f5761098f600080fd5b61099b8582860161090d565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d157607f821691505b6020821081036109e3576109e36109a7565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610820576108206109e9565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082081610a22565b600060018201610a7857610a786109e9565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a50565b6020808252810161082081610a7f565b634e487b7160e01b600052601260045260246000fd5b600082610ae657610ae6610ac1565b500490565b60008154610af8816109bd565b600182168015610b0f5760018114610b2457610b54565b60ff1983168652811515820286019350610b54565b60008581526020902060005b83811015610b4c57815488820152600190910190602001610b30565b505081860193505b50505092915050565b6108208183610aeb565b81810381811115610820576108206109e9565b8181028115828204841417610820576108206109e9565b600061082082610b9f565b90565b67ffffffffffffffff1690565b61086681610b91565b602081016108208284610bac565b6000610bcd825190565b610bdb81856020860161086c565b9290920192915050565b6108208183610bc3565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a50565b6020808252810161082081610bef565b634e487b7160e01b600052604160045260246000fd5b6000610820610b9c8381565b610c5c83610c47565b815460001960089490940293841b1916921b91909117905550565b6000610629818484610c53565b818110156104cc57610c97600082610c77565b600101610c84565b601f821115610629576000818152602090206020601f85010481016020851015610cc65750805b6104b96020601f860104830182610c84565b815167ffffffffffffffff811115610cf257610cf2610c31565b610cfc82546109bd565b610d07828285610c9f565b506020601f821160018114610d3c5760008315610d245750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610d6c5787850151825560209485019460019092019101610d4c565b5084821015610d895783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122066f93efbc39d0271f5362f9b5622499ae4fd76e258ad990aeaf45df90b28957264736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200965892fbc5f12605a53e4a80870ad07779988f628ada36400c03ff6f6f73b2d64736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index c3e06c17f..51c80cee0 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614c53380380614c5383398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c33833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c33833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610ea780612b0283390190565b61128a806139a983390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122033c50cbe4785d88b6dc98e59a145fd28083c6b772b6e317ff391270748bab65064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610dce806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610826565b6100f6565b60405161008e94939291906108c8565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d136600461095f565b6104c0565b3480156100e257600080fd5b506100ac6100f1366004610826565b6104d0565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109bd565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109bd565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306109ff565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a56565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610a66565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610ab1565b6000818152602081905260408120600381015460028201549192909161025b908390610ad7565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b5d565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107cf565b506000600282018190556003909101555b60005a905060008561032e8386610b67565b6103389190610b7a565b905080876002015461034a9190610b67565b600288015586546103659082906001600160a01b031661062e565b61037287600201546106c1565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bb5565b60405180910390a15b5050505050565b6104cc338383346106ee565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c906109bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906109bd565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610be5565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c21565b505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b505090508061062957604051419084156108fc029085906000818181858888f193505050501580156106bb573d6000803e3d6000fd5b50505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076183610a66565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b29082610cd8565b506040820151600282015560609091015160039091015550505050565b5080546107db906109bd565b6000825580601f106107eb575050565b601f01602090049060005260206000209081019061037b91905b808211156108195760008155600101610805565b5090565b80355b92915050565b60006020828403121561083b5761083b600080fd5b610845838361081d565b9392505050565b60006001600160a01b038216610820565b6108668161084c565b82525050565b60005b8381101561088757818101518382015260200161086f565b50506000910152565b600061089a825190565b8084526020840193506108b181856020860161086c565b601f01601f19169290920192915050565b80610866565b608081016108d6828761085d565b81810360208301526108e88186610890565b90506108f760408301856108c2565b61090460608301846108c2565b95945050505050565b60008083601f84011261092257610922600080fd5b50813567ffffffffffffffff81111561093d5761093d600080fd5b60208301915083600182028301111561095857610958600080fd5b9250929050565b6000806020838503121561097557610975600080fd5b823567ffffffffffffffff81111561098f5761098f600080fd5b61099b8582860161090d565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d157607f821691505b6020821081036109e3576109e36109a7565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610820576108206109e9565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082081610a22565b600060018201610a7857610a786109e9565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a50565b6020808252810161082081610a7f565b634e487b7160e01b600052601260045260246000fd5b600082610ae657610ae6610ac1565b500490565b60008154610af8816109bd565b600182168015610b0f5760018114610b2457610b54565b60ff1983168652811515820286019350610b54565b60008581526020902060005b83811015610b4c57815488820152600190910190602001610b30565b505081860193505b50505092915050565b6108208183610aeb565b81810381811115610820576108206109e9565b8181028115828204841417610820576108206109e9565b600061082082610b9f565b90565b67ffffffffffffffff1690565b61086681610b91565b602081016108208284610bac565b6000610bcd825190565b610bdb81856020860161086c565b9290920192915050565b6108208183610bc3565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a50565b6020808252810161082081610bef565b634e487b7160e01b600052604160045260246000fd5b6000610820610b9c8381565b610c5c83610c47565b815460001960089490940293841b1916921b91909117905550565b6000610629818484610c53565b818110156104cc57610c97600082610c77565b600101610c84565b601f821115610629576000818152602090206020601f85010481016020851015610cc65750805b6104b96020601f860104830182610c84565b815167ffffffffffffffff811115610cf257610cf2610c31565b610cfc82546109bd565b610d07828285610c9f565b506020601f821160018114610d3c5760008315610d245750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610d6c5787850151825560209485019460019092019101610d4c565b5084821015610d895783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122066f93efbc39d0271f5362f9b5622499ae4fd76e258ad990aeaf45df90b28957264736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614c9b380380614c9b83398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c7b833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610eef80612b0283390190565b61128a806139f183390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122029c6e554943a319891692e88af97626af0ad474a4c23ed5141abb0f10011dd9664736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200965892fbc5f12605a53e4a80870ad07779988f628ada36400c03ff6f6f73b2d64736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index 8caab1457..0530f327c 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -46,6 +46,7 @@ contract PublicCallbacks is Initializable { Callback memory callback = callbacks[callbackId]; (bool success, ) = callback.target.call(callback.data); require(success, "Callback execution failed"); + delete callbacks[callbackId]; // nothing to refund; the callback was already paid for during its failure } From dabf5391b3cf4e35048bd94ee8844b922971758f Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 11 Nov 2024 19:21:52 +0200 Subject: [PATCH 09/19] added a testing contract. --- .../PublicCallbacks/PublicCallbacks.go | 2 +- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 6 +++ contracts/src/testing/PublicCallBacksTest.sol | 37 +++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 contracts/src/testing/PublicCallBacksTest.sol diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index 9dc65630c..f028f82e4 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200965892fbc5f12605a53e4a80870ad07779988f628ada36400c03ff6f6f73b2d64736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122031e97a1db07eea63b55fe8c213ea7979cbc87cb95517254e56771810d9eb5a3964736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 51c80cee0..67ddb1c18 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614c9b380380614c9b83398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c7b833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610eef80612b0283390190565b61128a806139f183390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122029c6e554943a319891692e88af97626af0ad474a4c23ed5141abb0f10011dd9664736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea26469706673582212200965892fbc5f12605a53e4a80870ad07779988f628ada36400c03ff6f6f73b2d64736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614c9b380380614c9b83398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c7b833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610eef80612b0283390190565b61128a806139f183390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212205582327d0318af37e36a53c1e1469682be1a092dc444520cb8c5388cb2210cf064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122031e97a1db07eea63b55fe8c213ea7979cbc87cb95517254e56771810d9eb5a3964736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index 0530f327c..ca32f07f1 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -3,6 +3,12 @@ pragma solidity ^0.8.28; import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +interface IPublicCallbacks { + function register(bytes calldata callback) external payable; + function reattemptCallback(uint256 callbackId) external; +} + + contract PublicCallbacks is Initializable { modifier onlySelf() { diff --git a/contracts/src/testing/PublicCallBacksTest.sol b/contracts/src/testing/PublicCallBacksTest.sol new file mode 100644 index 000000000..26d8f8652 --- /dev/null +++ b/contracts/src/testing/PublicCallBacksTest.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IPublicCallbacks} from "../system/PublicCallbacks.sol"; + +contract PublicCallbacksTest { + IPublicCallbacks public callbacks; + + constructor(address _callbacks) { + callbacks = IPublicCallbacks(_callbacks); + } + + bool lastCallSuccess = true; + + // This function will be called back by the system + function handleCallback(uint256 expectedGas) external { + uint256 gasGiven = gasleft(); + if (gasGiven > expectedGas - 22000) { //call + 1000 for calldata (which overshoots greatly) + lastCallSuccess = false; + } + // Handle the callback here + // For testing we'll just allow it to succeed + + } + + // Test function that registers a callback + function testRegisterCallback() external payable { + require(lastCallSuccess, "Last call failed"); + // Encode the callback data - calling handleCallback() + // Calculate expected gas based on value sent + uint256 expectedGas = msg.value / block.basefee; + bytes memory callbackData = abi.encodeWithSelector(this.handleCallback.selector, expectedGas); + + // Register the callback, forwarding any value sent to this call + callbacks.register{value: msg.value}(callbackData); + } +} From bc95078a165c24e9eabf6f225208a3839776a880 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 12 Nov 2024 14:31:32 +0200 Subject: [PATCH 10/19] Testing wip. --- .../PublicCallbacks/PublicCallbacks.go | 36 +- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 15 +- contracts/src/testing/PublicCallBacksTest.sol | 10 +- go/common/enclave.go | 1 + go/common/query_types.go | 1 + go/common/rpc/generated/enclave.pb.go | 1562 +++++++++-------- go/common/rpc/generated/enclave.proto | 3 +- go/common/rpc/generated/enclave_grpc.pb.go | 2 +- go/enclave/enclave.go | 7 + go/enclave/rpc_server.go | 7 + go/host/host.go | 8 +- go/host/rpc/clientapi/client_api_ten.go | 8 + go/host/rpc/enclaverpc/enclave_client.go | 7 + .../simulation/p2p/in_mem_obscuro_client.go | 6 + integration/simulation/simulation.go | 49 + 16 files changed, 927 insertions(+), 797 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index f028f82e4..4b1f83806 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -31,8 +31,8 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122031e97a1db07eea63b55fe8c213ea7979cbc87cb95517254e56771810d9eb5a3964736f6c634300081c0033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610abe806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610623565b6100f6565b60405161008e94939291906106c5565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac6101f4565b6100ac6100d136600461075c565b610336565b3480156100e257600080fd5b506100ac6100f1366004610623565b610346565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906107ba565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906107ba565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306107fc565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610853565b60405180910390fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561023f5750825b905060008267ffffffffffffffff16600114801561025c5750303b155b90508115801561026a575080155b156102a1576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102d557845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561032f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061032690600190610887565b60405180910390a15b5050505050565b610342338383346104eb565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b031682526001810180549293919291840191610382906107ba565b80601f01602080910402602001604051908101604052809291908181526020018280546103ae906107ba565b80156103fb5780601f106103d0576101008083540402835291602001916103fb565b820191906000526020600020905b8154815290600101906020018083116103de57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161043c91906108b7565b6000604051808303816000865af19150503d8060008114610479576040519150601f19603f3d011682016040523d82523d6000602084013e61047e565b606091505b505090508061049f5760405162461bcd60e51b81526004016101e8906108f3565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104d660018301826105cc565b50600060028201819055600390910155505050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261055e83610903565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105af90826109c8565b506040820151600282015560609091015160039091015550505050565b5080546105d8906107ba565b6000825580601f106105e8575050565b601f0160209004906000526020600020908101906101f191905b808211156106165760008155600101610602565b5090565b80355b92915050565b60006020828403121561063857610638600080fd5b610642838361061a565b9392505050565b60006001600160a01b03821661061d565b61066381610649565b82525050565b60005b8381101561068457818101518382015260200161066c565b50506000910152565b6000610697825190565b8084526020840193506106ae818560208601610669565b601f01601f19169290920192915050565b80610663565b608081016106d3828761065a565b81810360208301526106e5818661068d565b90506106f460408301856106bf565b61070160608301846106bf565b95945050505050565b60008083601f84011261071f5761071f600080fd5b50813567ffffffffffffffff81111561073a5761073a600080fd5b60208301915083600182028301111561075557610755600080fd5b9250929050565b6000806020838503121561077257610772600080fd5b823567ffffffffffffffff81111561078c5761078c600080fd5b6107988582860161070a565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107ce57607f821691505b6020821081036107e0576107e06107a4565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561061d5761061d6107e6565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161061d8161081f565b600061061d82610871565b90565b67ffffffffffffffff1690565b61066381610863565b6020810161061d828461087e565b600061089f825190565b6108ad818560208601610669565b9290920192915050565b61061d8183610895565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c6564000000000000008152905061084d565b6020808252810161061d816108c1565b600060018201610915576109156107e6565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600061061d61086e8381565b61094783610932565b815460001960089490940293841b1916921b91909117905550565b600061096f81848461093e565b505050565b8181101561034257610987600082610962565b600101610974565b601f82111561096f576000818152602090206020601f850104810160208510156109b65750805b61032f6020601f860104830182610974565b815167ffffffffffffffff8111156109e2576109e261091c565b6109ec82546107ba565b6109f782828561098f565b506020601f821160018114610a2c5760008315610a145750848201515b600019600885021c198116600285021785555061032f565b600084815260208120601f198516915b82811015610a5c5787850151825560209485019460019092019101610a3c565b5084821015610a795783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220891529e94a6d4a8dd69aa2a538695e75a3b75272c2e01bd2088e20eb917a4e4d64736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. @@ -257,25 +257,33 @@ func (_PublicCallbacks *PublicCallbacksCallerSession) Callbacks(arg0 *big.Int) ( return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) } -// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// ExecuteNextCallback is a free data retrieval call binding the contract method 0x349e7eca. // -// Solidity: function executeNextCallback() returns() -func (_PublicCallbacks *PublicCallbacksTransactor) ExecuteNextCallback(opts *bind.TransactOpts) (*types.Transaction, error) { - return _PublicCallbacks.contract.Transact(opts, "executeNextCallback") +// Solidity: function executeNextCallback() view returns() +func (_PublicCallbacks *PublicCallbacksCaller) ExecuteNextCallback(opts *bind.CallOpts) error { + var out []interface{} + err := _PublicCallbacks.contract.Call(opts, &out, "executeNextCallback") + + if err != nil { + return err + } + + return err + } -// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// ExecuteNextCallback is a free data retrieval call binding the contract method 0x349e7eca. // -// Solidity: function executeNextCallback() returns() -func (_PublicCallbacks *PublicCallbacksSession) ExecuteNextCallback() (*types.Transaction, error) { - return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) +// Solidity: function executeNextCallback() view returns() +func (_PublicCallbacks *PublicCallbacksSession) ExecuteNextCallback() error { + return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.CallOpts) } -// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// ExecuteNextCallback is a free data retrieval call binding the contract method 0x349e7eca. // -// Solidity: function executeNextCallback() returns() -func (_PublicCallbacks *PublicCallbacksTransactorSession) ExecuteNextCallback() (*types.Transaction, error) { - return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) +// Solidity: function executeNextCallback() view returns() +func (_PublicCallbacks *PublicCallbacksCallerSession) ExecuteNextCallback() error { + return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.CallOpts) } // Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 67ddb1c18..87ff1aaae 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614c9b380380614c9b83398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614c7b833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614c7b833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610eef80612b0283390190565b61128a806139f183390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212205582327d0318af37e36a53c1e1469682be1a092dc444520cb8c5388cb2210cf064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e16806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461086e565b6100f6565b60405161008e9493929190610910565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac61037e565b6100ac6100d13660046109a7565b6104c0565b3480156100e257600080fd5b506100ac6100f136600461086e565b6104d0565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610a05565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a47565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a9e565b60405180910390fd5b6002546001541161037b57600280546000918261020d83610aae565b91905055905060025481106102345760405162461bcd60e51b81526004016101e890610af9565b6000818152602081905260408120600381015460028201549192909161025b908390610b1f565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610ba5565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b6001830182610817565b506000600282018190556003909101555b60005a905060008561032e8386610baf565b6103389190610bc2565b905080876002015461034a9190610baf565b600288015586546103659082906001600160a01b0316610675565b6103728760020154610709565b50505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103c95750825b905060008267ffffffffffffffff1660011480156103e65750303b155b9050811580156103f4575080155b1561042b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104b957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104b090600190610bfd565b60405180910390a15b5050505050565b6104cc33838334610736565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161050c90610a05565b80601f016020809104026020016040519081016040528092919081815260200182805461053890610a05565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516105c69190610c2d565b6000604051808303816000865af19150503d8060008114610603576040519150601f19603f3d011682016040523d82523d6000602084013e610608565b606091505b50509050806106295760405162461bcd60e51b81526004016101e890610c69565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906106606001830182610817565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146106c7576040519150601f19603f3d011682016040523d82523d6000602084013e6106cc565b606091505b505090508061070457604051419084156108fc029085906000818181858888f19350505050158015610702573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156104cc573d6000803e3d6000fd5b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826107a983610aae565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107fa9082610d20565b506040820151600282015560609091015160039091015550505050565b50805461082390610a05565b6000825580601f10610833575050565b601f01602090049060005260206000209081019061037b91905b80821115610861576000815560010161084d565b5090565b80355b92915050565b60006020828403121561088357610883600080fd5b61088d8383610865565b9392505050565b60006001600160a01b038216610868565b6108ae81610894565b82525050565b60005b838110156108cf5781810151838201526020016108b7565b50506000910152565b60006108e2825190565b8084526020840193506108f98185602086016108b4565b601f01601f19169290920192915050565b806108ae565b6080810161091e82876108a5565b818103602083015261093081866108d8565b905061093f604083018561090a565b61094c606083018461090a565b95945050505050565b60008083601f84011261096a5761096a600080fd5b50813567ffffffffffffffff81111561098557610985600080fd5b6020830191508360018202830111156109a0576109a0600080fd5b9250929050565b600080602083850312156109bd576109bd600080fd5b823567ffffffffffffffff8111156109d7576109d7600080fd5b6109e385828601610955565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610a1957607f821691505b602082108103610a2b57610a2b6109ef565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561086857610868610a31565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161086881610a6a565b600060018201610ac057610ac0610a31565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a98565b6020808252810161086881610ac7565b634e487b7160e01b600052601260045260246000fd5b600082610b2e57610b2e610b09565b500490565b60008154610b4081610a05565b600182168015610b575760018114610b6c57610b9c565b60ff1983168652811515820286019350610b9c565b60008581526020902060005b83811015610b9457815488820152600190910190602001610b78565b505081860193505b50505092915050565b6108688183610b33565b8181038181111561086857610868610a31565b818102811582820484141761086857610868610a31565b600061086882610be7565b90565b67ffffffffffffffff1690565b6108ae81610bd9565b602081016108688284610bf4565b6000610c15825190565b610c238185602086016108b4565b9290920192915050565b6108688183610c0b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a98565b6020808252810161086881610c37565b634e487b7160e01b600052604160045260246000fd5b6000610868610be48381565b610ca483610c8f565b815460001960089490940293841b1916921b91909117905550565b6000610704818484610c9b565b818110156104cc57610cdf600082610cbf565b600101610ccc565b601f821115610704576000818152602090206020601f85010481016020851015610d0e5750805b6104b96020601f860104830182610ccc565b815167ffffffffffffffff811115610d3a57610d3a610c79565b610d448254610a05565b610d4f828285610ce7565b506020601f821160018114610d845760008315610d6c5750848201515b600019600885021c19811660028502178555506104b9565b600084815260208120601f198516915b82811015610db45787850151825560209485019460019092019101610d94565b5084821015610dd15783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122031e97a1db07eea63b55fe8c213ea7979cbc87cb95517254e56771810d9eb5a3964736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b5060405161494338038061494383398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614923833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614923833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614923833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610b9780612b0283390190565b61128a8061369983390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212206ab8cdd19f8fee66c1e39bb1a74faa7b50a1d8540e7b64a75ec0dd90ef27146564736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610abe806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610623565b6100f6565b60405161008e94939291906106c5565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac6101f4565b6100ac6100d136600461075c565b610336565b3480156100e257600080fd5b506100ac6100f1366004610623565b610346565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906107ba565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906107ba565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306107fc565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610853565b60405180910390fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561023f5750825b905060008267ffffffffffffffff16600114801561025c5750303b155b90508115801561026a575080155b156102a1576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102d557845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561032f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061032690600190610887565b60405180910390a15b5050505050565b610342338383346104eb565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b031682526001810180549293919291840191610382906107ba565b80601f01602080910402602001604051908101604052809291908181526020018280546103ae906107ba565b80156103fb5780601f106103d0576101008083540402835291602001916103fb565b820191906000526020600020905b8154815290600101906020018083116103de57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161043c91906108b7565b6000604051808303816000865af19150503d8060008114610479576040519150601f19603f3d011682016040523d82523d6000602084013e61047e565b606091505b505090508061049f5760405162461bcd60e51b81526004016101e8906108f3565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104d660018301826105cc565b50600060028201819055600390910155505050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261055e83610903565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105af90826109c8565b506040820151600282015560609091015160039091015550505050565b5080546105d8906107ba565b6000825580601f106105e8575050565b601f0160209004906000526020600020908101906101f191905b808211156106165760008155600101610602565b5090565b80355b92915050565b60006020828403121561063857610638600080fd5b610642838361061a565b9392505050565b60006001600160a01b03821661061d565b61066381610649565b82525050565b60005b8381101561068457818101518382015260200161066c565b50506000910152565b6000610697825190565b8084526020840193506106ae818560208601610669565b601f01601f19169290920192915050565b80610663565b608081016106d3828761065a565b81810360208301526106e5818661068d565b90506106f460408301856106bf565b61070160608301846106bf565b95945050505050565b60008083601f84011261071f5761071f600080fd5b50813567ffffffffffffffff81111561073a5761073a600080fd5b60208301915083600182028301111561075557610755600080fd5b9250929050565b6000806020838503121561077257610772600080fd5b823567ffffffffffffffff81111561078c5761078c600080fd5b6107988582860161070a565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107ce57607f821691505b6020821081036107e0576107e06107a4565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561061d5761061d6107e6565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161061d8161081f565b600061061d82610871565b90565b67ffffffffffffffff1690565b61066381610863565b6020810161061d828461087e565b600061089f825190565b6108ad818560208601610669565b9290920192915050565b61061d8183610895565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c6564000000000000008152905061084d565b6020808252810161061d816108c1565b600060018201610915576109156107e6565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600061061d61086e8381565b61094783610932565b815460001960089490940293841b1916921b91909117905550565b600061096f81848461093e565b505050565b8181101561034257610987600082610962565b600101610974565b601f82111561096f576000818152602090206020601f850104810160208510156109b65750805b61032f6020601f860104830182610974565b815167ffffffffffffffff8111156109e2576109e261091c565b6109ec82546107ba565b6109f782828561098f565b506020601f821160018114610a2c5760008315610a145750848201515b600019600885021c198116600285021785555061032f565b600084815260208120601f198516915b82811015610a5c5787850151825560209485019460019092019101610a3c565b5084821015610a795783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220891529e94a6d4a8dd69aa2a538695e75a3b75272c2e01bd2088e20eb917a4e4d64736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index ca32f07f1..0c9cbfa6b 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -59,13 +59,16 @@ contract PublicCallbacks is Initializable { // System level call. As it is called during a synthetic transaction that does not have gas limit, // the contract enforces a custom limit based on the value stored for the callback. // It attempts to somewhat accurately refund. - function executeNextCallback() external onlySelf { - if (nextCallbackId > lastUnusedCallbackId) { + function executeNextCallback() external view onlySelf { + if (nextCallbackId == lastUnusedCallbackId) { return; // todo: change to revert if possible } - uint256 callbackId = lastUnusedCallbackId++; - require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); + return; + + /* uint256 callbackId = lastUnusedCallbackId; + lastUnusedCallbackId++; + //require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); Callback storage callback = callbacks[callbackId]; uint256 baseFee = callback.baseFee; uint256 gas = callback.value / baseFee; @@ -78,8 +81,8 @@ contract PublicCallbacks is Initializable { uint256 gasRefund = (gasBefore - gasAfter) * baseFee; callback.value = callback.value - gasRefund; - internalRefund(gasRefund, callback.target); - payForCallback(callback.value); + /* internalRefund(gasRefund, callback.target); + payForCallback(callback.value);*/ } function internalRefund(uint256 gasRefund, address to) internal { diff --git a/contracts/src/testing/PublicCallBacksTest.sol b/contracts/src/testing/PublicCallBacksTest.sol index 26d8f8652..65d44284e 100644 --- a/contracts/src/testing/PublicCallBacksTest.sol +++ b/contracts/src/testing/PublicCallBacksTest.sol @@ -6,8 +6,10 @@ import {IPublicCallbacks} from "../system/PublicCallbacks.sol"; contract PublicCallbacksTest { IPublicCallbacks public callbacks; - constructor(address _callbacks) { + constructor(address _callbacks) payable { callbacks = IPublicCallbacks(_callbacks); + lastCallSuccess = true; + testRegisterCallback(); } bool lastCallSuccess = true; @@ -24,7 +26,7 @@ contract PublicCallbacksTest { } // Test function that registers a callback - function testRegisterCallback() external payable { + function testRegisterCallback() internal { require(lastCallSuccess, "Last call failed"); // Encode the callback data - calling handleCallback() // Calculate expected gas based on value sent @@ -34,4 +36,8 @@ contract PublicCallbacksTest { // Register the callback, forwarding any value sent to this call callbacks.register{value: msg.value}(callbackData); } + + function isLastCallSuccess() external view returns (bool) { + return lastCallSuccess; + } } diff --git a/go/common/enclave.go b/go/common/enclave.go index 8952a8cc3..038eda4c7 100644 --- a/go/common/enclave.go +++ b/go/common/enclave.go @@ -177,4 +177,5 @@ type ProducedSecretResponse struct { type EnclavePublicConfig struct { L2MessageBusAddress gethcommon.Address TransactionPostProcessorAddress gethcommon.Address + PublicSystemContracts map[string]gethcommon.Address } diff --git a/go/common/query_types.go b/go/common/query_types.go index 240e7abd8..dde06c95a 100644 --- a/go/common/query_types.go +++ b/go/common/query_types.go @@ -117,4 +117,5 @@ type TenNetworkInfo struct { L2MessageBusAddress common.Address ImportantContracts map[string]common.Address // map of contract name to address TransactionPostProcessorAddress common.Address + PublicSystemContracts map[string]common.Address } diff --git a/go/common/rpc/generated/enclave.pb.go b/go/common/rpc/generated/enclave.pb.go index 859ddd044..8ea93a814 100644 --- a/go/common/rpc/generated/enclave.pb.go +++ b/go/common/rpc/generated/enclave.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.23.4 // source: enclave.proto package generated @@ -63,9 +63,10 @@ type EnclavePublicConfigResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - L2MessageBusAddress []byte `protobuf:"bytes,1,opt,name=l2MessageBusAddress,proto3" json:"l2MessageBusAddress,omitempty"` - TransactionPostProcessorAddress []byte `protobuf:"bytes,2,opt,name=transactionPostProcessorAddress,proto3" json:"transactionPostProcessorAddress,omitempty"` - SystemError *SystemError `protobuf:"bytes,3,opt,name=systemError,proto3" json:"systemError,omitempty"` + L2MessageBusAddress []byte `protobuf:"bytes,1,opt,name=l2MessageBusAddress,proto3" json:"l2MessageBusAddress,omitempty"` + TransactionPostProcessorAddress []byte `protobuf:"bytes,2,opt,name=transactionPostProcessorAddress,proto3" json:"transactionPostProcessorAddress,omitempty"` + PublicSystemContracts map[string][]byte `protobuf:"bytes,3,rep,name=publicSystemContracts,proto3" json:"publicSystemContracts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SystemError *SystemError `protobuf:"bytes,4,opt,name=systemError,proto3" json:"systemError,omitempty"` } func (x *EnclavePublicConfigResponse) Reset() { @@ -114,6 +115,13 @@ func (x *EnclavePublicConfigResponse) GetTransactionPostProcessorAddress() []byt return nil } +func (x *EnclavePublicConfigResponse) GetPublicSystemContracts() map[string][]byte { + if x != nil { + return x.PublicSystemContracts + } + return nil +} + func (x *EnclavePublicConfigResponse) GetSystemError() *SystemError { if x != nil { return x.SystemError @@ -4353,7 +4361,7 @@ var file_enclave_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x1b, 0x45, 0x6e, 0x63, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x03, 0x0a, 0x1b, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, @@ -4363,265 +4371,245 @@ var file_enclave_proto_rawDesc = []byte{ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, - 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2f, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x22, 0x2e, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0x62, 0x0a, 0x10, 0x47, - 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x83, 0x01, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, - 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x4f, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x15, - 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, 0x38, 0x0a, 0x0a, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x6f, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x49, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x22, 0x92, 0x01, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, - 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, - 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, - 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, - 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x13, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, - 0x0a, 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x12, 0x66, 0x72, - 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x52, - 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x77, 0x0a, 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x12, 0x38, 0x0a, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x1b, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, - 0x71, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x53, - 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0x30, - 0x0a, 0x1c, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x32, - 0x48, 0x65, 0x61, 0x64, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x14, - 0x0a, 0x12, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x13, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x14, - 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x14, 0x61, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, - 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x48, 0x0a, 0x1a, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x47, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x1c, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, 0x0a, - 0x12, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x45, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, - 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2f, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x22, 0x2e, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x65, 0x71, 0x4e, + 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0x62, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x83, + 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, + 0x74, 0x61, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4f, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, + 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, + 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x2d, 0x0a, 0x15, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, 0x38, + 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6f, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x38, + 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x12, 0x0a, 0x10, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6b, 0x0a, 0x11, - 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, - 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x0c, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x49, 0x0a, - 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, - 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x49, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x62, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, - 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x22, 0xb0, 0x01, 0x0a, - 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x33, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x54, - 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x54, 0x78, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x42, 0x0a, 0x12, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, - 0x4f, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1c, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, + 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x0a, + 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x13, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x33, 0x0a, 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, + 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x53, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7b, 0x0a, + 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, + 0x78, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x1b, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, + 0x6d, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x72, + 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x53, 0x65, 0x71, + 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x53, 0x65, 0x71, 0x4e, + 0x6f, 0x22, 0x30, 0x0a, 0x1c, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x6d, 0x73, 0x67, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x14, 0x0a, 0x12, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x13, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x53, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x14, + 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x4d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, + 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x3a, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, - 0x0f, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x22, 0x58, 0x0a, 0x12, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x13, 0x49, 0x6e, + 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x12, 0x0a, 0x10, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x6b, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x49, 0x44, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x0c, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x62, 0x0a, 0x12, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x22, + 0xb0, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, + 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x1b, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, + 0x6f, 0x72, 0x22, 0x33, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x54, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x54, 0x78, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0d, 0x0a, 0x0b, - 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x0c, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, - 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x42, + 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x22, 0x4f, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x83, 0x01, 0x0a, 0x0f, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, @@ -4629,80 +4617,31 @@ var file_enclave_proto_rawDesc = []byte{ 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, - 0x91, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8a, - 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x50, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x4e, 0x72, 0x4f, 0x72, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x72, 0x4f, 0x72, 0x48, 0x61, 0x73, 0x68, 0x22, 0x5f, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, - 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x24, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, - 0x13, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3e, - 0x0a, 0x12, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x87, - 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8f, 0x01, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, + 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x0d, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, + 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, @@ -4710,342 +4649,423 @@ var file_enclave_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x50, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x4e, 0x72, 0x4f, 0x72, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x72, 0x4f, 0x72, 0x48, 0x61, 0x73, 0x68, + 0x22, 0x5f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x58, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x11, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x67, 0x0a, 0x13, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x0b, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, - 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, - 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, - 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x1a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x73, 0x67, 0x12, 0x56, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, - 0x67, 0x52, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x17, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x22, 0x89, 0x01, - 0x0a, 0x0d, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x12, - 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, - 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x6e, 0x0a, 0x0b, 0x45, 0x78, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, - 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x74, - 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22, 0xaa, 0x05, 0x0a, 0x0e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, - 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x73, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x47, 0x61, 0x73, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, 0x44, 0x0a, 0x1d, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, - 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x40, 0x0a, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, - 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x24, 0x0a, 0x12, 0x55, 0x6e, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x4f, 0x0a, 0x13, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x3e, 0x0a, 0x12, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, + 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x67, 0x0a, + 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0b, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, + 0x72, 0x67, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, + 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, + 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x1a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x56, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, + 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x17, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, + 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, + 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, + 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, + 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x6e, 0x0a, 0x0b, + 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, + 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x78, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22, 0xaa, 0x05, 0x0a, + 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, + 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x78, 0x48, + 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1c, 0x0a, + 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, + 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x47, + 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, + 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, + 0x44, 0x0a, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x40, 0x0a, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x6f, - 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, 0x73, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, - 0x65, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x12, 0x26, - 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, - 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x74, 0x52, 0x6f, - 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x62, - 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x12, 0x32, 0x0a, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, - 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x6f, 0x73, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4c, - 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, - 0x71, 0x4e, 0x6f, 0x22, 0xc9, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x61, 0x0a, 0x0d, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x4d, 0x73, 0x67, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, - 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x65, 0x63, - 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x32, 0x84, 0x16, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, - 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, 0x1d, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, - 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x1b, 0x2e, 0x67, 0x65, 0x6e, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1b, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x10, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, + 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, + 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, + 0x72, 0x65, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0c, 0x45, 0x78, + 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, + 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, + 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x11, + 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, + 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, + 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0xc9, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, + 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x0d, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, + 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, + 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x32, 0x84, 0x16, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x4e, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, + 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, + 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x48, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x1b, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x4c, 0x31, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, - 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x42, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x19, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x04, - 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, - 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, - 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x55, 0x6e, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x55, 0x6e, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, - 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x73, - 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x73, 0x74, - 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x14, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1e, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, - 0x08, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, - 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47, 0x65, 0x74, - 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x4e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x51, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x12, - 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, - 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, - 0x15, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, - 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x44, 0x65, 0x62, 0x75, 0x67, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, - 0x79, 0x12, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x4c, 0x31, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x19, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, + 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x39, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x27, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, + 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, + 0x65, 0x47, 0x61, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0b, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x14, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1e, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, + 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, + 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, + 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, + 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x6c, 0x0a, 0x15, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, + 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, + 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, - 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x66, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x17, 0x5a, 0x15, 0x65, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6e, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, + 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x17, 0x5a, 0x15, + 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5060,7 +5080,7 @@ func file_enclave_proto_rawDescGZIP() []byte { return file_enclave_proto_rawDescData } -var file_enclave_proto_msgTypes = make([]protoimpl.MessageInfo, 80) +var file_enclave_proto_msgTypes = make([]protoimpl.MessageInfo, 81) var file_enclave_proto_goTypes = []interface{}{ (*EnclavePublicConfigRequest)(nil), // 0: generated.EnclavePublicConfigRequest (*EnclavePublicConfigResponse)(nil), // 1: generated.EnclavePublicConfigResponse @@ -5142,122 +5162,124 @@ var file_enclave_proto_goTypes = []interface{}{ (*RollupHeaderMsg)(nil), // 77: generated.RollupHeaderMsg (*SecretResponseMsg)(nil), // 78: generated.SecretResponseMsg (*WithdrawalMsg)(nil), // 79: generated.WithdrawalMsg + nil, // 80: generated.EnclavePublicConfigResponse.PublicSystemContractsEntry } var file_enclave_proto_depIdxs = []int32{ - 13, // 0: generated.EnclavePublicConfigResponse.systemError:type_name -> generated.SystemError - 13, // 1: generated.GetReceiptsByAddressResponse.systemError:type_name -> generated.SystemError - 13, // 2: generated.GetBatchResponse.systemError:type_name -> generated.SystemError - 9, // 3: generated.GetRollupDataResponse.msg:type_name -> generated.PublicRollupDataMsg - 13, // 4: generated.GetRollupDataResponse.systemError:type_name -> generated.SystemError - 13, // 5: generated.GetTotalContractCountResponse.systemError:type_name -> generated.SystemError - 13, // 6: generated.DebugEventLogRelevancyResponse.systemError:type_name -> generated.SystemError - 13, // 7: generated.DebugTraceTransactionResponse.systemError:type_name -> generated.SystemError - 76, // 8: generated.CreateRollupResponse.msg:type_name -> generated.ExtRollupMsg - 13, // 9: generated.CreateRollupResponse.systemError:type_name -> generated.SystemError - 13, // 10: generated.StatusResponse.systemError:type_name -> generated.SystemError - 70, // 11: generated.AttestationResponse.attestationReportMsg:type_name -> generated.AttestationReportMsg - 13, // 12: generated.AttestationResponse.systemError:type_name -> generated.SystemError - 13, // 13: generated.GenerateSecretResponse.systemError:type_name -> generated.SystemError - 13, // 14: generated.InitEnclaveResponse.systemError:type_name -> generated.SystemError - 13, // 15: generated.EnclaveIDResponse.systemError:type_name -> generated.SystemError - 13, // 16: generated.StartResponse.systemError:type_name -> generated.SystemError - 71, // 17: generated.SubmitBlockResponse.blockSubmissionResponse:type_name -> generated.BlockSubmissionResponseMsg - 13, // 18: generated.SubmitBlockResponse.systemError:type_name -> generated.SystemError - 13, // 19: generated.SubmitTxResponse.systemError:type_name -> generated.SystemError - 74, // 20: generated.SubmitBatchRequest.batch:type_name -> generated.ExtBatchMsg - 13, // 21: generated.SubmitBatchResponse.systemError:type_name -> generated.SystemError - 13, // 22: generated.ObsCallResponse.systemError:type_name -> generated.SystemError - 13, // 23: generated.GetTransactionCountResponse.systemError:type_name -> generated.SystemError - 13, // 24: generated.StopResponse.systemError:type_name -> generated.SystemError - 13, // 25: generated.GetTransactionResponse.systemError:type_name -> generated.SystemError - 13, // 26: generated.GetTransactionReceiptResponse.systemError:type_name -> generated.SystemError - 13, // 27: generated.GetBalanceResponse.systemError:type_name -> generated.SystemError - 13, // 28: generated.GetStorageSlotResponse.systemError:type_name -> generated.SystemError - 13, // 29: generated.GetCodeResponse.systemError:type_name -> generated.SystemError - 13, // 30: generated.SubscribeResponse.systemError:type_name -> generated.SystemError - 13, // 31: generated.UnsubscribeResponse.systemError:type_name -> generated.SystemError - 13, // 32: generated.EstimateGasResponse.systemError:type_name -> generated.SystemError - 13, // 33: generated.GetLogsResponse.systemError:type_name -> generated.SystemError - 13, // 34: generated.HealthCheckResponse.systemError:type_name -> generated.SystemError - 13, // 35: generated.AttestationReportMsg.systemError:type_name -> generated.SystemError - 78, // 36: generated.BlockSubmissionResponseMsg.producedSecretResponses:type_name -> generated.SecretResponseMsg - 72, // 37: generated.BlockSubmissionResponseMsg.error:type_name -> generated.BlockSubmissionErrorMsg - 75, // 38: generated.ExtBatchMsg.header:type_name -> generated.BatchHeaderMsg - 73, // 39: generated.BatchHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg - 77, // 40: generated.ExtRollupMsg.header:type_name -> generated.RollupHeaderMsg - 73, // 41: generated.RollupHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg - 13, // 42: generated.SecretResponseMsg.systemError:type_name -> generated.SystemError - 26, // 43: generated.EnclaveProto.Status:input_type -> generated.StatusRequest - 28, // 44: generated.EnclaveProto.Attestation:input_type -> generated.AttestationRequest - 30, // 45: generated.EnclaveProto.GenerateSecret:input_type -> generated.GenerateSecretRequest - 32, // 46: generated.EnclaveProto.InitEnclave:input_type -> generated.InitEnclaveRequest - 34, // 47: generated.EnclaveProto.EnclaveID:input_type -> generated.EnclaveIDRequest - 38, // 48: generated.EnclaveProto.SubmitL1Block:input_type -> generated.SubmitBlockRequest - 40, // 49: generated.EnclaveProto.SubmitTx:input_type -> generated.SubmitTxRequest - 42, // 50: generated.EnclaveProto.SubmitBatch:input_type -> generated.SubmitBatchRequest - 44, // 51: generated.EnclaveProto.ObsCall:input_type -> generated.ObsCallRequest - 46, // 52: generated.EnclaveProto.GetTransactionCount:input_type -> generated.GetTransactionCountRequest - 48, // 53: generated.EnclaveProto.Stop:input_type -> generated.StopRequest - 50, // 54: generated.EnclaveProto.GetTransaction:input_type -> generated.GetTransactionRequest - 52, // 55: generated.EnclaveProto.GetTransactionReceipt:input_type -> generated.GetTransactionReceiptRequest - 54, // 56: generated.EnclaveProto.GetBalance:input_type -> generated.GetBalanceRequest - 58, // 57: generated.EnclaveProto.GetCode:input_type -> generated.GetCodeRequest - 56, // 58: generated.EnclaveProto.GetStorageSlot:input_type -> generated.GetStorageSlotRequest - 60, // 59: generated.EnclaveProto.Subscribe:input_type -> generated.SubscribeRequest - 62, // 60: generated.EnclaveProto.Unsubscribe:input_type -> generated.UnsubscribeRequest - 64, // 61: generated.EnclaveProto.EstimateGas:input_type -> generated.EstimateGasRequest - 66, // 62: generated.EnclaveProto.GetLogs:input_type -> generated.GetLogsRequest - 69, // 63: generated.EnclaveProto.HealthCheck:input_type -> generated.EmptyArgs - 4, // 64: generated.EnclaveProto.GetBatch:input_type -> generated.GetBatchRequest - 5, // 65: generated.EnclaveProto.GetBatchBySeqNo:input_type -> generated.GetBatchBySeqNoRequest - 7, // 66: generated.EnclaveProto.GetRollupData:input_type -> generated.GetRollupDataRequest - 20, // 67: generated.EnclaveProto.CreateBatch:input_type -> generated.CreateBatchRequest - 22, // 68: generated.EnclaveProto.CreateRollup:input_type -> generated.CreateRollupRequest - 24, // 69: generated.EnclaveProto.ExportCrossChainData:input_type -> generated.ExportCrossChainDataRequest - 18, // 70: generated.EnclaveProto.DebugTraceTransaction:input_type -> generated.DebugTraceTransactionRequest - 10, // 71: generated.EnclaveProto.StreamL2Updates:input_type -> generated.StreamL2UpdatesRequest - 16, // 72: generated.EnclaveProto.DebugEventLogRelevancy:input_type -> generated.DebugEventLogRelevancyRequest - 14, // 73: generated.EnclaveProto.GetTotalContractCount:input_type -> generated.GetTotalContractCountRequest - 2, // 74: generated.EnclaveProto.GetReceiptsByAddress:input_type -> generated.GetReceiptsByAddressRequest - 0, // 75: generated.EnclaveProto.EnclavePublicConfig:input_type -> generated.EnclavePublicConfigRequest - 27, // 76: generated.EnclaveProto.Status:output_type -> generated.StatusResponse - 29, // 77: generated.EnclaveProto.Attestation:output_type -> generated.AttestationResponse - 31, // 78: generated.EnclaveProto.GenerateSecret:output_type -> generated.GenerateSecretResponse - 33, // 79: generated.EnclaveProto.InitEnclave:output_type -> generated.InitEnclaveResponse - 35, // 80: generated.EnclaveProto.EnclaveID:output_type -> generated.EnclaveIDResponse - 39, // 81: generated.EnclaveProto.SubmitL1Block:output_type -> generated.SubmitBlockResponse - 41, // 82: generated.EnclaveProto.SubmitTx:output_type -> generated.SubmitTxResponse - 43, // 83: generated.EnclaveProto.SubmitBatch:output_type -> generated.SubmitBatchResponse - 45, // 84: generated.EnclaveProto.ObsCall:output_type -> generated.ObsCallResponse - 47, // 85: generated.EnclaveProto.GetTransactionCount:output_type -> generated.GetTransactionCountResponse - 49, // 86: generated.EnclaveProto.Stop:output_type -> generated.StopResponse - 51, // 87: generated.EnclaveProto.GetTransaction:output_type -> generated.GetTransactionResponse - 53, // 88: generated.EnclaveProto.GetTransactionReceipt:output_type -> generated.GetTransactionReceiptResponse - 55, // 89: generated.EnclaveProto.GetBalance:output_type -> generated.GetBalanceResponse - 59, // 90: generated.EnclaveProto.GetCode:output_type -> generated.GetCodeResponse - 57, // 91: generated.EnclaveProto.GetStorageSlot:output_type -> generated.GetStorageSlotResponse - 61, // 92: generated.EnclaveProto.Subscribe:output_type -> generated.SubscribeResponse - 63, // 93: generated.EnclaveProto.Unsubscribe:output_type -> generated.UnsubscribeResponse - 65, // 94: generated.EnclaveProto.EstimateGas:output_type -> generated.EstimateGasResponse - 67, // 95: generated.EnclaveProto.GetLogs:output_type -> generated.GetLogsResponse - 68, // 96: generated.EnclaveProto.HealthCheck:output_type -> generated.HealthCheckResponse - 6, // 97: generated.EnclaveProto.GetBatch:output_type -> generated.GetBatchResponse - 6, // 98: generated.EnclaveProto.GetBatchBySeqNo:output_type -> generated.GetBatchResponse - 8, // 99: generated.EnclaveProto.GetRollupData:output_type -> generated.GetRollupDataResponse - 21, // 100: generated.EnclaveProto.CreateBatch:output_type -> generated.CreateBatchResponse - 23, // 101: generated.EnclaveProto.CreateRollup:output_type -> generated.CreateRollupResponse - 25, // 102: generated.EnclaveProto.ExportCrossChainData:output_type -> generated.ExportCrossChainDataResponse - 19, // 103: generated.EnclaveProto.DebugTraceTransaction:output_type -> generated.DebugTraceTransactionResponse - 11, // 104: generated.EnclaveProto.StreamL2Updates:output_type -> generated.EncodedUpdateResponse - 17, // 105: generated.EnclaveProto.DebugEventLogRelevancy:output_type -> generated.DebugEventLogRelevancyResponse - 15, // 106: generated.EnclaveProto.GetTotalContractCount:output_type -> generated.GetTotalContractCountResponse - 3, // 107: generated.EnclaveProto.GetReceiptsByAddress:output_type -> generated.GetReceiptsByAddressResponse - 1, // 108: generated.EnclaveProto.EnclavePublicConfig:output_type -> generated.EnclavePublicConfigResponse - 76, // [76:109] is the sub-list for method output_type - 43, // [43:76] is the sub-list for method input_type - 43, // [43:43] is the sub-list for extension type_name - 43, // [43:43] is the sub-list for extension extendee - 0, // [0:43] is the sub-list for field type_name + 80, // 0: generated.EnclavePublicConfigResponse.publicSystemContracts:type_name -> generated.EnclavePublicConfigResponse.PublicSystemContractsEntry + 13, // 1: generated.EnclavePublicConfigResponse.systemError:type_name -> generated.SystemError + 13, // 2: generated.GetReceiptsByAddressResponse.systemError:type_name -> generated.SystemError + 13, // 3: generated.GetBatchResponse.systemError:type_name -> generated.SystemError + 9, // 4: generated.GetRollupDataResponse.msg:type_name -> generated.PublicRollupDataMsg + 13, // 5: generated.GetRollupDataResponse.systemError:type_name -> generated.SystemError + 13, // 6: generated.GetTotalContractCountResponse.systemError:type_name -> generated.SystemError + 13, // 7: generated.DebugEventLogRelevancyResponse.systemError:type_name -> generated.SystemError + 13, // 8: generated.DebugTraceTransactionResponse.systemError:type_name -> generated.SystemError + 76, // 9: generated.CreateRollupResponse.msg:type_name -> generated.ExtRollupMsg + 13, // 10: generated.CreateRollupResponse.systemError:type_name -> generated.SystemError + 13, // 11: generated.StatusResponse.systemError:type_name -> generated.SystemError + 70, // 12: generated.AttestationResponse.attestationReportMsg:type_name -> generated.AttestationReportMsg + 13, // 13: generated.AttestationResponse.systemError:type_name -> generated.SystemError + 13, // 14: generated.GenerateSecretResponse.systemError:type_name -> generated.SystemError + 13, // 15: generated.InitEnclaveResponse.systemError:type_name -> generated.SystemError + 13, // 16: generated.EnclaveIDResponse.systemError:type_name -> generated.SystemError + 13, // 17: generated.StartResponse.systemError:type_name -> generated.SystemError + 71, // 18: generated.SubmitBlockResponse.blockSubmissionResponse:type_name -> generated.BlockSubmissionResponseMsg + 13, // 19: generated.SubmitBlockResponse.systemError:type_name -> generated.SystemError + 13, // 20: generated.SubmitTxResponse.systemError:type_name -> generated.SystemError + 74, // 21: generated.SubmitBatchRequest.batch:type_name -> generated.ExtBatchMsg + 13, // 22: generated.SubmitBatchResponse.systemError:type_name -> generated.SystemError + 13, // 23: generated.ObsCallResponse.systemError:type_name -> generated.SystemError + 13, // 24: generated.GetTransactionCountResponse.systemError:type_name -> generated.SystemError + 13, // 25: generated.StopResponse.systemError:type_name -> generated.SystemError + 13, // 26: generated.GetTransactionResponse.systemError:type_name -> generated.SystemError + 13, // 27: generated.GetTransactionReceiptResponse.systemError:type_name -> generated.SystemError + 13, // 28: generated.GetBalanceResponse.systemError:type_name -> generated.SystemError + 13, // 29: generated.GetStorageSlotResponse.systemError:type_name -> generated.SystemError + 13, // 30: generated.GetCodeResponse.systemError:type_name -> generated.SystemError + 13, // 31: generated.SubscribeResponse.systemError:type_name -> generated.SystemError + 13, // 32: generated.UnsubscribeResponse.systemError:type_name -> generated.SystemError + 13, // 33: generated.EstimateGasResponse.systemError:type_name -> generated.SystemError + 13, // 34: generated.GetLogsResponse.systemError:type_name -> generated.SystemError + 13, // 35: generated.HealthCheckResponse.systemError:type_name -> generated.SystemError + 13, // 36: generated.AttestationReportMsg.systemError:type_name -> generated.SystemError + 78, // 37: generated.BlockSubmissionResponseMsg.producedSecretResponses:type_name -> generated.SecretResponseMsg + 72, // 38: generated.BlockSubmissionResponseMsg.error:type_name -> generated.BlockSubmissionErrorMsg + 75, // 39: generated.ExtBatchMsg.header:type_name -> generated.BatchHeaderMsg + 73, // 40: generated.BatchHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg + 77, // 41: generated.ExtRollupMsg.header:type_name -> generated.RollupHeaderMsg + 73, // 42: generated.RollupHeaderMsg.CrossChainMessages:type_name -> generated.CrossChainMsg + 13, // 43: generated.SecretResponseMsg.systemError:type_name -> generated.SystemError + 26, // 44: generated.EnclaveProto.Status:input_type -> generated.StatusRequest + 28, // 45: generated.EnclaveProto.Attestation:input_type -> generated.AttestationRequest + 30, // 46: generated.EnclaveProto.GenerateSecret:input_type -> generated.GenerateSecretRequest + 32, // 47: generated.EnclaveProto.InitEnclave:input_type -> generated.InitEnclaveRequest + 34, // 48: generated.EnclaveProto.EnclaveID:input_type -> generated.EnclaveIDRequest + 38, // 49: generated.EnclaveProto.SubmitL1Block:input_type -> generated.SubmitBlockRequest + 40, // 50: generated.EnclaveProto.SubmitTx:input_type -> generated.SubmitTxRequest + 42, // 51: generated.EnclaveProto.SubmitBatch:input_type -> generated.SubmitBatchRequest + 44, // 52: generated.EnclaveProto.ObsCall:input_type -> generated.ObsCallRequest + 46, // 53: generated.EnclaveProto.GetTransactionCount:input_type -> generated.GetTransactionCountRequest + 48, // 54: generated.EnclaveProto.Stop:input_type -> generated.StopRequest + 50, // 55: generated.EnclaveProto.GetTransaction:input_type -> generated.GetTransactionRequest + 52, // 56: generated.EnclaveProto.GetTransactionReceipt:input_type -> generated.GetTransactionReceiptRequest + 54, // 57: generated.EnclaveProto.GetBalance:input_type -> generated.GetBalanceRequest + 58, // 58: generated.EnclaveProto.GetCode:input_type -> generated.GetCodeRequest + 56, // 59: generated.EnclaveProto.GetStorageSlot:input_type -> generated.GetStorageSlotRequest + 60, // 60: generated.EnclaveProto.Subscribe:input_type -> generated.SubscribeRequest + 62, // 61: generated.EnclaveProto.Unsubscribe:input_type -> generated.UnsubscribeRequest + 64, // 62: generated.EnclaveProto.EstimateGas:input_type -> generated.EstimateGasRequest + 66, // 63: generated.EnclaveProto.GetLogs:input_type -> generated.GetLogsRequest + 69, // 64: generated.EnclaveProto.HealthCheck:input_type -> generated.EmptyArgs + 4, // 65: generated.EnclaveProto.GetBatch:input_type -> generated.GetBatchRequest + 5, // 66: generated.EnclaveProto.GetBatchBySeqNo:input_type -> generated.GetBatchBySeqNoRequest + 7, // 67: generated.EnclaveProto.GetRollupData:input_type -> generated.GetRollupDataRequest + 20, // 68: generated.EnclaveProto.CreateBatch:input_type -> generated.CreateBatchRequest + 22, // 69: generated.EnclaveProto.CreateRollup:input_type -> generated.CreateRollupRequest + 24, // 70: generated.EnclaveProto.ExportCrossChainData:input_type -> generated.ExportCrossChainDataRequest + 18, // 71: generated.EnclaveProto.DebugTraceTransaction:input_type -> generated.DebugTraceTransactionRequest + 10, // 72: generated.EnclaveProto.StreamL2Updates:input_type -> generated.StreamL2UpdatesRequest + 16, // 73: generated.EnclaveProto.DebugEventLogRelevancy:input_type -> generated.DebugEventLogRelevancyRequest + 14, // 74: generated.EnclaveProto.GetTotalContractCount:input_type -> generated.GetTotalContractCountRequest + 2, // 75: generated.EnclaveProto.GetReceiptsByAddress:input_type -> generated.GetReceiptsByAddressRequest + 0, // 76: generated.EnclaveProto.EnclavePublicConfig:input_type -> generated.EnclavePublicConfigRequest + 27, // 77: generated.EnclaveProto.Status:output_type -> generated.StatusResponse + 29, // 78: generated.EnclaveProto.Attestation:output_type -> generated.AttestationResponse + 31, // 79: generated.EnclaveProto.GenerateSecret:output_type -> generated.GenerateSecretResponse + 33, // 80: generated.EnclaveProto.InitEnclave:output_type -> generated.InitEnclaveResponse + 35, // 81: generated.EnclaveProto.EnclaveID:output_type -> generated.EnclaveIDResponse + 39, // 82: generated.EnclaveProto.SubmitL1Block:output_type -> generated.SubmitBlockResponse + 41, // 83: generated.EnclaveProto.SubmitTx:output_type -> generated.SubmitTxResponse + 43, // 84: generated.EnclaveProto.SubmitBatch:output_type -> generated.SubmitBatchResponse + 45, // 85: generated.EnclaveProto.ObsCall:output_type -> generated.ObsCallResponse + 47, // 86: generated.EnclaveProto.GetTransactionCount:output_type -> generated.GetTransactionCountResponse + 49, // 87: generated.EnclaveProto.Stop:output_type -> generated.StopResponse + 51, // 88: generated.EnclaveProto.GetTransaction:output_type -> generated.GetTransactionResponse + 53, // 89: generated.EnclaveProto.GetTransactionReceipt:output_type -> generated.GetTransactionReceiptResponse + 55, // 90: generated.EnclaveProto.GetBalance:output_type -> generated.GetBalanceResponse + 59, // 91: generated.EnclaveProto.GetCode:output_type -> generated.GetCodeResponse + 57, // 92: generated.EnclaveProto.GetStorageSlot:output_type -> generated.GetStorageSlotResponse + 61, // 93: generated.EnclaveProto.Subscribe:output_type -> generated.SubscribeResponse + 63, // 94: generated.EnclaveProto.Unsubscribe:output_type -> generated.UnsubscribeResponse + 65, // 95: generated.EnclaveProto.EstimateGas:output_type -> generated.EstimateGasResponse + 67, // 96: generated.EnclaveProto.GetLogs:output_type -> generated.GetLogsResponse + 68, // 97: generated.EnclaveProto.HealthCheck:output_type -> generated.HealthCheckResponse + 6, // 98: generated.EnclaveProto.GetBatch:output_type -> generated.GetBatchResponse + 6, // 99: generated.EnclaveProto.GetBatchBySeqNo:output_type -> generated.GetBatchResponse + 8, // 100: generated.EnclaveProto.GetRollupData:output_type -> generated.GetRollupDataResponse + 21, // 101: generated.EnclaveProto.CreateBatch:output_type -> generated.CreateBatchResponse + 23, // 102: generated.EnclaveProto.CreateRollup:output_type -> generated.CreateRollupResponse + 25, // 103: generated.EnclaveProto.ExportCrossChainData:output_type -> generated.ExportCrossChainDataResponse + 19, // 104: generated.EnclaveProto.DebugTraceTransaction:output_type -> generated.DebugTraceTransactionResponse + 11, // 105: generated.EnclaveProto.StreamL2Updates:output_type -> generated.EncodedUpdateResponse + 17, // 106: generated.EnclaveProto.DebugEventLogRelevancy:output_type -> generated.DebugEventLogRelevancyResponse + 15, // 107: generated.EnclaveProto.GetTotalContractCount:output_type -> generated.GetTotalContractCountResponse + 3, // 108: generated.EnclaveProto.GetReceiptsByAddress:output_type -> generated.GetReceiptsByAddressResponse + 1, // 109: generated.EnclaveProto.EnclavePublicConfig:output_type -> generated.EnclavePublicConfigResponse + 77, // [77:110] is the sub-list for method output_type + 44, // [44:77] is the sub-list for method input_type + 44, // [44:44] is the sub-list for extension type_name + 44, // [44:44] is the sub-list for extension extendee + 0, // [0:44] is the sub-list for field type_name } func init() { file_enclave_proto_init() } @@ -6234,7 +6256,7 @@ func file_enclave_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_enclave_proto_rawDesc, NumEnums: 0, - NumMessages: 80, + NumMessages: 81, NumExtensions: 0, NumServices: 1, }, diff --git a/go/common/rpc/generated/enclave.proto b/go/common/rpc/generated/enclave.proto index 83816edda..e18a908de 100644 --- a/go/common/rpc/generated/enclave.proto +++ b/go/common/rpc/generated/enclave.proto @@ -108,7 +108,8 @@ message EnclavePublicConfigRequest {} message EnclavePublicConfigResponse{ bytes l2MessageBusAddress = 1; bytes transactionPostProcessorAddress = 2; - SystemError systemError = 3; + map publicSystemContracts = 3; + SystemError systemError = 4; } message GetReceiptsByAddressRequest { diff --git a/go/common/rpc/generated/enclave_grpc.pb.go b/go/common/rpc/generated/enclave_grpc.pb.go index 8f1416605..748bced46 100644 --- a/go/common/rpc/generated/enclave_grpc.pb.go +++ b/go/common/rpc/generated/enclave_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 +// - protoc v4.23.4 // source: enclave.proto package generated diff --git a/go/enclave/enclave.go b/go/enclave/enclave.go index 9516e0768..a204f653a 100644 --- a/go/enclave/enclave.go +++ b/go/enclave/enclave.go @@ -878,10 +878,17 @@ func (e *enclaveImpl) EnclavePublicConfig(context.Context) (*common.EnclavePubli if analyzerAddress == nil { analyzerAddress = &gethcommon.Address{} } + publicCallbacksAddress := e.scb.PublicCallbackHandler() + if publicCallbacksAddress == nil { + publicCallbacksAddress = &gethcommon.Address{} + } return &common.EnclavePublicConfig{ L2MessageBusAddress: address, TransactionPostProcessorAddress: *analyzerAddress, + PublicSystemContracts: map[string]gethcommon.Address{ + "PublicCallbacks": *publicCallbacksAddress, + }, }, nil } diff --git a/go/enclave/rpc_server.go b/go/enclave/rpc_server.go index 0621fc69c..52472a226 100644 --- a/go/enclave/rpc_server.go +++ b/go/enclave/rpc_server.go @@ -481,9 +481,16 @@ func (s *RPCServer) EnclavePublicConfig(ctx context.Context, _ *generated.Enclav s.logger.Error("Error getting message bus address", log.ErrKey, sysError) return &generated.EnclavePublicConfigResponse{SystemError: toRPCError(sysError)}, nil } + + publicContracts := make(map[string][]byte, len(enclaveCfg.PublicSystemContracts)) + for k, v := range enclaveCfg.PublicSystemContracts { + publicContracts[k] = v.Bytes() + } + return &generated.EnclavePublicConfigResponse{ L2MessageBusAddress: enclaveCfg.L2MessageBusAddress.Bytes(), TransactionPostProcessorAddress: enclaveCfg.TransactionPostProcessorAddress.Bytes(), + PublicSystemContracts: publicContracts, }, nil } diff --git a/go/host/host.go b/go/host/host.go index 3ac79a583..f2bd5c129 100644 --- a/go/host/host.go +++ b/go/host/host.go @@ -47,6 +47,7 @@ type host struct { // l2MessageBusAddress is fetched from the enclave but cache it here because it never changes l2MessageBusAddress *gethcommon.Address transactionPostProcessorAddress gethcommon.Address + publicSystemContracts map[string]gethcommon.Address newHeads chan *common.BatchHeader } @@ -75,8 +76,9 @@ func NewHost(config *hostconfig.HostConfig, hostServices *ServicesRegistry, p2p logger: logger, metricRegistry: regMetrics, - stopControl: stopcontrol.New(), - newHeads: make(chan *common.BatchHeader), + stopControl: stopcontrol.New(), + newHeads: make(chan *common.BatchHeader), + publicSystemContracts: make(map[string]gethcommon.Address), } enclGuardians := make([]*enclave.Guardian, 0, len(enclaveClients)) @@ -242,6 +244,7 @@ func (h *host) TenConfig() (*common.TenNetworkInfo, error) { } h.l2MessageBusAddress = &publicCfg.L2MessageBusAddress h.transactionPostProcessorAddress = publicCfg.TransactionPostProcessorAddress + h.publicSystemContracts = publicCfg.PublicSystemContracts } return &common.TenNetworkInfo{ @@ -252,6 +255,7 @@ func (h *host) TenConfig() (*common.TenNetworkInfo, error) { L2MessageBusAddress: *h.l2MessageBusAddress, ImportantContracts: h.services.L1Publisher().GetImportantContracts(), TransactionPostProcessorAddress: h.transactionPostProcessorAddress, + PublicSystemContracts: h.publicSystemContracts, }, nil } diff --git a/go/host/rpc/clientapi/client_api_ten.go b/go/host/rpc/clientapi/client_api_ten.go index e6c427f64..51871b329 100644 --- a/go/host/rpc/clientapi/client_api_ten.go +++ b/go/host/rpc/clientapi/client_api_ten.go @@ -41,6 +41,7 @@ type ChecksumFormattedTenNetworkConfig struct { L2MessageBusAddress gethcommon.AddressEIP55 ImportantContracts map[string]gethcommon.AddressEIP55 // map of contract name to address TransactionPostProcessorAddress gethcommon.AddressEIP55 + PublicSystemContracts map[string]gethcommon.AddressEIP55 } func checksumFormatted(info *common.TenNetworkInfo) *ChecksumFormattedTenNetworkConfig { @@ -48,6 +49,12 @@ func checksumFormatted(info *common.TenNetworkInfo) *ChecksumFormattedTenNetwork for name, addr := range info.ImportantContracts { importantContracts[name] = gethcommon.AddressEIP55(addr) } + + publicSystemContracts := make(map[string]gethcommon.AddressEIP55) + for name, addr := range info.PublicSystemContracts { + publicSystemContracts[name] = gethcommon.AddressEIP55(addr) + } + return &ChecksumFormattedTenNetworkConfig{ ManagementContractAddress: gethcommon.AddressEIP55(info.ManagementContractAddress), L1StartHash: info.L1StartHash, @@ -55,5 +62,6 @@ func checksumFormatted(info *common.TenNetworkInfo) *ChecksumFormattedTenNetwork L2MessageBusAddress: gethcommon.AddressEIP55(info.L2MessageBusAddress), ImportantContracts: importantContracts, TransactionPostProcessorAddress: gethcommon.AddressEIP55(info.TransactionPostProcessorAddress), + PublicSystemContracts: publicSystemContracts, } } diff --git a/go/host/rpc/enclaverpc/enclave_client.go b/go/host/rpc/enclaverpc/enclave_client.go index 664636ed8..970c119dd 100644 --- a/go/host/rpc/enclaverpc/enclave_client.go +++ b/go/host/rpc/enclaverpc/enclave_client.go @@ -638,8 +638,15 @@ func (c *Client) EnclavePublicConfig(ctx context.Context) (*common.EnclavePublic if response != nil && response.SystemError != nil { return nil, syserr.NewInternalError(fmt.Errorf("%s", response.SystemError.ErrorString)) } + + publicSystemContracts := make(map[string]gethcommon.Address, len(response.PublicSystemContracts)) + for k, v := range response.PublicSystemContracts { + publicSystemContracts[k] = gethcommon.BytesToAddress(v) + } + return &common.EnclavePublicConfig{ L2MessageBusAddress: gethcommon.BytesToAddress(response.L2MessageBusAddress), TransactionPostProcessorAddress: gethcommon.BytesToAddress(response.TransactionPostProcessorAddress), + PublicSystemContracts: publicSystemContracts, }, nil } diff --git a/integration/simulation/p2p/in_mem_obscuro_client.go b/integration/simulation/p2p/in_mem_obscuro_client.go index dd18f6edd..810af1024 100644 --- a/integration/simulation/p2p/in_mem_obscuro_client.go +++ b/integration/simulation/p2p/in_mem_obscuro_client.go @@ -191,6 +191,11 @@ func (c *inMemTenClient) tenConfig(result interface{}) error { importantContracts[key] = gethcommon.Address(value) } + publicSystemContracts := make(map[string]gethcommon.Address) + for key, value := range cfg.PublicSystemContracts { + publicSystemContracts[key] = gethcommon.Address(value) + } + tenNetworkInfo := &common.TenNetworkInfo{ ManagementContractAddress: gethcommon.Address(cfg.ManagementContractAddress), L1StartHash: cfg.L1StartHash, @@ -198,6 +203,7 @@ func (c *inMemTenClient) tenConfig(result interface{}) error { L2MessageBusAddress: gethcommon.Address(cfg.L2MessageBusAddress), ImportantContracts: importantContracts, TransactionPostProcessorAddress: gethcommon.Address(cfg.TransactionPostProcessorAddress), + PublicSystemContracts: publicSystemContracts, } *result.(*common.TenNetworkInfo) = *tenNetworkInfo diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index d1dd20080..b71e701eb 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" gethparams "github.com/ethereum/go-ethereum/params" "github.com/ten-protocol/go-ten/contracts/generated/MessageBus" + "github.com/ten-protocol/go-ten/contracts/generated/PublicCallbacksTest" "github.com/ten-protocol/go-ten/contracts/generated/TransactionPostProcessor" "github.com/ten-protocol/go-ten/contracts/generated/ZenBase" "github.com/ten-protocol/go-ten/go/common" @@ -78,6 +79,9 @@ func (s *Simulation) Start() { fmt.Printf("Deploying ZenBase contract\n") s.deployTenZen() // Deploy the ZenBase contract + fmt.Printf("Deploying PublicCallbacksTest contract\n") + s.deployPublicCallbacksTest() + fmt.Printf("Creating log subscriptions\n") s.trackLogs() // Create log subscriptions, to validate that they're working correctly later. @@ -251,6 +255,51 @@ func (s *Simulation) prefundTenAccounts() { testcommon.PrefundWallets(s.ctx, faucetWallet, faucetClient, nonce, s.Params.Wallets.AllObsWallets(), allocObsWallets, s.Params.ReceiptTimeout) } +func (s *Simulation) deployPublicCallbacksTest() { + testlog.Logger().Info("Deploying PublicCallbacksTest contract") + + auth, err := bind.NewKeyedTransactorWithChainID(s.Params.Wallets.L2FaucetWallet.PrivateKey(), s.Params.Wallets.L2FaucetWallet.ChainID()) + if err != nil { + panic(fmt.Errorf("failed to create transactor in order to bootstrap sim test: %w", err)) + } + rpcClient := s.RPCHandles.TenWalletClient(s.Params.Wallets.L2FaucetWallet.Address(), 1) + var cfg *common.TenNetworkInfo + for cfg == nil || cfg.TransactionPostProcessorAddress.Cmp(gethcommon.Address{}) == 0 { + cfg, err = rpcClient.GetConfig() + if err != nil { + s.TxInjector.logger.Info("failed to get config", log.ErrKey, err) + } + time.Sleep(2 * time.Second) + } + + publicCallbacksAddress := cfg.PublicSystemContracts["PublicCallbacks"] + if publicCallbacksAddress.Cmp(gethcommon.Address{}) == 0 { + panic(fmt.Errorf("public callbacks address is not set")) + } + + auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, s.Params.Wallets.L2FaucetWallet)) + auth.GasPrice = big.NewInt(0).SetUint64(gethparams.InitialBaseFee) + auth.Context = s.ctx + + _, tx, instance, err := PublicCallbacksTest.DeployPublicCallbacksTest(auth, rpcClient, publicCallbacksAddress) + if err != nil { + panic(fmt.Errorf("failed to deploy public callbacks test contract: %w", err)) + } + + receipt, err := bind.WaitMined(s.ctx, rpcClient, tx) + if err != nil || receipt.Status != types.ReceiptStatusSuccessful { + panic(fmt.Errorf("failed to deploy public callbacks test contract")) + } + + success, err := instance.IsLastCallSuccess(&bind.CallOpts{Context: s.ctx}) + if err != nil { + panic(fmt.Errorf("failed to check if last call was successful: %w", err)) + } + if !success { + panic(fmt.Errorf("last call was not successful")) + } +} + func (s *Simulation) deployTenZen() { testlog.Logger().Info("Deploying ZenBase contract") From 4ef97cd3c0603aec3789a05a6e2e03d811c773b1 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 12 Nov 2024 15:48:05 +0200 Subject: [PATCH 11/19] Working version. --- .../PublicCallbacks/PublicCallbacks.go | 172 +++++++++++++++--- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 25 ++- contracts/src/testing/PublicCallBacksTest.sol | 7 +- integration/simulation/simulation.go | 3 +- 5 files changed, 172 insertions(+), 37 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index 4b1f83806..d32bea7e3 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -31,8 +31,8 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610abe806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610623565b6100f6565b60405161008e94939291906106c5565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac6101f4565b6100ac6100d136600461075c565b610336565b3480156100e257600080fd5b506100ac6100f1366004610623565b610346565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906107ba565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906107ba565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306107fc565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610853565b60405180910390fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561023f5750825b905060008267ffffffffffffffff16600114801561025c5750303b155b90508115801561026a575080155b156102a1576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102d557845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561032f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061032690600190610887565b60405180910390a15b5050505050565b610342338383346104eb565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b031682526001810180549293919291840191610382906107ba565b80601f01602080910402602001604051908101604052809291908181526020018280546103ae906107ba565b80156103fb5780601f106103d0576101008083540402835291602001916103fb565b820191906000526020600020905b8154815290600101906020018083116103de57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161043c91906108b7565b6000604051808303816000865af19150503d8060008114610479576040519150601f19603f3d011682016040523d82523d6000602084013e61047e565b606091505b505090508061049f5760405162461bcd60e51b81526004016101e8906108f3565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104d660018301826105cc565b50600060028201819055600390910155505050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261055e83610903565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105af90826109c8565b506040820151600282015560609091015160039091015550505050565b5080546105d8906107ba565b6000825580601f106105e8575050565b601f0160209004906000526020600020908101906101f191905b808211156106165760008155600101610602565b5090565b80355b92915050565b60006020828403121561063857610638600080fd5b610642838361061a565b9392505050565b60006001600160a01b03821661061d565b61066381610649565b82525050565b60005b8381101561068457818101518382015260200161066c565b50506000910152565b6000610697825190565b8084526020840193506106ae818560208601610669565b601f01601f19169290920192915050565b80610663565b608081016106d3828761065a565b81810360208301526106e5818661068d565b90506106f460408301856106bf565b61070160608301846106bf565b95945050505050565b60008083601f84011261071f5761071f600080fd5b50813567ffffffffffffffff81111561073a5761073a600080fd5b60208301915083600182028301111561075557610755600080fd5b9250929050565b6000806020838503121561077257610772600080fd5b823567ffffffffffffffff81111561078c5761078c600080fd5b6107988582860161070a565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107ce57607f821691505b6020821081036107e0576107e06107a4565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561061d5761061d6107e6565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161061d8161081f565b600061061d82610871565b90565b67ffffffffffffffff1690565b61066381610863565b6020810161061d828461087e565b600061089f825190565b6108ad818560208601610669565b9290920192915050565b61061d8183610895565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c6564000000000000008152905061084d565b6020808252810161061d816108c1565b600060018201610915576109156107e6565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600061061d61086e8381565b61094783610932565b815460001960089490940293841b1916921b91909117905550565b600061096f81848461093e565b505050565b8181101561034257610987600082610962565b600101610974565b601f82111561096f576000818152602090206020601f850104810160208510156109b65750805b61032f6020601f860104830182610974565b815167ffffffffffffffff8111156109e2576109e261091c565b6109ec82546107ba565b6109f782828561098f565b506020601f821160018114610a2c5760008315610a145750848201515b600019600885021c198116600285021785555061032f565b600084815260208120601f198516915b82811015610a5c5787850151825560209485019460019092019101610a3c565b5084821015610a795783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220891529e94a6d4a8dd69aa2a538695e75a3b75272c2e01bd2088e20eb917a4e4d64736f6c634300081c0033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasBefore\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasAfter\",\"type\":\"uint256\"}],\"name\":\"CallbackExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e7f806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610829565b6100f6565b60405161008e94939291906108cb565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610374565b6100ac6100d1366004610962565b6104b6565b3480156100e257600080fd5b506100ac6100f1366004610829565b61050f565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109c0565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109c0565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a02565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a59565b60405180910390fd5b600254600154146103715760028054908190600061020e83610a69565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610ab4565b6000818152602081905260408120600381015460028201549192909161025b908390610ada565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b60565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107d4565b506000600282018190556003909101555b60005a90507f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b287848360405161035493929190610b6a565b60405180910390a161036986600201546106b4565b505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103bf5750825b905060008267ffffffffffffffff1660011480156103dc5750303b155b9050811580156103ea575080155b15610421576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045557845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104af57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104a690600190610bbe565b60405180910390a15b5050505050565b600034116104d65760405162461bcd60e51b81526004016101e890610bfe565b6152086104e2346106e1565b116104ff5760405162461bcd60e51b81526004016101e890610c0e565b61050b338383346106f3565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161054b906109c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610577906109c0565b80156105c45780601f10610599576101008083540402835291602001916105c4565b820191906000526020600020905b8154815290600101906020018083116105a757829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106059190610c91565b6000604051808303816000865af19150503d8060008114610642576040519150601f19603f3d011682016040523d82523d6000602084013e610647565b606091505b50509050806106685760405162461bcd60e51b81526004016101e890610ccd565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061069f60018301826107d4565b50600060028201819055600390910155505050565b604051419082156108fc029083906000818181858888f1935050505015801561050b573d6000803e3d6000fd5b60006106ed4883610ada565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076683610a69565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b79082610d89565b506040820151600282015560609091015160039091015550505050565b5080546107e0906109c0565b6000825580601f106107f0575050565b601f01602090049060005260206000209081019061037191905b8082111561081e576000815560010161080a565b5090565b80356106ed565b60006020828403121561083e5761083e600080fd5b6108488383610822565b9392505050565b60006001600160a01b0382166106ed565b6108698161084f565b82525050565b60005b8381101561088a578181015183820152602001610872565b50506000910152565b600061089d825190565b8084526020840193506108b481856020860161086f565b601f01601f19169290920192915050565b80610869565b608081016108d98287610860565b81810360208301526108eb8186610893565b90506108fa60408301856108c5565b61090760608301846108c5565b95945050505050565b60008083601f84011261092557610925600080fd5b50813567ffffffffffffffff81111561094057610940600080fd5b60208301915083600182028301111561095b5761095b600080fd5b9250929050565b6000806020838503121561097857610978600080fd5b823567ffffffffffffffff81111561099257610992600080fd5b61099e85828601610910565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d457607f821691505b6020821081036109e6576109e66109aa565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156106ed576106ed6109ec565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ed81610a25565b600060018201610a7b57610a7b6109ec565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a53565b602080825281016106ed81610a82565b634e487b7160e01b600052601260045260246000fd5b600082610ae957610ae9610ac4565b500490565b60008154610afb816109c0565b600182168015610b125760018114610b2757610b57565b60ff1983168652811515820286019350610b57565b60008581526020902060005b83811015610b4f57815488820152600190910190602001610b33565b505081860193505b50505092915050565b6106ed8183610aee565b60608101610b7882866108c5565b610b8560208301856108c5565b610b9260408301846108c5565b949350505050565b60006106ed82610ba8565b90565b67ffffffffffffffff1690565b61086981610b9a565b602081016106ed8284610bb5565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610a53565b602080825281016106ed81610bcc565b602080825281016106ed81602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c79825190565b610c8781856020860161086f565b9290920192915050565b6106ed8183610c6f565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a53565b602080825281016106ed81610c9b565b634e487b7160e01b600052604160045260246000fd5b60006106ed610ba58381565b610d0883610cf3565b815460001960089490940293841b1916921b91909117905550565b6000610d30818484610cff565b505050565b8181101561050b57610d48600082610d23565b600101610d35565b601f821115610d30576000818152602090206020601f85010481016020851015610d775750805b6104af6020601f860104830182610d35565b815167ffffffffffffffff811115610da357610da3610cdd565b610dad82546109c0565b610db8828285610d50565b506020601f821160018114610ded5760008315610dd55750848201515b600019600885021c19811660028502178555506104af565b600084815260208120601f198516915b82811015610e1d5787850151825560209485019460019092019101610dfd565b5084821015610e3a5783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220e3662b6b78c1b72daff09d3ae96862c0c38b5ffadafe12aeafefb4fd761ff4c164736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. @@ -257,33 +257,25 @@ func (_PublicCallbacks *PublicCallbacksCallerSession) Callbacks(arg0 *big.Int) ( return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) } -// ExecuteNextCallback is a free data retrieval call binding the contract method 0x349e7eca. +// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. // -// Solidity: function executeNextCallback() view returns() -func (_PublicCallbacks *PublicCallbacksCaller) ExecuteNextCallback(opts *bind.CallOpts) error { - var out []interface{} - err := _PublicCallbacks.contract.Call(opts, &out, "executeNextCallback") - - if err != nil { - return err - } - - return err - +// Solidity: function executeNextCallback() returns() +func (_PublicCallbacks *PublicCallbacksTransactor) ExecuteNextCallback(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacks.contract.Transact(opts, "executeNextCallback") } -// ExecuteNextCallback is a free data retrieval call binding the contract method 0x349e7eca. +// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. // -// Solidity: function executeNextCallback() view returns() -func (_PublicCallbacks *PublicCallbacksSession) ExecuteNextCallback() error { - return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.CallOpts) +// Solidity: function executeNextCallback() returns() +func (_PublicCallbacks *PublicCallbacksSession) ExecuteNextCallback() (*types.Transaction, error) { + return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) } -// ExecuteNextCallback is a free data retrieval call binding the contract method 0x349e7eca. +// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. // -// Solidity: function executeNextCallback() view returns() -func (_PublicCallbacks *PublicCallbacksCallerSession) ExecuteNextCallback() error { - return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.CallOpts) +// Solidity: function executeNextCallback() returns() +func (_PublicCallbacks *PublicCallbacksTransactorSession) ExecuteNextCallback() (*types.Transaction, error) { + return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) } // Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. @@ -349,6 +341,142 @@ func (_PublicCallbacks *PublicCallbacksTransactorSession) Register(callback []by return _PublicCallbacks.Contract.Register(&_PublicCallbacks.TransactOpts, callback) } +// PublicCallbacksCallbackExecutedIterator is returned from FilterCallbackExecuted and is used to iterate over the raw logs and unpacked data for CallbackExecuted events raised by the PublicCallbacks contract. +type PublicCallbacksCallbackExecutedIterator struct { + Event *PublicCallbacksCallbackExecuted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicCallbacksCallbackExecutedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicCallbacksCallbackExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicCallbacksCallbackExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *PublicCallbacksCallbackExecutedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicCallbacksCallbackExecutedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicCallbacksCallbackExecuted represents a CallbackExecuted event raised by the PublicCallbacks contract. +type PublicCallbacksCallbackExecuted struct { + CallbackId *big.Int + GasBefore *big.Int + GasAfter *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallbackExecuted is a free log retrieval operation binding the contract event 0x79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b2. +// +// Solidity: event CallbackExecuted(uint256 callbackId, uint256 gasBefore, uint256 gasAfter) +func (_PublicCallbacks *PublicCallbacksFilterer) FilterCallbackExecuted(opts *bind.FilterOpts) (*PublicCallbacksCallbackExecutedIterator, error) { + + logs, sub, err := _PublicCallbacks.contract.FilterLogs(opts, "CallbackExecuted") + if err != nil { + return nil, err + } + return &PublicCallbacksCallbackExecutedIterator{contract: _PublicCallbacks.contract, event: "CallbackExecuted", logs: logs, sub: sub}, nil +} + +// WatchCallbackExecuted is a free log subscription operation binding the contract event 0x79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b2. +// +// Solidity: event CallbackExecuted(uint256 callbackId, uint256 gasBefore, uint256 gasAfter) +func (_PublicCallbacks *PublicCallbacksFilterer) WatchCallbackExecuted(opts *bind.WatchOpts, sink chan<- *PublicCallbacksCallbackExecuted) (event.Subscription, error) { + + logs, sub, err := _PublicCallbacks.contract.WatchLogs(opts, "CallbackExecuted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicCallbacksCallbackExecuted) + if err := _PublicCallbacks.contract.UnpackLog(event, "CallbackExecuted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallbackExecuted is a log parse operation binding the contract event 0x79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b2. +// +// Solidity: event CallbackExecuted(uint256 callbackId, uint256 gasBefore, uint256 gasAfter) +func (_PublicCallbacks *PublicCallbacksFilterer) ParseCallbackExecuted(log types.Log) (*PublicCallbacksCallbackExecuted, error) { + event := new(PublicCallbacksCallbackExecuted) + if err := _PublicCallbacks.contract.UnpackLog(event, "CallbackExecuted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // PublicCallbacksInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PublicCallbacks contract. type PublicCallbacksInitializedIterator struct { Event *PublicCallbacksInitialized // Event containing the contract specifics and raw log diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 87ff1aaae..f61d2ba2c 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b5060405161494338038061494383398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614923833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614923833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614923833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610b9780612b0283390190565b61128a8061369983390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212206ab8cdd19f8fee66c1e39bb1a74faa7b50a1d8540e7b64a75ec0dd90ef27146564736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610abe806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610623565b6100f6565b60405161008e94939291906106c5565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac6101f4565b6100ac6100d136600461075c565b610336565b3480156100e257600080fd5b506100ac6100f1366004610623565b610346565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906107ba565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906107ba565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be6001306107fc565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610853565b60405180910390fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561023f5750825b905060008267ffffffffffffffff16600114801561025c5750303b155b90508115801561026a575080155b156102a1576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102d557845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561032f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061032690600190610887565b60405180910390a15b5050505050565b610342338383346104eb565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b031682526001810180549293919291840191610382906107ba565b80601f01602080910402602001604051908101604052809291908181526020018280546103ae906107ba565b80156103fb5780601f106103d0576101008083540402835291602001916103fb565b820191906000526020600020905b8154815290600101906020018083116103de57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161043c91906108b7565b6000604051808303816000865af19150503d8060008114610479576040519150601f19603f3d011682016040523d82523d6000602084013e61047e565b606091505b505090508061049f5760405162461bcd60e51b81526004016101e8906108f3565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104d660018301826105cc565b50600060028201819055600390910155505050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261055e83610903565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906105af90826109c8565b506040820151600282015560609091015160039091015550505050565b5080546105d8906107ba565b6000825580601f106105e8575050565b601f0160209004906000526020600020908101906101f191905b808211156106165760008155600101610602565b5090565b80355b92915050565b60006020828403121561063857610638600080fd5b610642838361061a565b9392505050565b60006001600160a01b03821661061d565b61066381610649565b82525050565b60005b8381101561068457818101518382015260200161066c565b50506000910152565b6000610697825190565b8084526020840193506106ae818560208601610669565b601f01601f19169290920192915050565b80610663565b608081016106d3828761065a565b81810360208301526106e5818661068d565b90506106f460408301856106bf565b61070160608301846106bf565b95945050505050565b60008083601f84011261071f5761071f600080fd5b50813567ffffffffffffffff81111561073a5761073a600080fd5b60208301915083600182028301111561075557610755600080fd5b9250929050565b6000806020838503121561077257610772600080fd5b823567ffffffffffffffff81111561078c5761078c600080fd5b6107988582860161070a565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107ce57607f821691505b6020821081036107e0576107e06107a4565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561061d5761061d6107e6565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161061d8161081f565b600061061d82610871565b90565b67ffffffffffffffff1690565b61066381610863565b6020810161061d828461087e565b600061089f825190565b6108ad818560208601610669565b9290920192915050565b61061d8183610895565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c6564000000000000008152905061084d565b6020808252810161061d816108c1565b600060018201610915576109156107e6565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600061061d61086e8381565b61094783610932565b815460001960089490940293841b1916921b91909117905550565b600061096f81848461093e565b505050565b8181101561034257610987600082610962565b600101610974565b601f82111561096f576000818152602090206020601f850104810160208510156109b65750805b61032f6020601f860104830182610974565b815167ffffffffffffffff8111156109e2576109e261091c565b6109ec82546107ba565b6109f782828561098f565b506020601f821160018114610a2c5760008315610a145750848201515b600019600885021c198116600285021785555061032f565b600084815260208120601f198516915b82811015610a5c5787850151825560209485019460019092019101610a3c565b5084821015610a795783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220891529e94a6d4a8dd69aa2a538695e75a3b75272c2e01bd2088e20eb917a4e4d64736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614d04380380614d0483398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614ce4833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614ce4833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614ce4833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610f5880612b0283390190565b61128a80613a5a83390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea2646970667358221220400fe4df0e3604341c74ec9f0c03adf7580b295d1693fe976c727688a7866c5264736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e7f806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610829565b6100f6565b60405161008e94939291906108cb565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610374565b6100ac6100d1366004610962565b6104b6565b3480156100e257600080fd5b506100ac6100f1366004610829565b61050f565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109c0565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109c0565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a02565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a59565b60405180910390fd5b600254600154146103715760028054908190600061020e83610a69565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610ab4565b6000818152602081905260408120600381015460028201549192909161025b908390610ada565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b60565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107d4565b506000600282018190556003909101555b60005a90507f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b287848360405161035493929190610b6a565b60405180910390a161036986600201546106b4565b505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103bf5750825b905060008267ffffffffffffffff1660011480156103dc5750303b155b9050811580156103ea575080155b15610421576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045557845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104af57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104a690600190610bbe565b60405180910390a15b5050505050565b600034116104d65760405162461bcd60e51b81526004016101e890610bfe565b6152086104e2346106e1565b116104ff5760405162461bcd60e51b81526004016101e890610c0e565b61050b338383346106f3565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161054b906109c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610577906109c0565b80156105c45780601f10610599576101008083540402835291602001916105c4565b820191906000526020600020905b8154815290600101906020018083116105a757829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106059190610c91565b6000604051808303816000865af19150503d8060008114610642576040519150601f19603f3d011682016040523d82523d6000602084013e610647565b606091505b50509050806106685760405162461bcd60e51b81526004016101e890610ccd565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061069f60018301826107d4565b50600060028201819055600390910155505050565b604051419082156108fc029083906000818181858888f1935050505015801561050b573d6000803e3d6000fd5b60006106ed4883610ada565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076683610a69565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b79082610d89565b506040820151600282015560609091015160039091015550505050565b5080546107e0906109c0565b6000825580601f106107f0575050565b601f01602090049060005260206000209081019061037191905b8082111561081e576000815560010161080a565b5090565b80356106ed565b60006020828403121561083e5761083e600080fd5b6108488383610822565b9392505050565b60006001600160a01b0382166106ed565b6108698161084f565b82525050565b60005b8381101561088a578181015183820152602001610872565b50506000910152565b600061089d825190565b8084526020840193506108b481856020860161086f565b601f01601f19169290920192915050565b80610869565b608081016108d98287610860565b81810360208301526108eb8186610893565b90506108fa60408301856108c5565b61090760608301846108c5565b95945050505050565b60008083601f84011261092557610925600080fd5b50813567ffffffffffffffff81111561094057610940600080fd5b60208301915083600182028301111561095b5761095b600080fd5b9250929050565b6000806020838503121561097857610978600080fd5b823567ffffffffffffffff81111561099257610992600080fd5b61099e85828601610910565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d457607f821691505b6020821081036109e6576109e66109aa565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156106ed576106ed6109ec565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ed81610a25565b600060018201610a7b57610a7b6109ec565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a53565b602080825281016106ed81610a82565b634e487b7160e01b600052601260045260246000fd5b600082610ae957610ae9610ac4565b500490565b60008154610afb816109c0565b600182168015610b125760018114610b2757610b57565b60ff1983168652811515820286019350610b57565b60008581526020902060005b83811015610b4f57815488820152600190910190602001610b33565b505081860193505b50505092915050565b6106ed8183610aee565b60608101610b7882866108c5565b610b8560208301856108c5565b610b9260408301846108c5565b949350505050565b60006106ed82610ba8565b90565b67ffffffffffffffff1690565b61086981610b9a565b602081016106ed8284610bb5565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610a53565b602080825281016106ed81610bcc565b602080825281016106ed81602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c79825190565b610c8781856020860161086f565b9290920192915050565b6106ed8183610c6f565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a53565b602080825281016106ed81610c9b565b634e487b7160e01b600052604160045260246000fd5b60006106ed610ba58381565b610d0883610cf3565b815460001960089490940293841b1916921b91909117905550565b6000610d30818484610cff565b505050565b8181101561050b57610d48600082610d23565b600101610d35565b601f821115610d30576000818152602090206020601f85010481016020851015610d775750805b6104af6020601f860104830182610d35565b815167ffffffffffffffff811115610da357610da3610cdd565b610dad82546109c0565b610db8828285610d50565b506020601f821160018114610ded5760008315610dd55750848201515b600019600885021c19811660028502178555506104af565b600084815260208120601f198516915b82811015610e1d5787850151825560209485019460019092019101610dfd565b5084821015610e3a5783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220e3662b6b78c1b72daff09d3ae96862c0c38b5ffadafe12aeafefb4fd761ff4c164736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index 0c9cbfa6b..7596c2ce0 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -42,7 +42,13 @@ contract PublicCallbacks is Initializable { callbacks[nextCallbackId++] = Callback({target: callback, data: data, value: value, baseFee: block.basefee}); } + function calculateGas(uint256 value) internal view returns (uint256) { + return value / block.basefee; + } + function register(bytes calldata callback) external payable { + require(msg.value > 0, "No value sent"); + require(calculateGas(msg.value) > 21000, "Gas too low compared to cost of call"); addCallback(msg.sender, callback, msg.value); } @@ -56,19 +62,19 @@ contract PublicCallbacks is Initializable { // nothing to refund; the callback was already paid for during its failure } + event CallbackExecuted(uint256 callbackId, uint256 gasBefore, uint256 gasAfter); + // System level call. As it is called during a synthetic transaction that does not have gas limit, // the contract enforces a custom limit based on the value stored for the callback. // It attempts to somewhat accurately refund. - function executeNextCallback() external view onlySelf { + function executeNextCallback() external onlySelf { if (nextCallbackId == lastUnusedCallbackId) { return; // todo: change to revert if possible } - return; - - /* uint256 callbackId = lastUnusedCallbackId; + uint256 callbackId = lastUnusedCallbackId; lastUnusedCallbackId++; - //require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); + require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); Callback storage callback = callbacks[callbackId]; uint256 baseFee = callback.baseFee; uint256 gas = callback.value / baseFee; @@ -78,11 +84,12 @@ contract PublicCallbacks is Initializable { delete callbacks[callbackId]; } uint256 gasAfter = gasleft(); - uint256 gasRefund = (gasBefore - gasAfter) * baseFee; - callback.value = callback.value - gasRefund; + emit CallbackExecuted(callbackId, gasBefore, gasAfter); + // uint256 gasRefund = (gasBefore - gasAfter); + // callback.value = callback.value - gasRefund; - /* internalRefund(gasRefund, callback.target); - payForCallback(callback.value);*/ + //internalRefund(gasRefund, callback.target); + payForCallback(callback.value); } function internalRefund(uint256 gasRefund, address to) internal { diff --git a/contracts/src/testing/PublicCallBacksTest.sol b/contracts/src/testing/PublicCallBacksTest.sol index 65d44284e..bb25391c9 100644 --- a/contracts/src/testing/PublicCallBacksTest.sol +++ b/contracts/src/testing/PublicCallBacksTest.sol @@ -8,17 +8,17 @@ contract PublicCallbacksTest { constructor(address _callbacks) payable { callbacks = IPublicCallbacks(_callbacks); - lastCallSuccess = true; + lastCallSuccess = false; testRegisterCallback(); } - bool lastCallSuccess = true; + bool lastCallSuccess = false; // This function will be called back by the system function handleCallback(uint256 expectedGas) external { uint256 gasGiven = gasleft(); if (gasGiven > expectedGas - 22000) { //call + 1000 for calldata (which overshoots greatly) - lastCallSuccess = false; + lastCallSuccess = true; } // Handle the callback here // For testing we'll just allow it to succeed @@ -27,7 +27,6 @@ contract PublicCallbacksTest { // Test function that registers a callback function testRegisterCallback() internal { - require(lastCallSuccess, "Last call failed"); // Encode the callback data - calling handleCallback() // Calculate expected gas based on value sent uint256 expectedGas = msg.value / block.basefee; diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index b71e701eb..ecdb70944 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -280,6 +280,7 @@ func (s *Simulation) deployPublicCallbacksTest() { auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, s.Params.Wallets.L2FaucetWallet)) auth.GasPrice = big.NewInt(0).SetUint64(gethparams.InitialBaseFee) auth.Context = s.ctx + auth.Value = big.NewInt(0).Mul(big.NewInt(1), big.NewInt(gethparams.Ether)) _, tx, instance, err := PublicCallbacksTest.DeployPublicCallbacksTest(auth, rpcClient, publicCallbacksAddress) if err != nil { @@ -291,7 +292,7 @@ func (s *Simulation) deployPublicCallbacksTest() { panic(fmt.Errorf("failed to deploy public callbacks test contract")) } - success, err := instance.IsLastCallSuccess(&bind.CallOpts{Context: s.ctx}) + success, err := instance.IsLastCallSuccess(&bind.CallOpts{Context: s.ctx, From: s.Params.Wallets.L2FaucetWallet.Address()}) if err != nil { panic(fmt.Errorf("failed to check if last call was successful: %w", err)) } From 921bb4ca5ce8a2516075150cadfcff32878c297a Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 12 Nov 2024 15:48:27 +0200 Subject: [PATCH 12/19] Added missing file. --- .../PublicCallbacksTest.go | 286 ++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go diff --git a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go new file mode 100644 index 000000000..abc44e6f9 --- /dev/null +++ b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go @@ -0,0 +1,286 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package PublicCallbacksTest + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// PublicCallbacksTestMetaData contains all meta data concerning the PublicCallbacksTest contract. +var PublicCallbacksTestMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callbacks\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"contractIPublicCallbacks\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedGas\",\"type\":\"uint256\"}],\"name\":\"handleCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLastCallSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060408190526000805460ff60a01b191690556104273881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610203806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b604051610072919061013a565b60405180910390f35b61008e61008936600461014f565b6100aa565b005b600054600160a01b900460ff16604051610072919061017d565b60005a90506100bb6155f0836101ba565b8111156100f157600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010f826100f5565b600061010f82610115565b61013481610120565b82525050565b6020810161010f828461012b565b803561010f565b60006020828403121561016457610164600080fd5b61016e8383610148565b9392505050565b801515610134565b6020810161010f8284610175565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010f5761010f61018b56fea2646970667358221220ae39e41982c357332ce1f0031f45a80167c86a1c6d52dcc870e45a2980d7cad164736f6c634300081c0033", +} + +// PublicCallbacksTestABI is the input ABI used to generate the binding from. +// Deprecated: Use PublicCallbacksTestMetaData.ABI instead. +var PublicCallbacksTestABI = PublicCallbacksTestMetaData.ABI + +// PublicCallbacksTestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PublicCallbacksTestMetaData.Bin instead. +var PublicCallbacksTestBin = PublicCallbacksTestMetaData.Bin + +// DeployPublicCallbacksTest deploys a new Ethereum contract, binding an instance of PublicCallbacksTest to it. +func DeployPublicCallbacksTest(auth *bind.TransactOpts, backend bind.ContractBackend, _callbacks common.Address) (common.Address, *types.Transaction, *PublicCallbacksTest, error) { + parsed, err := PublicCallbacksTestMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(PublicCallbacksTestBin), backend, _callbacks) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PublicCallbacksTest{PublicCallbacksTestCaller: PublicCallbacksTestCaller{contract: contract}, PublicCallbacksTestTransactor: PublicCallbacksTestTransactor{contract: contract}, PublicCallbacksTestFilterer: PublicCallbacksTestFilterer{contract: contract}}, nil +} + +// PublicCallbacksTest is an auto generated Go binding around an Ethereum contract. +type PublicCallbacksTest struct { + PublicCallbacksTestCaller // Read-only binding to the contract + PublicCallbacksTestTransactor // Write-only binding to the contract + PublicCallbacksTestFilterer // Log filterer for contract events +} + +// PublicCallbacksTestCaller is an auto generated read-only Go binding around an Ethereum contract. +type PublicCallbacksTestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicCallbacksTestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PublicCallbacksTestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicCallbacksTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PublicCallbacksTestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicCallbacksTestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PublicCallbacksTestSession struct { + Contract *PublicCallbacksTest // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PublicCallbacksTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PublicCallbacksTestCallerSession struct { + Contract *PublicCallbacksTestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PublicCallbacksTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PublicCallbacksTestTransactorSession struct { + Contract *PublicCallbacksTestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PublicCallbacksTestRaw is an auto generated low-level Go binding around an Ethereum contract. +type PublicCallbacksTestRaw struct { + Contract *PublicCallbacksTest // Generic contract binding to access the raw methods on +} + +// PublicCallbacksTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PublicCallbacksTestCallerRaw struct { + Contract *PublicCallbacksTestCaller // Generic read-only contract binding to access the raw methods on +} + +// PublicCallbacksTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PublicCallbacksTestTransactorRaw struct { + Contract *PublicCallbacksTestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPublicCallbacksTest creates a new instance of PublicCallbacksTest, bound to a specific deployed contract. +func NewPublicCallbacksTest(address common.Address, backend bind.ContractBackend) (*PublicCallbacksTest, error) { + contract, err := bindPublicCallbacksTest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PublicCallbacksTest{PublicCallbacksTestCaller: PublicCallbacksTestCaller{contract: contract}, PublicCallbacksTestTransactor: PublicCallbacksTestTransactor{contract: contract}, PublicCallbacksTestFilterer: PublicCallbacksTestFilterer{contract: contract}}, nil +} + +// NewPublicCallbacksTestCaller creates a new read-only instance of PublicCallbacksTest, bound to a specific deployed contract. +func NewPublicCallbacksTestCaller(address common.Address, caller bind.ContractCaller) (*PublicCallbacksTestCaller, error) { + contract, err := bindPublicCallbacksTest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PublicCallbacksTestCaller{contract: contract}, nil +} + +// NewPublicCallbacksTestTransactor creates a new write-only instance of PublicCallbacksTest, bound to a specific deployed contract. +func NewPublicCallbacksTestTransactor(address common.Address, transactor bind.ContractTransactor) (*PublicCallbacksTestTransactor, error) { + contract, err := bindPublicCallbacksTest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PublicCallbacksTestTransactor{contract: contract}, nil +} + +// NewPublicCallbacksTestFilterer creates a new log filterer instance of PublicCallbacksTest, bound to a specific deployed contract. +func NewPublicCallbacksTestFilterer(address common.Address, filterer bind.ContractFilterer) (*PublicCallbacksTestFilterer, error) { + contract, err := bindPublicCallbacksTest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PublicCallbacksTestFilterer{contract: contract}, nil +} + +// bindPublicCallbacksTest binds a generic wrapper to an already deployed contract. +func bindPublicCallbacksTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PublicCallbacksTestMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PublicCallbacksTest *PublicCallbacksTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PublicCallbacksTest.Contract.PublicCallbacksTestCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PublicCallbacksTest *PublicCallbacksTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacksTest.Contract.PublicCallbacksTestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PublicCallbacksTest *PublicCallbacksTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PublicCallbacksTest.Contract.PublicCallbacksTestTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PublicCallbacksTest *PublicCallbacksTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PublicCallbacksTest.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PublicCallbacksTest *PublicCallbacksTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacksTest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PublicCallbacksTest *PublicCallbacksTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PublicCallbacksTest.Contract.contract.Transact(opts, method, params...) +} + +// Callbacks is a free data retrieval call binding the contract method 0x00b12783. +// +// Solidity: function callbacks() view returns(address) +func (_PublicCallbacksTest *PublicCallbacksTestCaller) Callbacks(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PublicCallbacksTest.contract.Call(opts, &out, "callbacks") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Callbacks is a free data retrieval call binding the contract method 0x00b12783. +// +// Solidity: function callbacks() view returns(address) +func (_PublicCallbacksTest *PublicCallbacksTestSession) Callbacks() (common.Address, error) { + return _PublicCallbacksTest.Contract.Callbacks(&_PublicCallbacksTest.CallOpts) +} + +// Callbacks is a free data retrieval call binding the contract method 0x00b12783. +// +// Solidity: function callbacks() view returns(address) +func (_PublicCallbacksTest *PublicCallbacksTestCallerSession) Callbacks() (common.Address, error) { + return _PublicCallbacksTest.Contract.Callbacks(&_PublicCallbacksTest.CallOpts) +} + +// IsLastCallSuccess is a free data retrieval call binding the contract method 0xee1d5872. +// +// Solidity: function isLastCallSuccess() view returns(bool) +func (_PublicCallbacksTest *PublicCallbacksTestCaller) IsLastCallSuccess(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _PublicCallbacksTest.contract.Call(opts, &out, "isLastCallSuccess") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsLastCallSuccess is a free data retrieval call binding the contract method 0xee1d5872. +// +// Solidity: function isLastCallSuccess() view returns(bool) +func (_PublicCallbacksTest *PublicCallbacksTestSession) IsLastCallSuccess() (bool, error) { + return _PublicCallbacksTest.Contract.IsLastCallSuccess(&_PublicCallbacksTest.CallOpts) +} + +// IsLastCallSuccess is a free data retrieval call binding the contract method 0xee1d5872. +// +// Solidity: function isLastCallSuccess() view returns(bool) +func (_PublicCallbacksTest *PublicCallbacksTestCallerSession) IsLastCallSuccess() (bool, error) { + return _PublicCallbacksTest.Contract.IsLastCallSuccess(&_PublicCallbacksTest.CallOpts) +} + +// HandleCallback is a paid mutator transaction binding the contract method 0xa072d7b0. +// +// Solidity: function handleCallback(uint256 expectedGas) returns() +func (_PublicCallbacksTest *PublicCallbacksTestTransactor) HandleCallback(opts *bind.TransactOpts, expectedGas *big.Int) (*types.Transaction, error) { + return _PublicCallbacksTest.contract.Transact(opts, "handleCallback", expectedGas) +} + +// HandleCallback is a paid mutator transaction binding the contract method 0xa072d7b0. +// +// Solidity: function handleCallback(uint256 expectedGas) returns() +func (_PublicCallbacksTest *PublicCallbacksTestSession) HandleCallback(expectedGas *big.Int) (*types.Transaction, error) { + return _PublicCallbacksTest.Contract.HandleCallback(&_PublicCallbacksTest.TransactOpts, expectedGas) +} + +// HandleCallback is a paid mutator transaction binding the contract method 0xa072d7b0. +// +// Solidity: function handleCallback(uint256 expectedGas) returns() +func (_PublicCallbacksTest *PublicCallbacksTestTransactorSession) HandleCallback(expectedGas *big.Int) (*types.Transaction, error) { + return _PublicCallbacksTest.Contract.HandleCallback(&_PublicCallbacksTest.TransactOpts, expectedGas) +} From 9a5576384d4b1617bacbaffb4dd00bb7f9ad0905 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 12 Nov 2024 17:53:51 +0200 Subject: [PATCH 13/19] Working version. --- .../PublicCallbacks/PublicCallbacks.go | 2 +- .../PublicCallbacksTest.go | 2 +- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 25 +++++++++++++------ contracts/src/testing/PublicCallBacksTest.sol | 2 +- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index d32bea7e3..c0221a079 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasBefore\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasAfter\",\"type\":\"uint256\"}],\"name\":\"CallbackExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e7f806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610829565b6100f6565b60405161008e94939291906108cb565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610374565b6100ac6100d1366004610962565b6104b6565b3480156100e257600080fd5b506100ac6100f1366004610829565b61050f565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109c0565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109c0565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a02565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a59565b60405180910390fd5b600254600154146103715760028054908190600061020e83610a69565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610ab4565b6000818152602081905260408120600381015460028201549192909161025b908390610ada565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b60565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107d4565b506000600282018190556003909101555b60005a90507f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b287848360405161035493929190610b6a565b60405180910390a161036986600201546106b4565b505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103bf5750825b905060008267ffffffffffffffff1660011480156103dc5750303b155b9050811580156103ea575080155b15610421576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045557845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104af57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104a690600190610bbe565b60405180910390a15b5050505050565b600034116104d65760405162461bcd60e51b81526004016101e890610bfe565b6152086104e2346106e1565b116104ff5760405162461bcd60e51b81526004016101e890610c0e565b61050b338383346106f3565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161054b906109c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610577906109c0565b80156105c45780601f10610599576101008083540402835291602001916105c4565b820191906000526020600020905b8154815290600101906020018083116105a757829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106059190610c91565b6000604051808303816000865af19150503d8060008114610642576040519150601f19603f3d011682016040523d82523d6000602084013e610647565b606091505b50509050806106685760405162461bcd60e51b81526004016101e890610ccd565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061069f60018301826107d4565b50600060028201819055600390910155505050565b604051419082156108fc029083906000818181858888f1935050505015801561050b573d6000803e3d6000fd5b60006106ed4883610ada565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076683610a69565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b79082610d89565b506040820151600282015560609091015160039091015550505050565b5080546107e0906109c0565b6000825580601f106107f0575050565b601f01602090049060005260206000209081019061037191905b8082111561081e576000815560010161080a565b5090565b80356106ed565b60006020828403121561083e5761083e600080fd5b6108488383610822565b9392505050565b60006001600160a01b0382166106ed565b6108698161084f565b82525050565b60005b8381101561088a578181015183820152602001610872565b50506000910152565b600061089d825190565b8084526020840193506108b481856020860161086f565b601f01601f19169290920192915050565b80610869565b608081016108d98287610860565b81810360208301526108eb8186610893565b90506108fa60408301856108c5565b61090760608301846108c5565b95945050505050565b60008083601f84011261092557610925600080fd5b50813567ffffffffffffffff81111561094057610940600080fd5b60208301915083600182028301111561095b5761095b600080fd5b9250929050565b6000806020838503121561097857610978600080fd5b823567ffffffffffffffff81111561099257610992600080fd5b61099e85828601610910565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d457607f821691505b6020821081036109e6576109e66109aa565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156106ed576106ed6109ec565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ed81610a25565b600060018201610a7b57610a7b6109ec565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a53565b602080825281016106ed81610a82565b634e487b7160e01b600052601260045260246000fd5b600082610ae957610ae9610ac4565b500490565b60008154610afb816109c0565b600182168015610b125760018114610b2757610b57565b60ff1983168652811515820286019350610b57565b60008581526020902060005b83811015610b4f57815488820152600190910190602001610b33565b505081860193505b50505092915050565b6106ed8183610aee565b60608101610b7882866108c5565b610b8560208301856108c5565b610b9260408301846108c5565b949350505050565b60006106ed82610ba8565b90565b67ffffffffffffffff1690565b61086981610b9a565b602081016106ed8284610bb5565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610a53565b602080825281016106ed81610bcc565b602080825281016106ed81602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c79825190565b610c8781856020860161086f565b9290920192915050565b6106ed8183610c6f565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a53565b602080825281016106ed81610c9b565b634e487b7160e01b600052604160045260246000fd5b60006106ed610ba58381565b610d0883610cf3565b815460001960089490940293841b1916921b91909117905550565b6000610d30818484610cff565b505050565b8181101561050b57610d48600082610d23565b600101610d35565b601f821115610d30576000818152602090206020601f85010481016020851015610d775750805b6104af6020601f860104830182610d35565b815167ffffffffffffffff811115610da357610da3610cdd565b610dad82546109c0565b610db8828285610d50565b506020601f821160018114610ded5760008315610dd55750848201515b600019600885021c19811660028502178555506104af565b600084815260208120601f198516915b82811015610e1d5787850151825560209485019460019092019101610dfd565b5084821015610e3a5783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220e3662b6b78c1b72daff09d3ae96862c0c38b5ffadafe12aeafefb4fd761ff4c164736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61108d806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461095f565b6100f6565b60405161008e9493929190610a01565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610416565b6100ac6100d1366004610a98565b610558565b3480156100e257600080fd5b506100ac6100f136600461095f565b6105b1565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610af6565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610b38565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610b8f565b60405180910390fd5b600254600154146104135760028054908190600061020e83610b9f565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610bea565b6000818152602081905260408120600381015460028201549192909161025b908390610c10565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610c96565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b5050905060005a905060006102df8285610ca0565b905060008186111561030357866102f68388610ca0565b6103009190610cb3565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161033693929190610cca565b60405180910390a187600201544710156103625760405162461bcd60e51b81526004016101e890610d2c565b80886002015410156103865760405162461bcd60e51b81526004016101e890610d96565b60008189600201546103989190610ca0565b89549091506001600160a01b031685156103f45760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103e3600183018261090a565b506000600282018190556003909101555b6103fe8382610756565b610407826107ea565b50505050505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104615750825b905060008267ffffffffffffffff16600114801561047e5750303b155b90508115801561048c575080155b156104c3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104f757845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561055157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061054890600190610dca565b60405180910390a15b5050505050565b600034116105785760405162461bcd60e51b81526004016101e890610e0a565b61520861058434610817565b116105a15760405162461bcd60e51b81526004016101e890610e72565b6105ad33838334610829565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916105ed90610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461061990610af6565b80156106665780601f1061063b57610100808354040283529160200191610666565b820191906000526020600020905b81548152906001019060200180831161064957829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106a79190610ea4565b6000604051808303816000865af19150503d80600081146106e4576040519150601f19603f3d011682016040523d82523d6000602084013e6106e9565b606091505b505090508061070a5760405162461bcd60e51b81526004016101e890610ee0565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff1916815590610741600183018261090a565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146107a8576040519150601f19603f3d011682016040523d82523d6000602084013e6107ad565b606091505b50509050806107e557604051419084156108fc029085906000818181858888f193505050501580156107e3573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156105ad573d6000803e3d6000fd5b60006108234883610c10565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261089c83610b9f565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906108ed9082610f97565b506040820151600282015560609091015160039091015550505050565b50805461091690610af6565b6000825580601f10610926575050565b601f01602090049060005260206000209081019061041391905b808211156109545760008155600101610940565b5090565b8035610823565b60006020828403121561097457610974600080fd5b61097e8383610958565b9392505050565b60006001600160a01b038216610823565b61099f81610985565b82525050565b60005b838110156109c05781810151838201526020016109a8565b50506000910152565b60006109d3825190565b8084526020840193506109ea8185602086016109a5565b601f01601f19169290920192915050565b8061099f565b60808101610a0f8287610996565b8181036020830152610a2181866109c9565b9050610a3060408301856109fb565b610a3d60608301846109fb565b95945050505050565b60008083601f840112610a5b57610a5b600080fd5b50813567ffffffffffffffff811115610a7657610a76600080fd5b602083019150836001820283011115610a9157610a91600080fd5b9250929050565b60008060208385031215610aae57610aae600080fd5b823567ffffffffffffffff811115610ac857610ac8600080fd5b610ad485828601610a46565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b0a57607f821691505b602082108103610b1c57610b1c610ae0565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561082357610823610b22565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082381610b5b565b600060018201610bb157610bb1610b22565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b89565b6020808252810161082381610bb8565b634e487b7160e01b600052601260045260246000fd5b600082610c1f57610c1f610bfa565b500490565b60008154610c3181610af6565b600182168015610c485760018114610c5d57610c8d565b60ff1983168652811515820286019350610c8d565b60008581526020902060005b83811015610c8557815488820152600190910190602001610c69565b505081860193505b50505092915050565b6108238183610c24565b8181038181111561082357610823610b22565b818102811582820484141761082357610823610b22565b60608101610cd882866109fb565b610ce560208301856109fb565b610cf260408301846109fb565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b89565b6020808252810161082381610cfa565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c75650000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161082381610d3c565b600061082382610db4565b90565b67ffffffffffffffff1690565b61099f81610da6565b602081016108238284610dc1565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610b89565b6020808252810161082381610dd8565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c0000000000000000000000000000000000000000000000000000000060208201529050610d90565b6020808252810161082381610e1a565b6000610e8c825190565b610e9a8185602086016109a5565b9290920192915050565b6108238183610e82565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b89565b6020808252810161082381610eae565b634e487b7160e01b600052604160045260246000fd5b6000610823610db18381565b610f1b83610f06565b815460001960089490940293841b1916921b91909117905550565b60006107e5818484610f12565b818110156105ad57610f56600082610f36565b600101610f43565b601f8211156107e5576000818152602090206020601f85010481016020851015610f855750805b6105516020601f860104830182610f43565b815167ffffffffffffffff811115610fb157610fb1610ef0565b610fbb8254610af6565b610fc6828285610f5e565b506020601f821160018114610ffb5760008315610fe35750848201515b600019600885021c1981166002850217855550610551565b600084815260208120601f198516915b8281101561102b578785015182556020948501946001909201910161100b565b50848210156110485783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220057967974090fffb2bd443564f8deffab3b79bf38961f03dc61d4662a58c130864736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go index abc44e6f9..2575efed0 100644 --- a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go +++ b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksTestMetaData contains all meta data concerning the PublicCallbacksTest contract. var PublicCallbacksTestMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callbacks\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"contractIPublicCallbacks\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedGas\",\"type\":\"uint256\"}],\"name\":\"handleCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLastCallSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060408190526000805460ff60a01b191690556104273881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610203806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b604051610072919061013a565b60405180910390f35b61008e61008936600461014f565b6100aa565b005b600054600160a01b900460ff16604051610072919061017d565b60005a90506100bb6155f0836101ba565b8111156100f157600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010f826100f5565b600061010f82610115565b61013481610120565b82525050565b6020810161010f828461012b565b803561010f565b60006020828403121561016457610164600080fd5b61016e8383610148565b9392505050565b801515610134565b6020810161010f8284610175565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010f5761010f61018b56fea2646970667358221220ae39e41982c357332ce1f0031f45a80167c86a1c6d52dcc870e45a2980d7cad164736f6c634300081c0033", + Bin: "0x608060408190526000805460ff60a01b191690556104263881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610202806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100729190610139565b60405180910390f35b61008e61008936600461014e565b6100aa565b005b600054600160a01b900460ff16604051610072919061017c565b60005a90506100bb610834836101b9565b81106100f057600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010e826100f4565b600061010e82610114565b6101338161011f565b82525050565b6020810161010e828461012a565b803561010e565b60006020828403121561016357610163600080fd5b61016d8383610147565b9392505050565b801515610133565b6020810161010e8284610174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010e5761010e61018a56fea26469706673582212207f38b2c4e3395ee52dd35c65ab29121f9a316027c83b8cc19d9e748d832bf37064736f6c634300081c0033", } // PublicCallbacksTestABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index f61d2ba2c..6a5223d28 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614d04380380614d0483398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614ce4833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614ce4833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614ce4833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b610f5880612b0283390190565b61128a80613a5a83390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea2646970667358221220400fe4df0e3604341c74ec9f0c03adf7580b295d1693fe976c727688a7866c5264736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610e7f806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610829565b6100f6565b60405161008e94939291906108cb565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610374565b6100ac6100d1366004610962565b6104b6565b3480156100e257600080fd5b506100ac6100f1366004610829565b61050f565b600060208190529081526040902080546001820180546001600160a01b039092169291610122906109c0565b80601f016020809104026020016040519081016040528092919081815260200182805461014e906109c0565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610a02565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610a59565b60405180910390fd5b600254600154146103715760028054908190600061020e83610a69565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610ab4565b6000818152602081905260408120600381015460028201549192909161025b908390610ada565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610b60565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b50509050801561031c576000868152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061030b60018301826107d4565b506000600282018190556003909101555b60005a90507f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b287848360405161035493929190610b6a565b60405180910390a161036986600201546106b4565b505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103bf5750825b905060008267ffffffffffffffff1660011480156103dc5750303b155b9050811580156103ea575080155b15610421576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561045557845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156104af57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104a690600190610bbe565b60405180910390a15b5050505050565b600034116104d65760405162461bcd60e51b81526004016101e890610bfe565b6152086104e2346106e1565b116104ff5760405162461bcd60e51b81526004016101e890610c0e565b61050b338383346106f3565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161054b906109c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610577906109c0565b80156105c45780601f10610599576101008083540402835291602001916105c4565b820191906000526020600020905b8154815290600101906020018083116105a757829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106059190610c91565b6000604051808303816000865af19150503d8060008114610642576040519150601f19603f3d011682016040523d82523d6000602084013e610647565b606091505b50509050806106685760405162461bcd60e51b81526004016101e890610ccd565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff191681559061069f60018301826107d4565b50600060028201819055600390910155505050565b604051419082156108fc029083906000818181858888f1935050505015801561050b573d6000803e3d6000fd5b60006106ed4883610ada565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261076683610a69565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906107b79082610d89565b506040820151600282015560609091015160039091015550505050565b5080546107e0906109c0565b6000825580601f106107f0575050565b601f01602090049060005260206000209081019061037191905b8082111561081e576000815560010161080a565b5090565b80356106ed565b60006020828403121561083e5761083e600080fd5b6108488383610822565b9392505050565b60006001600160a01b0382166106ed565b6108698161084f565b82525050565b60005b8381101561088a578181015183820152602001610872565b50506000910152565b600061089d825190565b8084526020840193506108b481856020860161086f565b601f01601f19169290920192915050565b80610869565b608081016108d98287610860565b81810360208301526108eb8186610893565b90506108fa60408301856108c5565b61090760608301846108c5565b95945050505050565b60008083601f84011261092557610925600080fd5b50813567ffffffffffffffff81111561094057610940600080fd5b60208301915083600182028301111561095b5761095b600080fd5b9250929050565b6000806020838503121561097857610978600080fd5b823567ffffffffffffffff81111561099257610992600080fd5b61099e85828601610910565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806109d457607f821691505b6020821081036109e6576109e66109aa565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156106ed576106ed6109ec565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ed81610a25565b600060018201610a7b57610a7b6109ec565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610a53565b602080825281016106ed81610a82565b634e487b7160e01b600052601260045260246000fd5b600082610ae957610ae9610ac4565b500490565b60008154610afb816109c0565b600182168015610b125760018114610b2757610b57565b60ff1983168652811515820286019350610b57565b60008581526020902060005b83811015610b4f57815488820152600190910190602001610b33565b505081860193505b50505092915050565b6106ed8183610aee565b60608101610b7882866108c5565b610b8560208301856108c5565b610b9260408301846108c5565b949350505050565b60006106ed82610ba8565b90565b67ffffffffffffffff1690565b61086981610b9a565b602081016106ed8284610bb5565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610a53565b602080825281016106ed81610bcc565b602080825281016106ed81602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c79825190565b610c8781856020860161086f565b9290920192915050565b6106ed8183610c6f565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610a53565b602080825281016106ed81610c9b565b634e487b7160e01b600052604160045260246000fd5b60006106ed610ba58381565b610d0883610cf3565b815460001960089490940293841b1916921b91909117905550565b6000610d30818484610cff565b505050565b8181101561050b57610d48600082610d23565b600101610d35565b601f821115610d30576000818152602090206020601f85010481016020851015610d775750805b6104af6020601f860104830182610d35565b815167ffffffffffffffff811115610da357610da3610cdd565b610dad82546109c0565b610db8828285610d50565b506020601f821160018114610ded5760008315610dd55750848201515b600019600885021c19811660028502178555506104af565b600084815260208120601f198516915b82811015610e1d5787850151825560209485019460019092019101610dfd565b5084821015610e3a5783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220e3662b6b78c1b72daff09d3ae96862c0c38b5ffadafe12aeafefb4fd761ff4c164736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614f12380380614f1283398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614ef2833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614ef2833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614ef2833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b61116680612b0283390190565b61128a80613c6883390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea2646970667358221220eb51e3a4eb0e4b64785c9f84f2b24e3a59d2fa55fff7cf92cc3a2d121b23460464736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61108d806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461095f565b6100f6565b60405161008e9493929190610a01565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610416565b6100ac6100d1366004610a98565b610558565b3480156100e257600080fd5b506100ac6100f136600461095f565b6105b1565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610af6565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610b38565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610b8f565b60405180910390fd5b600254600154146104135760028054908190600061020e83610b9f565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610bea565b6000818152602081905260408120600381015460028201549192909161025b908390610c10565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610c96565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b5050905060005a905060006102df8285610ca0565b905060008186111561030357866102f68388610ca0565b6103009190610cb3565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161033693929190610cca565b60405180910390a187600201544710156103625760405162461bcd60e51b81526004016101e890610d2c565b80886002015410156103865760405162461bcd60e51b81526004016101e890610d96565b60008189600201546103989190610ca0565b89549091506001600160a01b031685156103f45760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103e3600183018261090a565b506000600282018190556003909101555b6103fe8382610756565b610407826107ea565b50505050505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104615750825b905060008267ffffffffffffffff16600114801561047e5750303b155b90508115801561048c575080155b156104c3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104f757845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561055157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061054890600190610dca565b60405180910390a15b5050505050565b600034116105785760405162461bcd60e51b81526004016101e890610e0a565b61520861058434610817565b116105a15760405162461bcd60e51b81526004016101e890610e72565b6105ad33838334610829565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916105ed90610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461061990610af6565b80156106665780601f1061063b57610100808354040283529160200191610666565b820191906000526020600020905b81548152906001019060200180831161064957829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106a79190610ea4565b6000604051808303816000865af19150503d80600081146106e4576040519150601f19603f3d011682016040523d82523d6000602084013e6106e9565b606091505b505090508061070a5760405162461bcd60e51b81526004016101e890610ee0565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff1916815590610741600183018261090a565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146107a8576040519150601f19603f3d011682016040523d82523d6000602084013e6107ad565b606091505b50509050806107e557604051419084156108fc029085906000818181858888f193505050501580156107e3573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156105ad573d6000803e3d6000fd5b60006108234883610c10565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261089c83610b9f565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906108ed9082610f97565b506040820151600282015560609091015160039091015550505050565b50805461091690610af6565b6000825580601f10610926575050565b601f01602090049060005260206000209081019061041391905b808211156109545760008155600101610940565b5090565b8035610823565b60006020828403121561097457610974600080fd5b61097e8383610958565b9392505050565b60006001600160a01b038216610823565b61099f81610985565b82525050565b60005b838110156109c05781810151838201526020016109a8565b50506000910152565b60006109d3825190565b8084526020840193506109ea8185602086016109a5565b601f01601f19169290920192915050565b8061099f565b60808101610a0f8287610996565b8181036020830152610a2181866109c9565b9050610a3060408301856109fb565b610a3d60608301846109fb565b95945050505050565b60008083601f840112610a5b57610a5b600080fd5b50813567ffffffffffffffff811115610a7657610a76600080fd5b602083019150836001820283011115610a9157610a91600080fd5b9250929050565b60008060208385031215610aae57610aae600080fd5b823567ffffffffffffffff811115610ac857610ac8600080fd5b610ad485828601610a46565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b0a57607f821691505b602082108103610b1c57610b1c610ae0565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561082357610823610b22565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082381610b5b565b600060018201610bb157610bb1610b22565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b89565b6020808252810161082381610bb8565b634e487b7160e01b600052601260045260246000fd5b600082610c1f57610c1f610bfa565b500490565b60008154610c3181610af6565b600182168015610c485760018114610c5d57610c8d565b60ff1983168652811515820286019350610c8d565b60008581526020902060005b83811015610c8557815488820152600190910190602001610c69565b505081860193505b50505092915050565b6108238183610c24565b8181038181111561082357610823610b22565b818102811582820484141761082357610823610b22565b60608101610cd882866109fb565b610ce560208301856109fb565b610cf260408301846109fb565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b89565b6020808252810161082381610cfa565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c75650000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161082381610d3c565b600061082382610db4565b90565b67ffffffffffffffff1690565b61099f81610da6565b602081016108238284610dc1565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610b89565b6020808252810161082381610dd8565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c0000000000000000000000000000000000000000000000000000000060208201529050610d90565b6020808252810161082381610e1a565b6000610e8c825190565b610e9a8185602086016109a5565b9290920192915050565b6108238183610e82565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b89565b6020808252810161082381610eae565b634e487b7160e01b600052604160045260246000fd5b6000610823610db18381565b610f1b83610f06565b815460001960089490940293841b1916921b91909117905550565b60006107e5818484610f12565b818110156105ad57610f56600082610f36565b600101610f43565b601f8211156107e5576000818152602090206020601f85010481016020851015610f855750805b6105516020601f860104830182610f43565b815167ffffffffffffffff811115610fb157610fb1610ef0565b610fbb8254610af6565b610fc6828285610f5e565b506020601f821160018114610ffb5760008315610fe35750848201515b600019600885021c1981166002850217855550610551565b600084815260208120601f198516915b8281101561102b578785015182556020948501946001909201910161100b565b50848210156110485783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220057967974090fffb2bd443564f8deffab3b79bf38961f03dc61d4662a58c130864736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index 7596c2ce0..4374ba480 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -80,16 +80,27 @@ contract PublicCallbacks is Initializable { uint256 gas = callback.value / baseFee; uint256 gasBefore = gasleft(); (bool success, ) = callback.target.call{gas: gas}(callback.data); - if (success) { - delete callbacks[callbackId]; - } uint256 gasAfter = gasleft(); + + + uint256 gasUsed = (gasBefore - gasAfter); + uint256 gasRefundValue = 0; + if (gas > gasUsed) { + gasRefundValue = (gas - gasUsed) * baseFee; + } + emit CallbackExecuted(callbackId, gasBefore, gasAfter); - // uint256 gasRefund = (gasBefore - gasAfter); - // callback.value = callback.value - gasRefund; + require(address(this).balance >= callback.value, "Not enough balance"); + require(callback.value >= gasRefundValue, "Refund value is greater than the value"); + uint256 paymentToCoinbase = callback.value - gasRefundValue; + address target = callback.target; - //internalRefund(gasRefund, callback.target); - payForCallback(callback.value); + if (success) { + delete callbacks[callbackId]; + } + + internalRefund(gasRefundValue, target); + payForCallback(paymentToCoinbase); } function internalRefund(uint256 gasRefund, address to) internal { diff --git a/contracts/src/testing/PublicCallBacksTest.sol b/contracts/src/testing/PublicCallBacksTest.sol index bb25391c9..64739dc7d 100644 --- a/contracts/src/testing/PublicCallBacksTest.sol +++ b/contracts/src/testing/PublicCallBacksTest.sol @@ -17,7 +17,7 @@ contract PublicCallbacksTest { // This function will be called back by the system function handleCallback(uint256 expectedGas) external { uint256 gasGiven = gasleft(); - if (gasGiven > expectedGas - 22000) { //call + 1000 for calldata (which overshoots greatly) + if (gasGiven >= expectedGas - 2100) { //call + 1000 for calldata (which overshoots greatly) lastCallSuccess = true; } // Handle the callback here From 5b70629b39c6c130995f4967c6053872ce6b50c6 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 13 Nov 2024 03:27:21 +0200 Subject: [PATCH 14/19] Linter fix. --- go/common/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/common/types.go b/go/common/types.go index ae293441c..4f9fa8ccf 100644 --- a/go/common/types.go +++ b/go/common/types.go @@ -191,5 +191,5 @@ func (cf *ChainFork) String() string { } func MaskedSender(address L2Address) L2Address { - return L2Address(common.BigToAddress(big.NewInt(0).Sub(address.Big(), big.NewInt(1)))) + return common.BigToAddress(big.NewInt(0).Sub(address.Big(), big.NewInt(1))) } From 1db8db770c7b368d39ee55713d89c380b76f4403 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 13 Nov 2024 13:25:46 +0200 Subject: [PATCH 15/19] Fix for tenscan. --- integration/tenscan/tenscan_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/tenscan/tenscan_test.go b/integration/tenscan/tenscan_test.go index b93e98470..38a0ed2f4 100644 --- a/integration/tenscan/tenscan_test.go +++ b/integration/tenscan/tenscan_test.go @@ -85,7 +85,7 @@ func TestTenscan(t *testing.T) { statusCode, body, err := fasthttp.Get(nil, fmt.Sprintf("%s/count/contracts/", serverAddress)) assert.NoError(t, err) assert.Equal(t, 200, statusCode) - assert.Equal(t, "{\"count\":7}", string(body)) + assert.Equal(t, "{\"count\":10}", string(body)) statusCode, body, err = fasthttp.Get(nil, fmt.Sprintf("%s/count/transactions/", serverAddress)) assert.NoError(t, err) From 81018469861ab7d7f9fa13de1efc8e3f33e33dd5 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 14 Nov 2024 14:17:44 +0200 Subject: [PATCH 16/19] Address PR review. --- .../PublicCallbacks/PublicCallbacks.go | 28 +++++++++---------- .../PublicCallbacksTest.go | 2 +- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 20 +++++++------ go/enclave/system/hooks.go | 2 +- 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index c0221a079..a28e49bb8 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -31,8 +31,8 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasBefore\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasAfter\",\"type\":\"uint256\"}],\"name\":\"CallbackExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61108d806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461095f565b6100f6565b60405161008e9493929190610a01565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610416565b6100ac6100d1366004610a98565b610558565b3480156100e257600080fd5b506100ac6100f136600461095f565b6105b1565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610af6565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610b38565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610b8f565b60405180910390fd5b600254600154146104135760028054908190600061020e83610b9f565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610bea565b6000818152602081905260408120600381015460028201549192909161025b908390610c10565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610c96565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b5050905060005a905060006102df8285610ca0565b905060008186111561030357866102f68388610ca0565b6103009190610cb3565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161033693929190610cca565b60405180910390a187600201544710156103625760405162461bcd60e51b81526004016101e890610d2c565b80886002015410156103865760405162461bcd60e51b81526004016101e890610d96565b60008189600201546103989190610ca0565b89549091506001600160a01b031685156103f45760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103e3600183018261090a565b506000600282018190556003909101555b6103fe8382610756565b610407826107ea565b50505050505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104615750825b905060008267ffffffffffffffff16600114801561047e5750303b155b90508115801561048c575080155b156104c3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104f757845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561055157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061054890600190610dca565b60405180910390a15b5050505050565b600034116105785760405162461bcd60e51b81526004016101e890610e0a565b61520861058434610817565b116105a15760405162461bcd60e51b81526004016101e890610e72565b6105ad33838334610829565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916105ed90610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461061990610af6565b80156106665780601f1061063b57610100808354040283529160200191610666565b820191906000526020600020905b81548152906001019060200180831161064957829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106a79190610ea4565b6000604051808303816000865af19150503d80600081146106e4576040519150601f19603f3d011682016040523d82523d6000602084013e6106e9565b606091505b505090508061070a5760405162461bcd60e51b81526004016101e890610ee0565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff1916815590610741600183018261090a565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146107a8576040519150601f19603f3d011682016040523d82523d6000602084013e6107ad565b606091505b50509050806107e557604051419084156108fc029085906000818181858888f193505050501580156107e3573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156105ad573d6000803e3d6000fd5b60006108234883610c10565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261089c83610b9f565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906108ed9082610f97565b506040820151600282015560609091015160039091015550505050565b50805461091690610af6565b6000825580601f10610926575050565b601f01602090049060005260206000209081019061041391905b808211156109545760008155600101610940565b5090565b8035610823565b60006020828403121561097457610974600080fd5b61097e8383610958565b9392505050565b60006001600160a01b038216610823565b61099f81610985565b82525050565b60005b838110156109c05781810151838201526020016109a8565b50506000910152565b60006109d3825190565b8084526020840193506109ea8185602086016109a5565b601f01601f19169290920192915050565b8061099f565b60808101610a0f8287610996565b8181036020830152610a2181866109c9565b9050610a3060408301856109fb565b610a3d60608301846109fb565b95945050505050565b60008083601f840112610a5b57610a5b600080fd5b50813567ffffffffffffffff811115610a7657610a76600080fd5b602083019150836001820283011115610a9157610a91600080fd5b9250929050565b60008060208385031215610aae57610aae600080fd5b823567ffffffffffffffff811115610ac857610ac8600080fd5b610ad485828601610a46565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b0a57607f821691505b602082108103610b1c57610b1c610ae0565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561082357610823610b22565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082381610b5b565b600060018201610bb157610bb1610b22565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b89565b6020808252810161082381610bb8565b634e487b7160e01b600052601260045260246000fd5b600082610c1f57610c1f610bfa565b500490565b60008154610c3181610af6565b600182168015610c485760018114610c5d57610c8d565b60ff1983168652811515820286019350610c8d565b60008581526020902060005b83811015610c8557815488820152600190910190602001610c69565b505081860193505b50505092915050565b6108238183610c24565b8181038181111561082357610823610b22565b818102811582820484141761082357610823610b22565b60608101610cd882866109fb565b610ce560208301856109fb565b610cf260408301846109fb565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b89565b6020808252810161082381610cfa565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c75650000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161082381610d3c565b600061082382610db4565b90565b67ffffffffffffffff1690565b61099f81610da6565b602081016108238284610dc1565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610b89565b6020808252810161082381610dd8565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c0000000000000000000000000000000000000000000000000000000060208201529050610d90565b6020808252810161082381610e1a565b6000610e8c825190565b610e9a8185602086016109a5565b9290920192915050565b6108238183610e82565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b89565b6020808252810161082381610eae565b634e487b7160e01b600052604160045260246000fd5b6000610823610db18381565b610f1b83610f06565b815460001960089490940293841b1916921b91909117905550565b60006107e5818484610f12565b818110156105ad57610f56600082610f36565b600101610f43565b601f8211156107e5576000818152602090206020601f85010481016020851015610f855750805b6105516020601f860104830182610f43565b815167ffffffffffffffff811115610fb157610fb1610ef0565b610fbb8254610af6565b610fc6828285610f5e565b506020601f821160018114610ffb5760008315610fe35750848201515b600019600885021c1981166002850217855550610551565b600084815260208120601f198516915b8281101561102b578785015182556020948501946001909201910161100b565b50848210156110485783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220057967974090fffb2bd443564f8deffab3b79bf38961f03dc61d4662a58c130864736f6c634300081c0033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasBefore\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasAfter\",\"type\":\"uint256\"}],\"name\":\"CallbackExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallbacks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6110a8806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461097a565b6100f6565b60405161008e9493929190610a1c565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610ab3565b6102f3565b3480156100cd57600080fd5b506100ac6100dc36600461097a565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b11565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b11565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610b61565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610ba3565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c0d565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b11565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b11565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c3f565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610c7b565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e56001830182610925565b50600060028201819055600390910155505050565b6000610507600130610ca1565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610cf6565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d1c565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d30565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610df0565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b60028054908190600061065e83610d30565b919050555060025481106106845760405162461bcd60e51b815260040161031390610ee2565b600081815260208190526040812060038101546002820154919290916106ab908390610d1c565b905060005a84546040519192506000916001600160a01b039091169084906106d7906001890190610f64565b60006040518083038160008787f1925050503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5050905060005a9050600061072f8285610f6e565b905060008186111561075357866107468388610f6e565b6107509190610f81565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161078693929190610f98565b60405180910390a187600201544710156107b25760405162461bcd60e51b815260040161031390610ffa565b80886002015410156107d65760405162461bcd60e51b815260040161031390611062565b60008189600201546107e89190610f6e565b89549091506001600160a01b031685156108445760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108336001830182610925565b506000600282018190556003909101555b61084e8382610864565b610857826108f8565b5050505050505050505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146108b6576040519150601f19603f3d011682016040523d82523d6000602084013e6108bb565b606091505b50509050806108f357604051419084156108fc029085906000818181858888f193505050501580156108f1573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461093190610b11565b6000825580601f10610941575050565b601f01602090049060005260206000209081019061054991905b8082111561096f576000815560010161095b565b5090565b8035610558565b60006020828403121561098f5761098f600080fd5b6109998383610973565b9392505050565b60006001600160a01b038216610558565b6109ba816109a0565b82525050565b60005b838110156109db5781810151838201526020016109c3565b50506000910152565b60006109ee825190565b808452602084019350610a058185602086016109c0565b601f01601f19169290920192915050565b806109ba565b60808101610a2a82876109b1565b8181036020830152610a3c81866109e4565b9050610a4b6040830185610a16565b610a586060830184610a16565b95945050505050565b60008083601f840112610a7657610a76600080fd5b50813567ffffffffffffffff811115610a9157610a91600080fd5b602083019150836001820283011115610aac57610aac600080fd5b9250929050565b60008060208385031215610ac957610ac9600080fd5b823567ffffffffffffffff811115610ae357610ae3600080fd5b610aef85828601610a61565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b2557607f821691505b602082108103610b3757610b37610afb565b50919050565b600061055882610b4b565b90565b67ffffffffffffffff1690565b6109ba81610b3d565b602081016105588284610b58565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610b6f565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c00000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161055881610bb3565b6000610c27825190565b610c358185602086016109c0565b9290920192915050565b6105588183610c1d565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b9d565b6020808252810161055881610c49565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610c8b565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610b9d565b6020808252810161055881610cc4565b634e487b7160e01b600052601260045260246000fd5b600082610d2b57610d2b610d06565b500490565b600060018201610d4257610d42610c8b565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610b488381565b610d7483610d5f565b815460001960089490940293841b1916921b91909117905550565b60006108f3818484610d6b565b8181101561035157610daf600082610d8f565b600101610d9c565b601f8211156108f3576000818152602090206020601f85010481016020851015610dde5750805b6102ec6020601f860104830182610d9c565b815167ffffffffffffffff811115610e0a57610e0a610d49565b610e148254610b11565b610e1f828285610db7565b506020601f821160018114610e545760008315610e3c5750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610e845787850151825560209485019460019092019101610e64565b5084821015610ea15783870151600019601f87166008021c191681555b50505050600202600101905550565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b9d565b6020808252810161055881610eb0565b60008154610eff81610b11565b600182168015610f165760018114610f2b57610f5b565b60ff1983168652811515820286019350610f5b565b60008581526020902060005b83811015610f5357815488820152600190910190602001610f37565b505081860193505b50505092915050565b6105588183610ef2565b8181038181111561055857610558610c8b565b818102811582820484141761055857610558610c8b565b60608101610fa68286610a16565b610fb36020830185610a16565b610fc06040830184610a16565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b9d565b6020808252810161055881610fc8565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c7565000000000000000000000000000000000000000000000000000060208201529050610c07565b602080825281016105588161100a56fea2646970667358221220b68c9d1b70c455a4bfa440e10b85f38182b1e4b8db2322b1ca94e48fd0d5f79764736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. @@ -257,25 +257,25 @@ func (_PublicCallbacks *PublicCallbacksCallerSession) Callbacks(arg0 *big.Int) ( return _PublicCallbacks.Contract.Callbacks(&_PublicCallbacks.CallOpts, arg0) } -// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// ExecuteNextCallbacks is a paid mutator transaction binding the contract method 0xa67e1760. // -// Solidity: function executeNextCallback() returns() -func (_PublicCallbacks *PublicCallbacksTransactor) ExecuteNextCallback(opts *bind.TransactOpts) (*types.Transaction, error) { - return _PublicCallbacks.contract.Transact(opts, "executeNextCallback") +// Solidity: function executeNextCallbacks() returns() +func (_PublicCallbacks *PublicCallbacksTransactor) ExecuteNextCallbacks(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicCallbacks.contract.Transact(opts, "executeNextCallbacks") } -// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// ExecuteNextCallbacks is a paid mutator transaction binding the contract method 0xa67e1760. // -// Solidity: function executeNextCallback() returns() -func (_PublicCallbacks *PublicCallbacksSession) ExecuteNextCallback() (*types.Transaction, error) { - return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) +// Solidity: function executeNextCallbacks() returns() +func (_PublicCallbacks *PublicCallbacksSession) ExecuteNextCallbacks() (*types.Transaction, error) { + return _PublicCallbacks.Contract.ExecuteNextCallbacks(&_PublicCallbacks.TransactOpts) } -// ExecuteNextCallback is a paid mutator transaction binding the contract method 0x349e7eca. +// ExecuteNextCallbacks is a paid mutator transaction binding the contract method 0xa67e1760. // -// Solidity: function executeNextCallback() returns() -func (_PublicCallbacks *PublicCallbacksTransactorSession) ExecuteNextCallback() (*types.Transaction, error) { - return _PublicCallbacks.Contract.ExecuteNextCallback(&_PublicCallbacks.TransactOpts) +// Solidity: function executeNextCallbacks() returns() +func (_PublicCallbacks *PublicCallbacksTransactorSession) ExecuteNextCallbacks() (*types.Transaction, error) { + return _PublicCallbacks.Contract.ExecuteNextCallbacks(&_PublicCallbacks.TransactOpts) } // Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. diff --git a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go index 2575efed0..19938e195 100644 --- a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go +++ b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksTestMetaData contains all meta data concerning the PublicCallbacksTest contract. var PublicCallbacksTestMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callbacks\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"contractIPublicCallbacks\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedGas\",\"type\":\"uint256\"}],\"name\":\"handleCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLastCallSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060408190526000805460ff60a01b191690556104263881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610202806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100729190610139565b60405180910390f35b61008e61008936600461014e565b6100aa565b005b600054600160a01b900460ff16604051610072919061017c565b60005a90506100bb610834836101b9565b81106100f057600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010e826100f4565b600061010e82610114565b6101338161011f565b82525050565b6020810161010e828461012a565b803561010e565b60006020828403121561016357610163600080fd5b61016d8383610147565b9392505050565b801515610133565b6020810161010e8284610174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010e5761010e61018a56fea26469706673582212207f38b2c4e3395ee52dd35c65ab29121f9a316027c83b8cc19d9e748d832bf37064736f6c634300081c0033", + Bin: "0x608060408190526000805460ff60a01b191690556104263881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610202806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100729190610139565b60405180910390f35b61008e61008936600461014e565b6100aa565b005b600054600160a01b900460ff16604051610072919061017c565b60005a90506100bb610834836101b9565b81106100f057600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010e826100f4565b600061010e82610114565b6101338161011f565b82525050565b6020810161010e828461012a565b803561010e565b60006020828403121561016357610163600080fd5b61016d8383610147565b9392505050565b801515610133565b6020810161010e8284610174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010e5761010e61018a56fea2646970667358221220dba099d9233f15a61c64a1f21d672746d0a38d21a59035860ad457a79812715964736f6c634300081c0033", } // PublicCallbacksTestABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 6a5223d28..591cef780 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614f12380380614f1283398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614ef2833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614ef2833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614ef2833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b61116680612b0283390190565b61128a80613c6883390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea2646970667358221220eb51e3a4eb0e4b64785c9f84f2b24e3a59d2fa55fff7cf92cc3a2d121b23460464736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61108d806100d96000396000f3fe6080604052600436106100595760003560e01c80638129fc1c116100435780638129fc1c146100ae57806382fbdc9c146100c3578063929d34e9146100d657600080fd5b8062e0d3b51461005e578063349e7eca14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461095f565b6100f6565b60405161008e9493929190610a01565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b3480156100ba57600080fd5b506100ac610416565b6100ac6100d1366004610a98565b610558565b3480156100e257600080fd5b506100ac6100f136600461095f565b6105b1565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610af6565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b60006101be600130610b38565b9050336001600160a01b038216146101f15760405162461bcd60e51b81526004016101e890610b8f565b60405180910390fd5b600254600154146104135760028054908190600061020e83610b9f565b919050555060025481106102345760405162461bcd60e51b81526004016101e890610bea565b6000818152602081905260408120600381015460028201549192909161025b908390610c10565b905060005a84546040519192506000916001600160a01b03909116908490610287906001890190610c96565b60006040518083038160008787f1925050503d80600081146102c5576040519150601f19603f3d011682016040523d82523d6000602084013e6102ca565b606091505b5050905060005a905060006102df8285610ca0565b905060008186111561030357866102f68388610ca0565b6103009190610cb3565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161033693929190610cca565b60405180910390a187600201544710156103625760405162461bcd60e51b81526004016101e890610d2c565b80886002015410156103865760405162461bcd60e51b81526004016101e890610d96565b60008189600201546103989190610ca0565b89549091506001600160a01b031685156103f45760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906103e3600183018261090a565b506000600282018190556003909101555b6103fe8382610756565b610407826107ea565b50505050505050505050505b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104615750825b905060008267ffffffffffffffff16600114801561047e5750303b155b90508115801561048c575080155b156104c3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104f757845468ff00000000000000001916680100000000000000001785555b60006001819055600255831561055157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061054890600190610dca565b60405180910390a15b5050505050565b600034116105785760405162461bcd60e51b81526004016101e890610e0a565b61520861058434610817565b116105a15760405162461bcd60e51b81526004016101e890610e72565b6105ad33838334610829565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916105ed90610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461061990610af6565b80156106665780601f1061063b57610100808354040283529160200191610666565b820191906000526020600020905b81548152906001019060200180831161064957829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b031682602001516040516106a79190610ea4565b6000604051808303816000865af19150503d80600081146106e4576040519150601f19603f3d011682016040523d82523d6000602084013e6106e9565b606091505b505090508061070a5760405162461bcd60e51b81526004016101e890610ee0565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff1916815590610741600183018261090a565b50600060028201819055600390910155505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146107a8576040519150601f19603f3d011682016040523d82523d6000602084013e6107ad565b606091505b50509050806107e557604051419084156108fc029085906000818181858888f193505050501580156107e3573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f193505050501580156105ad573d6000803e3d6000fd5b60006108234883610c10565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201849052486040909201919091526001805482918261089c83610b9f565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906108ed9082610f97565b506040820151600282015560609091015160039091015550505050565b50805461091690610af6565b6000825580601f10610926575050565b601f01602090049060005260206000209081019061041391905b808211156109545760008155600101610940565b5090565b8035610823565b60006020828403121561097457610974600080fd5b61097e8383610958565b9392505050565b60006001600160a01b038216610823565b61099f81610985565b82525050565b60005b838110156109c05781810151838201526020016109a8565b50506000910152565b60006109d3825190565b8084526020840193506109ea8185602086016109a5565b601f01601f19169290920192915050565b8061099f565b60808101610a0f8287610996565b8181036020830152610a2181866109c9565b9050610a3060408301856109fb565b610a3d60608301846109fb565b95945050505050565b60008083601f840112610a5b57610a5b600080fd5b50813567ffffffffffffffff811115610a7657610a76600080fd5b602083019150836001820283011115610a9157610a91600080fd5b9250929050565b60008060208385031215610aae57610aae600080fd5b823567ffffffffffffffff811115610ac857610ac8600080fd5b610ad485828601610a46565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b0a57607f821691505b602082108103610b1c57610b1c610ae0565b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561082357610823610b22565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b6020808252810161082381610b5b565b600060018201610bb157610bb1610b22565b5060010190565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b89565b6020808252810161082381610bb8565b634e487b7160e01b600052601260045260246000fd5b600082610c1f57610c1f610bfa565b500490565b60008154610c3181610af6565b600182168015610c485760018114610c5d57610c8d565b60ff1983168652811515820286019350610c8d565b60008581526020902060005b83811015610c8557815488820152600190910190602001610c69565b505081860193505b50505092915050565b6108238183610c24565b8181038181111561082357610823610b22565b818102811582820484141761082357610823610b22565b60608101610cd882866109fb565b610ce560208301856109fb565b610cf260408301846109fb565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b89565b6020808252810161082381610cfa565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c75650000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161082381610d3c565b600061082382610db4565b90565b67ffffffffffffffff1690565b61099f81610da6565b602081016108238284610dc1565b600d8152602081017f4e6f2076616c75652073656e740000000000000000000000000000000000000081529050610b89565b6020808252810161082381610dd8565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c0000000000000000000000000000000000000000000000000000000060208201529050610d90565b6020808252810161082381610e1a565b6000610e8c825190565b610e9a8185602086016109a5565b9290920192915050565b6108238183610e82565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b89565b6020808252810161082381610eae565b634e487b7160e01b600052604160045260246000fd5b6000610823610db18381565b610f1b83610f06565b815460001960089490940293841b1916921b91909117905550565b60006107e5818484610f12565b818110156105ad57610f56600082610f36565b600101610f43565b601f8211156107e5576000818152602090206020601f85010481016020851015610f855750805b6105516020601f860104830182610f43565b815167ffffffffffffffff811115610fb157610fb1610ef0565b610fbb8254610af6565b610fc6828285610f5e565b506020601f821160018114610ffb5760008315610fe35750848201515b600019600885021c1981166002850217855550610551565b600084815260208120601f198516915b8281101561102b578785015182556020948501946001909201910161100b565b50848210156110485783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220057967974090fffb2bd443564f8deffab3b79bf38961f03dc61d4662a58c130864736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614f2d380380614f2d83398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614f0d833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614f0d833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614f0d833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b61118180612b0283390190565b61128a80613c8383390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122096b0d3a6b1c8fd16e63878b3728c29372a722f08df7af4ac518c783e0c94ce7064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6110a8806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461097a565b6100f6565b60405161008e9493929190610a1c565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610ab3565b6102f3565b3480156100cd57600080fd5b506100ac6100dc36600461097a565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b11565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b11565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610b61565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610ba3565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c0d565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b11565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b11565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c3f565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610c7b565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e56001830182610925565b50600060028201819055600390910155505050565b6000610507600130610ca1565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610cf6565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d1c565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d30565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610df0565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b60028054908190600061065e83610d30565b919050555060025481106106845760405162461bcd60e51b815260040161031390610ee2565b600081815260208190526040812060038101546002820154919290916106ab908390610d1c565b905060005a84546040519192506000916001600160a01b039091169084906106d7906001890190610f64565b60006040518083038160008787f1925050503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5050905060005a9050600061072f8285610f6e565b905060008186111561075357866107468388610f6e565b6107509190610f81565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161078693929190610f98565b60405180910390a187600201544710156107b25760405162461bcd60e51b815260040161031390610ffa565b80886002015410156107d65760405162461bcd60e51b815260040161031390611062565b60008189600201546107e89190610f6e565b89549091506001600160a01b031685156108445760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108336001830182610925565b506000600282018190556003909101555b61084e8382610864565b610857826108f8565b5050505050505050505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146108b6576040519150601f19603f3d011682016040523d82523d6000602084013e6108bb565b606091505b50509050806108f357604051419084156108fc029085906000818181858888f193505050501580156108f1573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461093190610b11565b6000825580601f10610941575050565b601f01602090049060005260206000209081019061054991905b8082111561096f576000815560010161095b565b5090565b8035610558565b60006020828403121561098f5761098f600080fd5b6109998383610973565b9392505050565b60006001600160a01b038216610558565b6109ba816109a0565b82525050565b60005b838110156109db5781810151838201526020016109c3565b50506000910152565b60006109ee825190565b808452602084019350610a058185602086016109c0565b601f01601f19169290920192915050565b806109ba565b60808101610a2a82876109b1565b8181036020830152610a3c81866109e4565b9050610a4b6040830185610a16565b610a586060830184610a16565b95945050505050565b60008083601f840112610a7657610a76600080fd5b50813567ffffffffffffffff811115610a9157610a91600080fd5b602083019150836001820283011115610aac57610aac600080fd5b9250929050565b60008060208385031215610ac957610ac9600080fd5b823567ffffffffffffffff811115610ae357610ae3600080fd5b610aef85828601610a61565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b2557607f821691505b602082108103610b3757610b37610afb565b50919050565b600061055882610b4b565b90565b67ffffffffffffffff1690565b6109ba81610b3d565b602081016105588284610b58565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610b6f565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c00000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161055881610bb3565b6000610c27825190565b610c358185602086016109c0565b9290920192915050565b6105588183610c1d565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b9d565b6020808252810161055881610c49565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610c8b565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610b9d565b6020808252810161055881610cc4565b634e487b7160e01b600052601260045260246000fd5b600082610d2b57610d2b610d06565b500490565b600060018201610d4257610d42610c8b565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610b488381565b610d7483610d5f565b815460001960089490940293841b1916921b91909117905550565b60006108f3818484610d6b565b8181101561035157610daf600082610d8f565b600101610d9c565b601f8211156108f3576000818152602090206020601f85010481016020851015610dde5750805b6102ec6020601f860104830182610d9c565b815167ffffffffffffffff811115610e0a57610e0a610d49565b610e148254610b11565b610e1f828285610db7565b506020601f821160018114610e545760008315610e3c5750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610e845787850151825560209485019460019092019101610e64565b5084821015610ea15783870151600019601f87166008021c191681555b50505050600202600101905550565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b9d565b6020808252810161055881610eb0565b60008154610eff81610b11565b600182168015610f165760018114610f2b57610f5b565b60ff1983168652811515820286019350610f5b565b60008581526020902060005b83811015610f5357815488820152600190910190602001610f37565b505081860193505b50505092915050565b6105588183610ef2565b8181038181111561055857610558610c8b565b818102811582820484141761055857610558610c8b565b60608101610fa68286610a16565b610fb36020830185610a16565b610fc06040830184610a16565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b9d565b6020808252810161055881610fc8565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c7565000000000000000000000000000000000000000000000000000060208201529050610c07565b602080825281016105588161100a56fea2646970667358221220b68c9d1b70c455a4bfa440e10b85f38182b1e4b8db2322b1ca94e48fd0d5f79764736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index 4374ba480..a43fc4cec 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -67,7 +67,13 @@ contract PublicCallbacks is Initializable { // System level call. As it is called during a synthetic transaction that does not have gas limit, // the contract enforces a custom limit based on the value stored for the callback. // It attempts to somewhat accurately refund. - function executeNextCallback() external onlySelf { + function executeNextCallbacks() external onlySelf { + while (nextCallbackId != lastUnusedCallbackId) { + executeNextCallback(); + } + } + + function executeNextCallback() internal { if (nextCallbackId == lastUnusedCallbackId) { return; // todo: change to revert if possible } @@ -77,28 +83,26 @@ contract PublicCallbacks is Initializable { require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); Callback storage callback = callbacks[callbackId]; uint256 baseFee = callback.baseFee; - uint256 gas = callback.value / baseFee; + uint256 prepaidGas = callback.value / baseFee; uint256 gasBefore = gasleft(); - (bool success, ) = callback.target.call{gas: gas}(callback.data); + (bool success, ) = callback.target.call{gas: prepaidGas}(callback.data); uint256 gasAfter = gasleft(); uint256 gasUsed = (gasBefore - gasAfter); uint256 gasRefundValue = 0; - if (gas > gasUsed) { - gasRefundValue = (gas - gasUsed) * baseFee; + if (prepaidGas > gasUsed) { + gasRefundValue = (prepaidGas - gasUsed) * baseFee; } emit CallbackExecuted(callbackId, gasBefore, gasAfter); - require(address(this).balance >= callback.value, "Not enough balance"); - require(callback.value >= gasRefundValue, "Refund value is greater than the value"); uint256 paymentToCoinbase = callback.value - gasRefundValue; address target = callback.target; if (success) { delete callbacks[callbackId]; } - + internalRefund(gasRefundValue, target); payForCallback(paymentToCoinbase); } diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index 6d12f5eb6..42cd343d9 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -163,7 +163,7 @@ func (s *systemContractCallbacks) CreatePublicCallbackHandlerTransaction(ctx con nonceForSyntheticTx := l2State.GetNonce(common.MaskedSender(*s.PublicCallbackHandler())) s.logger.Debug("CreatePublicCallbackHandlerTransaction: Retrieved nonce for synthetic transaction", "nonce", nonceForSyntheticTx) - data, err := publicCallbacksABI.Pack("executeNextCallback") + data, err := publicCallbacksABI.Pack("executeNextCallbacks") if err != nil { s.logger.Error("CreatePublicCallbackHandlerTransaction: Failed packing executeNextCallback data", "error", err) return nil, fmt.Errorf("failed packing executeNextCallback() %w", err) From 53676f264d82210a0c433de790a8ce0947d61907 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 14 Nov 2024 14:20:05 +0200 Subject: [PATCH 17/19] Abstract away mapping access. --- .../PublicCallbacks/PublicCallbacks.go | 2 +- .../PublicCallbacksTest.go | 2 +- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 19 ++++++++++++------- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index a28e49bb8..daae3b204 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasBefore\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasAfter\",\"type\":\"uint256\"}],\"name\":\"CallbackExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallbacks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6110a8806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461097a565b6100f6565b60405161008e9493929190610a1c565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610ab3565b6102f3565b3480156100cd57600080fd5b506100ac6100dc36600461097a565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b11565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b11565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610b61565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610ba3565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c0d565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b11565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b11565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c3f565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610c7b565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e56001830182610925565b50600060028201819055600390910155505050565b6000610507600130610ca1565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610cf6565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d1c565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d30565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610df0565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b60028054908190600061065e83610d30565b919050555060025481106106845760405162461bcd60e51b815260040161031390610ee2565b600081815260208190526040812060038101546002820154919290916106ab908390610d1c565b905060005a84546040519192506000916001600160a01b039091169084906106d7906001890190610f64565b60006040518083038160008787f1925050503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5050905060005a9050600061072f8285610f6e565b905060008186111561075357866107468388610f6e565b6107509190610f81565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161078693929190610f98565b60405180910390a187600201544710156107b25760405162461bcd60e51b815260040161031390610ffa565b80886002015410156107d65760405162461bcd60e51b815260040161031390611062565b60008189600201546107e89190610f6e565b89549091506001600160a01b031685156108445760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108336001830182610925565b506000600282018190556003909101555b61084e8382610864565b610857826108f8565b5050505050505050505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146108b6576040519150601f19603f3d011682016040523d82523d6000602084013e6108bb565b606091505b50509050806108f357604051419084156108fc029085906000818181858888f193505050501580156108f1573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461093190610b11565b6000825580601f10610941575050565b601f01602090049060005260206000209081019061054991905b8082111561096f576000815560010161095b565b5090565b8035610558565b60006020828403121561098f5761098f600080fd5b6109998383610973565b9392505050565b60006001600160a01b038216610558565b6109ba816109a0565b82525050565b60005b838110156109db5781810151838201526020016109c3565b50506000910152565b60006109ee825190565b808452602084019350610a058185602086016109c0565b601f01601f19169290920192915050565b806109ba565b60808101610a2a82876109b1565b8181036020830152610a3c81866109e4565b9050610a4b6040830185610a16565b610a586060830184610a16565b95945050505050565b60008083601f840112610a7657610a76600080fd5b50813567ffffffffffffffff811115610a9157610a91600080fd5b602083019150836001820283011115610aac57610aac600080fd5b9250929050565b60008060208385031215610ac957610ac9600080fd5b823567ffffffffffffffff811115610ae357610ae3600080fd5b610aef85828601610a61565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b2557607f821691505b602082108103610b3757610b37610afb565b50919050565b600061055882610b4b565b90565b67ffffffffffffffff1690565b6109ba81610b3d565b602081016105588284610b58565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610b6f565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c00000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161055881610bb3565b6000610c27825190565b610c358185602086016109c0565b9290920192915050565b6105588183610c1d565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b9d565b6020808252810161055881610c49565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610c8b565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610b9d565b6020808252810161055881610cc4565b634e487b7160e01b600052601260045260246000fd5b600082610d2b57610d2b610d06565b500490565b600060018201610d4257610d42610c8b565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610b488381565b610d7483610d5f565b815460001960089490940293841b1916921b91909117905550565b60006108f3818484610d6b565b8181101561035157610daf600082610d8f565b600101610d9c565b601f8211156108f3576000818152602090206020601f85010481016020851015610dde5750805b6102ec6020601f860104830182610d9c565b815167ffffffffffffffff811115610e0a57610e0a610d49565b610e148254610b11565b610e1f828285610db7565b506020601f821160018114610e545760008315610e3c5750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610e845787850151825560209485019460019092019101610e64565b5084821015610ea15783870151600019601f87166008021c191681555b50505050600202600101905550565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b9d565b6020808252810161055881610eb0565b60008154610eff81610b11565b600182168015610f165760018114610f2b57610f5b565b60ff1983168652811515820286019350610f5b565b60008581526020902060005b83811015610f5357815488820152600190910190602001610f37565b505081860193505b50505092915050565b6105588183610ef2565b8181038181111561055857610558610c8b565b818102811582820484141761055857610558610c8b565b60608101610fa68286610a16565b610fb36020830185610a16565b610fc06040830184610a16565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b9d565b6020808252810161055881610fc8565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c7565000000000000000000000000000000000000000000000000000060208201529050610c07565b602080825281016105588161100a56fea2646970667358221220b68c9d1b70c455a4bfa440e10b85f38182b1e4b8db2322b1ca94e48fd0d5f79764736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610f6d806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e6100793660046109e0565b6100f6565b60405161008e9493929190610a82565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610b19565b6102f3565b3480156100cd57600080fd5b506100ac6100dc3660046109e0565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b77565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b77565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610bc7565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610c09565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c19565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b77565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c9c565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610cd8565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e5600183018261098b565b50600060028201819055600390910155505050565b6000610507600130610cfe565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610d53565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d79565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d8d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610e4d565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b600061065661075d565b905060008160600151905060008183604001516106739190610d79565b905060005a9050600084600001516001600160a01b031683866020015160405161069d9190610c9c565b60006040518083038160008787f1925050503d80600081146106db576040519150601f19603f3d011682016040523d82523d6000602084013e6106e0565b606091505b5050905060005a905060006106f58285610f0d565b9050600081861115610719578661070c8388610f0d565b6107169190610f20565b90505b600081896040015161072b9190610f0d565b8951909150851561073e5761073e610869565b61074883826108ca565b6107518261095e565b50505050505050505050565b610791604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b6002546000908152602081815260409182902082516080810190935280546001600160a01b0316835260018101805491928401916107ce90610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90610b77565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108a3600183018261098b565b50600060028281018290556003909201819055815491906108c383610d8d565b9190505550565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b505090508061095957604051419084156108fc029085906000818181858888f19350505050158015610957573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461099790610b77565b6000825580601f106109a7575050565b601f01602090049060005260206000209081019061054991905b808211156109d557600081556001016109c1565b5090565b8035610558565b6000602082840312156109f5576109f5600080fd5b6109ff83836109d9565b9392505050565b60006001600160a01b038216610558565b610a2081610a06565b82525050565b60005b83811015610a41578181015183820152602001610a29565b50506000910152565b6000610a54825190565b808452602084019350610a6b818560208601610a26565b601f01601f19169290920192915050565b80610a20565b60808101610a908287610a17565b8181036020830152610aa28186610a4a565b9050610ab16040830185610a7c565b610abe6060830184610a7c565b95945050505050565b60008083601f840112610adc57610adc600080fd5b50813567ffffffffffffffff811115610af757610af7600080fd5b602083019150836001820283011115610b1257610b12600080fd5b9250929050565b60008060208385031215610b2f57610b2f600080fd5b823567ffffffffffffffff811115610b4957610b49600080fd5b610b5585828601610ac7565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b8b57607f821691505b602082108103610b9d57610b9d610b61565b50919050565b600061055882610bb1565b90565b67ffffffffffffffff1690565b610a2081610ba3565b602081016105588284610bbe565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610bd5565b6020808252810161055881602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c84825190565b610c92818560208601610a26565b9290920192915050565b6105588183610c7a565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610c03565b6020808252810161055881610ca6565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610ce8565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610c03565b6020808252810161055881610d21565b634e487b7160e01b600052601260045260246000fd5b600082610d8857610d88610d63565b500490565b600060018201610d9f57610d9f610ce8565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610bae8381565b610dd183610dbc565b815460001960089490940293841b1916921b91909117905550565b6000610959818484610dc8565b8181101561035157610e0c600082610dec565b600101610df9565b601f821115610959576000818152602090206020601f85010481016020851015610e3b5750805b6102ec6020601f860104830182610df9565b815167ffffffffffffffff811115610e6757610e67610da6565b610e718254610b77565b610e7c828285610e14565b506020601f821160018114610eb15760008315610e995750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610ee15787850151825560209485019460019092019101610ec1565b5084821015610efe5783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561055857610558610ce8565b818102811582820484141761055857610558610ce856fea2646970667358221220c619beb55169138a143339ba0a30177c737670411ee2111f97c8cb9cb666cd1c64736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go index 19938e195..9871f2a9c 100644 --- a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go +++ b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksTestMetaData contains all meta data concerning the PublicCallbacksTest contract. var PublicCallbacksTestMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callbacks\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"contractIPublicCallbacks\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedGas\",\"type\":\"uint256\"}],\"name\":\"handleCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLastCallSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060408190526000805460ff60a01b191690556104263881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610202806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100729190610139565b60405180910390f35b61008e61008936600461014e565b6100aa565b005b600054600160a01b900460ff16604051610072919061017c565b60005a90506100bb610834836101b9565b81106100f057600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010e826100f4565b600061010e82610114565b6101338161011f565b82525050565b6020810161010e828461012a565b803561010e565b60006020828403121561016357610163600080fd5b61016d8383610147565b9392505050565b801515610133565b6020810161010e8284610174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010e5761010e61018a56fea2646970667358221220dba099d9233f15a61c64a1f21d672746d0a38d21a59035860ad457a79812715964736f6c634300081c0033", + Bin: "0x608060408190526000805460ff60a01b191690556104263881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610202806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100729190610139565b60405180910390f35b61008e61008936600461014e565b6100aa565b005b600054600160a01b900460ff16604051610072919061017c565b60005a90506100bb610834836101b9565b81106100f057600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010e826100f4565b600061010e82610114565b6101338161011f565b82525050565b6020810161010e828461012a565b803561010e565b60006020828403121561016357610163600080fd5b61016d8383610147565b9392505050565b801515610133565b6020810161010e8284610174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010e5761010e61018a56fea26469706673582212207d3031b1f4f6b89ec638e9916037ce64499c3f92dde4e9785a28eeb0a2f813bb64736f6c634300081c0033", } // PublicCallbacksTestABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 591cef780..d17f85b16 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614f2d380380614f2d83398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614f0d833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614f0d833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614f0d833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b61118180612b0283390190565b61128a80613c8383390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea264697066735822122096b0d3a6b1c8fd16e63878b3728c29372a722f08df7af4ac518c783e0c94ce7064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6110a8806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e61007936600461097a565b6100f6565b60405161008e9493929190610a1c565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610ab3565b6102f3565b3480156100cd57600080fd5b506100ac6100dc36600461097a565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b11565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b11565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610b61565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610ba3565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c0d565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b11565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b11565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c3f565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610c7b565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e56001830182610925565b50600060028201819055600390910155505050565b6000610507600130610ca1565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610cf6565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d1c565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d30565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610df0565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b60028054908190600061065e83610d30565b919050555060025481106106845760405162461bcd60e51b815260040161031390610ee2565b600081815260208190526040812060038101546002820154919290916106ab908390610d1c565b905060005a84546040519192506000916001600160a01b039091169084906106d7906001890190610f64565b60006040518083038160008787f1925050503d8060008114610715576040519150601f19603f3d011682016040523d82523d6000602084013e61071a565b606091505b5050905060005a9050600061072f8285610f6e565b905060008186111561075357866107468388610f6e565b6107509190610f81565b90505b7f79867de645e468e8c09d74e8be7ed5d3ffcb800407d63d145988787eb329c9b289868560405161078693929190610f98565b60405180910390a187600201544710156107b25760405162461bcd60e51b815260040161031390610ffa565b80886002015410156107d65760405162461bcd60e51b815260040161031390611062565b60008189600201546107e89190610f6e565b89549091506001600160a01b031685156108445760008b8152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108336001830182610925565b506000600282018190556003909101555b61084e8382610864565b610857826108f8565b5050505050505050505050565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d80600081146108b6576040519150601f19603f3d011682016040523d82523d6000602084013e6108bb565b606091505b50509050806108f357604051419084156108fc029085906000818181858888f193505050501580156108f1573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461093190610b11565b6000825580601f10610941575050565b601f01602090049060005260206000209081019061054991905b8082111561096f576000815560010161095b565b5090565b8035610558565b60006020828403121561098f5761098f600080fd5b6109998383610973565b9392505050565b60006001600160a01b038216610558565b6109ba816109a0565b82525050565b60005b838110156109db5781810151838201526020016109c3565b50506000910152565b60006109ee825190565b808452602084019350610a058185602086016109c0565b601f01601f19169290920192915050565b806109ba565b60808101610a2a82876109b1565b8181036020830152610a3c81866109e4565b9050610a4b6040830185610a16565b610a586060830184610a16565b95945050505050565b60008083601f840112610a7657610a76600080fd5b50813567ffffffffffffffff811115610a9157610a91600080fd5b602083019150836001820283011115610aac57610aac600080fd5b9250929050565b60008060208385031215610ac957610ac9600080fd5b823567ffffffffffffffff811115610ae357610ae3600080fd5b610aef85828601610a61565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b2557607f821691505b602082108103610b3757610b37610afb565b50919050565b600061055882610b4b565b90565b67ffffffffffffffff1690565b6109ba81610b3d565b602081016105588284610b58565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610b6f565b60248152602081017f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662081527f63616c6c00000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161055881610bb3565b6000610c27825190565b610c358185602086016109c0565b9290920192915050565b6105588183610c1d565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610b9d565b6020808252810161055881610c49565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610c8b565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610b9d565b6020808252810161055881610cc4565b634e487b7160e01b600052601260045260246000fd5b600082610d2b57610d2b610d06565b500490565b600060018201610d4257610d42610c8b565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610b488381565b610d7483610d5f565b815460001960089490940293841b1916921b91909117905550565b60006108f3818484610d6b565b8181101561035157610daf600082610d8f565b600101610d9c565b601f8211156108f3576000818152602090206020601f85010481016020851015610dde5750805b6102ec6020601f860104830182610d9c565b815167ffffffffffffffff811115610e0a57610e0a610d49565b610e148254610b11565b610e1f828285610db7565b506020601f821160018114610e545760008315610e3c5750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610e845787850151825560209485019460019092019101610e64565b5084821015610ea15783870151600019601f87166008021c191681555b50505050600202600101905550565b60168152602081017f506172616e6f69612d20746f646f3a2064656c6574650000000000000000000081529050610b9d565b6020808252810161055881610eb0565b60008154610eff81610b11565b600182168015610f165760018114610f2b57610f5b565b60ff1983168652811515820286019350610f5b565b60008581526020902060005b83811015610f5357815488820152600190910190602001610f37565b505081860193505b50505092915050565b6105588183610ef2565b8181038181111561055857610558610c8b565b818102811582820484141761055857610558610c8b565b60608101610fa68286610a16565b610fb36020830185610a16565b610fc06040830184610a16565b949350505050565b60128152602081017f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081529050610b9d565b6020808252810161055881610fc8565b60268152602081017f526566756e642076616c75652069732067726561746572207468616e2074686581527f2076616c7565000000000000000000000000000000000000000000000000000060208201529050610c07565b602080825281016105588161100a56fea2646970667358221220b68c9d1b70c455a4bfa440e10b85f38182b1e4b8db2322b1ca94e48fd0d5f79764736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614df2380380614df283398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614dd2833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614dd2833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614dd2833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b61104680612b0283390190565b61128a80613b4883390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea2646970667358221220e63b6bef074b844e8707dcbf132602c0bba1255bbdac80ae9b88ec28f9895edc64736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610f6d806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e6100793660046109e0565b6100f6565b60405161008e9493929190610a82565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610b19565b6102f3565b3480156100cd57600080fd5b506100ac6100dc3660046109e0565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b77565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b77565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610bc7565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610c09565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c19565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b77565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c9c565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610cd8565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e5600183018261098b565b50600060028201819055600390910155505050565b6000610507600130610cfe565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610d53565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d79565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d8d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610e4d565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b600061065661075d565b905060008160600151905060008183604001516106739190610d79565b905060005a9050600084600001516001600160a01b031683866020015160405161069d9190610c9c565b60006040518083038160008787f1925050503d80600081146106db576040519150601f19603f3d011682016040523d82523d6000602084013e6106e0565b606091505b5050905060005a905060006106f58285610f0d565b9050600081861115610719578661070c8388610f0d565b6107169190610f20565b90505b600081896040015161072b9190610f0d565b8951909150851561073e5761073e610869565b61074883826108ca565b6107518261095e565b50505050505050505050565b610791604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b6002546000908152602081815260409182902082516080810190935280546001600160a01b0316835260018101805491928401916107ce90610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90610b77565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108a3600183018261098b565b50600060028281018290556003909201819055815491906108c383610d8d565b9190505550565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b505090508061095957604051419084156108fc029085906000818181858888f19350505050158015610957573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461099790610b77565b6000825580601f106109a7575050565b601f01602090049060005260206000209081019061054991905b808211156109d557600081556001016109c1565b5090565b8035610558565b6000602082840312156109f5576109f5600080fd5b6109ff83836109d9565b9392505050565b60006001600160a01b038216610558565b610a2081610a06565b82525050565b60005b83811015610a41578181015183820152602001610a29565b50506000910152565b6000610a54825190565b808452602084019350610a6b818560208601610a26565b601f01601f19169290920192915050565b80610a20565b60808101610a908287610a17565b8181036020830152610aa28186610a4a565b9050610ab16040830185610a7c565b610abe6060830184610a7c565b95945050505050565b60008083601f840112610adc57610adc600080fd5b50813567ffffffffffffffff811115610af757610af7600080fd5b602083019150836001820283011115610b1257610b12600080fd5b9250929050565b60008060208385031215610b2f57610b2f600080fd5b823567ffffffffffffffff811115610b4957610b49600080fd5b610b5585828601610ac7565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b8b57607f821691505b602082108103610b9d57610b9d610b61565b50919050565b600061055882610bb1565b90565b67ffffffffffffffff1690565b610a2081610ba3565b602081016105588284610bbe565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610bd5565b6020808252810161055881602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c84825190565b610c92818560208601610a26565b9290920192915050565b6105588183610c7a565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610c03565b6020808252810161055881610ca6565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610ce8565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610c03565b6020808252810161055881610d21565b634e487b7160e01b600052601260045260246000fd5b600082610d8857610d88610d63565b500490565b600060018201610d9f57610d9f610ce8565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610bae8381565b610dd183610dbc565b815460001960089490940293841b1916921b91909117905550565b6000610959818484610dc8565b8181101561035157610e0c600082610dec565b600101610df9565b601f821115610959576000818152602090206020601f85010481016020851015610e3b5750805b6102ec6020601f860104830182610df9565b815167ffffffffffffffff811115610e6757610e67610da6565b610e718254610b77565b610e7c828285610e14565b506020601f821160018114610eb15760008315610e995750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610ee15787850151825560209485019460019092019101610ec1565b5084821015610efe5783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561055857610558610ce8565b818102811582820484141761055857610558610ce856fea2646970667358221220c619beb55169138a143339ba0a30177c737670411ee2111f97c8cb9cb666cd1c64736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index a43fc4cec..b8f7fe770 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -42,6 +42,15 @@ contract PublicCallbacks is Initializable { callbacks[nextCallbackId++] = Callback({target: callback, data: data, value: value, baseFee: block.basefee}); } + function getCurrentCallbackToExecute() internal view returns (Callback memory) { + return callbacks[lastUnusedCallbackId]; + } + + function popCurrentCallback() internal { + delete callbacks[lastUnusedCallbackId]; + lastUnusedCallbackId++; + } + function calculateGas(uint256 value) internal view returns (uint256) { return value / block.basefee; } @@ -78,10 +87,7 @@ contract PublicCallbacks is Initializable { return; // todo: change to revert if possible } - uint256 callbackId = lastUnusedCallbackId; - lastUnusedCallbackId++; - require(callbackId < lastUnusedCallbackId, "Paranoia- todo: delete"); - Callback storage callback = callbacks[callbackId]; + Callback memory callback = getCurrentCallbackToExecute(); uint256 baseFee = callback.baseFee; uint256 prepaidGas = callback.value / baseFee; uint256 gasBefore = gasleft(); @@ -95,12 +101,11 @@ contract PublicCallbacks is Initializable { gasRefundValue = (prepaidGas - gasUsed) * baseFee; } - emit CallbackExecuted(callbackId, gasBefore, gasAfter); uint256 paymentToCoinbase = callback.value - gasRefundValue; address target = callback.target; - if (success) { - delete callbacks[callbackId]; + if (success) { + popCurrentCallback(); } internalRefund(gasRefundValue, target); From 33e1a8d502e3c1993c1689694a6f559213b96958 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 14 Nov 2024 14:30:02 +0200 Subject: [PATCH 18/19] Address pr review. --- contracts/src/system/PublicCallbacks.sol | 5 +++ go/enclave/components/batch_executor.go | 51 ++++++++++++++---------- go/enclave/evm/evm_facade.go | 3 ++ 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/contracts/src/system/PublicCallbacks.sol b/contracts/src/system/PublicCallbacks.sol index b8f7fe770..1e2793f73 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -55,6 +55,11 @@ contract PublicCallbacks is Initializable { return value / block.basefee; } + // This function is callable from external dApps to register a callback. + // The bytes passed in the param are the calldata for the call to be made + // to msg.sender. + // todo: Consider making the callback function named in order to avoid + // weird potential attacks if any? function register(bytes calldata callback) external payable { require(msg.value > 0, "No value sent"); require(calculateGas(msg.value) > 21000, "Gas too low compared to cost of call"); diff --git a/go/enclave/components/batch_executor.go b/go/enclave/components/batch_executor.go index 6a8a7bcad..269cc4a23 100644 --- a/go/enclave/components/batch_executor.go +++ b/go/enclave/components/batch_executor.go @@ -250,28 +250,9 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE } // Create and process public callback transaction if needed - publicCallbackTx, err := executor.systemContracts.CreatePublicCallbackHandlerTransaction(ctx, stateDB) + onBatchTxOffset, err = executor.executePublicCallbacks(ctx, stateDB, context, batch, onBatchTxOffset) if err != nil { - return nil, fmt.Errorf("could not create public callback transaction. Cause: %w", err) - } - - if publicCallbackTx != nil { - publicCallbackPricedTxes := common.L2PricedTransactions{ - common.L2PricedTransaction{ - Tx: publicCallbackTx, - PublishingCost: big.NewInt(0), - FromSelf: true, - }, - } - publicCallbackSuccessfulTx, _, publicCallbackTxResult, err := executor.processTransactions(ctx, batch, len(successfulTxs)+onBatchTxOffset, publicCallbackPricedTxes, stateDB, context.ChainConfig, true) - if err != nil { - return nil, fmt.Errorf("could not process public callback transaction. Cause: %w", err) - } - // Ensure the public callback transaction is successful. It should NEVER fail. - if err = executor.verifySyntheticTransactionsSuccess(publicCallbackPricedTxes, publicCallbackSuccessfulTx, publicCallbackTxResult); err != nil { - return nil, fmt.Errorf("batch computation failed due to public callback reverting. Cause: %w", err) - } - onBatchTxOffset++ + return nil, fmt.Errorf("could not execute public callbacks. Cause: %w", err) } ccSuccessfulTxs, _, ccTxResults, err := executor.processTransactions(ctx, batch, len(successfulTxs)+onBatchTxOffset, syntheticTransactions, stateDB, context.ChainConfig, true) @@ -352,6 +333,34 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE }, nil } +func (executor *batchExecutor) executePublicCallbacks(ctx context.Context, stateDB *state.StateDB, context *BatchExecutionContext, batch *core.Batch, txOffset int) (int, error) { + // Create and process public callback transaction if needed + publicCallbackTx, err := executor.systemContracts.CreatePublicCallbackHandlerTransaction(ctx, stateDB) + if err != nil { + return 0, fmt.Errorf("could not create public callback transaction. Cause: %w", err) + } + + if publicCallbackTx != nil { + publicCallbackPricedTxes := common.L2PricedTransactions{ + common.L2PricedTransaction{ + Tx: publicCallbackTx, + PublishingCost: big.NewInt(0), + FromSelf: true, + }, + } + publicCallbackSuccessfulTx, _, publicCallbackTxResult, err := executor.processTransactions(ctx, batch, txOffset, publicCallbackPricedTxes, stateDB, context.ChainConfig, true) + if err != nil { + return 0, fmt.Errorf("could not process public callback transaction. Cause: %w", err) + } + // Ensure the public callback transaction is successful. It should NEVER fail. + if err = executor.verifySyntheticTransactionsSuccess(publicCallbackPricedTxes, publicCallbackSuccessfulTx, publicCallbackTxResult); err != nil { + return 0, fmt.Errorf("batch computation failed due to public callback reverting. Cause: %w", err) + } + return len(publicCallbackSuccessfulTx), nil + } + return 0, nil +} + func (executor *batchExecutor) initializeSystemContracts(_ context.Context, batch *core.Batch, receipts types.Receipts) error { return executor.systemContracts.Initialize(batch, receipts, executor.crossChainProcessors.Local) } diff --git a/go/enclave/evm/evm_facade.go b/go/enclave/evm/evm_facade.go index 2d23bc239..39314c2f8 100644 --- a/go/enclave/evm/evm_facade.go +++ b/go/enclave/evm/evm_facade.go @@ -57,6 +57,9 @@ func ExecuteTransactions( logger gethlog.Logger, ) (map[common.TxHash]*core.TxExecResult, error) { chain, vmCfg := initParams(storage, gethEncodingService, config, noBaseFee, logger) + // If there is noBaseFee for the batch, we set the gas limit to the max as + // we are working with synthetic transactions that either have predefined contracts + // or contract enforced gas limits. if noBaseFee { batchGasLimit = params.MaxGasLimit } From 3b5ac1d4426595ee49e582d0047d20e7c0a3a76e Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 14 Nov 2024 14:41:04 +0200 Subject: [PATCH 19/19] Generate abi bindings. --- contracts/generated/PublicCallbacks/PublicCallbacks.go | 2 +- contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go | 2 +- contracts/generated/SystemDeployer/SystemDeployer.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index daae3b204..738d74630 100644 --- a/contracts/generated/PublicCallbacks/PublicCallbacks.go +++ b/contracts/generated/PublicCallbacks/PublicCallbacks.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksMetaData contains all meta data concerning the PublicCallbacks contract. var PublicCallbacksMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasBefore\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasAfter\",\"type\":\"uint256\"}],\"name\":\"CallbackExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeNextCallbacks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackId\",\"type\":\"uint256\"}],\"name\":\"reattemptCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callback\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610f6d806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e6100793660046109e0565b6100f6565b60405161008e9493929190610a82565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610b19565b6102f3565b3480156100cd57600080fd5b506100ac6100dc3660046109e0565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b77565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b77565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610bc7565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610c09565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c19565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b77565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c9c565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610cd8565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e5600183018261098b565b50600060028201819055600390910155505050565b6000610507600130610cfe565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610d53565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d79565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d8d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610e4d565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b600061065661075d565b905060008160600151905060008183604001516106739190610d79565b905060005a9050600084600001516001600160a01b031683866020015160405161069d9190610c9c565b60006040518083038160008787f1925050503d80600081146106db576040519150601f19603f3d011682016040523d82523d6000602084013e6106e0565b606091505b5050905060005a905060006106f58285610f0d565b9050600081861115610719578661070c8388610f0d565b6107169190610f20565b90505b600081896040015161072b9190610f0d565b8951909150851561073e5761073e610869565b61074883826108ca565b6107518261095e565b50505050505050505050565b610791604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b6002546000908152602081815260409182902082516080810190935280546001600160a01b0316835260018101805491928401916107ce90610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90610b77565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108a3600183018261098b565b50600060028281018290556003909201819055815491906108c383610d8d565b9190505550565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b505090508061095957604051419084156108fc029085906000818181858888f19350505050158015610957573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461099790610b77565b6000825580601f106109a7575050565b601f01602090049060005260206000209081019061054991905b808211156109d557600081556001016109c1565b5090565b8035610558565b6000602082840312156109f5576109f5600080fd5b6109ff83836109d9565b9392505050565b60006001600160a01b038216610558565b610a2081610a06565b82525050565b60005b83811015610a41578181015183820152602001610a29565b50506000910152565b6000610a54825190565b808452602084019350610a6b818560208601610a26565b601f01601f19169290920192915050565b80610a20565b60808101610a908287610a17565b8181036020830152610aa28186610a4a565b9050610ab16040830185610a7c565b610abe6060830184610a7c565b95945050505050565b60008083601f840112610adc57610adc600080fd5b50813567ffffffffffffffff811115610af757610af7600080fd5b602083019150836001820283011115610b1257610b12600080fd5b9250929050565b60008060208385031215610b2f57610b2f600080fd5b823567ffffffffffffffff811115610b4957610b49600080fd5b610b5585828601610ac7565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b8b57607f821691505b602082108103610b9d57610b9d610b61565b50919050565b600061055882610bb1565b90565b67ffffffffffffffff1690565b610a2081610ba3565b602081016105588284610bbe565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610bd5565b6020808252810161055881602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c84825190565b610c92818560208601610a26565b9290920192915050565b6105588183610c7a565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610c03565b6020808252810161055881610ca6565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610ce8565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610c03565b6020808252810161055881610d21565b634e487b7160e01b600052601260045260246000fd5b600082610d8857610d88610d63565b500490565b600060018201610d9f57610d9f610ce8565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610bae8381565b610dd183610dbc565b815460001960089490940293841b1916921b91909117905550565b6000610959818484610dc8565b8181101561035157610e0c600082610dec565b600101610df9565b601f821115610959576000818152602090206020601f85010481016020851015610e3b5750805b6102ec6020601f860104830182610df9565b815167ffffffffffffffff811115610e6757610e67610da6565b610e718254610b77565b610e7c828285610e14565b506020601f821160018114610eb15760008315610e995750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610ee15787850151825560209485019460019092019101610ec1565b5084821015610efe5783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561055857610558610ce8565b818102811582820484141761055857610558610ce856fea2646970667358221220c619beb55169138a143339ba0a30177c737670411ee2111f97c8cb9cb666cd1c64736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610f6d806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e6100793660046109e0565b6100f6565b60405161008e9493929190610a82565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610b19565b6102f3565b3480156100cd57600080fd5b506100ac6100dc3660046109e0565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b77565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b77565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610bc7565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610c09565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c19565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b77565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c9c565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610cd8565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e5600183018261098b565b50600060028201819055600390910155505050565b6000610507600130610cfe565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610d53565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d79565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d8d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610e4d565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b600061065661075d565b905060008160600151905060008183604001516106739190610d79565b905060005a9050600084600001516001600160a01b031683866020015160405161069d9190610c9c565b60006040518083038160008787f1925050503d80600081146106db576040519150601f19603f3d011682016040523d82523d6000602084013e6106e0565b606091505b5050905060005a905060006106f58285610f0d565b9050600081861115610719578661070c8388610f0d565b6107169190610f20565b90505b600081896040015161072b9190610f0d565b8951909150851561073e5761073e610869565b61074883826108ca565b6107518261095e565b50505050505050505050565b610791604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b6002546000908152602081815260409182902082516080810190935280546001600160a01b0316835260018101805491928401916107ce90610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90610b77565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108a3600183018261098b565b50600060028281018290556003909201819055815491906108c383610d8d565b9190505550565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b505090508061095957604051419084156108fc029085906000818181858888f19350505050158015610957573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461099790610b77565b6000825580601f106109a7575050565b601f01602090049060005260206000209081019061054991905b808211156109d557600081556001016109c1565b5090565b8035610558565b6000602082840312156109f5576109f5600080fd5b6109ff83836109d9565b9392505050565b60006001600160a01b038216610558565b610a2081610a06565b82525050565b60005b83811015610a41578181015183820152602001610a29565b50506000910152565b6000610a54825190565b808452602084019350610a6b818560208601610a26565b601f01601f19169290920192915050565b80610a20565b60808101610a908287610a17565b8181036020830152610aa28186610a4a565b9050610ab16040830185610a7c565b610abe6060830184610a7c565b95945050505050565b60008083601f840112610adc57610adc600080fd5b50813567ffffffffffffffff811115610af757610af7600080fd5b602083019150836001820283011115610b1257610b12600080fd5b9250929050565b60008060208385031215610b2f57610b2f600080fd5b823567ffffffffffffffff811115610b4957610b49600080fd5b610b5585828601610ac7565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b8b57607f821691505b602082108103610b9d57610b9d610b61565b50919050565b600061055882610bb1565b90565b67ffffffffffffffff1690565b610a2081610ba3565b602081016105588284610bbe565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610bd5565b6020808252810161055881602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c84825190565b610c92818560208601610a26565b9290920192915050565b6105588183610c7a565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610c03565b6020808252810161055881610ca6565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610ce8565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610c03565b6020808252810161055881610d21565b634e487b7160e01b600052601260045260246000fd5b600082610d8857610d88610d63565b500490565b600060018201610d9f57610d9f610ce8565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610bae8381565b610dd183610dbc565b815460001960089490940293841b1916921b91909117905550565b6000610959818484610dc8565b8181101561035157610e0c600082610dec565b600101610df9565b601f821115610959576000818152602090206020601f85010481016020851015610e3b5750805b6102ec6020601f860104830182610df9565b815167ffffffffffffffff811115610e6757610e67610da6565b610e718254610b77565b610e7c828285610e14565b506020601f821160018114610eb15760008315610e995750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610ee15787850151825560209485019460019092019101610ec1565b5084821015610efe5783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561055857610558610ce8565b818102811582820484141761055857610558610ce856fea2646970667358221220fe1d3e92341b9a3bda1cd40845a54468d348991459d8ac2f574eb826bef0f41164736f6c634300081c0033", } // PublicCallbacksABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go index 9871f2a9c..e7abf9170 100644 --- a/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go +++ b/contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go @@ -32,7 +32,7 @@ var ( // PublicCallbacksTestMetaData contains all meta data concerning the PublicCallbacksTest contract. var PublicCallbacksTestMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_callbacks\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"callbacks\",\"outputs\":[{\"internalType\":\"contractIPublicCallbacks\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedGas\",\"type\":\"uint256\"}],\"name\":\"handleCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLastCallSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060408190526000805460ff60a01b191690556104263881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610202806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100729190610139565b60405180910390f35b61008e61008936600461014e565b6100aa565b005b600054600160a01b900460ff16604051610072919061017c565b60005a90506100bb610834836101b9565b81106100f057600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010e826100f4565b600061010e82610114565b6101338161011f565b82525050565b6020810161010e828461012a565b803561010e565b60006020828403121561016357610163600080fd5b61016d8383610147565b9392505050565b801515610133565b6020810161010e8284610174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010e5761010e61018a56fea26469706673582212207d3031b1f4f6b89ec638e9916037ce64499c3f92dde4e9785a28eeb0a2f813bb64736f6c634300081c0033", + Bin: "0x608060408190526000805460ff60a01b191690556104263881900390819083398101604081905261002f91610152565b600080546001600160a81b0319166001600160a01b038316179055610052610058565b50610215565b6000610064483461018e565b9050600063a072d7b060e01b8260405160240161008191906101a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260005491516320bef72760e21b81529092506001600160a01b03909116906382fbdc9c9034906100e7908590600401610204565b6000604051808303818588803b15801561010057600080fd5b505af1158015610114573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0382165b92915050565b6101398161011d565b811461014457600080fd5b50565b805161012a81610130565b60006020828403121561016757610167600080fd5b6101718383610147565b9392505050565b634e487b7160e01b600052601260045260246000fd5b60008261019d5761019d610178565b500490565b8181526020810161012a565b60005b838110156101c95781810151838201526020016101b1565b50506000910152565b60006101dc825190565b8084526020840193506101f38185602086016101ae565b601f01601f19169290920192915050565b6020808252810161017181846101d2565b610202806102246000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062b1278314610045578063a072d7b01461007b578063ee1d587214610090575b600080fd5b6000546100659073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100729190610139565b60405180910390f35b61008e61008936600461014e565b6100aa565b005b600054600160a01b900460ff16604051610072919061017c565b60005a90506100bb610834836101b9565b81106100f057600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790555b5050565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b600061010e826100f4565b600061010e82610114565b6101338161011f565b82525050565b6020810161010e828461012a565b803561010e565b60006020828403121561016357610163600080fd5b61016d8383610147565b9392505050565b801515610133565b6020810161010e8284610174565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561010e5761010e61018a56fea2646970667358221220b61f120a7da085458fddaaf607894be2a85d464d655733665b22f9f2f485525764736f6c634300081c0033", } // PublicCallbacksTestABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index d17f85b16..9f20b7545 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051614df2380380614df283398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614dd2833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614dd2833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614dd2833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b61104680612b0283390190565b61128a80613b4883390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea2646970667358221220e63b6bef074b844e8707dcbf132602c0bba1255bbdac80ae9b88ec28f9895edc64736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610f6d806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e6100793660046109e0565b6100f6565b60405161008e9493929190610a82565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610b19565b6102f3565b3480156100cd57600080fd5b506100ac6100dc3660046109e0565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b77565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b77565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610bc7565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610c09565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c19565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b77565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c9c565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610cd8565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e5600183018261098b565b50600060028201819055600390910155505050565b6000610507600130610cfe565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610d53565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d79565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d8d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610e4d565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b600061065661075d565b905060008160600151905060008183604001516106739190610d79565b905060005a9050600084600001516001600160a01b031683866020015160405161069d9190610c9c565b60006040518083038160008787f1925050503d80600081146106db576040519150601f19603f3d011682016040523d82523d6000602084013e6106e0565b606091505b5050905060005a905060006106f58285610f0d565b9050600081861115610719578661070c8388610f0d565b6107169190610f20565b90505b600081896040015161072b9190610f0d565b8951909150851561073e5761073e610869565b61074883826108ca565b6107518261095e565b50505050505050505050565b610791604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b6002546000908152602081815260409182902082516080810190935280546001600160a01b0316835260018101805491928401916107ce90610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90610b77565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108a3600183018261098b565b50600060028281018290556003909201819055815491906108c383610d8d565b9190505550565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b505090508061095957604051419084156108fc029085906000818181858888f19350505050158015610957573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461099790610b77565b6000825580601f106109a7575050565b601f01602090049060005260206000209081019061054991905b808211156109d557600081556001016109c1565b5090565b8035610558565b6000602082840312156109f5576109f5600080fd5b6109ff83836109d9565b9392505050565b60006001600160a01b038216610558565b610a2081610a06565b82525050565b60005b83811015610a41578181015183820152602001610a29565b50506000910152565b6000610a54825190565b808452602084019350610a6b818560208601610a26565b601f01601f19169290920192915050565b80610a20565b60808101610a908287610a17565b8181036020830152610aa28186610a4a565b9050610ab16040830185610a7c565b610abe6060830184610a7c565b95945050505050565b60008083601f840112610adc57610adc600080fd5b50813567ffffffffffffffff811115610af757610af7600080fd5b602083019150836001820283011115610b1257610b12600080fd5b9250929050565b60008060208385031215610b2f57610b2f600080fd5b823567ffffffffffffffff811115610b4957610b49600080fd5b610b5585828601610ac7565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b8b57607f821691505b602082108103610b9d57610b9d610b61565b50919050565b600061055882610bb1565b90565b67ffffffffffffffff1690565b610a2081610ba3565b602081016105588284610bbe565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610bd5565b6020808252810161055881602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c84825190565b610c92818560208601610a26565b9290920192915050565b6105588183610c7a565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610c03565b6020808252810161055881610ca6565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610ce8565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610c03565b6020808252810161055881610d21565b634e487b7160e01b600052601260045260246000fd5b600082610d8857610d88610d63565b500490565b600060018201610d9f57610d9f610ce8565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610bae8381565b610dd183610dbc565b815460001960089490940293841b1916921b91909117905550565b6000610959818484610dc8565b8181101561035157610e0c600082610dec565b600101610df9565b601f821115610959576000818152602090206020601f85010481016020851015610e3b5750805b6102ec6020601f860104830182610df9565b815167ffffffffffffffff811115610e6757610e67610da6565b610e718254610b77565b610e7c828285610e14565b506020601f821160018114610eb15760008315610e995750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610ee15787850151825560209485019460019092019101610ec1565b5084821015610efe5783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561055857610558610ce8565b818102811582820484141761055857610558610ce856fea2646970667358221220c619beb55169138a143339ba0a30177c737670411ee2111f97c8cb9cb666cd1c64736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051614df2380380614df283398101604081905261002f916102f6565b61003881610050565b6100418161010d565b61004a816101bc565b5061047b565b600060405161005e9061028d565b604051809103906000f08015801561007a573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610098919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100e083858461024960201b60201c565b9050600080516020614dd2833981519152816040516100ff919061036d565b60405180910390a150505050565b600060405161011b9061029a565b604051809103906000f080158015610137573d6000803e3d6000fd5b509050600063c4d66de860e01b83604051602401610155919061032b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061019d83858461024960201b60201c565b9050600080516020614dd2833981519152816040516100ff91906103ab565b60006040516101ca906102a7565b604051809103906000f0801580156101e6573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b179091529192509060009061022a9084908690859061024916565b9050600080516020614dd2833981519152816040516100ff91906103df565b60008084848460405161025b906102b4565b61026793929190610445565b604051809103906000f080158015610283573d6000803e3d6000fd5b5095945050505050565b610e36806104c883390190565b611804806112fe83390190565b61104680612b0283390190565b61128a80613b4883390190565b60006001600160a01b0382165b92915050565b6102dd816102c1565b81146102e857600080fd5b50565b80516102ce816102d4565b60006020828403121561030b5761030b600080fd5b61031583836102eb565b9392505050565b610325816102c1565b82525050565b602081016102ce828461031c565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161037d81610339565b90506102ce602083018461031c565b600a815260208101694d65737361676542757360b01b81529050610367565b6040808252810161037d8161038c565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610367565b6040808252810161037d816103bb565b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b600061041d825190565b8084526020840193506104348185602086016103ef565b601f01601f19169290920192915050565b60608101610453828661031c565b610460602083018561031c565b81810360408301526104728184610413565b95945050505050565b603f806104896000396000f3fe6080604052600080fdfea26469706673582212206de44dc1dc578d2bcd4761029b301f2f3c464132877ad41afdd2049034a3eb5a64736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116ab806101596000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b1454caa1161004e578063b1454caa14610285578063c4d66de8146102b2578063f2fde38b146102d257610134565b80638da5cb5b146102005780639730886d1461024557806399a3ad211461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063715018a6146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610aaa565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610af9565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610b24565b6102f2565b6040516101829190610b5f565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610b24565b610351565b6040516101829190610b75565b6101326101c6366004610bb3565b6103a3565b3480156101d757600080fd5b506101326101e6366004610beb565b61042d565b3480156101f757600080fd5b506101326104ac565b34801561020c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610c0a565b34801561025157600080fd5b50610132610260366004610c18565b6104c0565b34801561027157600080fd5b50610132610280366004610bb3565b610635565b34801561029157600080fd5b506102a56102a0366004610ce1565b6106b5565b6040516101829190610d6e565b3480156102be57600080fd5b506101326102cd366004610beb565b61070e565b3480156102de57600080fd5b506101326102ed366004610beb565b610850565b600080826040516020016103069190610f1b565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061034a5760405162461bcd60e51b815260040161014c90610f86565b9392505050565b600080826040516020016103659190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061039b5750428111155b949350505050565b6000341180156103b257508034145b6103ce5760405162461bcd60e51b815260040161014c90610fee565b60006103d9336108a7565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b63484604051610420929190610ffe565b60405180910390a3505050565b610435610905565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50509050806104a85760405162461bcd60e51b815260040161014c9061104b565b5050565b6104b4610905565b6104be6000610979565b565b60006104cd600130611071565b90506105007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806105275750336001600160a01b038216145b6105435760405162461bcd60e51b815260040161014c906110c6565b600061054f83426110d6565b90506000846040516020016105649190610f1b565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156105a85760405162461bcd60e51b815260040161014c90611141565b6000818152602081815260408220849055600191906105c990880188610beb565b6001600160a01b0316815260208101919091526040016000908120906105f56080880160608901611151565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161062c82826115c2565b50505050505050565b61063d610905565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461068a576040519150601f19603f3d011682016040523d82523d6000602084013e61068f565b606091505b50509050806106b05760405162461bcd60e51b815260040161014c9061104b565b505050565b60006106c0336108a7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516106fd97969594939291906115cc565b60405180910390a195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107595750825b905060008267ffffffffffffffff1660011480156107765750303b155b905081158015610784575080155b156107bb576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107ef57845468ff00000000000000001916680100000000000000001785555b6107f886610a02565b831561084857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061083f90600190611643565b60405180910390a15b505050505050565b610858610905565b6001600160a01b03811661089b5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b6108a481610979565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff1691600191906108da8385611651565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b336109377f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610c0a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610a0a610a13565b6108a481610a7a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610858610a13565b60006001600160a01b0382165b92915050565b610a9e81610a82565b82525050565b80610a9e565b60408101610ab88285610a95565b61034a6020830184610aa4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610a8f81610ac5565b600060c08284031215610b1e57610b1e600080fd5b50919050565b600060208284031215610b3957610b39600080fd5b813567ffffffffffffffff811115610b5357610b53600080fd5b61039b84828501610b09565b60208101610a8f8284610aa4565b801515610a9e565b60208101610a8f8284610b6d565b610b8c81610a82565b81146108a457600080fd5b8035610a8f81610b83565b80610b8c565b8035610a8f81610ba2565b60008060408385031215610bc957610bc9600080fd5b610bd38484610b97565b9150610be28460208501610ba8565b90509250929050565b600060208284031215610c0057610c00600080fd5b61034a8383610b97565b60208101610a8f8284610a95565b60008060408385031215610c2e57610c2e600080fd5b823567ffffffffffffffff811115610c4857610c48600080fd5b610c5485828601610b09565b925050610be28460208501610ba8565b63ffffffff8116610b8c565b8035610a8f81610c64565b60008083601f840112610c9057610c90600080fd5b50813567ffffffffffffffff811115610cab57610cab600080fd5b602083019150836001820283011115610cc657610cc6600080fd5b9250929050565b60ff8116610b8c565b8035610a8f81610ccd565b600080600080600060808688031215610cfc57610cfc600080fd5b610d068787610c70565b9450610d158760208801610c70565b9350604086013567ffffffffffffffff811115610d3457610d34600080fd5b610d4088828901610c7b565b9350935050610d528760608801610cd6565b90509295509295909350565b67ffffffffffffffff8116610a9e565b60208101610a8f8284610d5e565b506000610a8f6020830183610b97565b67ffffffffffffffff8116610b8c565b8035610a8f81610d8c565b506000610a8f6020830183610d9c565b506000610a8f6020830183610c70565b63ffffffff8116610a9e565b6000808335601e1936859003018112610dee57610dee600080fd5b830160208101925035905067ffffffffffffffff811115610e1157610e11600080fd5b36819003821315610cc657610cc6600080fd5b82818337506000910152565b818352602083019250610e44828483610e24565b50601f01601f19160190565b506000610a8f6020830183610cd6565b60ff8116610a9e565b600060c08301610e798380610d7c565b610e838582610a95565b50610e916020840184610da7565b610e9e6020860182610d5e565b50610eac6040840184610db7565b610eb96040860182610dc7565b50610ec76060840184610db7565b610ed46060860182610dc7565b50610ee26080840184610dd3565b8583036080870152610ef5838284610e30565b92505050610f0660a0840184610e50565b610f1360a0860182610e60565b509392505050565b6020808252810161034a8184610e69565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610a8f81610f2c565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610f80565b60208082528101610a8f81610f96565b6040810161100c8285610aa4565b61034a6020830184610d5e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610af3565b60208082528101610a8f81611019565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216919081169082820390811115610a8f57610a8f61105b565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610af3565b60208082528101610a8f81611094565b80820180821115610a8f57610a8f61105b565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610f80565b60208082528101610a8f816110e9565b60006020828403121561116657611166600080fd5b61034a8383610c70565b60008135610a8f81610b83565b60006001600160a01b03835b81169019929092169190911792915050565b6000610a8f6001600160a01b0383166111b2565b90565b6001600160a01b031690565b6000610a8f8261119b565b6000610a8f826111be565b6111dd826111c9565b6111e881835461117d565b8255505050565b60008135610a8f81610d8c565b60007bffffffffffffffff00000000000000000000000000000000000000006111898460a01b90565b6000610a8f67ffffffffffffffff83165b67ffffffffffffffff1690565b61124c82611225565b6111e88183546111fc565b60008135610a8f81610c64565b60007fffffffff000000000000000000000000000000000000000000000000000000006111898460e01b90565b600063ffffffff8216610a8f565b6112a882611291565b6111e8818354611264565b600063ffffffff83611189565b6112c982611291565b6111e88183546112b3565b6000808335601e19368590030181126112ef576112ef600080fd5b8301915050803567ffffffffffffffff81111561130e5761130e600080fd5b602082019150600181023603821315610cc657610cc6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061136957607f821691505b602082108103610b1e57610b1e61133f565b6000610a8f6111af8381565b6113908361137b565b815460001960089490940293841b1916921b91909117905550565b60006106b0818484611387565b818110156104a8576113cb6000826113ab565b6001016113b8565b601f8211156106b0576000818152602090206020601f850104810160208510156113fa5750805b61140c6020601f8601048301826113b8565b5050505050565b8267ffffffffffffffff81111561142c5761142c611329565b6114368254611355565b6114418282856113d3565b506000601f821160018114611476576000831561145e5750848201355b600019600885021c1981166002850217855550610848565b600084815260209020601f19841690835b828110156114a75787850135825560209485019460019092019101611487565b50848210156114c4576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6106b0838383611413565b60008135610a8f81610ccd565b600060ff8216610a8f565b611500826114ec565b815460ff191660ff8216176111e8565b80828061151c81611170565b905061152881846111d4565b50506020830180611538826111ef565b90506115448184611243565b5050604083018061155482611257565b9050611560818461129f565b505050606082018061157182611257565b905061158081600185016112c0565b505061158f60808301836112d4565b61159d8183600286016114d4565b505060a08201806115ad826114df565b90506115bc81600385016114f7565b50505050565b6104a88282611510565b60c081016115da828a610a95565b6115e76020830189610d5e565b6115f46040830188610dc7565b6116016060830187610dc7565b8181036080830152611614818587610e30565b905061162360a0830184610e60565b98975050505050505050565b6000610a8f82611236565b610a9e8161162f565b60208101610a8f828461163a565b67ffffffffffffffff918216919081169082820190811115610a8f57610a8f61105b56fea26469706673582212203278a839a036a419e3b6e513a70fa51e51e8dc9150a07f9e432331157a80a9cf64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610f6d806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100c1578063a67e1760146100e157600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e6100793660046109e0565b6100f6565b60405161008e9493929190610a82565b60405180910390f35b3480156100a357600080fd5b506100ac6101b1565b005b6100ac6100bc366004610b19565b6102f3565b3480156100cd57600080fd5b506100ac6100dc3660046109e0565b610355565b3480156100ed57600080fd5b506100ac6104fa565b600060208190529081526040902080546001820180546001600160a01b03909216929161012290610b77565b80601f016020809104026020016040519081016040528092919081815260200182805461014e90610b77565b801561019b5780601f106101705761010080835404028352916020019161019b565b820191906000526020600020905b81548152906001019060200180831161017e57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101fc5750825b905060008267ffffffffffffffff1660011480156102195750303b155b905081158015610227575080155b1561025e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029257845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102e390600190610bc7565b60405180910390a15b5050505050565b6000341161031c5760405162461bcd60e51b815260040161031390610c09565b60405180910390fd5b6152086103283461054c565b116103455760405162461bcd60e51b815260040161031390610c19565b6103513383833461055e565b5050565b60008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054929391929184019161039190610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90610b77565b801561040a5780601f106103df5761010080835404028352916020019161040a565b820191906000526020600020905b8154815290600101906020018083116103ed57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161044b9190610c9c565b6000604051808303816000865af19150503d8060008114610488576040519150601f19603f3d011682016040523d82523d6000602084013e61048d565b606091505b50509050806104ae5760405162461bcd60e51b815260040161031390610cd8565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104e5600183018261098b565b50600060028201819055600390910155505050565b6000610507600130610cfe565b9050336001600160a01b038216146105315760405162461bcd60e51b815260040161031390610d53565b600254600154146105495761054461063f565b610531565b50565b60006105584883610d79565b92915050565b6040518060800160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820184905248604090920191909152600180548291826105d183610d8d565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106229082610e4d565b506040820151600282015560609091015160039091015550505050565b6002546001540361064c57565b600061065661075d565b905060008160600151905060008183604001516106739190610d79565b905060005a9050600084600001516001600160a01b031683866020015160405161069d9190610c9c565b60006040518083038160008787f1925050503d80600081146106db576040519150601f19603f3d011682016040523d82523d6000602084013e6106e0565b606091505b5050905060005a905060006106f58285610f0d565b9050600081861115610719578661070c8388610f0d565b6107169190610f20565b90505b600081896040015161072b9190610f0d565b8951909150851561073e5761073e610869565b61074883826108ca565b6107518261095e565b50505050505050505050565b610791604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b6002546000908152602081815260409182902082516080810190935280546001600160a01b0316835260018101805491928401916107ce90610b77565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90610b77565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050815260200160028201548152602001600382015481525050905090565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108a3600183018261098b565b50600060028281018290556003909201819055815491906108c383610d8d565b9190505550565b6000816001600160a01b0316836155f090604051600060405180830381858888f193505050503d806000811461091c576040519150601f19603f3d011682016040523d82523d6000602084013e610921565b606091505b505090508061095957604051419084156108fc029085906000818181858888f19350505050158015610957573d6000803e3d6000fd5b505b505050565b604051419082156108fc029083906000818181858888f19350505050158015610351573d6000803e3d6000fd5b50805461099790610b77565b6000825580601f106109a7575050565b601f01602090049060005260206000209081019061054991905b808211156109d557600081556001016109c1565b5090565b8035610558565b6000602082840312156109f5576109f5600080fd5b6109ff83836109d9565b9392505050565b60006001600160a01b038216610558565b610a2081610a06565b82525050565b60005b83811015610a41578181015183820152602001610a29565b50506000910152565b6000610a54825190565b808452602084019350610a6b818560208601610a26565b601f01601f19169290920192915050565b80610a20565b60808101610a908287610a17565b8181036020830152610aa28186610a4a565b9050610ab16040830185610a7c565b610abe6060830184610a7c565b95945050505050565b60008083601f840112610adc57610adc600080fd5b50813567ffffffffffffffff811115610af757610af7600080fd5b602083019150836001820283011115610b1257610b12600080fd5b9250929050565b60008060208385031215610b2f57610b2f600080fd5b823567ffffffffffffffff811115610b4957610b49600080fd5b610b5585828601610ac7565b92509250509250929050565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b8b57607f821691505b602082108103610b9d57610b9d610b61565b50919050565b600061055882610bb1565b90565b67ffffffffffffffff1690565b610a2081610ba3565b602081016105588284610bbe565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161055881610bd5565b6020808252810161055881602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610c84825190565b610c92818560208601610a26565b9290920192915050565b6105588183610c7a565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610c03565b6020808252810161055881610ca6565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561055857610558610ce8565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610c03565b6020808252810161055881610d21565b634e487b7160e01b600052601260045260246000fd5b600082610d8857610d88610d63565b500490565b600060018201610d9f57610d9f610ce8565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610558610bae8381565b610dd183610dbc565b815460001960089490940293841b1916921b91909117905550565b6000610959818484610dc8565b8181101561035157610e0c600082610dec565b600101610df9565b601f821115610959576000818152602090206020601f85010481016020851015610e3b5750805b6102ec6020601f860104830182610df9565b815167ffffffffffffffff811115610e6757610e67610da6565b610e718254610b77565b610e7c828285610e14565b506020601f821160018114610eb15760008315610e995750848201515b600019600885021c19811660028502178555506102ec565b600084815260208120601f198516915b82811015610ee15787850151825560209485019460019092019101610ec1565b5084821015610efe5783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561055857610558610ce8565b818102811582820484141761055857610558610ce856fea2646970667358221220fe1d3e92341b9a3bda1cd40845a54468d348991459d8ac2f574eb826bef0f41164736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from.