From d7a4d62459b9cee1de8c79d229fe47e0a91d9a7a Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 4 Dec 2024 11:52:46 +0200 Subject: [PATCH 1/7] Potential fix. --- contracts/generated/EthereumBridge/EthereumBridge.go | 2 +- contracts/src/bridge/L2/EthereumBridge.sol | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/contracts/generated/EthereumBridge/EthereumBridge.go b/contracts/generated/EthereumBridge/EthereumBridge.go index c012b81820..3007f72b81 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\":\"payable\",\"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: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b506129038061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610264576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610ccb565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610d15565b3480156100fe57600080fd5b5061012861010d366004610d58565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610d8d565b60405180910390f35b61015161014c366004610d58565b6102a7565b005b34801561015f57600080fd5b5061015161016e366004610ded565b61041c565b34801561017f57600080fd5b5061015161018e366004610e7a565b610576565b34801561019f57600080fd5b506101516101ae366004610d58565b6106e0565b3480156101bf57600080fd5b506101516101ce366004610ec3565b6107bb565b3480156101df57600080fd5b5061020e6101ee366004610d58565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610f14565b34801561022757600080fd5b50610128610236366004610d58565b6003602052600090815260409020546001600160a01b031681565b61015161025f366004610ec3565b6108f0565b34801561027057600080fd5b5061029a61027f366004610d58565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610f41565b600034116102c75760405162461bcd60e51b81526004016100d190610f81565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b9161031b916001600160a01b039091169034908690602401610f97565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610399906001600160a01b03168260005b600080610a71565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103e69086908390600401610fc7565b6000604051808303818588803b1580156103ff57600080fd5b505af1158015610413573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b039182169116331461044d5760405162461bcd60e51b81526004016100d19061103a565b806001600160a01b031661045f610b7e565b6001600160a01b0316146104855760405162461bcd60e51b81526004016100d1906110a2565b60008585858560405161049790610c64565b6104a494939291906110de565b604051809103906000f0801580156104c0573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610564908a9084908b908b908b908b9061110f565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105c15750825b905060008267ffffffffffffffff1660011480156105de5750303b155b9050811580156105ec575080155b15610623576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561065757845468ff00000000000000001916680100000000000000001785555b610660876106e0565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561041357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106cf90600190611179565b60405180910390a150505050505050565b6106e8610bfb565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078b9190611192565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146107ec5760405162461bcd60e51b81526004016100d19061103a565b806001600160a01b03166107fe610b7e565b6001600160a01b0316146108245760405162461bcd60e51b81526004016100d1906110a2565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061086f5760405162461bcd60e51b81526004016100d190611209565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906108b69087908990600401610fc7565b600060405180830381600087803b1580156108d057600080fd5b505af11580156108e4573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166109275760405162461bcd60e51b81526004016100d19061124b565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906109839033908790600401610fc7565b600060405180830381600087803b15801561099d57600080fd5b505af11580156109b1573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b926109f09291169087908790602401610f97565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610a6a906001600160a01b0316826000610391565b5050505050565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610aa791906112fa565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610afb8361133a565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610b3b9493929190611372565b60206040518083038185885af1158015610b59573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061041391906113d2565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611192565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c62576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114dc806113f283390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610cdb81610c71565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610cdb81610ce1565b60006001600160a01b038216610cdb565b610d3f81610d25565b8114610d4a57600080fd5b50565b8035610cdb81610d36565b600060208284031215610d6d57610d6d600080fd5b610d778383610d4d565b9392505050565b610d8781610d25565b82525050565b60208101610cdb8284610d7e565b60008083601f840112610db057610db0600080fd5b50813567ffffffffffffffff811115610dcb57610dcb600080fd5b602083019150836001820283011115610de657610de6600080fd5b9250929050565b600080600080600060608688031215610e0857610e08600080fd5b610e128787610d4d565b9450602086013567ffffffffffffffff811115610e3157610e31600080fd5b610e3d88828901610d9b565b9450945050604086013567ffffffffffffffff811115610e5f57610e5f600080fd5b610e6b88828901610d9b565b92509250509295509295909350565b60008060408385031215610e9057610e90600080fd5b610e9a8484610d4d565b9150610ea98460208501610d4d565b90509250929050565b80610d3f565b8035610cdb81610eb2565b600080600060608486031215610edb57610edb600080fd5b610ee58585610d4d565b9250610ef48560208601610eb8565b9150610f038560408601610d4d565b90509250925092565b801515610d87565b60208101610cdb8284610f0c565b6000610cdb82610d25565b6000610cdb82610f22565b610d8781610f2d565b60208101610cdb8284610f38565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610d0f565b60208082528101610cdb81610f4f565b80610d87565b60608101610fa58286610d7e565b610fb26020830185610f91565b610fbf6040830184610d7e565b949350505050565b60408101610fd58285610d7e565b610d776020830184610f91565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610cc5565b60208082528101610cdb81610fe2565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610cc5565b60208082528101610cdb8161104a565b82818337506000910152565b8183526020830192506110d28284836110b2565b50601f01601f19160190565b604080825281016110f08186886110be565b905081810360208301526111058184866110be565b9695505050505050565b6080810161111d8289610d7e565b61112a6020830188610d7e565b818103604083015261113d8186886110be565b905081810360608301526111528184866110be565b98975050505050505050565b600067ffffffffffffffff8216610cdb565b610d878161115e565b60208101610cdb8284611170565b8051610cdb81610d36565b6000602082840312156111a7576111a7600080fd5b610d778383611187565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610cc5565b60208082528101610cdb816111b1565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610d0f565b60208082528101610cdb81611219565b60005b8381101561127657818101518382015260200161125e565b50506000910152565b6000611289825190565b8084526020840193506112a081856020860161125b565b601f01601f19169290920192915050565b805160009060608401906112c58582610d7e565b50602083015184820360208601526112dd828261127f565b91505060408301516112f26040860182610f91565b509392505050565b60208082528101610d7781846112b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016113565761135661130b565b5060010190565b63ffffffff8116610d87565b60ff8116610d87565b60808101611380828761135d565b61138d602083018661135d565b818103604083015261139f818561127f565b90506113ae6060830184611369565b95945050505050565b67ffffffffffffffff8116610d3f565b8051610cdb816113b7565b6000602082840312156113e7576113e7600080fd5b610d7783836113c756fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea26469706673582212200ee33806c6a1becffd861d8aa4e1007a6ba713eed1a34e62ce1d3002a7a4167e64736f6c634300081c0033a2646970667358221220f9b86c85e317830baa352fe3fdec15e437099570aa222b3817693f760cf8d78e64736f6c634300081c0033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b5061284c8061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610264576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610c14565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610c5e565b3480156100fe57600080fd5b5061012861010d366004610ca1565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610cd6565b60405180910390f35b61015161014c366004610ca1565b6102a7565b005b34801561015f57600080fd5b5061015161016e366004610d36565b610349565b34801561017f57600080fd5b5061015161018e366004610dc3565b6104a3565b34801561019f57600080fd5b506101516101ae366004610ca1565b61060e565b3480156101bf57600080fd5b506101516101ce366004610e0c565b6106e9565b3480156101df57600080fd5b5061020e6101ee366004610ca1565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610e5d565b34801561022757600080fd5b50610128610236366004610ca1565b6003602052600090815260409020546001600160a01b031681565b61015161025f366004610e0c565b61081e565b34801561027057600080fd5b5061029a61027f366004610ca1565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610e8a565b600034116102c75760405162461bcd60e51b81526004016100d190610eca565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103149085908390600401610ee0565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b505050505050565b6005546000546001600160a01b039182169116331461037a5760405162461bcd60e51b81526004016100d190610f53565b806001600160a01b031661038c6109ba565b6001600160a01b0316146103b25760405162461bcd60e51b81526004016100d190610fbb565b6000858585856040516103c490610bad565b6103d19493929190610ff7565b604051809103906000f0801580156103ed573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610491908a9084908b908b908b908b90611028565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104ee5750825b905060008267ffffffffffffffff16600114801561050b5750303b155b905081158015610519575080155b15610550576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561058457845468ff00000000000000001916680100000000000000001785555b61058d8761060e565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561060557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105fc90600190611092565b60405180910390a15b50505050505050565b610616610a37565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b991906110ab565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b039182169116331461071a5760405162461bcd60e51b81526004016100d190610f53565b806001600160a01b031661072c6109ba565b6001600160a01b0316146107525760405162461bcd60e51b81526004016100d190610fbb565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061079d5760405162461bcd60e51b81526004016100d190611122565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906107e49087908990600401610ee0565b600060405180830381600087803b1580156107fe57600080fd5b505af1158015610812573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166108555760405162461bcd60e51b81526004016100d190611164565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906108b19033908790600401610ee0565b600060405180830381600087803b1580156108cb57600080fd5b505af11580156108df573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193507f83bece4d00000000000000000000000000000000000000000000000000000000926109379291169087908790602401611174565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526005549091506109b3906001600160a01b03168260008080610aa0565b5050505050565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3291906110ab565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610a9e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610ad69190611243565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610b2a83611283565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610b6a94939291906112bb565b60206040518083038185885af1158015610b88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610605919061131b565b6114dc8061133b83390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610c2481610bba565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610c2481610c2a565b60006001600160a01b038216610c24565b610c8881610c6e565b8114610c9357600080fd5b50565b8035610c2481610c7f565b600060208284031215610cb657610cb6600080fd5b610cc08383610c96565b9392505050565b610cd081610c6e565b82525050565b60208101610c248284610cc7565b60008083601f840112610cf957610cf9600080fd5b50813567ffffffffffffffff811115610d1457610d14600080fd5b602083019150836001820283011115610d2f57610d2f600080fd5b9250929050565b600080600080600060608688031215610d5157610d51600080fd5b610d5b8787610c96565b9450602086013567ffffffffffffffff811115610d7a57610d7a600080fd5b610d8688828901610ce4565b9450945050604086013567ffffffffffffffff811115610da857610da8600080fd5b610db488828901610ce4565b92509250509295509295909350565b60008060408385031215610dd957610dd9600080fd5b610de38484610c96565b9150610df28460208501610c96565b90509250929050565b80610c88565b8035610c2481610dfb565b600080600060608486031215610e2457610e24600080fd5b610e2e8585610c96565b9250610e3d8560208601610e01565b9150610e4c8560408601610c96565b90509250925092565b801515610cd0565b60208101610c248284610e55565b6000610c2482610c6e565b6000610c2482610e6b565b610cd081610e76565b60208101610c248284610e81565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610c58565b60208082528101610c2481610e98565b80610cd0565b60408101610eee8285610cc7565b610cc06020830184610eda565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610c0e565b60208082528101610c2481610efb565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610c0e565b60208082528101610c2481610f63565b82818337506000910152565b818352602083019250610feb828483610fcb565b50601f01601f19160190565b60408082528101611009818688610fd7565b9050818103602083015261101e818486610fd7565b9695505050505050565b608081016110368289610cc7565b6110436020830188610cc7565b8181036040830152611056818688610fd7565b9050818103606083015261106b818486610fd7565b98975050505050505050565b600067ffffffffffffffff8216610c24565b610cd081611077565b60208101610c248284611089565b8051610c2481610c7f565b6000602082840312156110c0576110c0600080fd5b610cc083836110a0565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610c0e565b60208082528101610c24816110ca565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610c58565b60208082528101610c2481611132565b606081016111828286610cc7565b61118f6020830185610eda565b61119c6040830184610cc7565b949350505050565b60005b838110156111bf5781810151838201526020016111a7565b50506000910152565b60006111d2825190565b8084526020840193506111e98185602086016111a4565b601f01601f19169290920192915050565b8051600090606084019061120e8582610cc7565b506020830151848203602086015261122682826111c8565b915050604083015161123b6040860182610eda565b509392505050565b60208082528101610cc081846111fa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820161129f5761129f611254565b5060010190565b63ffffffff8116610cd0565b60ff8116610cd0565b608081016112c982876112a6565b6112d660208301866112a6565b81810360408301526112e881856111c8565b90506112f760608301846112b2565b95945050505050565b67ffffffffffffffff8116610c88565b8051610c2481611300565b60006020828403121561133057611330600080fd5b610cc0838361131056fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea26469706673582212200ee33806c6a1becffd861d8aa4e1007a6ba713eed1a34e62ce1d3002a7a4167e64736f6c634300081c0033a2646970667358221220c90d390038eb2b089f03656827b4e504a3c91508e68586106e916e8fb23669bc64736f6c634300081c0033", } // EthereumBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/src/bridge/L2/EthereumBridge.sol b/contracts/src/bridge/L2/EthereumBridge.sol index b3a52020d6..ad459f5507 100644 --- a/contracts/src/bridge/L2/EthereumBridge.sol +++ b/contracts/src/bridge/L2/EthereumBridge.sol @@ -58,14 +58,6 @@ contract EthereumBridge is function sendNative(address receiver) external payable { require(msg.value > 0, "Nothing sent."); - - bytes memory data = abi.encodeWithSelector( - IBridge.receiveAssets.selector, - localToRemoteToken[address(0x0)], - msg.value, - receiver - ); - queueMessage(remoteBridgeAddress, data, uint32(Topics.TRANSFER), 0, 0); _messageBus().sendValueToL2{value: msg.value}(receiver, msg.value); } From 395c482bdb7a94f306a2388121044e9941871be2 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 4 Dec 2024 12:55:56 +0200 Subject: [PATCH 2/7] Removed from other bridge. --- contracts/generated/ObscuroBridge/ObscuroBridge.go | 2 +- contracts/src/bridge/L1/ObscuroBridge.sol | 2 -- integration/simulation/devnetwork/node.go | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/contracts/generated/ObscuroBridge/ObscuroBridge.go b/contracts/generated/ObscuroBridge/ObscuroBridge.go index 6ddcf52b33..1f3e5d51d8 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\":\"payable\",\"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: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611b5d8061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103a7578063d547741f146103c7578063e4c3ebc7146103e757600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611314565b61041b565b604051610176919061133d565b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004611370565b610484565b005b61019f6101af366004611370565b6104de565b3480156101c057600080fd5b506101e46101cf3660046113a0565b60009081526002602052604090206001015490565b60405161017691906113c5565b3480156101fd57600080fd5b5061019f61020c3660046113d3565b6105e9565b34801561021d57600080fd5b5061019f61022c3660046113d3565b610614565b34801561023d57600080fd5b5061019f61024c36600461145d565b610665565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a0366004611370565b61072a565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f4366004611370565b61077e565b34801561030557600080fd5b5061019f6103143660046114ea565b610859565b34801561032557600080fd5b506101696103343660046113d3565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a366004611370565b610973565b34801561038b57600080fd5b506101e4600081565b61019f6103a23660046114ea565b6109c7565b3480156103b357600080fd5b5061019f6103c2366004611370565b610ab6565b3480156103d357600080fd5b5061019f6103e23660046113d3565b610c4f565b3480156103f357600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061047e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104ae81610c74565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105075760405162461bcd60e51b81526004016104fe90611567565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b0316815250604051602001610537919061159f565b60408051601f19818403018152919052600354909150610566906001600160a01b03168260025b600080610c81565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105b390869083906004016115ad565b6000604051808303818588803b1580156105cc57600080fd5b505af11580156105e0573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461060481610c74565b61060e8383610d8e565b50505050565b6001600160a01b0381163314610656576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106608282610e3c565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561068f81610c74565b6106b97f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d8e565b50600063458ffd6360e01b87878787876040516024016106dd9594939291906115f4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105e0906001600160a01b031682600161055e565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561075481610c74565b6106607f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e3c565b610786610ec3565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108299190611640565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b039182169116331461088a5760405162461bcd60e51b81526004016104fe906116b9565b806001600160a01b031661089c610f2c565b6001600160a01b0316146108c25760405162461bcd60e51b81526004016104fe90611721565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16156109125761090d848484610fa9565b61060e565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff161561095b5761090d82610fb4565b60405162461bcd60e51b81526004016104fe90611789565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561099d81610c74565b6106607fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d8e565b600082116109e75760405162461bcd60e51b81526004016104fe906117cb565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a3e5760405162461bcd60e51b81526004016104fe906117db565b610a4a83333085611026565b60006383bece4d60e01b848484604051602401610a6993929190611862565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061060e906001600160a01b031682600061055e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b015750825b905060008267ffffffffffffffff166001148015610b1e5750303b155b905081158015610b2c575080155b15610b63576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b9757845468ff00000000000000001916680100000000000000001785555b610ba08661077e565b610bca7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d8e565b50610bf67fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d8e565b508315610c4757845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c3e906001906118ad565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c6a81610c74565b61060e8383610e3c565b610c7e8133611080565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cb7919061195a565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610d0b8361199a565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610d4b94939291906119d2565b60206040518083038185885af1158015610d69573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906105e09190611a32565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e345760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610dec3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161047e565b50600061047e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e345760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161047e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f2a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190611640565b905090565b6106608382846110e0565b6040516000906001600160a01b038316908281818181865af19150503d8060008114610ffc576040519150601f19603f3d011682016040523d82523d6000602084013e611001565b606091505b50509050806110225760405162461bcd60e51b81526004016104fe90611a83565b5050565b61060e84856001600160a01b03166323b872dd86868660405160240161104e93929190611a93565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611106565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff166110225780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016104fe9291906115ad565b61066083846001600160a01b031663a9059cbb858560405160240161104e9291906115ad565b600061111b6001600160a01b03841683611179565b9050805160001415801561114057508080602001905181019061113e9190611ace565b155b1561066057826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b60606111878383600061118e565b9392505050565b6060814710156111cc57306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b600080856001600160a01b031684866040516111e89190611b1d565b60006040518083038185875af1925050503d8060008114611225576040519150601f19603f3d011682016040523d82523d6000602084013e61122a565b606091505b509150915061123a868383611244565b9695505050505050565b60608261125957611254826112b0565b611187565b815115801561127057506001600160a01b0384163b155b156112a957836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b5080611187565b8051156112c05780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c7e57600080fd5b803561047e816112f2565b60006020828403121561132957611329600080fd5b6111878383611309565b8015155b82525050565b6020810161047e8284611333565b60006001600160a01b03821661047e565b6112fe8161134b565b803561047e8161135c565b60006020828403121561138557611385600080fd5b6111878383611365565b806112fe565b803561047e8161138f565b6000602082840312156113b5576113b5600080fd5b6111878383611395565b80611337565b6020810161047e82846113bf565b600080604083850312156113e9576113e9600080fd5b6113f38484611395565b91506114028460208501611365565b90509250929050565b60008083601f84011261142057611420600080fd5b50813567ffffffffffffffff81111561143b5761143b600080fd5b60208301915083600182028301111561145657611456600080fd5b9250929050565b60008060008060006060868803121561147857611478600080fd5b6114828787611365565b9450602086013567ffffffffffffffff8111156114a1576114a1600080fd5b6114ad8882890161140b565b9450945050604086013567ffffffffffffffff8111156114cf576114cf600080fd5b6114db8882890161140b565b92509250509295509295909350565b60008060006060848603121561150257611502600080fd5b61150c8585611365565b925061151b8560208601611395565b915061152a8560408601611365565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161047e81611533565b6113378161134b565b805161158c83826113bf565b5060208101516106606020840182611577565b6040810161047e8284611580565b604081016115bb8285611577565b61118760208301846113bf565b82818337506000910152565b8183526020830192506115e88284836115c8565b50601f01601f19160190565b606081016116028288611577565b81810360208301526116158186886115d4565b9050818103604083015261162a8184866115d4565b979650505050505050565b805161047e8161135c565b60006020828403121561165557611655600080fd5b6111878383611635565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161047e8161165f565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116b3565b6020808252810161047e816116c9565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116b3565b6020808252810161047e81611731565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e00000000000081529050611561565b6020808252810161047e81611799565b6020808252810161047e81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b606081016118708286611577565b61187d60208301856113bf565b61188a6040830184611577565b949350505050565b600067ffffffffffffffff821661047e565b61133781611892565b6020810161047e82846118a4565b60005b838110156118d65781810151838201526020016118be565b50506000910152565b60006118e9825190565b8084526020840193506119008185602086016118bb565b601f01601f19169290920192915050565b805160009060608401906119258582611577565b506020830151848203602086015261193d82826118df565b915050604083015161195260408601826113bf565b509392505050565b602080825281016111878184611911565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119b6576119b661196b565b5060010190565b63ffffffff8116611337565b60ff8116611337565b608081016119e082876119bd565b6119ed60208301866119bd565b81810360408301526119ff81856118df565b9050611a0e60608301846119c9565b95945050505050565b67ffffffffffffffff81166112fe565b805161047e81611a17565b600060208284031215611a4757611a47600080fd5b6111878383611a27565b60148152602081017f4661696c656420746f2073656e6420457468657200000000000000000000000081529050611561565b6020808252810161047e81611a51565b60608101611aa18286611577565b611aae6020830185611577565b61188a60408301846113bf565b8015156112fe565b805161047e81611abb565b600060208284031215611ae357611ae3600080fd5b6111878383611ac3565b6020810161047e8284611577565b6000611b05825190565b611b138185602086016118bb565b9290920192915050565b61047e8183611afb56fea26469706673582212209fdd1bc68a3088db5ac0f2032295ccf5b0417c76df07371cbbee256428e7531e64736f6c634300081c0033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611adc8061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103a7578063d547741f146103c7578063e4c3ebc7146103e757600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b506101696101643660046112c0565b61041b565b60405161017691906112e9565b60405180910390f35b34801561018b57600080fd5b5061019f61019a36600461131c565b610484565b005b61019f6101af36600461131c565b6104de565b3480156101c057600080fd5b506101e46101cf36600461134c565b60009081526002602052604090206001015490565b6040516101769190611371565b3480156101fd57600080fd5b5061019f61020c36600461137f565b610589565b34801561021d57600080fd5b5061019f61022c36600461137f565b6105b4565b34801561023d57600080fd5b5061019f61024c366004611409565b610605565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a036600461131c565b6106d7565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f436600461131c565b61072b565b34801561030557600080fd5b5061019f610314366004611496565b610806565b34801561032557600080fd5b5061016961033436600461137f565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a36600461131c565b610920565b34801561038b57600080fd5b506101e4600081565b61019f6103a2366004611496565b610974565b3480156103b357600080fd5b5061019f6103c236600461131c565b610a63565b3480156103d357600080fd5b5061019f6103e236600461137f565b610bfb565b3480156103f357600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061047e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104ae81610c20565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105075760405162461bcd60e51b81526004016104fe90611513565b60405180910390fd5b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb903490610554908590839060040161152c565b6000604051808303818588803b15801561056d57600080fd5b505af1158015610581573d6000803e3d6000fd5b505050505050565b6000828152600260205260409020600101546105a481610c20565b6105ae8383610c2d565b50505050565b6001600160a01b03811633146105f6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106008282610cdb565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561062f81610c20565b6106597f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610c2d565b50600063458ffd6360e01b878787878760405160240161067d959493929190611573565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506106ce906001600160a01b03168260015b600080610d62565b50505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561070181610c20565b6106007f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610cdb565b610733610e6f565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d691906115bf565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108375760405162461bcd60e51b81526004016104fe90611638565b806001600160a01b0316610849610ed8565b6001600160a01b03161461086f5760405162461bcd60e51b81526004016104fe906116a0565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16156108bf576108ba848484610f55565b6105ae565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff1615610908576108ba82610f60565b60405162461bcd60e51b81526004016104fe90611708565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561094a81610c20565b6106007fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610c2d565b600082116109945760405162461bcd60e51b81526004016104fe9061174a565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff166109eb5760405162461bcd60e51b81526004016104fe9061175a565b6109f783333085610fd2565b60006383bece4d60e01b848484604051602401610a16939291906117e1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ae906001600160a01b03168260006106c6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610aae5750825b905060008267ffffffffffffffff166001148015610acb5750303b155b905081158015610ad9575080155b15610b10576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b4457845468ff00000000000000001916680100000000000000001785555b610b4d8661072b565b610b777fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610c2d565b50610ba37fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610c2d565b50831561058157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610beb9060019061182c565b60405180910390a1505050505050565b600082815260026020526040902060010154610c1681610c20565b6105ae8383610cdb565b610c2a813361102c565b50565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610cd35760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610c8b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161047e565b50600061047e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610cd35760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161047e565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610d9891906118d9565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610dec83611919565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610e2c9493929190611951565b60206040518083038185885af1158015610e4a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106ce91906119b1565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610ed6576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5091906115bf565b905090565b61060083828461108c565b6040516000906001600160a01b038316908281818181865af19150503d8060008114610fa8576040519150601f19603f3d011682016040523d82523d6000602084013e610fad565b606091505b5050905080610fce5760405162461bcd60e51b81526004016104fe90611a02565b5050565b6105ae84856001600160a01b03166323b872dd868686604051602401610ffa93929190611a12565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506110b2565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff16610fce5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016104fe92919061152c565b61060083846001600160a01b031663a9059cbb8585604051602401610ffa92919061152c565b60006110c76001600160a01b03841683611125565b905080516000141580156110ec5750808060200190518101906110ea9190611a4d565b155b1561060057826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016104fe9190611a6c565b60606111338383600061113a565b9392505050565b60608147101561117857306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016104fe9190611a6c565b600080856001600160a01b031684866040516111949190611a9c565b60006040518083038185875af1925050503d80600081146111d1576040519150601f19603f3d011682016040523d82523d6000602084013e6111d6565b606091505b50915091506111e68683836111f0565b9695505050505050565b606082611205576112008261125c565b611133565b815115801561121c57506001600160a01b0384163b155b1561125557836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016104fe9190611a6c565b5080611133565b80511561126c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c2a57600080fd5b803561047e8161129e565b6000602082840312156112d5576112d5600080fd5b61113383836112b5565b8015155b82525050565b6020810161047e82846112df565b60006001600160a01b03821661047e565b6112aa816112f7565b803561047e81611308565b60006020828403121561133157611331600080fd5b6111338383611311565b806112aa565b803561047e8161133b565b60006020828403121561136157611361600080fd5b6111338383611341565b806112e3565b6020810161047e828461136b565b6000806040838503121561139557611395600080fd5b61139f8484611341565b91506113ae8460208501611311565b90509250929050565b60008083601f8401126113cc576113cc600080fd5b50813567ffffffffffffffff8111156113e7576113e7600080fd5b60208301915083600182028301111561140257611402600080fd5b9250929050565b60008060008060006060868803121561142457611424600080fd5b61142e8787611311565b9450602086013567ffffffffffffffff81111561144d5761144d600080fd5b611459888289016113b7565b9450945050604086013567ffffffffffffffff81111561147b5761147b600080fd5b611487888289016113b7565b92509250509295509295909350565b6000806000606084860312156114ae576114ae600080fd5b6114b88585611311565b92506114c78560208601611341565b91506114d68560408601611311565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161047e816114df565b6112e3816112f7565b6040810161153a8285611523565b611133602083018461136b565b82818337506000910152565b818352602083019250611567828483611547565b50601f01601f19160190565b606081016115818288611523565b8181036020830152611594818688611553565b905081810360408301526115a9818486611553565b979650505050505050565b805161047e81611308565b6000602082840312156115d4576115d4600080fd5b61113383836115b4565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161047e816115de565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050611632565b6020808252810161047e81611648565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e00000000000000000000000000000000000000000000000000000060208201529050611632565b6020808252810161047e816116b0565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061150d565b6020808252810161047e81611718565b6020808252810161047e81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b606081016117ef8286611523565b6117fc602083018561136b565b6118096040830184611523565b949350505050565b600067ffffffffffffffff821661047e565b6112e381611811565b6020810161047e8284611823565b60005b8381101561185557818101518382015260200161183d565b50506000910152565b6000611868825190565b80845260208401935061187f81856020860161183a565b601f01601f19169290920192915050565b805160009060608401906118a48582611523565b50602083015184820360208601526118bc828261185e565b91505060408301516118d1604086018261136b565b509392505050565b602080825281016111338184611890565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe198201611935576119356118ea565b5060010190565b63ffffffff81166112e3565b60ff81166112e3565b6080810161195f828761193c565b61196c602083018661193c565b818103604083015261197e818561185e565b905061198d6060830184611948565b95945050505050565b67ffffffffffffffff81166112aa565b805161047e81611996565b6000602082840312156119c6576119c6600080fd5b61113383836119a6565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061150d565b6020808252810161047e816119d0565b60608101611a208286611523565b611a2d6020830185611523565b611809604083018461136b565b8015156112aa565b805161047e81611a3a565b600060208284031215611a6257611a62600080fd5b6111338383611a42565b6020810161047e8284611523565b6000611a84825190565b611a9281856020860161183a565b9290920192915050565b61047e8183611a7a56fea2646970667358221220f8981824089ac8a92a349050b7ea22dd728ae858b978c9883f0241dd8740a2c664736f6c634300081c0033", } // ObscuroBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/src/bridge/L1/ObscuroBridge.sol b/contracts/src/bridge/L1/ObscuroBridge.sol index f07686f9a5..2427f20277 100644 --- a/contracts/src/bridge/L1/ObscuroBridge.sol +++ b/contracts/src/bridge/L1/ObscuroBridge.sol @@ -78,8 +78,6 @@ contract ObscuroBridge is // verify ETH deposit. function sendNative(address receiver) external payable override { require(msg.value > 0, "Empty transfer."); - bytes memory data = abi.encode(ValueTransfer(msg.value, receiver)); - queueMessage(remoteBridgeAddress, data, uint32(Topics.VALUE), 0, 0); _messageBus().sendValueToL2{value: msg.value}(receiver, msg.value); } diff --git a/integration/simulation/devnetwork/node.go b/integration/simulation/devnetwork/node.go index 74d33bbecc..6acb4ce4ac 100644 --- a/integration/simulation/devnetwork/node.go +++ b/integration/simulation/devnetwork/node.go @@ -222,7 +222,7 @@ func (n *InMemNodeOperator) createEnclaveContainer(idx int) *enclavecontainer.En GasLocalExecutionCapFlag: defaultCfg.GasLocalExecutionCapFlag, GasPaymentAddress: defaultCfg.GasPaymentAddress, RPCTimeout: 5 * time.Second, - SystemContractOwner: gethcommon.HexToAddress("0x0000000000000000000000000000000000000001"), + SystemContractOwner: gethcommon.HexToAddress("0xDEe530E22045939e6f6a0A593F829e35A140D3F1"), } return enclavecontainer.NewEnclaveContainerWithLogger(enclaveConfig, enclaveLogger) } From dd2af22b8a9bb893584aa537cafddddaf82f2ab9 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 4 Dec 2024 17:32:30 +0200 Subject: [PATCH 3/7] Added notifyDeposit function that emits an event. --- .../CrossChainMessenger.go | 2 +- .../EthereumBridge/EthereumBridge.go | 2 +- .../ManagementContract/ManagementContract.go | 2 +- .../MerkleTreeMessageBus.go | 170 +++++++++++++++++- contracts/generated/MessageBus/MessageBus.go | 170 +++++++++++++++++- contracts/generated/ObsERC20/ObsERC20.go | 2 +- .../generated/ObscuroBridge/ObscuroBridge.go | 2 +- .../SystemDeployer/SystemDeployer.go | 2 +- .../generated/WrappedERC20/WrappedERC20.go | 2 +- contracts/src/messaging/IMessageBus.sol | 5 + contracts/src/messaging/MessageBus.sol | 7 + go/enclave/components/batch_executor.go | 2 +- go/enclave/crosschain/interfaces.go | 2 +- go/enclave/crosschain/message_bus_manager.go | 20 ++- 14 files changed, 376 insertions(+), 14 deletions(-) diff --git a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go index bff636d103..82031e02f9 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: "0x6080604052348015600f57600080fd5b50610fe48061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078c565b61010c565b005b61009f61009a366004610884565b610211565b6040516100ac9190610933565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac9190610953565b61008a6100e3366004610961565b610292565b6000546001600160a01b03166100c8565b61008a6101073660046109a4565b610388565b610118848484846104e8565b61012560208501856109a4565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109c3565b8101906101619190610b96565b905060008082600001516001600160a01b03165a84602001516040516101879190610bf3565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610933565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c4c565b60405160208183030381529060405290505b9392505050565b61029b816105e1565b6102a860208201826109a4565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d760808301836109c3565b8101906102e49190610b96565b905060008082600001516001600160a01b03165a846020015160405161030a9190610bf3565b60006040518083038160008787f1925050503d8060008114610348576040519150601f19603f3d011682016040523d82523d6000602084013e61034d565b606091505b509150915081610372578060405163a5fa8d2b60e01b81526004016101ef9190610933565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d35750825b905060008267ffffffffffffffff1660011480156103f05750303b155b9050811580156103fe575080155b15610435576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046957845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104e057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d790600190610c78565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610537908790879087908790600401610ea7565b60006040518083038186803b15801561054f57600080fd5b505afa158015610563573d6000803e3d6000fd5b5050505060008460405160200161057a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c729061062a908490600401610ee5565b602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190610f4d565b6106875760405162461bcd60e51b81526004016101ef90610f9e565b60008160405160200161069a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071357610713600080fd5b50919050565b60008083601f84011261072e5761072e600080fd5b50813567ffffffffffffffff81111561074957610749600080fd5b60208301915083602082028301111561076457610764600080fd5b9250929050565b805b811461077857600080fd5b50565b80356107868161076b565b92915050565b600080600080606085870312156107a5576107a5600080fd5b843567ffffffffffffffff8111156107bf576107bf600080fd5b6107cb878288016106fe565b945050602085013567ffffffffffffffff8111156107eb576107eb600080fd5b6107f787828801610719565b9350935050610809866040870161077b565b905092959194509250565b60006001600160a01b038216610786565b61076d81610814565b803561078681610825565b60008083601f84011261084e5761084e600080fd5b50813567ffffffffffffffff81111561086957610869600080fd5b60208301915083600182028301111561076457610764600080fd5b60008060006040848603121561089c5761089c600080fd5b6108a6858561082e565b9250602084013567ffffffffffffffff8111156108c5576108c5600080fd5b6108d186828701610839565b92509250509250925092565b60005b838110156108f85781810151838201526020016108e0565b50506000910152565b600061090b825190565b8084526020840193506109228185602086016108dd565b601f01601f19169290920192915050565b6020808252810161028b8184610901565b61094d81610814565b82525050565b602081016107868284610944565b60006020828403121561097657610976600080fd5b813567ffffffffffffffff81111561099057610990600080fd5b61099c848285016106fe565b949350505050565b6000602082840312156109b9576109b9600080fd5b61028b838361082e565b6000808335601e19368590030181126109de576109de600080fd5b8301915050803567ffffffffffffffff8111156109fd576109fd600080fd5b60208201915060018102360382131561076457610764600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a6d57610a6d610a18565b6040525050565b6000610a7f60405190565b9050610a8b8282610a47565b919050565b600067ffffffffffffffff821115610aaa57610aaa610a18565b601f19601f83011660200192915050565b82818337506000910152565b6000610ada610ad584610a90565b610a74565b9050828152838383011115610af157610af1600080fd5b61028b836020830184610abb565b600082601f830112610b1357610b13600080fd5b61028b83833560208501610ac7565b600060608284031215610b3757610b37600080fd5b610b416060610a74565b9050610b4d838361082e565b8152602082013567ffffffffffffffff811115610b6c57610b6c600080fd5b610b7884828501610aff565b602083015250610b8b836040840161077b565b604082015292915050565b600060208284031215610bab57610bab600080fd5b813567ffffffffffffffff811115610bc557610bc5600080fd5b61099c84828501610b22565b6000610bdb825190565b610be98185602086016108dd565b9290920192915050565b6107868183610bd1565b8061094d565b80516000906060840190610c178582610944565b5060208301518482036020860152610c2f8282610901565b9150506040830151610c446040860182610bfd565b509392505050565b6020808252810161028b8184610c03565b600067ffffffffffffffff8216610786565b61094d81610c5d565b602081016107868284610c6f565b506000610786602083018361082e565b67ffffffffffffffff811661076d565b803561078681610c96565b5060006107866020830183610ca6565b67ffffffffffffffff811661094d565b63ffffffff811661076d565b803561078681610cd1565b5060006107866020830183610cdd565b63ffffffff811661094d565b6000808335601e1936859003018112610d1f57610d1f600080fd5b830160208101925035905067ffffffffffffffff811115610d4257610d42600080fd5b3681900382131561076457610764600080fd5b818352602083019250610d69828483610abb565b50601f01601f19160190565b60ff811661076d565b803561078681610d75565b5060006107866020830183610d7e565b60ff811661094d565b600060c08301610db28380610c86565b610dbc8582610944565b50610dca6020840184610cb1565b610dd76020860182610cc1565b50610de56040840184610ce8565b610df26040860182610cf8565b50610e006060840184610ce8565b610e0d6060860182610cf8565b50610e1b6080840184610d04565b8583036080870152610e2e838284610d55565b92505050610e3f60a0840184610d89565b610c4460a0860182610d99565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610e9057610e90600080fd5b602083029250610ea1838584610e4c565b50500190565b60608082528101610eb88187610da2565b90508181036020830152610ecd818587610e55565b9050610edc6040830184610bfd565b95945050505050565b6020808252810161028b8184610da2565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078681610ef6565b80151561076d565b805161078681610f3a565b600060208284031215610f6257610f62600080fd5b61028b8383610f42565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f24565b6020808252810161078681610f6c56fea264697066735822122065b65c64311ee4ab72b78405fc284a1e1c03f057694dea0deca8f0f9b047662b64736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b50610fe48061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078c565b61010c565b005b61009f61009a366004610884565b610211565b6040516100ac9190610933565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac9190610953565b61008a6100e3366004610961565b610292565b6000546001600160a01b03166100c8565b61008a6101073660046109a4565b610388565b610118848484846104e8565b61012560208501856109a4565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109c3565b8101906101619190610b96565b905060008082600001516001600160a01b03165a84602001516040516101879190610bf3565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610933565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c4c565b60405160208183030381529060405290505b9392505050565b61029b816105e1565b6102a860208201826109a4565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d760808301836109c3565b8101906102e49190610b96565b905060008082600001516001600160a01b03165a846020015160405161030a9190610bf3565b60006040518083038160008787f1925050503d8060008114610348576040519150601f19603f3d011682016040523d82523d6000602084013e61034d565b606091505b509150915081610372578060405163a5fa8d2b60e01b81526004016101ef9190610933565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d35750825b905060008267ffffffffffffffff1660011480156103f05750303b155b9050811580156103fe575080155b15610435576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046957845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104e057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d790600190610c78565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610537908790879087908790600401610ea7565b60006040518083038186803b15801561054f57600080fd5b505afa158015610563573d6000803e3d6000fd5b5050505060008460405160200161057a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c729061062a908490600401610ee5565b602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190610f4d565b6106875760405162461bcd60e51b81526004016101ef90610f9e565b60008160405160200161069a9190610ee5565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e25760405162461bcd60e51b81526004016101ef90610f2a565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071357610713600080fd5b50919050565b60008083601f84011261072e5761072e600080fd5b50813567ffffffffffffffff81111561074957610749600080fd5b60208301915083602082028301111561076457610764600080fd5b9250929050565b805b811461077857600080fd5b50565b80356107868161076b565b92915050565b600080600080606085870312156107a5576107a5600080fd5b843567ffffffffffffffff8111156107bf576107bf600080fd5b6107cb878288016106fe565b945050602085013567ffffffffffffffff8111156107eb576107eb600080fd5b6107f787828801610719565b9350935050610809866040870161077b565b905092959194509250565b60006001600160a01b038216610786565b61076d81610814565b803561078681610825565b60008083601f84011261084e5761084e600080fd5b50813567ffffffffffffffff81111561086957610869600080fd5b60208301915083600182028301111561076457610764600080fd5b60008060006040848603121561089c5761089c600080fd5b6108a6858561082e565b9250602084013567ffffffffffffffff8111156108c5576108c5600080fd5b6108d186828701610839565b92509250509250925092565b60005b838110156108f85781810151838201526020016108e0565b50506000910152565b600061090b825190565b8084526020840193506109228185602086016108dd565b601f01601f19169290920192915050565b6020808252810161028b8184610901565b61094d81610814565b82525050565b602081016107868284610944565b60006020828403121561097657610976600080fd5b813567ffffffffffffffff81111561099057610990600080fd5b61099c848285016106fe565b949350505050565b6000602082840312156109b9576109b9600080fd5b61028b838361082e565b6000808335601e19368590030181126109de576109de600080fd5b8301915050803567ffffffffffffffff8111156109fd576109fd600080fd5b60208201915060018102360382131561076457610764600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a6d57610a6d610a18565b6040525050565b6000610a7f60405190565b9050610a8b8282610a47565b919050565b600067ffffffffffffffff821115610aaa57610aaa610a18565b601f19601f83011660200192915050565b82818337506000910152565b6000610ada610ad584610a90565b610a74565b9050828152838383011115610af157610af1600080fd5b61028b836020830184610abb565b600082601f830112610b1357610b13600080fd5b61028b83833560208501610ac7565b600060608284031215610b3757610b37600080fd5b610b416060610a74565b9050610b4d838361082e565b8152602082013567ffffffffffffffff811115610b6c57610b6c600080fd5b610b7884828501610aff565b602083015250610b8b836040840161077b565b604082015292915050565b600060208284031215610bab57610bab600080fd5b813567ffffffffffffffff811115610bc557610bc5600080fd5b61099c84828501610b22565b6000610bdb825190565b610be98185602086016108dd565b9290920192915050565b6107868183610bd1565b8061094d565b80516000906060840190610c178582610944565b5060208301518482036020860152610c2f8282610901565b9150506040830151610c446040860182610bfd565b509392505050565b6020808252810161028b8184610c03565b600067ffffffffffffffff8216610786565b61094d81610c5d565b602081016107868284610c6f565b506000610786602083018361082e565b67ffffffffffffffff811661076d565b803561078681610c96565b5060006107866020830183610ca6565b67ffffffffffffffff811661094d565b63ffffffff811661076d565b803561078681610cd1565b5060006107866020830183610cdd565b63ffffffff811661094d565b6000808335601e1936859003018112610d1f57610d1f600080fd5b830160208101925035905067ffffffffffffffff811115610d4257610d42600080fd5b3681900382131561076457610764600080fd5b818352602083019250610d69828483610abb565b50601f01601f19160190565b60ff811661076d565b803561078681610d75565b5060006107866020830183610d7e565b60ff811661094d565b600060c08301610db28380610c86565b610dbc8582610944565b50610dca6020840184610cb1565b610dd76020860182610cc1565b50610de56040840184610ce8565b610df26040860182610cf8565b50610e006060840184610ce8565b610e0d6060860182610cf8565b50610e1b6080840184610d04565b8583036080870152610e2e838284610d55565b92505050610e3f60a0840184610d89565b610c4460a0860182610d99565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610e9057610e90600080fd5b602083029250610ea1838584610e4c565b50500190565b60608082528101610eb88187610da2565b90508181036020830152610ecd818587610e55565b9050610edc6040830184610bfd565b95945050505050565b6020808252810161028b8184610da2565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078681610ef6565b80151561076d565b805161078681610f3a565b600060208284031215610f6257610f62600080fd5b61028b8383610f42565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f24565b6020808252810161078681610f6c56fea264697066735822122047bcb70d7e66e5f3c1856b2970c70c8b9e3046b8e957495ba86f13ebe801890a64736f6c634300081c0033", } // CrossChainMessengerABI 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 c012b81820..2fdb26e6d2 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\":\"payable\",\"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: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b506129038061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610264576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610ccb565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610d15565b3480156100fe57600080fd5b5061012861010d366004610d58565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610d8d565b60405180910390f35b61015161014c366004610d58565b6102a7565b005b34801561015f57600080fd5b5061015161016e366004610ded565b61041c565b34801561017f57600080fd5b5061015161018e366004610e7a565b610576565b34801561019f57600080fd5b506101516101ae366004610d58565b6106e0565b3480156101bf57600080fd5b506101516101ce366004610ec3565b6107bb565b3480156101df57600080fd5b5061020e6101ee366004610d58565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610f14565b34801561022757600080fd5b50610128610236366004610d58565b6003602052600090815260409020546001600160a01b031681565b61015161025f366004610ec3565b6108f0565b34801561027057600080fd5b5061029a61027f366004610d58565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610f41565b600034116102c75760405162461bcd60e51b81526004016100d190610f81565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b9161031b916001600160a01b039091169034908690602401610f97565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610399906001600160a01b03168260005b600080610a71565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103e69086908390600401610fc7565b6000604051808303818588803b1580156103ff57600080fd5b505af1158015610413573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b039182169116331461044d5760405162461bcd60e51b81526004016100d19061103a565b806001600160a01b031661045f610b7e565b6001600160a01b0316146104855760405162461bcd60e51b81526004016100d1906110a2565b60008585858560405161049790610c64565b6104a494939291906110de565b604051809103906000f0801580156104c0573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610564908a9084908b908b908b908b9061110f565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105c15750825b905060008267ffffffffffffffff1660011480156105de5750303b155b9050811580156105ec575080155b15610623576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561065757845468ff00000000000000001916680100000000000000001785555b610660876106e0565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561041357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106cf90600190611179565b60405180910390a150505050505050565b6106e8610bfb565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078b9190611192565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146107ec5760405162461bcd60e51b81526004016100d19061103a565b806001600160a01b03166107fe610b7e565b6001600160a01b0316146108245760405162461bcd60e51b81526004016100d1906110a2565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061086f5760405162461bcd60e51b81526004016100d190611209565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906108b69087908990600401610fc7565b600060405180830381600087803b1580156108d057600080fd5b505af11580156108e4573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166109275760405162461bcd60e51b81526004016100d19061124b565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906109839033908790600401610fc7565b600060405180830381600087803b15801561099d57600080fd5b505af11580156109b1573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b926109f09291169087908790602401610f97565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610a6a906001600160a01b0316826000610391565b5050505050565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610aa791906112fa565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610afb8361133a565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610b3b9493929190611372565b60206040518083038185885af1158015610b59573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061041391906113d2565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611192565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c62576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114dc806113f283390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610cdb81610c71565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610cdb81610ce1565b60006001600160a01b038216610cdb565b610d3f81610d25565b8114610d4a57600080fd5b50565b8035610cdb81610d36565b600060208284031215610d6d57610d6d600080fd5b610d778383610d4d565b9392505050565b610d8781610d25565b82525050565b60208101610cdb8284610d7e565b60008083601f840112610db057610db0600080fd5b50813567ffffffffffffffff811115610dcb57610dcb600080fd5b602083019150836001820283011115610de657610de6600080fd5b9250929050565b600080600080600060608688031215610e0857610e08600080fd5b610e128787610d4d565b9450602086013567ffffffffffffffff811115610e3157610e31600080fd5b610e3d88828901610d9b565b9450945050604086013567ffffffffffffffff811115610e5f57610e5f600080fd5b610e6b88828901610d9b565b92509250509295509295909350565b60008060408385031215610e9057610e90600080fd5b610e9a8484610d4d565b9150610ea98460208501610d4d565b90509250929050565b80610d3f565b8035610cdb81610eb2565b600080600060608486031215610edb57610edb600080fd5b610ee58585610d4d565b9250610ef48560208601610eb8565b9150610f038560408601610d4d565b90509250925092565b801515610d87565b60208101610cdb8284610f0c565b6000610cdb82610d25565b6000610cdb82610f22565b610d8781610f2d565b60208101610cdb8284610f38565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610d0f565b60208082528101610cdb81610f4f565b80610d87565b60608101610fa58286610d7e565b610fb26020830185610f91565b610fbf6040830184610d7e565b949350505050565b60408101610fd58285610d7e565b610d776020830184610f91565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610cc5565b60208082528101610cdb81610fe2565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610cc5565b60208082528101610cdb8161104a565b82818337506000910152565b8183526020830192506110d28284836110b2565b50601f01601f19160190565b604080825281016110f08186886110be565b905081810360208301526111058184866110be565b9695505050505050565b6080810161111d8289610d7e565b61112a6020830188610d7e565b818103604083015261113d8186886110be565b905081810360608301526111528184866110be565b98975050505050505050565b600067ffffffffffffffff8216610cdb565b610d878161115e565b60208101610cdb8284611170565b8051610cdb81610d36565b6000602082840312156111a7576111a7600080fd5b610d778383611187565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610cc5565b60208082528101610cdb816111b1565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610d0f565b60208082528101610cdb81611219565b60005b8381101561127657818101518382015260200161125e565b50506000910152565b6000611289825190565b8084526020840193506112a081856020860161125b565b601f01601f19169290920192915050565b805160009060608401906112c58582610d7e565b50602083015184820360208601526112dd828261127f565b91505060408301516112f26040860182610f91565b509392505050565b60208082528101610d7781846112b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016113565761135661130b565b5060010190565b63ffffffff8116610d87565b60ff8116610d87565b60808101611380828761135d565b61138d602083018661135d565b818103604083015261139f818561127f565b90506113ae6060830184611369565b95945050505050565b67ffffffffffffffff8116610d3f565b8051610cdb816113b7565b6000602082840312156113e7576113e7600080fd5b610d7783836113c756fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea26469706673582212200ee33806c6a1becffd861d8aa4e1007a6ba713eed1a34e62ce1d3002a7a4167e64736f6c634300081c0033a2646970667358221220f9b86c85e317830baa352fe3fdec15e437099570aa222b3817693f760cf8d78e64736f6c634300081c0033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b506129038061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610264576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610ccb565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610d15565b3480156100fe57600080fd5b5061012861010d366004610d58565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610d8d565b60405180910390f35b61015161014c366004610d58565b6102a7565b005b34801561015f57600080fd5b5061015161016e366004610ded565b61041c565b34801561017f57600080fd5b5061015161018e366004610e7a565b610576565b34801561019f57600080fd5b506101516101ae366004610d58565b6106e0565b3480156101bf57600080fd5b506101516101ce366004610ec3565b6107bb565b3480156101df57600080fd5b5061020e6101ee366004610d58565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610f14565b34801561022757600080fd5b50610128610236366004610d58565b6003602052600090815260409020546001600160a01b031681565b61015161025f366004610ec3565b6108f0565b34801561027057600080fd5b5061029a61027f366004610d58565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610f41565b600034116102c75760405162461bcd60e51b81526004016100d190610f81565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b9161031b916001600160a01b039091169034908690602401610f97565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610399906001600160a01b03168260005b600080610a71565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103e69086908390600401610fc7565b6000604051808303818588803b1580156103ff57600080fd5b505af1158015610413573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b039182169116331461044d5760405162461bcd60e51b81526004016100d19061103a565b806001600160a01b031661045f610b7e565b6001600160a01b0316146104855760405162461bcd60e51b81526004016100d1906110a2565b60008585858560405161049790610c64565b6104a494939291906110de565b604051809103906000f0801580156104c0573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610564908a9084908b908b908b908b9061110f565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105c15750825b905060008267ffffffffffffffff1660011480156105de5750303b155b9050811580156105ec575080155b15610623576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561065757845468ff00000000000000001916680100000000000000001785555b610660876106e0565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561041357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106cf90600190611179565b60405180910390a150505050505050565b6106e8610bfb565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078b9190611192565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146107ec5760405162461bcd60e51b81526004016100d19061103a565b806001600160a01b03166107fe610b7e565b6001600160a01b0316146108245760405162461bcd60e51b81526004016100d1906110a2565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061086f5760405162461bcd60e51b81526004016100d190611209565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906108b69087908990600401610fc7565b600060405180830381600087803b1580156108d057600080fd5b505af11580156108e4573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166109275760405162461bcd60e51b81526004016100d19061124b565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906109839033908790600401610fc7565b600060405180830381600087803b15801561099d57600080fd5b505af11580156109b1573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b926109f09291169087908790602401610f97565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150610a6a906001600160a01b0316826000610391565b5050505050565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610aa791906112fa565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610afb8361133a565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610b3b9493929190611372565b60206040518083038185885af1158015610b59573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061041391906113d2565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611192565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c62576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114dc806113f283390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610cdb81610c71565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610cdb81610ce1565b60006001600160a01b038216610cdb565b610d3f81610d25565b8114610d4a57600080fd5b50565b8035610cdb81610d36565b600060208284031215610d6d57610d6d600080fd5b610d778383610d4d565b9392505050565b610d8781610d25565b82525050565b60208101610cdb8284610d7e565b60008083601f840112610db057610db0600080fd5b50813567ffffffffffffffff811115610dcb57610dcb600080fd5b602083019150836001820283011115610de657610de6600080fd5b9250929050565b600080600080600060608688031215610e0857610e08600080fd5b610e128787610d4d565b9450602086013567ffffffffffffffff811115610e3157610e31600080fd5b610e3d88828901610d9b565b9450945050604086013567ffffffffffffffff811115610e5f57610e5f600080fd5b610e6b88828901610d9b565b92509250509295509295909350565b60008060408385031215610e9057610e90600080fd5b610e9a8484610d4d565b9150610ea98460208501610d4d565b90509250929050565b80610d3f565b8035610cdb81610eb2565b600080600060608486031215610edb57610edb600080fd5b610ee58585610d4d565b9250610ef48560208601610eb8565b9150610f038560408601610d4d565b90509250925092565b801515610d87565b60208101610cdb8284610f0c565b6000610cdb82610d25565b6000610cdb82610f22565b610d8781610f2d565b60208101610cdb8284610f38565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610d0f565b60208082528101610cdb81610f4f565b80610d87565b60608101610fa58286610d7e565b610fb26020830185610f91565b610fbf6040830184610d7e565b949350505050565b60408101610fd58285610d7e565b610d776020830184610f91565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610cc5565b60208082528101610cdb81610fe2565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610cc5565b60208082528101610cdb8161104a565b82818337506000910152565b8183526020830192506110d28284836110b2565b50601f01601f19160190565b604080825281016110f08186886110be565b905081810360208301526111058184866110be565b9695505050505050565b6080810161111d8289610d7e565b61112a6020830188610d7e565b818103604083015261113d8186886110be565b905081810360608301526111528184866110be565b98975050505050505050565b600067ffffffffffffffff8216610cdb565b610d878161115e565b60208101610cdb8284611170565b8051610cdb81610d36565b6000602082840312156111a7576111a7600080fd5b610d778383611187565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610cc5565b60208082528101610cdb816111b1565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610d0f565b60208082528101610cdb81611219565b60005b8381101561127657818101518382015260200161125e565b50506000910152565b6000611289825190565b8084526020840193506112a081856020860161125b565b601f01601f19169290920192915050565b805160009060608401906112c58582610d7e565b50602083015184820360208601526112dd828261127f565b91505060408301516112f26040860182610f91565b509392505050565b60208082528101610d7781846112b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016113565761135661130b565b5060010190565b63ffffffff8116610d87565b60ff8116610d87565b60808101611380828761135d565b61138d602083018661135d565b818103604083015261139f818561127f565b90506113ae6060830184611369565b95945050505050565b67ffffffffffffffff8116610d3f565b8051610cdb816113b7565b6000602082840312156113e7576113e7600080fd5b610d7783836113c756fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220c7199b3ba419978fd56f66d77e752344d9012ad608ca77ab3db04c58eb0ad63664736f6c634300081c0033a264697066735822122080d588884740d61d0a16fa94daec35628acdccba8f56e97b4646b9e3766d76f964736f6c634300081c0033", } // EthereumBridgeABI 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 f757acd50d..5205e4e421 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: "0x6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6151e18061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638129fc1c11610104578063a25eb31c116100a2578063db5d91b111610071578063db5d91b114610475578063e34fbfc8146104a1578063e874eb20146104b3578063f2fde38b146104c657600080fd5b8063a25eb31c1461042c578063a4ab2faa1461043f578063a52f433c14610452578063d4fab8871461046257600080fd5b806387059edb116100de57806387059edb146103a95780638da5cb5b146103bc57806398077e86146103ec578063a1a227fa1461040c57600080fd5b80638129fc1c1461035d5780638236a7ba14610365578063841548261461038657600080fd5b8063476657381161017c5780636a30d26c1161014b5780636a30d26c146103255780636b9707d61461033a578063715018a61461034d578063728109961461035557600080fd5b806347665738146102cb5780635371a216146102de578063568699c8146102f157806368e103831461031257600080fd5b80632f0cb9e3116101b85780632f0cb9e3146102255780633e60a22f1461025557806343348b2f14610296578063440c953b146102c257600080fd5b80620ddd27146101de57806303e72e48146101fd578063073b6ef314610212575b600080fd5b6101e7600e5481565b6040516101f491906119de565b60405180910390f35b61021061020b366004611b14565b6104d9565b005b610210610220366004611c89565b6105e1565b610248610233366004611d57565b600c6020526000908152604090205460ff1681565b6040516101f49190611d7e565b610289610263366004611d8c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101f49190611dd8565b6102486102a4366004611de6565b6001600160a01b031660009081526020819052604090205460ff1690565b6101e760055481565b6102106102d9366004611de6565b6107d8565b6102106102ec366004611e6b565b610878565b6103046102ff366004611d57565b610a1d565b6040516101f4929190611f6d565b610210610320366004611f8d565b610a73565b61032d610b17565b6040516101f49190612090565b610210610348366004611de6565b610bf0565b610210610c80565b610210610c94565b610210610d19565b610378610373366004611d57565b610ef4565b6040516101f49291906120a1565b610248610394366004611d57565b600d6020526000908152604090205460ff1681565b6103786103b7366004611d57565b610fdc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610289565b6103ff6103fa366004611d57565b611053565b6040516101f491906120af565b600a5461041f906001600160a01b031681565b6040516101f49190612102565b61021061043a36600461213a565b6110ff565b61024861044d3660046121ac565b611207565b600454610100900460ff16610248565b6102106104703660046121fa565b611285565b610248610483366004611de6565b6001600160a01b031660009081526001602052604090205460ff1690565b6102106104af3660046122a1565b5050565b600b5461041f906001600160a01b031681565b6102106104d4366004611de6565b611361565b6104e16113b8565b60006001600160a01b03166003836040516104fc919061230b565b908152604051908190036020019020546001600160a01b03160361055857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161055683826123e7565b505b80600383604051610569919061230b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906105d590849084906124a7565b60405180910390a15050565b60008281526008602052604090205481146106175760405162461bcd60e51b815260040161060e906124f9565b60405180910390fd5b6000610685898989896040516020016106339493929190612561565b6040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166106c05760405162461bcd60e51b815260040161060e906125d7565b600e8990556000805b87518110156107b357600b5488516001600160a01b039091169063b6aed0cb908a90849081106106fb576106fb6125e7565b602002602001015161070c90612607565b426040518363ffffffff1660e01b815260040161072a92919061263d565b600060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050508188828151811061076f5761076f6125e7565b602002602001015161078090612607565b60405160200161079192919061263d565b60408051601f19818403018152919052805160209091012091506001016106c9565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6107e06113b8565b6001600160a01b03811660009081526020819052604090205460ff166108185760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061086d908390611dd8565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906108c7908790879087908790600401612773565b60006040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b5050505060008460405160200161090a91906127ac565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff16156109525760405162461bcd60e51b815260040161060e906127ec565b6001600c60008760405160200161096991906127ac565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad21916109c291908901908901611de6565b87604001356040518363ffffffff1660e01b81526004016109e49291906127fc565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610a4785610fdc565b9150915081610a5c5760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610a965760405162461bcd60e51b815260040161060e90612864565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610b08908790611dd8565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610be7578382906000526020600020018054610b5a9061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b869061232b565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081526020019060010190610b3b565b50505050905090565b610bf86113b8565b6001600160a01b03811660009081526001602052604090205460ff16610c305760405162461bcd60e51b815260040161060e906128a6565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479061086d908390611dd8565b610c886113b8565b610c926000611458565b565b610c9c6113b8565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610ce5903390600401611dd8565b600060405180830381600087803b158015610cff57600080fd5b505af1158015610d13573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d645750825b905060008267ffffffffffffffff166001148015610d815750303b155b905081158015610d8f575080155b15610dc6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610dfa57845468ff00000000000000001916680100000000000000001785555b610e03336114d6565b60006005556001600955604051610e19906119c9565b604051809103906000f080158015610e35573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610e9e91611dd8565b60405180910390a18315610eed57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b08906001906128d1565b5050505050565b604080516060808201835260008083526020808401839052838501829052858252600681528482208551938401909552845483526001850180549295869493909284019190610f429061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e9061232b565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361104057505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61104981610ef4565b9250925050915091565b6002818154811061106357600080fd5b90600052602060002001600091509050805461107e9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546110aa9061232b565b80156110f75780601f106110cc576101008083540402835291602001916110f7565b820191906000526020600020905b8154815290600101906020018083116110da57829003601f168201915b505050505081565b600061114d833561111360208601866128df565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166111885760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b03811660009081526001602052604090205460ff166111c05760405162461bcd60e51b815260040161060e906128a6565b6111c9836114e7565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906111fa908535906119de565b60405180910390a1505050565b600080805b835181101561126c5781848281518110611228576112286125e7565b602002602001015161123990612607565b60405160200161124a92919061263d565b60408051601f198184030181529190528051602090910120915060010161120c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806112be5760405162461bcd60e51b815260040161060e9061298c565b81156113365760006112f28787866040516020016112de939291906129c4565b60405160208183030381529060405261158b565b90506000611300828761142c565b9050876001600160a01b0316816001600160a01b0316146113335760405162461bcd60e51b815260040161060e90612a40565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6113696113b8565b6001600160a01b0381166113ac5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b6113b581611458565b50565b336113ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c9257336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b60008060008061143c86866115c6565b92509250925061144c8282611613565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6114de611715565b6113b58161177c565b8035600090815260066020526040902081906115038282612bb3565b50506009546000908152600760205260409020813590819055611527600143612bd3565b4060405160200161153992919061263d565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549161156f83612be6565b9190505550600554816040013511156113b55760400135600555565b60006115978251611784565b826040516020016115a9929190612bff565b604051602081830303815290604052805190602001209050919050565b600080600083516041036116005760208401516040850151606086015160001a6115f288828585611825565b95509550955050505061160c565b50508151600091506002905b9250925092565b600082600381111561162757611627612c3b565b03611630575050565b600182600381111561164457611644612c3b565b0361167b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561168f5761168f612c3b565b036116c8576040517ffce698f700000000000000000000000000000000000000000000000000000000815261060e9082906004016119de565b60038260038111156116dc576116dc612c3b565b036104af57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161060e91906119de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c92576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611369611715565b60606000611791836118e7565b600101905060008167ffffffffffffffff8111156117b1576117b16119ec565b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117e5575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186057506000915060039050826118dd565b6000600188888888604051600081526020016040526040516118859493929190612c5a565b6020604051602081039080840390855afa1580156118a7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d3575060009250600191508290506118dd565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061195c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061197a57662386f26fc10000830492506010015b6305f5e1008310611992576305f5e100830492506008015b61271083106119a657612710830492506004015b606483106119b8576064830492506002015b600a83106114525760010192915050565b61251c80612c9083390190565b805b82525050565b6020810161145282846119d6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611a2857611a286119ec565b6040525050565b6000611a3a60405190565b9050611a468282611a02565b919050565b600067ffffffffffffffff821115611a6557611a656119ec565b601f19601f83011660200192915050565b82818337506000910152565b6000611a95611a9084611a4b565b611a2f565b9050828152838383011115611aac57611aac600080fd5b611aba836020830184611a76565b9392505050565b600082601f830112611ad557611ad5600080fd5b611aba83833560208501611a82565b60006001600160a01b038216611452565b611afe81611ae4565b81146113b557600080fd5b803561145281611af5565b60008060408385031215611b2a57611b2a600080fd5b823567ffffffffffffffff811115611b4457611b44600080fd5b611b5085828601611ac1565b925050611b608460208501611b09565b90509250929050565b80611afe565b803561145281611b69565b600067ffffffffffffffff821115611b9457611b946119ec565b5060209081020190565b6000611bac611a9084611b7a565b83815290506020808201908402830185811115611bcb57611bcb600080fd5b835b81811015611c0a57803567ffffffffffffffff811115611bef57611bef600080fd5b611bfb88828801611ac1565b84525060209283019201611bcd565b5050509392505050565b600082601f830112611c2857611c28600080fd5b611aba83833560208501611b9e565b60008083601f840112611c4c57611c4c600080fd5b50813567ffffffffffffffff811115611c6757611c67600080fd5b602083019150836001820283011115611c8257611c82600080fd5b9250929050565b60008060008060008060008060e0898b031215611ca857611ca8600080fd5b611cb28a8a611b6f565b9750611cc18a60208b01611b6f565b9650611cd08a60408b01611b6f565b9550606089013567ffffffffffffffff811115611cef57611cef600080fd5b611cfb8b828c01611c14565b955050608089013567ffffffffffffffff811115611d1b57611d1b600080fd5b611d278b828c01611c37565b9450945050611d398a60a08b01611b6f565b9150611d488a60c08b01611b6f565b90509295985092959890939650565b600060208284031215611d6c57611d6c600080fd5b611aba8383611b6f565b8015156119d8565b602081016114528284611d76565b600060208284031215611da157611da1600080fd5b813567ffffffffffffffff811115611dbb57611dbb600080fd5b611dc784828501611ac1565b949350505050565b6119d881611ae4565b602081016114528284611dcf565b600060208284031215611dfb57611dfb600080fd5b611aba8383611b09565b600060808284031215611e1a57611e1a600080fd5b50919050565b60008083601f840112611e3557611e35600080fd5b50813567ffffffffffffffff811115611e5057611e50600080fd5b602083019150836020820283011115611c8257611c82600080fd5b60008060008060c08587031215611e8457611e84600080fd5b611e8e8686611e05565b9350608085013567ffffffffffffffff811115611ead57611ead600080fd5b611eb987828801611e20565b9350935050611ecb8660a08701611b6f565b905092959194509250565b60005b83811015611ef1578181015183820152602001611ed9565b50506000910152565b6000611f04825190565b808452602084019350611f1b818560208601611ed6565b601f01601f19169290920192915050565b80516000906060840190611f4085826119d6565b5060208301518482036020860152611f588282611efa565b915050604083015161181d60408601826119d6565b60408101611f7b82856119d6565b8181036020830152611dc78184611f2c565b600080600080600060608688031215611fa857611fa8600080fd5b611fb28787611b09565b9450602086013567ffffffffffffffff811115611fd157611fd1600080fd5b611fdd88828901611c37565b9450945050604086013567ffffffffffffffff811115611fff57611fff600080fd5b61200b88828901611c37565b92509250509295509295909350565b6000611aba8383611efa565b60200190565b6000612036825190565b808452602084019350836020820285016120508560200190565b60005b84811015612084578383038852815161206c848261201a565b93505060208201602098909801979150600101612053565b50909695505050505050565b60208082528101611aba818461202c565b60408101611f7b8285611d76565b60208082528101611aba8184611efa565b60006114526001600160a01b0383166120d7565b90565b6001600160a01b031690565b6000611452826120c0565b6000611452826120e3565b6119d8816120ee565b6020810161145282846120f9565b600060608284031215611e1a57611e1a600080fd5b600060208284031215611e1a57611e1a600080fd5b6000806040838503121561215057612150600080fd5b823567ffffffffffffffff81111561216a5761216a600080fd5b61217685828601612110565b925050602083013567ffffffffffffffff81111561219657612196600080fd5b6121a285828601612125565b9150509250929050565b6000602082840312156121c1576121c1600080fd5b813567ffffffffffffffff8111156121db576121db600080fd5b611dc784828501611c14565b801515611afe565b8035611452816121e7565b600080600080600060a0868803121561221557612215600080fd5b61221f8787611b09565b945061222e8760208801611b09565b9350604086013567ffffffffffffffff81111561224d5761224d600080fd5b61225988828901611ac1565b935050606086013567ffffffffffffffff81111561227957612279600080fd5b61228588828901611ac1565b92505061229587608088016121ef565b90509295509295909350565b600080602083850312156122b7576122b7600080fd5b823567ffffffffffffffff8111156122d1576122d1600080fd5b6122dd85828601611c37565b92509250509250929050565b60006122f3825190565b612301818560208601611ed6565b9290920192915050565b61145281836122e9565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061233f57607f821691505b602082108103611e1a57611e1a612315565b60006114526120d48381565b61236683612351565b815460001960089490940293841b1916921b91909117905550565b600061238e81848461235d565b505050565b818110156104af576123a6600082612381565b600101612393565b601f82111561238e576000818152602090206020601f850104810160208510156123d55750805b610eed6020601f860104830182612393565b815167ffffffffffffffff811115612401576124016119ec565b61240b825461232b565b6124168282856123ae565b506020601f82116001811461244b57600083156124335750848201515b600019600885021c1981166002850217855550610eed565b600084815260208120601f198516915b8281101561247b578785015182556020948501946001909201910161245b565b50848210156124985783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016124b88185611efa565b9050611aba6020830184611dcf565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612026565b60208082528101611452816124c7565b6000612513825190565b8084526020840193508360208202850161252d8560200190565b60005b848110156120845783830388528151612549848261201a565b93505060208201602098909801979150600101612530565b6080810161256f82876119d6565b61257c60208301866119d6565b61258960408301856119d6565b818103606083015261259b8184612509565b9695505050505050565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612026565b60208082528101611452816125a5565b634e487b7160e01b600052603260045260246000fd5b6000611452825190565b6000612611825190565b6020830161261e816125fd565b9250506020811015611e1a576000196020919091036008021b16919050565b6040810161264b82856119d6565b611aba60208301846119d6565b5060006114526020830183611b09565b5060006114526020830183611b6f565b67ffffffffffffffff8116611afe565b803561145281612678565b5060006114526020830183612688565b67ffffffffffffffff81166119d8565b6126bd8180612658565b6126c78382611dcf565b506126d56020820182612658565b6126e26020840182611dcf565b506126f06040820182612668565b6126fd60408401826119d6565b5061270b6060820182612693565b61238e60608401826126a3565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561275c5761275c600080fd5b60208302925061276d838584612718565b50500190565b60c0810161278182876126b3565b8181036080830152612794818587612721565b90506127a360a08301846119d6565b95945050505050565b6080810161145282846126b3565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612026565b60208082528101611452816127ba565b6040810161264b8285611dcf565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016114528161280a565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612026565b6020808252810161145281612874565b600067ffffffffffffffff8216611452565b6119d8816128b6565b6020810161145282846128c8565b6000808335601e19368590030181126128fa576128fa600080fd5b8301915050803567ffffffffffffffff81111561291957612919600080fd5b602082019150600181023603821315611c8257611c82600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061285e565b6020808252810161145281612934565b60006114528260601b90565b60006114528261299c565b6119d86129bf82611ae4565b6129a8565b6129ce81856129b3565b6014016129db81846129b3565b601401611dc781836122e9565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061285e565b60208082528101611452816129e8565b6000813561145281611b69565b600081611452565b612a6e82612a5d565b612a7a6120d482612a5d565b8255505050565b8267ffffffffffffffff811115612a9a57612a9a6119ec565b612aa4825461232b565b612aaf8282856123ae565b506000601f821160018114612ae45760008315612acc5750848201355b600019600885021c1981166002850217855550612b3e565b600084815260209020601f19841690835b82811015612b155787850135825560209485019460019092019101612af5565b5084821015612b32576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b61238e838383612a81565b612b5a82612351565b80612a7a565b8180612b6b81612a50565b9050612b778184612a65565b5050612b8660208301836128df565b612b94818360018601612b46565b50506040820180612ba482612a50565b9050610d138160028501612b51565b6104af8282612b60565b634e487b7160e01b600052601160045260246000fd5b8181038181111561145257611452612bbd565b600060018201612bf857612bf8612bbd565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612c2f81846122e9565b9050611aba81836122e9565b634e487b7160e01b600052602160045260246000fd5b60ff81166119d8565b60808101612c6882876119d6565b612c756020830186612c51565b612c8260408301856119d6565b6127a360608301846119d656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6123c3806101596000396000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063b201246f11610059578063b201246f14610311578063b6aed0cb14610331578063e138a8d214610351578063f2fde38b1461037157610160565b80638da5cb5b1461026c5780639730886d146102b157806399a3ad21146102d1578063b1454caa146102f157610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063485cc95514610237578063715018a61461025757610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401611141565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890611190565b60405180910390fd5b34801561018d57600080fd5b506101a161019c3660046111bb565b610391565b6040516101ae91906111f6565b60405180910390f35b3480156101c357600080fd5b5061015e6101d236600461121c565b6103f0565b3480156101e357600080fd5b506101f76101f23660046111bb565b610436565b6040516101ae9190611243565b61015e610212366004611265565b610488565b34801561022357600080fd5b5061015e61023236600461129d565b6105d7565b34801561024357600080fd5b5061015e6102523660046112bc565b610656565b34801561026357600080fd5b5061015e6107c1565b34801561027857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae91906112eb565b3480156102bd57600080fd5b5061015e6102cc3660046112f9565b6107d5565b3480156102dd57600080fd5b5061015e6102ec366004611265565b610941565b6103046102ff3660046113c2565b6109c1565b6040516101ae919061144f565b34801561031d57600080fd5b5061015e61032c3660046114bd565b610ac9565b34801561033d57600080fd5b5061015e61034c366004611528565b610bca565b34801561035d57600080fd5b5061015e61036c366004611548565b610c10565b34801561037d57600080fd5b5061015e61038c36600461129d565b610d5b565b600080826040516020016103a59190611764565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103e95760405162461bcd60e51b8152600401610178906117b3565b9392505050565b6103f8610db2565b60008181526004602052604081205490036104255760405162461bcd60e51b8152600401610178906117f5565b600090815260046020526040812055565b6000808260405160200161044a9190611764565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104805750428111155b949350505050565b60003411801561049757508034145b6104b35760405162461bcd60e51b81526004016101789061185d565b60035434906001600160a01b0316156105775760006104d0610e26565b9050803410156104f25760405162461bcd60e51b81526004016101789061189d565b6104fc81346118c3565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d806000811461054e576040519150601f19603f3d011682016040523d82523d6000602084013e610553565b606091505b50509050806105745760405162461bcd60e51b81526004016101789061192e565b50505b600061058233610eb7565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105c992919061193e565b60405180910390a350505050565b6105df610db2565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461062c576040519150601f19603f3d011682016040523d82523d6000602084013e610631565b606091505b50509050806106525760405162461bcd60e51b81526004016101789061198b565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106a15750825b905060008267ffffffffffffffff1660011480156106be5750303b155b9050811580156106cc575080155b15610703576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561073757845468ff00000000000000001916680100000000000000001785555b61074087610f15565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156107b857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906107af906001906119bf565b60405180910390a15b50505050505050565b6107c9610db2565b6107d36000610f26565b565b60006107e26001306119cd565b90506108157f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061083c5750336001600160a01b038216145b6108585760405162461bcd60e51b815260040161017890611a22565b60006108648342611a32565b90506000846040516020016108799190611764565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108bd5760405162461bcd60e51b815260040161017890611a9d565b6000818152602081815260408220849055600191906108de9088018861129d565b6001600160a01b03168152602081019190915260400160009081209061090a6080880160608901611aad565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016107b88282611eeb565b610949610db2565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610996576040519150601f19603f3d011682016040523d82523d6000602084013e61099b565b606091505b50509050806109bc5760405162461bcd60e51b81526004016101789061198b565b505050565b6003546000906001600160a01b031615610a72576109de83610fa4565b3410156109fd5760405162461bcd60e51b815260040161017890611f4d565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4a576040519150601f19603f3d011682016040523d82523d6000602084013e610a4f565b606091505b5050905080610a705760405162461bcd60e51b81526004016101789061192e565b505b610a7b33610eb7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610ab89796959493929190611f5d565b60405180910390a195945050505050565b6000818152600460205260408120549003610af65760405162461bcd60e51b815260040161017890612018565b600081815260046020526040902054421015610b245760405162461bcd60e51b815260040161017890612064565b600084604051602001610b3791906120e9565b60405160208183030381529060405280519060200120604051602001610b5d9190612129565b604051602081830303815290604052805190602001209050610ba784848484604051602001610b8c9190612148565b60405160208183030381529060405280519060200120611026565b610bc35760405162461bcd60e51b8152600401610178906121b2565b5050505050565b610bd2610db2565b60008281526004602052604090205415610bfe5760405162461bcd60e51b81526004016101789061221a565b60009182526004602052604090912055565b6000818152600460205260408120549003610c3d5760405162461bcd60e51b815260040161017890612018565b600081815260046020526040902054421015610c6b5760405162461bcd60e51b815260040161017890612064565b6000610c7a602086018661129d565b610c8a604087016020880161222a565b610c9a6060880160408901611aad565b610caa6080890160608a01611aad565b610cb760808a018a611c04565b610cc760c08c0160a08d01612249565b604051602001610cdd9796959493929190611f5d565b604051602081830303815290604052805190602001209050600081604051602001610d08919061229a565b604051602081830303815290604052805190602001209050610d3785858584604051602001610b8c9190612148565b610d535760405162461bcd60e51b815260040161017890612302565b505050505050565b610d63610db2565b6001600160a01b038116610da65760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161017891906112eb565b610daf81610f26565b50565b33610de47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107d357336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161017891906112eb565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610e719060209060040161231b565b602060405180830381865afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190612334565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610eea8385612353565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b610f1d61103e565b610daf816110a5565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610fc3601185611a32565b6040518263ffffffff1660e01b8152600401610fdf91906111f6565b602060405180830381865afa158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110209190612334565b92915050565b6000826110348686856110ad565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6361103e565b600081815b848110156110e6576110dc828787848181106110d0576110d0612377565b905060200201356110ef565b91506001016110b2565b50949350505050565b600081831061110b5760008281526020849052604090206103e9565b5060009182526020526040902090565b60006001600160a01b038216611020565b6111358161111b565b82525050565b80611135565b6040810161114f828561112c565b6103e9602083018461113b565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016110208161115c565b600060c082840312156111b5576111b5600080fd5b50919050565b6000602082840312156111d0576111d0600080fd5b813567ffffffffffffffff8111156111ea576111ea600080fd5b610480848285016111a0565b60208101611020828461113b565b805b8114610daf57600080fd5b803561102081611204565b60006020828403121561123157611231600080fd5b6103e98383611211565b801515611135565b60208101611020828461123b565b6112068161111b565b803561102081611251565b6000806040838503121561127b5761127b600080fd5b611285848461125a565b91506112948460208501611211565b90509250929050565b6000602082840312156112b2576112b2600080fd5b6103e9838361125a565b600080604083850312156112d2576112d2600080fd5b6112dc848461125a565b9150611294846020850161125a565b60208101611020828461112c565b6000806040838503121561130f5761130f600080fd5b823567ffffffffffffffff81111561132957611329600080fd5b611335858286016111a0565b9250506112948460208501611211565b63ffffffff8116611206565b803561102081611345565b60008083601f84011261137157611371600080fd5b50813567ffffffffffffffff81111561138c5761138c600080fd5b6020830191508360018202830111156113a7576113a7600080fd5b9250929050565b60ff8116611206565b8035611020816113ae565b6000806000806000608086880312156113dd576113dd600080fd5b6113e78787611351565b94506113f68760208801611351565b9350604086013567ffffffffffffffff81111561141557611415600080fd5b6114218882890161135c565b935093505061143387606088016113b7565b90509295509295909350565b67ffffffffffffffff8116611135565b60208101611020828461143f565b6000608082840312156111b5576111b5600080fd5b60008083601f84011261148757611487600080fd5b50813567ffffffffffffffff8111156114a2576114a2600080fd5b6020830191508360208202830111156113a7576113a7600080fd5b60008060008060c085870312156114d6576114d6600080fd5b6114e0868661145d565b9350608085013567ffffffffffffffff8111156114ff576114ff600080fd5b61150b87828801611472565b935093505061151d8660a08701611211565b905092959194509250565b6000806040838503121561153e5761153e600080fd5b6112858484611211565b6000806000806060858703121561156157611561600080fd5b843567ffffffffffffffff81111561157b5761157b600080fd5b611587878288016111a0565b945050602085013567ffffffffffffffff8111156115a7576115a7600080fd5b6115b387828801611472565b935093505061151d8660408701611211565b506000611020602083018361125a565b67ffffffffffffffff8116611206565b8035611020816115d5565b50600061102060208301836115e5565b5060006110206020830183611351565b63ffffffff8116611135565b6000808335601e193685900301811261163757611637600080fd5b830160208101925035905067ffffffffffffffff81111561165a5761165a600080fd5b368190038213156113a7576113a7600080fd5b82818337506000910152565b81835260208301925061168d82848361166d565b50601f01601f19160190565b50600061102060208301836113b7565b60ff8116611135565b600060c083016116c283806115c5565b6116cc858261112c565b506116da60208401846115f0565b6116e7602086018261143f565b506116f56040840184611600565b6117026040860182611610565b506117106060840184611600565b61171d6060860182611610565b5061172b608084018461161c565b858303608087015261173e838284611679565b9250505061174f60a0840184611699565b61175c60a08601826116a9565b509392505050565b602080825281016103e981846116b2565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b6020808252810161102081611775565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e0000000000008152905061118a565b60208082528101611020816117c3565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506117ad565b6020808252810161102081611805565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c7565910190815261118a565b602080825281016110208161186d565b634e487b7160e01b600052601160045260246000fd5b81810381811115611020576110206118ad565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506117ad565b60208082528101611020816118d6565b6040810161194c828561113b565b6103e9602083018461143f565b60148152602081017f6661696c65642073656e64696e672076616c75650000000000000000000000008152905061118a565b6020808252810161102081611959565b6000611020826119a9565b90565b67ffffffffffffffff1690565b6111358161199b565b6020810161102082846119b6565b6001600160a01b03918216919081169082820390811115611020576110206118ad565b60118152602081017f4e6f74206f776e6572206f722073656c660000000000000000000000000000008152905061118a565b60208082528101611020816119f0565b80820180821115611020576110206118ad565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506117ad565b6020808252810161102081611a45565b600060208284031215611ac257611ac2600080fd5b6103e98383611351565b6000813561102081611251565b60006001600160a01b03835b81169019929092169190911792915050565b60006110208261111b565b600061102082611af7565b611b1682611b02565b611b21818354611ad9565b8255505050565b60008135611020816115d5565b60007bffffffffffffffff0000000000000000000000000000000000000000611ae58460a01b90565b600061102067ffffffffffffffff83166119a9565b611b7c82611b5e565b611b21818354611b35565b6000813561102081611345565b60007fffffffff00000000000000000000000000000000000000000000000000000000611ae58460e01b90565b600063ffffffff8216611020565b611bd882611bc1565b611b21818354611b94565b600063ffffffff83611ae5565b611bf982611bc1565b611b21818354611be3565b6000808335601e1936859003018112611c1f57611c1f600080fd5b8301915050803567ffffffffffffffff811115611c3e57611c3e600080fd5b6020820191506001810236038213156113a7576113a7600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611c9957607f821691505b6020821081036111b5576111b5611c6f565b60006110206119a68381565b611cc083611cab565b815460001960089490940293841b1916921b91909117905550565b60006109bc818484611cb7565b8181101561065257611cfb600082611cdb565b600101611ce8565b601f8211156109bc576000818152602090206020601f85010481016020851015611d2a5750805b610bc36020601f860104830182611ce8565b8267ffffffffffffffff811115611d5557611d55611c59565b611d5f8254611c85565b611d6a828285611d03565b506000601f821160018114611d9f5760008315611d875750848201355b600019600885021c1981166002850217855550610d53565b600084815260209020601f19841690835b82811015611dd05787850135825560209485019460019092019101611db0565b5084821015611ded576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6109bc838383611d3c565b60008135611020816113ae565b600060ff8216611020565b611e2982611e15565b815460ff191660ff821617611b21565b808280611e4581611acc565b9050611e518184611b0d565b50506020830180611e6182611b28565b9050611e6d8184611b73565b50506040830180611e7d82611b87565b9050611e898184611bcf565b5050506060820180611e9a82611b87565b9050611ea98160018501611bf0565b5050611eb86080830183611c04565b611ec6818360028601611dfd565b505060a0820180611ed682611e08565b9050611ee58160038501611e20565b50505050565b6106528282611e39565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506117ad565b6020808252810161102081611ef5565b60c08101611f6b828a61112c565b611f78602083018961143f565b611f856040830188611610565b611f926060830187611610565b8181036080830152611fa5818587611679565b9050611fb460a08301846116a9565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506117ad565b6020808252810161102081611fc0565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506117ad565b6020808252810161102081612028565b5060006110206020830183611211565b61208e81806115c5565b612098838261112c565b506120a660208201826115c5565b6120b3602084018261112c565b506120c16040820182612074565b6120ce604084018261113b565b506120dc60608201826115f0565b6109bc606084018261143f565b608081016110208284612084565b60018152602081017f76000000000000000000000000000000000000000000000000000000000000008152905061118a565b60408082528101612139816120f7565b9050611020602083018461113b565b612152818361113b565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506117ad565b602080825281016110208161215a565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506117ad565b60208082528101611020816121c2565b60006020828403121561223f5761223f600080fd5b6103e983836115e5565b60006020828403121561225e5761225e600080fd5b6103e983836113b7565b60018152602081017f6d000000000000000000000000000000000000000000000000000000000000008152905061118a565b6040808252810161213981612268565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506117ad565b60208082528101611020816122aa565b61113581611cab565b602081016110208284612312565b805161102081611204565b60006020828403121561234957612349600080fd5b6103e98383612329565b67ffffffffffffffff918216919081169082820190811115611020576110206118ad565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205f0c1796be571837ef69dfd77006b06b112da38d22456c6adc83f344d4c840f664736f6c634300081c0033a2646970667358221220bf919d11e3f2868dcb2f168bbb2dc30a69241becfa3d4a8186f0f7ea6ffbf67864736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6152d58061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638129fc1c11610104578063a25eb31c116100a2578063db5d91b111610071578063db5d91b114610475578063e34fbfc8146104a1578063e874eb20146104b3578063f2fde38b146104c657600080fd5b8063a25eb31c1461042c578063a4ab2faa1461043f578063a52f433c14610452578063d4fab8871461046257600080fd5b806387059edb116100de57806387059edb146103a95780638da5cb5b146103bc57806398077e86146103ec578063a1a227fa1461040c57600080fd5b80638129fc1c1461035d5780638236a7ba14610365578063841548261461038657600080fd5b8063476657381161017c5780636a30d26c1161014b5780636a30d26c146103255780636b9707d61461033a578063715018a61461034d578063728109961461035557600080fd5b806347665738146102cb5780635371a216146102de578063568699c8146102f157806368e103831461031257600080fd5b80632f0cb9e3116101b85780632f0cb9e3146102255780633e60a22f1461025557806343348b2f14610296578063440c953b146102c257600080fd5b80620ddd27146101de57806303e72e48146101fd578063073b6ef314610212575b600080fd5b6101e7600e5481565b6040516101f491906119de565b60405180910390f35b61021061020b366004611b14565b6104d9565b005b610210610220366004611c89565b6105e1565b610248610233366004611d57565b600c6020526000908152604090205460ff1681565b6040516101f49190611d7e565b610289610263366004611d8c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101f49190611dd8565b6102486102a4366004611de6565b6001600160a01b031660009081526020819052604090205460ff1690565b6101e760055481565b6102106102d9366004611de6565b6107d8565b6102106102ec366004611e6b565b610878565b6103046102ff366004611d57565b610a1d565b6040516101f4929190611f6d565b610210610320366004611f8d565b610a73565b61032d610b17565b6040516101f49190612090565b610210610348366004611de6565b610bf0565b610210610c80565b610210610c94565b610210610d19565b610378610373366004611d57565b610ef4565b6040516101f49291906120a1565b610248610394366004611d57565b600d6020526000908152604090205460ff1681565b6103786103b7366004611d57565b610fdc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610289565b6103ff6103fa366004611d57565b611053565b6040516101f491906120af565b600a5461041f906001600160a01b031681565b6040516101f49190612102565b61021061043a36600461213a565b6110ff565b61024861044d3660046121ac565b611207565b600454610100900460ff16610248565b6102106104703660046121fa565b611285565b610248610483366004611de6565b6001600160a01b031660009081526001602052604090205460ff1690565b6102106104af3660046122a1565b5050565b600b5461041f906001600160a01b031681565b6102106104d4366004611de6565b611361565b6104e16113b8565b60006001600160a01b03166003836040516104fc919061230b565b908152604051908190036020019020546001600160a01b03160361055857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161055683826123e7565b505b80600383604051610569919061230b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906105d590849084906124a7565b60405180910390a15050565b60008281526008602052604090205481146106175760405162461bcd60e51b815260040161060e906124f9565b60405180910390fd5b6000610685898989896040516020016106339493929190612561565b6040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166106c05760405162461bcd60e51b815260040161060e906125d7565b600e8990556000805b87518110156107b357600b5488516001600160a01b039091169063b6aed0cb908a90849081106106fb576106fb6125e7565b602002602001015161070c90612607565b426040518363ffffffff1660e01b815260040161072a92919061263d565b600060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050508188828151811061076f5761076f6125e7565b602002602001015161078090612607565b60405160200161079192919061263d565b60408051601f19818403018152919052805160209091012091506001016106c9565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6107e06113b8565b6001600160a01b03811660009081526020819052604090205460ff166108185760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061086d908390611dd8565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906108c7908790879087908790600401612773565b60006040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b5050505060008460405160200161090a91906127ac565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff16156109525760405162461bcd60e51b815260040161060e906127ec565b6001600c60008760405160200161096991906127ac565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad21916109c291908901908901611de6565b87604001356040518363ffffffff1660e01b81526004016109e49291906127fc565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610a4785610fdc565b9150915081610a5c5760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610a965760405162461bcd60e51b815260040161060e90612864565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610b08908790611dd8565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610be7578382906000526020600020018054610b5a9061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b869061232b565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081526020019060010190610b3b565b50505050905090565b610bf86113b8565b6001600160a01b03811660009081526001602052604090205460ff16610c305760405162461bcd60e51b815260040161060e906128a6565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479061086d908390611dd8565b610c886113b8565b610c926000611458565b565b610c9c6113b8565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610ce5903390600401611dd8565b600060405180830381600087803b158015610cff57600080fd5b505af1158015610d13573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d645750825b905060008267ffffffffffffffff166001148015610d815750303b155b905081158015610d8f575080155b15610dc6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610dfa57845468ff00000000000000001916680100000000000000001785555b610e03336114d6565b60006005556001600955604051610e19906119c9565b604051809103906000f080158015610e35573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610e9e91611dd8565b60405180910390a18315610eed57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b08906001906128d1565b5050505050565b604080516060808201835260008083526020808401839052838501829052858252600681528482208551938401909552845483526001850180549295869493909284019190610f429061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e9061232b565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361104057505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61104981610ef4565b9250925050915091565b6002818154811061106357600080fd5b90600052602060002001600091509050805461107e9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546110aa9061232b565b80156110f75780601f106110cc576101008083540402835291602001916110f7565b820191906000526020600020905b8154815290600101906020018083116110da57829003601f168201915b505050505081565b600061114d833561111360208601866128df565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166111885760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b03811660009081526001602052604090205460ff166111c05760405162461bcd60e51b815260040161060e906128a6565b6111c9836114e7565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906111fa908535906119de565b60405180910390a1505050565b600080805b835181101561126c5781848281518110611228576112286125e7565b602002602001015161123990612607565b60405160200161124a92919061263d565b60408051601f198184030181529190528051602090910120915060010161120c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806112be5760405162461bcd60e51b815260040161060e9061298c565b81156113365760006112f28787866040516020016112de939291906129c4565b60405160208183030381529060405261158b565b90506000611300828761142c565b9050876001600160a01b0316816001600160a01b0316146113335760405162461bcd60e51b815260040161060e90612a40565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6113696113b8565b6001600160a01b0381166113ac5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b6113b581611458565b50565b336113ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c9257336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b60008060008061143c86866115c6565b92509250925061144c8282611613565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6114de611715565b6113b58161177c565b8035600090815260066020526040902081906115038282612bb3565b50506009546000908152600760205260409020813590819055611527600143612bd3565b4060405160200161153992919061263d565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549161156f83612be6565b9190505550600554816040013511156113b55760400135600555565b60006115978251611784565b826040516020016115a9929190612bff565b604051602081830303815290604052805190602001209050919050565b600080600083516041036116005760208401516040850151606086015160001a6115f288828585611825565b95509550955050505061160c565b50508151600091506002905b9250925092565b600082600381111561162757611627612c3b565b03611630575050565b600182600381111561164457611644612c3b565b0361167b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561168f5761168f612c3b565b036116c8576040517ffce698f700000000000000000000000000000000000000000000000000000000815261060e9082906004016119de565b60038260038111156116dc576116dc612c3b565b036104af57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161060e91906119de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c92576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611369611715565b60606000611791836118e7565b600101905060008167ffffffffffffffff8111156117b1576117b16119ec565b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117e5575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186057506000915060039050826118dd565b6000600188888888604051600081526020016040526040516118859493929190612c5a565b6020604051602081039080840390855afa1580156118a7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d3575060009250600191508290506118dd565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061195c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061197a57662386f26fc10000830492506010015b6305f5e1008310611992576305f5e100830492506008015b61271083106119a657612710830492506004015b606483106119b8576064830492506002015b600a83106114525760010192915050565b61261080612c9083390190565b805b82525050565b6020810161145282846119d6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611a2857611a286119ec565b6040525050565b6000611a3a60405190565b9050611a468282611a02565b919050565b600067ffffffffffffffff821115611a6557611a656119ec565b601f19601f83011660200192915050565b82818337506000910152565b6000611a95611a9084611a4b565b611a2f565b9050828152838383011115611aac57611aac600080fd5b611aba836020830184611a76565b9392505050565b600082601f830112611ad557611ad5600080fd5b611aba83833560208501611a82565b60006001600160a01b038216611452565b611afe81611ae4565b81146113b557600080fd5b803561145281611af5565b60008060408385031215611b2a57611b2a600080fd5b823567ffffffffffffffff811115611b4457611b44600080fd5b611b5085828601611ac1565b925050611b608460208501611b09565b90509250929050565b80611afe565b803561145281611b69565b600067ffffffffffffffff821115611b9457611b946119ec565b5060209081020190565b6000611bac611a9084611b7a565b83815290506020808201908402830185811115611bcb57611bcb600080fd5b835b81811015611c0a57803567ffffffffffffffff811115611bef57611bef600080fd5b611bfb88828801611ac1565b84525060209283019201611bcd565b5050509392505050565b600082601f830112611c2857611c28600080fd5b611aba83833560208501611b9e565b60008083601f840112611c4c57611c4c600080fd5b50813567ffffffffffffffff811115611c6757611c67600080fd5b602083019150836001820283011115611c8257611c82600080fd5b9250929050565b60008060008060008060008060e0898b031215611ca857611ca8600080fd5b611cb28a8a611b6f565b9750611cc18a60208b01611b6f565b9650611cd08a60408b01611b6f565b9550606089013567ffffffffffffffff811115611cef57611cef600080fd5b611cfb8b828c01611c14565b955050608089013567ffffffffffffffff811115611d1b57611d1b600080fd5b611d278b828c01611c37565b9450945050611d398a60a08b01611b6f565b9150611d488a60c08b01611b6f565b90509295985092959890939650565b600060208284031215611d6c57611d6c600080fd5b611aba8383611b6f565b8015156119d8565b602081016114528284611d76565b600060208284031215611da157611da1600080fd5b813567ffffffffffffffff811115611dbb57611dbb600080fd5b611dc784828501611ac1565b949350505050565b6119d881611ae4565b602081016114528284611dcf565b600060208284031215611dfb57611dfb600080fd5b611aba8383611b09565b600060808284031215611e1a57611e1a600080fd5b50919050565b60008083601f840112611e3557611e35600080fd5b50813567ffffffffffffffff811115611e5057611e50600080fd5b602083019150836020820283011115611c8257611c82600080fd5b60008060008060c08587031215611e8457611e84600080fd5b611e8e8686611e05565b9350608085013567ffffffffffffffff811115611ead57611ead600080fd5b611eb987828801611e20565b9350935050611ecb8660a08701611b6f565b905092959194509250565b60005b83811015611ef1578181015183820152602001611ed9565b50506000910152565b6000611f04825190565b808452602084019350611f1b818560208601611ed6565b601f01601f19169290920192915050565b80516000906060840190611f4085826119d6565b5060208301518482036020860152611f588282611efa565b915050604083015161181d60408601826119d6565b60408101611f7b82856119d6565b8181036020830152611dc78184611f2c565b600080600080600060608688031215611fa857611fa8600080fd5b611fb28787611b09565b9450602086013567ffffffffffffffff811115611fd157611fd1600080fd5b611fdd88828901611c37565b9450945050604086013567ffffffffffffffff811115611fff57611fff600080fd5b61200b88828901611c37565b92509250509295509295909350565b6000611aba8383611efa565b60200190565b6000612036825190565b808452602084019350836020820285016120508560200190565b60005b84811015612084578383038852815161206c848261201a565b93505060208201602098909801979150600101612053565b50909695505050505050565b60208082528101611aba818461202c565b60408101611f7b8285611d76565b60208082528101611aba8184611efa565b60006114526001600160a01b0383166120d7565b90565b6001600160a01b031690565b6000611452826120c0565b6000611452826120e3565b6119d8816120ee565b6020810161145282846120f9565b600060608284031215611e1a57611e1a600080fd5b600060208284031215611e1a57611e1a600080fd5b6000806040838503121561215057612150600080fd5b823567ffffffffffffffff81111561216a5761216a600080fd5b61217685828601612110565b925050602083013567ffffffffffffffff81111561219657612196600080fd5b6121a285828601612125565b9150509250929050565b6000602082840312156121c1576121c1600080fd5b813567ffffffffffffffff8111156121db576121db600080fd5b611dc784828501611c14565b801515611afe565b8035611452816121e7565b600080600080600060a0868803121561221557612215600080fd5b61221f8787611b09565b945061222e8760208801611b09565b9350604086013567ffffffffffffffff81111561224d5761224d600080fd5b61225988828901611ac1565b935050606086013567ffffffffffffffff81111561227957612279600080fd5b61228588828901611ac1565b92505061229587608088016121ef565b90509295509295909350565b600080602083850312156122b7576122b7600080fd5b823567ffffffffffffffff8111156122d1576122d1600080fd5b6122dd85828601611c37565b92509250509250929050565b60006122f3825190565b612301818560208601611ed6565b9290920192915050565b61145281836122e9565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061233f57607f821691505b602082108103611e1a57611e1a612315565b60006114526120d48381565b61236683612351565b815460001960089490940293841b1916921b91909117905550565b600061238e81848461235d565b505050565b818110156104af576123a6600082612381565b600101612393565b601f82111561238e576000818152602090206020601f850104810160208510156123d55750805b610eed6020601f860104830182612393565b815167ffffffffffffffff811115612401576124016119ec565b61240b825461232b565b6124168282856123ae565b506020601f82116001811461244b57600083156124335750848201515b600019600885021c1981166002850217855550610eed565b600084815260208120601f198516915b8281101561247b578785015182556020948501946001909201910161245b565b50848210156124985783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016124b88185611efa565b9050611aba6020830184611dcf565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612026565b60208082528101611452816124c7565b6000612513825190565b8084526020840193508360208202850161252d8560200190565b60005b848110156120845783830388528151612549848261201a565b93505060208201602098909801979150600101612530565b6080810161256f82876119d6565b61257c60208301866119d6565b61258960408301856119d6565b818103606083015261259b8184612509565b9695505050505050565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612026565b60208082528101611452816125a5565b634e487b7160e01b600052603260045260246000fd5b6000611452825190565b6000612611825190565b6020830161261e816125fd565b9250506020811015611e1a576000196020919091036008021b16919050565b6040810161264b82856119d6565b611aba60208301846119d6565b5060006114526020830183611b09565b5060006114526020830183611b6f565b67ffffffffffffffff8116611afe565b803561145281612678565b5060006114526020830183612688565b67ffffffffffffffff81166119d8565b6126bd8180612658565b6126c78382611dcf565b506126d56020820182612658565b6126e26020840182611dcf565b506126f06040820182612668565b6126fd60408401826119d6565b5061270b6060820182612693565b61238e60608401826126a3565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561275c5761275c600080fd5b60208302925061276d838584612718565b50500190565b60c0810161278182876126b3565b8181036080830152612794818587612721565b90506127a360a08301846119d6565b95945050505050565b6080810161145282846126b3565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612026565b60208082528101611452816127ba565b6040810161264b8285611dcf565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016114528161280a565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612026565b6020808252810161145281612874565b600067ffffffffffffffff8216611452565b6119d8816128b6565b6020810161145282846128c8565b6000808335601e19368590030181126128fa576128fa600080fd5b8301915050803567ffffffffffffffff81111561291957612919600080fd5b602082019150600181023603821315611c8257611c82600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061285e565b6020808252810161145281612934565b60006114528260601b90565b60006114528261299c565b6119d86129bf82611ae4565b6129a8565b6129ce81856129b3565b6014016129db81846129b3565b601401611dc781836122e9565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061285e565b60208082528101611452816129e8565b6000813561145281611b69565b600081611452565b612a6e82612a5d565b612a7a6120d482612a5d565b8255505050565b8267ffffffffffffffff811115612a9a57612a9a6119ec565b612aa4825461232b565b612aaf8282856123ae565b506000601f821160018114612ae45760008315612acc5750848201355b600019600885021c1981166002850217855550612b3e565b600084815260209020601f19841690835b82811015612b155787850135825560209485019460019092019101612af5565b5084821015612b32576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b61238e838383612a81565b612b5a82612351565b80612a7a565b8180612b6b81612a50565b9050612b778184612a65565b5050612b8660208301836128df565b612b94818360018601612b46565b50506040820180612ba482612a50565b9050610d138160028501612b51565b6104af8282612b60565b634e487b7160e01b600052601160045260246000fd5b8181038181111561145257611452612bbd565b600060018201612bf857612bf8612bbd565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612c2f81846122e9565b9050611aba81836122e9565b634e487b7160e01b600052602160045260246000fd5b60ff81166119d8565b60808101612c6882876119d6565b612c756020830186612c51565b612c8260408301856119d6565b6127a360608301846119d656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6124b7806101596000396000f3fe6080604052600436106100f75760003560e01c80639730886d1161008a578063b201246f11610059578063b201246f1461033c578063b6aed0cb1461035c578063e138a8d21461037c578063f2fde38b1461039c5761016b565b80639730886d146102bc57806399a3ad21146102dc578063ab53bddc146102fc578063b1454caa1461031c5761016b565b806336d2da90116100c657806336d2da9014610222578063485cc95514610242578063715018a6146102625780638da5cb5b146102775761016b565b80630fcfbd111461018c5780630fe9188e146101c257806333a88c72146101e2578063346633fb1461020f5761016b565b3661016b576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061013c9033908390600401611235565b6000604051808303818588803b15801561015557600080fd5b505af1158015610169573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161018390611284565b60405180910390fd5b34801561019857600080fd5b506101ac6101a73660046112af565b6103bc565b6040516101b991906112ea565b60405180910390f35b3480156101ce57600080fd5b506101696101dd366004611310565b61041b565b3480156101ee57600080fd5b506102026101fd3660046112af565b610461565b6040516101b99190611337565b61016961021d366004611359565b6104b3565b34801561022e57600080fd5b5061016961023d366004611391565b610602565b34801561024e57600080fd5b5061016961025d3660046113b0565b610681565b34801561026e57600080fd5b506101696107ec565b34801561028357600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101b991906113df565b3480156102c857600080fd5b506101696102d73660046113ed565b610800565b3480156102e857600080fd5b506101696102f7366004611359565b61096c565b34801561030857600080fd5b50610169610317366004611359565b6109ec565b61032f61032a3660046114b6565b610ab5565b6040516101b99190611543565b34801561034857600080fd5b506101696103573660046115b1565b610bbd565b34801561036857600080fd5b5061016961037736600461161c565b610cbe565b34801561038857600080fd5b5061016961039736600461163c565b610d04565b3480156103a857600080fd5b506101696103b7366004611391565b610e4f565b600080826040516020016103d09190611858565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104145760405162461bcd60e51b8152600401610183906118a7565b9392505050565b610423610ea6565b60008181526004602052604081205490036104505760405162461bcd60e51b8152600401610183906118e9565b600090815260046020526040812055565b600080826040516020016104759190611858565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104ab5750428111155b949350505050565b6000341180156104c257508034145b6104de5760405162461bcd60e51b815260040161018390611951565b60035434906001600160a01b0316156105a25760006104fb610f1a565b90508034101561051d5760405162461bcd60e51b815260040161018390611991565b61052781346119b7565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610579576040519150601f19603f3d011682016040523d82523d6000602084013e61057e565b606091505b505090508061059f5760405162461bcd60e51b815260040161018390611a22565b50505b60006105ad33610fab565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105f4929190611a32565b60405180910390a350505050565b61060a610ea6565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610657576040519150601f19603f3d011682016040523d82523d6000602084013e61065c565b606091505b505090508061067d5760405162461bcd60e51b815260040161018390611a7f565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106cc5750825b905060008267ffffffffffffffff1660011480156106e95750303b155b9050811580156106f7575080155b1561072e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845468ff00000000000000001916680100000000000000001785555b61076b87611009565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156107e357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906107da90600190611ab3565b60405180910390a15b50505050505050565b6107f4610ea6565b6107fe600061101a565b565b600061080d600130611ac1565b90506108407f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108675750336001600160a01b038216145b6108835760405162461bcd60e51b815260040161018390611b16565b600061088f8342611b26565b90506000846040516020016108a49190611858565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108e85760405162461bcd60e51b815260040161018390611b91565b60008181526020818152604082208490556001919061090990880188611391565b6001600160a01b0316815260208101919091526040016000908120906109356080880160608901611ba1565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016107e38282611fdf565b610974610ea6565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146109c1576040519150601f19603f3d011682016040523d82523d6000602084013e6109c6565b606091505b50509050806109e75760405162461bcd60e51b815260040161018390611a7f565b505050565b60006109f9600130611ac1565b9050610a2c7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a535750336001600160a01b038216145b610a6f5760405162461bcd60e51b815260040161018390611b16565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610aa891906112ea565b60405180910390a2505050565b6003546000906001600160a01b031615610b6657610ad283611098565b341015610af15760405162461bcd60e51b815260040161018390612041565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b3e576040519150601f19603f3d011682016040523d82523d6000602084013e610b43565b606091505b5050905080610b645760405162461bcd60e51b815260040161018390611a22565b505b610b6f33610fab565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610bac9796959493929190612051565b60405180910390a195945050505050565b6000818152600460205260408120549003610bea5760405162461bcd60e51b81526004016101839061210c565b600081815260046020526040902054421015610c185760405162461bcd60e51b815260040161018390612158565b600084604051602001610c2b91906121dd565b60405160208183030381529060405280519060200120604051602001610c51919061221d565b604051602081830303815290604052805190602001209050610c9b84848484604051602001610c80919061223c565b6040516020818303038152906040528051906020012061111a565b610cb75760405162461bcd60e51b8152600401610183906122a6565b5050505050565b610cc6610ea6565b60008281526004602052604090205415610cf25760405162461bcd60e51b81526004016101839061230e565b60009182526004602052604090912055565b6000818152600460205260408120549003610d315760405162461bcd60e51b81526004016101839061210c565b600081815260046020526040902054421015610d5f5760405162461bcd60e51b815260040161018390612158565b6000610d6e6020860186611391565b610d7e604087016020880161231e565b610d8e6060880160408901611ba1565b610d9e6080890160608a01611ba1565b610dab60808a018a611cf8565b610dbb60c08c0160a08d0161233d565b604051602001610dd19796959493929190612051565b604051602081830303815290604052805190602001209050600081604051602001610dfc919061238e565b604051602081830303815290604052805190602001209050610e2b85858584604051602001610c80919061223c565b610e475760405162461bcd60e51b8152600401610183906123f6565b505050505050565b610e57610ea6565b6001600160a01b038116610e9a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161018391906113df565b610ea38161101a565b50565b33610ed87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107fe57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161018391906113df565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610f659060209060040161240f565b602060405180830381865afa158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa69190612428565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610fde8385612447565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b611011611132565b610ea381611199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d516110b7601185611b26565b6040518263ffffffff1660e01b81526004016110d391906112ea565b602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190612428565b92915050565b6000826111288686856111a1565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107fe576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e57611132565b600081815b848110156111da576111d0828787848181106111c4576111c461246b565b905060200201356111e3565b91506001016111a6565b50949350505050565b60008183106111ff576000828152602084905260409020610414565b5060009182526020526040902090565b60006001600160a01b038216611114565b6112298161120f565b82525050565b80611229565b604081016112438285611220565b610414602083018461122f565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b6020808252810161111481611250565b600060c082840312156112a9576112a9600080fd5b50919050565b6000602082840312156112c4576112c4600080fd5b813567ffffffffffffffff8111156112de576112de600080fd5b6104ab84828501611294565b60208101611114828461122f565b805b8114610ea357600080fd5b8035611114816112f8565b60006020828403121561132557611325600080fd5b6104148383611305565b801515611229565b60208101611114828461132f565b6112fa8161120f565b803561111481611345565b6000806040838503121561136f5761136f600080fd5b611379848461134e565b91506113888460208501611305565b90509250929050565b6000602082840312156113a6576113a6600080fd5b610414838361134e565b600080604083850312156113c6576113c6600080fd5b6113d0848461134e565b9150611388846020850161134e565b602081016111148284611220565b6000806040838503121561140357611403600080fd5b823567ffffffffffffffff81111561141d5761141d600080fd5b61142985828601611294565b9250506113888460208501611305565b63ffffffff81166112fa565b803561111481611439565b60008083601f84011261146557611465600080fd5b50813567ffffffffffffffff81111561148057611480600080fd5b60208301915083600182028301111561149b5761149b600080fd5b9250929050565b60ff81166112fa565b8035611114816114a2565b6000806000806000608086880312156114d1576114d1600080fd5b6114db8787611445565b94506114ea8760208801611445565b9350604086013567ffffffffffffffff81111561150957611509600080fd5b61151588828901611450565b935093505061152787606088016114ab565b90509295509295909350565b67ffffffffffffffff8116611229565b602081016111148284611533565b6000608082840312156112a9576112a9600080fd5b60008083601f84011261157b5761157b600080fd5b50813567ffffffffffffffff81111561159657611596600080fd5b60208301915083602082028301111561149b5761149b600080fd5b60008060008060c085870312156115ca576115ca600080fd5b6115d48686611551565b9350608085013567ffffffffffffffff8111156115f3576115f3600080fd5b6115ff87828801611566565b93509350506116118660a08701611305565b905092959194509250565b6000806040838503121561163257611632600080fd5b6113798484611305565b6000806000806060858703121561165557611655600080fd5b843567ffffffffffffffff81111561166f5761166f600080fd5b61167b87828801611294565b945050602085013567ffffffffffffffff81111561169b5761169b600080fd5b6116a787828801611566565b93509350506116118660408701611305565b506000611114602083018361134e565b67ffffffffffffffff81166112fa565b8035611114816116c9565b50600061111460208301836116d9565b5060006111146020830183611445565b63ffffffff8116611229565b6000808335601e193685900301811261172b5761172b600080fd5b830160208101925035905067ffffffffffffffff81111561174e5761174e600080fd5b3681900382131561149b5761149b600080fd5b82818337506000910152565b818352602083019250611781828483611761565b50601f01601f19160190565b50600061111460208301836114ab565b60ff8116611229565b600060c083016117b683806116b9565b6117c08582611220565b506117ce60208401846116e4565b6117db6020860182611533565b506117e960408401846116f4565b6117f66040860182611704565b5061180460608401846116f4565b6118116060860182611704565b5061181f6080840184611710565b858303608087015261183283828461176d565b9250505061184360a084018461178d565b61185060a086018261179d565b509392505050565b6020808252810161041481846117a6565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b6020808252810161111481611869565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e0000000000008152905061127e565b60208082528101611114816118b7565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506118a1565b60208082528101611114816118f9565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c7565910190815261127e565b6020808252810161111481611961565b634e487b7160e01b600052601160045260246000fd5b81810381811115611114576111146119a1565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506118a1565b60208082528101611114816119ca565b60408101611a40828561122f565b6104146020830184611533565b60148152602081017f6661696c65642073656e64696e672076616c75650000000000000000000000008152905061127e565b6020808252810161111481611a4d565b600061111482611a9d565b90565b67ffffffffffffffff1690565b61122981611a8f565b602081016111148284611aaa565b6001600160a01b03918216919081169082820390811115611114576111146119a1565b60118152602081017f4e6f74206f776e6572206f722073656c660000000000000000000000000000008152905061127e565b6020808252810161111481611ae4565b80820180821115611114576111146119a1565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506118a1565b6020808252810161111481611b39565b600060208284031215611bb657611bb6600080fd5b6104148383611445565b6000813561111481611345565b60006001600160a01b03835b81169019929092169190911792915050565b60006111148261120f565b600061111482611beb565b611c0a82611bf6565b611c15818354611bcd565b8255505050565b60008135611114816116c9565b60007bffffffffffffffff0000000000000000000000000000000000000000611bd98460a01b90565b600061111467ffffffffffffffff8316611a9d565b611c7082611c52565b611c15818354611c29565b6000813561111481611439565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bd98460e01b90565b600063ffffffff8216611114565b611ccc82611cb5565b611c15818354611c88565b600063ffffffff83611bd9565b611ced82611cb5565b611c15818354611cd7565b6000808335601e1936859003018112611d1357611d13600080fd5b8301915050803567ffffffffffffffff811115611d3257611d32600080fd5b60208201915060018102360382131561149b5761149b600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d8d57607f821691505b6020821081036112a9576112a9611d63565b6000611114611a9a8381565b611db483611d9f565b815460001960089490940293841b1916921b91909117905550565b60006109e7818484611dab565b8181101561067d57611def600082611dcf565b600101611ddc565b601f8211156109e7576000818152602090206020601f85010481016020851015611e1e5750805b610cb76020601f860104830182611ddc565b8267ffffffffffffffff811115611e4957611e49611d4d565b611e538254611d79565b611e5e828285611df7565b506000601f821160018114611e935760008315611e7b5750848201355b600019600885021c1981166002850217855550610e47565b600084815260209020601f19841690835b82811015611ec45787850135825560209485019460019092019101611ea4565b5084821015611ee1576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6109e7838383611e30565b60008135611114816114a2565b600060ff8216611114565b611f1d82611f09565b815460ff191660ff821617611c15565b808280611f3981611bc0565b9050611f458184611c01565b50506020830180611f5582611c1c565b9050611f618184611c67565b50506040830180611f7182611c7b565b9050611f7d8184611cc3565b5050506060820180611f8e82611c7b565b9050611f9d8160018501611ce4565b5050611fac6080830183611cf8565b611fba818360028601611ef1565b505060a0820180611fca82611efc565b9050611fd98160038501611f14565b50505050565b61067d8282611f2d565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506118a1565b6020808252810161111481611fe9565b60c0810161205f828a611220565b61206c6020830189611533565b6120796040830188611704565b6120866060830187611704565b818103608083015261209981858761176d565b90506120a860a083018461179d565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506118a1565b60208082528101611114816120b4565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506118a1565b602080825281016111148161211c565b5060006111146020830183611305565b61218281806116b9565b61218c8382611220565b5061219a60208201826116b9565b6121a76020840182611220565b506121b56040820182612168565b6121c2604084018261122f565b506121d060608201826116e4565b6109e76060840182611533565b608081016111148284612178565b60018152602081017f76000000000000000000000000000000000000000000000000000000000000008152905061127e565b6040808252810161222d816121eb565b9050611114602083018461122f565b612246818361122f565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506118a1565b602080825281016111148161224e565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506118a1565b60208082528101611114816122b6565b60006020828403121561233357612333600080fd5b61041483836116d9565b60006020828403121561235257612352600080fd5b61041483836114ab565b60018152602081017f6d000000000000000000000000000000000000000000000000000000000000008152905061127e565b6040808252810161222d8161235c565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506118a1565b602080825281016111148161239e565b61122981611d9f565b602081016111148284612406565b8051611114816112f8565b60006020828403121561243d5761243d600080fd5b610414838361241d565b67ffffffffffffffff918216919081169082820190811115611114576111146119a1565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220d3bd88e19eb5e0e03473c1583cfcd854a520d8329b1baacacdfe3579c28bb44c64736f6c634300081c0033a264697066735822122067c1d724baa69950e535db372694ee0ee6f4975aa320c837a992939990b4657764736f6c634300081c0033", } // ManagementContractABI 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 63a3a98f2a..21a223614d 100644 --- a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go +++ b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go @@ -49,8 +49,8 @@ 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\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"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\":\"payable\",\"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: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6123c3806101596000396000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063b201246f11610059578063b201246f14610311578063b6aed0cb14610331578063e138a8d214610351578063f2fde38b1461037157610160565b80638da5cb5b1461026c5780639730886d146102b157806399a3ad21146102d1578063b1454caa146102f157610160565b8063346633fb116100c6578063346633fb1461020457806336d2da9014610217578063485cc95514610237578063715018a61461025757610160565b80630fcfbd11146101815780630fe9188e146101b757806333a88c72146101d757610160565b36610160576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101319033908390600401611141565b6000604051808303818588803b15801561014a57600080fd5b505af115801561015e573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161017890611190565b60405180910390fd5b34801561018d57600080fd5b506101a161019c3660046111bb565b610391565b6040516101ae91906111f6565b60405180910390f35b3480156101c357600080fd5b5061015e6101d236600461121c565b6103f0565b3480156101e357600080fd5b506101f76101f23660046111bb565b610436565b6040516101ae9190611243565b61015e610212366004611265565b610488565b34801561022357600080fd5b5061015e61023236600461129d565b6105d7565b34801561024357600080fd5b5061015e6102523660046112bc565b610656565b34801561026357600080fd5b5061015e6107c1565b34801561027857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101ae91906112eb565b3480156102bd57600080fd5b5061015e6102cc3660046112f9565b6107d5565b3480156102dd57600080fd5b5061015e6102ec366004611265565b610941565b6103046102ff3660046113c2565b6109c1565b6040516101ae919061144f565b34801561031d57600080fd5b5061015e61032c3660046114bd565b610ac9565b34801561033d57600080fd5b5061015e61034c366004611528565b610bca565b34801561035d57600080fd5b5061015e61036c366004611548565b610c10565b34801561037d57600080fd5b5061015e61038c36600461129d565b610d5b565b600080826040516020016103a59190611764565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103e95760405162461bcd60e51b8152600401610178906117b3565b9392505050565b6103f8610db2565b60008181526004602052604081205490036104255760405162461bcd60e51b8152600401610178906117f5565b600090815260046020526040812055565b6000808260405160200161044a9190611764565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104805750428111155b949350505050565b60003411801561049757508034145b6104b35760405162461bcd60e51b81526004016101789061185d565b60035434906001600160a01b0316156105775760006104d0610e26565b9050803410156104f25760405162461bcd60e51b81526004016101789061189d565b6104fc81346118c3565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d806000811461054e576040519150601f19603f3d011682016040523d82523d6000602084013e610553565b606091505b50509050806105745760405162461bcd60e51b81526004016101789061192e565b50505b600061058233610eb7565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105c992919061193e565b60405180910390a350505050565b6105df610db2565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461062c576040519150601f19603f3d011682016040523d82523d6000602084013e610631565b606091505b50509050806106525760405162461bcd60e51b81526004016101789061198b565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106a15750825b905060008267ffffffffffffffff1660011480156106be5750303b155b9050811580156106cc575080155b15610703576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561073757845468ff00000000000000001916680100000000000000001785555b61074087610f15565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156107b857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906107af906001906119bf565b60405180910390a15b50505050505050565b6107c9610db2565b6107d36000610f26565b565b60006107e26001306119cd565b90506108157f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061083c5750336001600160a01b038216145b6108585760405162461bcd60e51b815260040161017890611a22565b60006108648342611a32565b90506000846040516020016108799190611764565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108bd5760405162461bcd60e51b815260040161017890611a9d565b6000818152602081815260408220849055600191906108de9088018861129d565b6001600160a01b03168152602081019190915260400160009081209061090a6080880160608901611aad565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016107b88282611eeb565b610949610db2565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610996576040519150601f19603f3d011682016040523d82523d6000602084013e61099b565b606091505b50509050806109bc5760405162461bcd60e51b81526004016101789061198b565b505050565b6003546000906001600160a01b031615610a72576109de83610fa4565b3410156109fd5760405162461bcd60e51b815260040161017890611f4d565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4a576040519150601f19603f3d011682016040523d82523d6000602084013e610a4f565b606091505b5050905080610a705760405162461bcd60e51b81526004016101789061192e565b505b610a7b33610eb7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610ab89796959493929190611f5d565b60405180910390a195945050505050565b6000818152600460205260408120549003610af65760405162461bcd60e51b815260040161017890612018565b600081815260046020526040902054421015610b245760405162461bcd60e51b815260040161017890612064565b600084604051602001610b3791906120e9565b60405160208183030381529060405280519060200120604051602001610b5d9190612129565b604051602081830303815290604052805190602001209050610ba784848484604051602001610b8c9190612148565b60405160208183030381529060405280519060200120611026565b610bc35760405162461bcd60e51b8152600401610178906121b2565b5050505050565b610bd2610db2565b60008281526004602052604090205415610bfe5760405162461bcd60e51b81526004016101789061221a565b60009182526004602052604090912055565b6000818152600460205260408120549003610c3d5760405162461bcd60e51b815260040161017890612018565b600081815260046020526040902054421015610c6b5760405162461bcd60e51b815260040161017890612064565b6000610c7a602086018661129d565b610c8a604087016020880161222a565b610c9a6060880160408901611aad565b610caa6080890160608a01611aad565b610cb760808a018a611c04565b610cc760c08c0160a08d01612249565b604051602001610cdd9796959493929190611f5d565b604051602081830303815290604052805190602001209050600081604051602001610d08919061229a565b604051602081830303815290604052805190602001209050610d3785858584604051602001610b8c9190612148565b610d535760405162461bcd60e51b815260040161017890612302565b505050505050565b610d63610db2565b6001600160a01b038116610da65760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161017891906112eb565b610daf81610f26565b50565b33610de47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107d357336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161017891906112eb565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610e719060209060040161231b565b602060405180830381865afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190612334565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610eea8385612353565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b610f1d61103e565b610daf816110a5565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610fc3601185611a32565b6040518263ffffffff1660e01b8152600401610fdf91906111f6565b602060405180830381865afa158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110209190612334565b92915050565b6000826110348686856110ad565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6361103e565b600081815b848110156110e6576110dc828787848181106110d0576110d0612377565b905060200201356110ef565b91506001016110b2565b50949350505050565b600081831061110b5760008281526020849052604090206103e9565b5060009182526020526040902090565b60006001600160a01b038216611020565b6111358161111b565b82525050565b80611135565b6040810161114f828561112c565b6103e9602083018461113b565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016110208161115c565b600060c082840312156111b5576111b5600080fd5b50919050565b6000602082840312156111d0576111d0600080fd5b813567ffffffffffffffff8111156111ea576111ea600080fd5b610480848285016111a0565b60208101611020828461113b565b805b8114610daf57600080fd5b803561102081611204565b60006020828403121561123157611231600080fd5b6103e98383611211565b801515611135565b60208101611020828461123b565b6112068161111b565b803561102081611251565b6000806040838503121561127b5761127b600080fd5b611285848461125a565b91506112948460208501611211565b90509250929050565b6000602082840312156112b2576112b2600080fd5b6103e9838361125a565b600080604083850312156112d2576112d2600080fd5b6112dc848461125a565b9150611294846020850161125a565b60208101611020828461112c565b6000806040838503121561130f5761130f600080fd5b823567ffffffffffffffff81111561132957611329600080fd5b611335858286016111a0565b9250506112948460208501611211565b63ffffffff8116611206565b803561102081611345565b60008083601f84011261137157611371600080fd5b50813567ffffffffffffffff81111561138c5761138c600080fd5b6020830191508360018202830111156113a7576113a7600080fd5b9250929050565b60ff8116611206565b8035611020816113ae565b6000806000806000608086880312156113dd576113dd600080fd5b6113e78787611351565b94506113f68760208801611351565b9350604086013567ffffffffffffffff81111561141557611415600080fd5b6114218882890161135c565b935093505061143387606088016113b7565b90509295509295909350565b67ffffffffffffffff8116611135565b60208101611020828461143f565b6000608082840312156111b5576111b5600080fd5b60008083601f84011261148757611487600080fd5b50813567ffffffffffffffff8111156114a2576114a2600080fd5b6020830191508360208202830111156113a7576113a7600080fd5b60008060008060c085870312156114d6576114d6600080fd5b6114e0868661145d565b9350608085013567ffffffffffffffff8111156114ff576114ff600080fd5b61150b87828801611472565b935093505061151d8660a08701611211565b905092959194509250565b6000806040838503121561153e5761153e600080fd5b6112858484611211565b6000806000806060858703121561156157611561600080fd5b843567ffffffffffffffff81111561157b5761157b600080fd5b611587878288016111a0565b945050602085013567ffffffffffffffff8111156115a7576115a7600080fd5b6115b387828801611472565b935093505061151d8660408701611211565b506000611020602083018361125a565b67ffffffffffffffff8116611206565b8035611020816115d5565b50600061102060208301836115e5565b5060006110206020830183611351565b63ffffffff8116611135565b6000808335601e193685900301811261163757611637600080fd5b830160208101925035905067ffffffffffffffff81111561165a5761165a600080fd5b368190038213156113a7576113a7600080fd5b82818337506000910152565b81835260208301925061168d82848361166d565b50601f01601f19160190565b50600061102060208301836113b7565b60ff8116611135565b600060c083016116c283806115c5565b6116cc858261112c565b506116da60208401846115f0565b6116e7602086018261143f565b506116f56040840184611600565b6117026040860182611610565b506117106060840184611600565b61171d6060860182611610565b5061172b608084018461161c565b858303608087015261173e838284611679565b9250505061174f60a0840184611699565b61175c60a08601826116a9565b509392505050565b602080825281016103e981846116b2565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b6020808252810161102081611775565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e0000000000008152905061118a565b60208082528101611020816117c3565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506117ad565b6020808252810161102081611805565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c7565910190815261118a565b602080825281016110208161186d565b634e487b7160e01b600052601160045260246000fd5b81810381811115611020576110206118ad565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506117ad565b60208082528101611020816118d6565b6040810161194c828561113b565b6103e9602083018461143f565b60148152602081017f6661696c65642073656e64696e672076616c75650000000000000000000000008152905061118a565b6020808252810161102081611959565b6000611020826119a9565b90565b67ffffffffffffffff1690565b6111358161199b565b6020810161102082846119b6565b6001600160a01b03918216919081169082820390811115611020576110206118ad565b60118152602081017f4e6f74206f776e6572206f722073656c660000000000000000000000000000008152905061118a565b60208082528101611020816119f0565b80820180821115611020576110206118ad565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506117ad565b6020808252810161102081611a45565b600060208284031215611ac257611ac2600080fd5b6103e98383611351565b6000813561102081611251565b60006001600160a01b03835b81169019929092169190911792915050565b60006110208261111b565b600061102082611af7565b611b1682611b02565b611b21818354611ad9565b8255505050565b60008135611020816115d5565b60007bffffffffffffffff0000000000000000000000000000000000000000611ae58460a01b90565b600061102067ffffffffffffffff83166119a9565b611b7c82611b5e565b611b21818354611b35565b6000813561102081611345565b60007fffffffff00000000000000000000000000000000000000000000000000000000611ae58460e01b90565b600063ffffffff8216611020565b611bd882611bc1565b611b21818354611b94565b600063ffffffff83611ae5565b611bf982611bc1565b611b21818354611be3565b6000808335601e1936859003018112611c1f57611c1f600080fd5b8301915050803567ffffffffffffffff811115611c3e57611c3e600080fd5b6020820191506001810236038213156113a7576113a7600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611c9957607f821691505b6020821081036111b5576111b5611c6f565b60006110206119a68381565b611cc083611cab565b815460001960089490940293841b1916921b91909117905550565b60006109bc818484611cb7565b8181101561065257611cfb600082611cdb565b600101611ce8565b601f8211156109bc576000818152602090206020601f85010481016020851015611d2a5750805b610bc36020601f860104830182611ce8565b8267ffffffffffffffff811115611d5557611d55611c59565b611d5f8254611c85565b611d6a828285611d03565b506000601f821160018114611d9f5760008315611d875750848201355b600019600885021c1981166002850217855550610d53565b600084815260209020601f19841690835b82811015611dd05787850135825560209485019460019092019101611db0565b5084821015611ded576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6109bc838383611d3c565b60008135611020816113ae565b600060ff8216611020565b611e2982611e15565b815460ff191660ff821617611b21565b808280611e4581611acc565b9050611e518184611b0d565b50506020830180611e6182611b28565b9050611e6d8184611b73565b50506040830180611e7d82611b87565b9050611e898184611bcf565b5050506060820180611e9a82611b87565b9050611ea98160018501611bf0565b5050611eb86080830183611c04565b611ec6818360028601611dfd565b505060a0820180611ed682611e08565b9050611ee58160038501611e20565b50505050565b6106528282611e39565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506117ad565b6020808252810161102081611ef5565b60c08101611f6b828a61112c565b611f78602083018961143f565b611f856040830188611610565b611f926060830187611610565b8181036080830152611fa5818587611679565b9050611fb460a08301846116a9565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506117ad565b6020808252810161102081611fc0565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506117ad565b6020808252810161102081612028565b5060006110206020830183611211565b61208e81806115c5565b612098838261112c565b506120a660208201826115c5565b6120b3602084018261112c565b506120c16040820182612074565b6120ce604084018261113b565b506120dc60608201826115f0565b6109bc606084018261143f565b608081016110208284612084565b60018152602081017f76000000000000000000000000000000000000000000000000000000000000008152905061118a565b60408082528101612139816120f7565b9050611020602083018461113b565b612152818361113b565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506117ad565b602080825281016110208161215a565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506117ad565b60208082528101611020816121c2565b60006020828403121561223f5761223f600080fd5b6103e983836115e5565b60006020828403121561225e5761225e600080fd5b6103e983836113b7565b60018152602081017f6d000000000000000000000000000000000000000000000000000000000000008152905061118a565b6040808252810161213981612268565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506117ad565b60208082528101611020816122aa565b61113581611cab565b602081016110208284612312565b805161102081611204565b60006020828403121561234957612349600080fd5b6103e98383612329565b67ffffffffffffffff918216919081169082820190811115611020576110206118ad565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205f0c1796be571837ef69dfd77006b06b112da38d22456c6adc83f344d4c840f664736f6c634300081c0033", + 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\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeDeposit\",\"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\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"notifyDeposit\",\"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\":\"payable\",\"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: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6124b7806101596000396000f3fe6080604052600436106100f75760003560e01c80639730886d1161008a578063b201246f11610059578063b201246f1461033c578063b6aed0cb1461035c578063e138a8d21461037c578063f2fde38b1461039c5761016b565b80639730886d146102bc57806399a3ad21146102dc578063ab53bddc146102fc578063b1454caa1461031c5761016b565b806336d2da90116100c657806336d2da9014610222578063485cc95514610242578063715018a6146102625780638da5cb5b146102775761016b565b80630fcfbd111461018c5780630fe9188e146101c257806333a88c72146101e2578063346633fb1461020f5761016b565b3661016b576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061013c9033908390600401611235565b6000604051808303818588803b15801561015557600080fd5b505af1158015610169573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161018390611284565b60405180910390fd5b34801561019857600080fd5b506101ac6101a73660046112af565b6103bc565b6040516101b991906112ea565b60405180910390f35b3480156101ce57600080fd5b506101696101dd366004611310565b61041b565b3480156101ee57600080fd5b506102026101fd3660046112af565b610461565b6040516101b99190611337565b61016961021d366004611359565b6104b3565b34801561022e57600080fd5b5061016961023d366004611391565b610602565b34801561024e57600080fd5b5061016961025d3660046113b0565b610681565b34801561026e57600080fd5b506101696107ec565b34801561028357600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101b991906113df565b3480156102c857600080fd5b506101696102d73660046113ed565b610800565b3480156102e857600080fd5b506101696102f7366004611359565b61096c565b34801561030857600080fd5b50610169610317366004611359565b6109ec565b61032f61032a3660046114b6565b610ab5565b6040516101b99190611543565b34801561034857600080fd5b506101696103573660046115b1565b610bbd565b34801561036857600080fd5b5061016961037736600461161c565b610cbe565b34801561038857600080fd5b5061016961039736600461163c565b610d04565b3480156103a857600080fd5b506101696103b7366004611391565b610e4f565b600080826040516020016103d09190611858565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104145760405162461bcd60e51b8152600401610183906118a7565b9392505050565b610423610ea6565b60008181526004602052604081205490036104505760405162461bcd60e51b8152600401610183906118e9565b600090815260046020526040812055565b600080826040516020016104759190611858565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104ab5750428111155b949350505050565b6000341180156104c257508034145b6104de5760405162461bcd60e51b815260040161018390611951565b60035434906001600160a01b0316156105a25760006104fb610f1a565b90508034101561051d5760405162461bcd60e51b815260040161018390611991565b61052781346119b7565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610579576040519150601f19603f3d011682016040523d82523d6000602084013e61057e565b606091505b505090508061059f5760405162461bcd60e51b815260040161018390611a22565b50505b60006105ad33610fab565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105f4929190611a32565b60405180910390a350505050565b61060a610ea6565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610657576040519150601f19603f3d011682016040523d82523d6000602084013e61065c565b606091505b505090508061067d5760405162461bcd60e51b815260040161018390611a7f565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106cc5750825b905060008267ffffffffffffffff1660011480156106e95750303b155b9050811580156106f7575080155b1561072e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845468ff00000000000000001916680100000000000000001785555b61076b87611009565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156107e357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906107da90600190611ab3565b60405180910390a15b50505050505050565b6107f4610ea6565b6107fe600061101a565b565b600061080d600130611ac1565b90506108407f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108675750336001600160a01b038216145b6108835760405162461bcd60e51b815260040161018390611b16565b600061088f8342611b26565b90506000846040516020016108a49190611858565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108e85760405162461bcd60e51b815260040161018390611b91565b60008181526020818152604082208490556001919061090990880188611391565b6001600160a01b0316815260208101919091526040016000908120906109356080880160608901611ba1565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016107e38282611fdf565b610974610ea6565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146109c1576040519150601f19603f3d011682016040523d82523d6000602084013e6109c6565b606091505b50509050806109e75760405162461bcd60e51b815260040161018390611a7f565b505050565b60006109f9600130611ac1565b9050610a2c7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a535750336001600160a01b038216145b610a6f5760405162461bcd60e51b815260040161018390611b16565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610aa891906112ea565b60405180910390a2505050565b6003546000906001600160a01b031615610b6657610ad283611098565b341015610af15760405162461bcd60e51b815260040161018390612041565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b3e576040519150601f19603f3d011682016040523d82523d6000602084013e610b43565b606091505b5050905080610b645760405162461bcd60e51b815260040161018390611a22565b505b610b6f33610fab565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610bac9796959493929190612051565b60405180910390a195945050505050565b6000818152600460205260408120549003610bea5760405162461bcd60e51b81526004016101839061210c565b600081815260046020526040902054421015610c185760405162461bcd60e51b815260040161018390612158565b600084604051602001610c2b91906121dd565b60405160208183030381529060405280519060200120604051602001610c51919061221d565b604051602081830303815290604052805190602001209050610c9b84848484604051602001610c80919061223c565b6040516020818303038152906040528051906020012061111a565b610cb75760405162461bcd60e51b8152600401610183906122a6565b5050505050565b610cc6610ea6565b60008281526004602052604090205415610cf25760405162461bcd60e51b81526004016101839061230e565b60009182526004602052604090912055565b6000818152600460205260408120549003610d315760405162461bcd60e51b81526004016101839061210c565b600081815260046020526040902054421015610d5f5760405162461bcd60e51b815260040161018390612158565b6000610d6e6020860186611391565b610d7e604087016020880161231e565b610d8e6060880160408901611ba1565b610d9e6080890160608a01611ba1565b610dab60808a018a611cf8565b610dbb60c08c0160a08d0161233d565b604051602001610dd19796959493929190612051565b604051602081830303815290604052805190602001209050600081604051602001610dfc919061238e565b604051602081830303815290604052805190602001209050610e2b85858584604051602001610c80919061223c565b610e475760405162461bcd60e51b8152600401610183906123f6565b505050505050565b610e57610ea6565b6001600160a01b038116610e9a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161018391906113df565b610ea38161101a565b50565b33610ed87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107fe57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161018391906113df565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610f659060209060040161240f565b602060405180830381865afa158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa69190612428565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610fde8385612447565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b611011611132565b610ea381611199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d516110b7601185611b26565b6040518263ffffffff1660e01b81526004016110d391906112ea565b602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190612428565b92915050565b6000826111288686856111a1565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107fe576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e57611132565b600081815b848110156111da576111d0828787848181106111c4576111c461246b565b905060200201356111e3565b91506001016111a6565b50949350505050565b60008183106111ff576000828152602084905260409020610414565b5060009182526020526040902090565b60006001600160a01b038216611114565b6112298161120f565b82525050565b80611229565b604081016112438285611220565b610414602083018461122f565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b6020808252810161111481611250565b600060c082840312156112a9576112a9600080fd5b50919050565b6000602082840312156112c4576112c4600080fd5b813567ffffffffffffffff8111156112de576112de600080fd5b6104ab84828501611294565b60208101611114828461122f565b805b8114610ea357600080fd5b8035611114816112f8565b60006020828403121561132557611325600080fd5b6104148383611305565b801515611229565b60208101611114828461132f565b6112fa8161120f565b803561111481611345565b6000806040838503121561136f5761136f600080fd5b611379848461134e565b91506113888460208501611305565b90509250929050565b6000602082840312156113a6576113a6600080fd5b610414838361134e565b600080604083850312156113c6576113c6600080fd5b6113d0848461134e565b9150611388846020850161134e565b602081016111148284611220565b6000806040838503121561140357611403600080fd5b823567ffffffffffffffff81111561141d5761141d600080fd5b61142985828601611294565b9250506113888460208501611305565b63ffffffff81166112fa565b803561111481611439565b60008083601f84011261146557611465600080fd5b50813567ffffffffffffffff81111561148057611480600080fd5b60208301915083600182028301111561149b5761149b600080fd5b9250929050565b60ff81166112fa565b8035611114816114a2565b6000806000806000608086880312156114d1576114d1600080fd5b6114db8787611445565b94506114ea8760208801611445565b9350604086013567ffffffffffffffff81111561150957611509600080fd5b61151588828901611450565b935093505061152787606088016114ab565b90509295509295909350565b67ffffffffffffffff8116611229565b602081016111148284611533565b6000608082840312156112a9576112a9600080fd5b60008083601f84011261157b5761157b600080fd5b50813567ffffffffffffffff81111561159657611596600080fd5b60208301915083602082028301111561149b5761149b600080fd5b60008060008060c085870312156115ca576115ca600080fd5b6115d48686611551565b9350608085013567ffffffffffffffff8111156115f3576115f3600080fd5b6115ff87828801611566565b93509350506116118660a08701611305565b905092959194509250565b6000806040838503121561163257611632600080fd5b6113798484611305565b6000806000806060858703121561165557611655600080fd5b843567ffffffffffffffff81111561166f5761166f600080fd5b61167b87828801611294565b945050602085013567ffffffffffffffff81111561169b5761169b600080fd5b6116a787828801611566565b93509350506116118660408701611305565b506000611114602083018361134e565b67ffffffffffffffff81166112fa565b8035611114816116c9565b50600061111460208301836116d9565b5060006111146020830183611445565b63ffffffff8116611229565b6000808335601e193685900301811261172b5761172b600080fd5b830160208101925035905067ffffffffffffffff81111561174e5761174e600080fd5b3681900382131561149b5761149b600080fd5b82818337506000910152565b818352602083019250611781828483611761565b50601f01601f19160190565b50600061111460208301836114ab565b60ff8116611229565b600060c083016117b683806116b9565b6117c08582611220565b506117ce60208401846116e4565b6117db6020860182611533565b506117e960408401846116f4565b6117f66040860182611704565b5061180460608401846116f4565b6118116060860182611704565b5061181f6080840184611710565b858303608087015261183283828461176d565b9250505061184360a084018461178d565b61185060a086018261179d565b509392505050565b6020808252810161041481846117a6565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b6020808252810161111481611869565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e0000000000008152905061127e565b60208082528101611114816118b7565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506118a1565b60208082528101611114816118f9565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c7565910190815261127e565b6020808252810161111481611961565b634e487b7160e01b600052601160045260246000fd5b81810381811115611114576111146119a1565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506118a1565b60208082528101611114816119ca565b60408101611a40828561122f565b6104146020830184611533565b60148152602081017f6661696c65642073656e64696e672076616c75650000000000000000000000008152905061127e565b6020808252810161111481611a4d565b600061111482611a9d565b90565b67ffffffffffffffff1690565b61122981611a8f565b602081016111148284611aaa565b6001600160a01b03918216919081169082820390811115611114576111146119a1565b60118152602081017f4e6f74206f776e6572206f722073656c660000000000000000000000000000008152905061127e565b6020808252810161111481611ae4565b80820180821115611114576111146119a1565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506118a1565b6020808252810161111481611b39565b600060208284031215611bb657611bb6600080fd5b6104148383611445565b6000813561111481611345565b60006001600160a01b03835b81169019929092169190911792915050565b60006111148261120f565b600061111482611beb565b611c0a82611bf6565b611c15818354611bcd565b8255505050565b60008135611114816116c9565b60007bffffffffffffffff0000000000000000000000000000000000000000611bd98460a01b90565b600061111467ffffffffffffffff8316611a9d565b611c7082611c52565b611c15818354611c29565b6000813561111481611439565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bd98460e01b90565b600063ffffffff8216611114565b611ccc82611cb5565b611c15818354611c88565b600063ffffffff83611bd9565b611ced82611cb5565b611c15818354611cd7565b6000808335601e1936859003018112611d1357611d13600080fd5b8301915050803567ffffffffffffffff811115611d3257611d32600080fd5b60208201915060018102360382131561149b5761149b600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d8d57607f821691505b6020821081036112a9576112a9611d63565b6000611114611a9a8381565b611db483611d9f565b815460001960089490940293841b1916921b91909117905550565b60006109e7818484611dab565b8181101561067d57611def600082611dcf565b600101611ddc565b601f8211156109e7576000818152602090206020601f85010481016020851015611e1e5750805b610cb76020601f860104830182611ddc565b8267ffffffffffffffff811115611e4957611e49611d4d565b611e538254611d79565b611e5e828285611df7565b506000601f821160018114611e935760008315611e7b5750848201355b600019600885021c1981166002850217855550610e47565b600084815260209020601f19841690835b82811015611ec45787850135825560209485019460019092019101611ea4565b5084821015611ee1576000196008601f8716021c19878501351681555b5050505060020260010190555050565b6109e7838383611e30565b60008135611114816114a2565b600060ff8216611114565b611f1d82611f09565b815460ff191660ff821617611c15565b808280611f3981611bc0565b9050611f458184611c01565b50506020830180611f5582611c1c565b9050611f618184611c67565b50506040830180611f7182611c7b565b9050611f7d8184611cc3565b5050506060820180611f8e82611c7b565b9050611f9d8160018501611ce4565b5050611fac6080830183611cf8565b611fba818360028601611ef1565b505060a0820180611fca82611efc565b9050611fd98160038501611f14565b50505050565b61067d8282611f2d565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506118a1565b6020808252810161111481611fe9565b60c0810161205f828a611220565b61206c6020830189611533565b6120796040830188611704565b6120866060830187611704565b818103608083015261209981858761176d565b90506120a860a083018461179d565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506118a1565b60208082528101611114816120b4565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506118a1565b602080825281016111148161211c565b5060006111146020830183611305565b61218281806116b9565b61218c8382611220565b5061219a60208201826116b9565b6121a76020840182611220565b506121b56040820182612168565b6121c2604084018261122f565b506121d060608201826116e4565b6109e76060840182611533565b608081016111148284612178565b60018152602081017f76000000000000000000000000000000000000000000000000000000000000008152905061127e565b6040808252810161222d816121eb565b9050611114602083018461122f565b612246818361122f565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506118a1565b602080825281016111148161224e565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506118a1565b60208082528101611114816122b6565b60006020828403121561233357612333600080fd5b61041483836116d9565b60006020828403121561235257612352600080fd5b61041483836114ab565b60018152602081017f6d000000000000000000000000000000000000000000000000000000000000008152905061127e565b6040808252810161222d8161235c565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506118a1565b602080825281016111148161239e565b61122981611d9f565b602081016111148284612406565b8051611114816112f8565b60006020828403121561243d5761243d600080fd5b610414838361241d565b67ffffffffffffffff918216919081169082820190811115611114576111146119a1565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220d3bd88e19eb5e0e03473c1583cfcd854a520d8329b1baacacdfe3579c28bb44c64736f6c634300081c0033", } // MerkleTreeMessageBusABI is the input ABI used to generate the binding from. @@ -434,6 +434,27 @@ func (_MerkleTreeMessageBus *MerkleTreeMessageBusTransactorSession) Initialize(c return _MerkleTreeMessageBus.Contract.Initialize(&_MerkleTreeMessageBus.TransactOpts, caller, feesAddress) } +// NotifyDeposit is a paid mutator transaction binding the contract method 0xab53bddc. +// +// Solidity: function notifyDeposit(address receiver, uint256 amount) returns() +func (_MerkleTreeMessageBus *MerkleTreeMessageBusTransactor) NotifyDeposit(opts *bind.TransactOpts, receiver common.Address, amount *big.Int) (*types.Transaction, error) { + return _MerkleTreeMessageBus.contract.Transact(opts, "notifyDeposit", receiver, amount) +} + +// NotifyDeposit is a paid mutator transaction binding the contract method 0xab53bddc. +// +// Solidity: function notifyDeposit(address receiver, uint256 amount) returns() +func (_MerkleTreeMessageBus *MerkleTreeMessageBusSession) NotifyDeposit(receiver common.Address, amount *big.Int) (*types.Transaction, error) { + return _MerkleTreeMessageBus.Contract.NotifyDeposit(&_MerkleTreeMessageBus.TransactOpts, receiver, amount) +} + +// NotifyDeposit is a paid mutator transaction binding the contract method 0xab53bddc. +// +// Solidity: function notifyDeposit(address receiver, uint256 amount) returns() +func (_MerkleTreeMessageBus *MerkleTreeMessageBusTransactorSession) NotifyDeposit(receiver common.Address, amount *big.Int) (*types.Transaction, error) { + return _MerkleTreeMessageBus.Contract.NotifyDeposit(&_MerkleTreeMessageBus.TransactOpts, receiver, amount) +} + // PublishMessage is a paid mutator transaction binding the contract method 0xb1454caa. // // Solidity: function publishMessage(uint32 nonce, uint32 topic, bytes payload, uint8 consistencyLevel) payable returns(uint64 sequence) @@ -896,6 +917,151 @@ func (_MerkleTreeMessageBus *MerkleTreeMessageBusFilterer) ParseLogMessagePublis return event, nil } +// MerkleTreeMessageBusNativeDepositIterator is returned from FilterNativeDeposit and is used to iterate over the raw logs and unpacked data for NativeDeposit events raised by the MerkleTreeMessageBus contract. +type MerkleTreeMessageBusNativeDepositIterator struct { + Event *MerkleTreeMessageBusNativeDeposit // 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 *MerkleTreeMessageBusNativeDepositIterator) 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(MerkleTreeMessageBusNativeDeposit) + 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(MerkleTreeMessageBusNativeDeposit) + 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 *MerkleTreeMessageBusNativeDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MerkleTreeMessageBusNativeDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MerkleTreeMessageBusNativeDeposit represents a NativeDeposit event raised by the MerkleTreeMessageBus contract. +type MerkleTreeMessageBusNativeDeposit struct { + Receiver common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNativeDeposit is a free log retrieval operation binding the contract event 0xcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3. +// +// Solidity: event NativeDeposit(address indexed receiver, uint256 amount) +func (_MerkleTreeMessageBus *MerkleTreeMessageBusFilterer) FilterNativeDeposit(opts *bind.FilterOpts, receiver []common.Address) (*MerkleTreeMessageBusNativeDepositIterator, error) { + + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _MerkleTreeMessageBus.contract.FilterLogs(opts, "NativeDeposit", receiverRule) + if err != nil { + return nil, err + } + return &MerkleTreeMessageBusNativeDepositIterator{contract: _MerkleTreeMessageBus.contract, event: "NativeDeposit", logs: logs, sub: sub}, nil +} + +// WatchNativeDeposit is a free log subscription operation binding the contract event 0xcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3. +// +// Solidity: event NativeDeposit(address indexed receiver, uint256 amount) +func (_MerkleTreeMessageBus *MerkleTreeMessageBusFilterer) WatchNativeDeposit(opts *bind.WatchOpts, sink chan<- *MerkleTreeMessageBusNativeDeposit, receiver []common.Address) (event.Subscription, error) { + + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _MerkleTreeMessageBus.contract.WatchLogs(opts, "NativeDeposit", receiverRule) + 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(MerkleTreeMessageBusNativeDeposit) + if err := _MerkleTreeMessageBus.contract.UnpackLog(event, "NativeDeposit", 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 +} + +// ParseNativeDeposit is a log parse operation binding the contract event 0xcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3. +// +// Solidity: event NativeDeposit(address indexed receiver, uint256 amount) +func (_MerkleTreeMessageBus *MerkleTreeMessageBusFilterer) ParseNativeDeposit(log types.Log) (*MerkleTreeMessageBusNativeDeposit, error) { + event := new(MerkleTreeMessageBusNativeDeposit) + if err := _MerkleTreeMessageBus.contract.UnpackLog(event, "NativeDeposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // MerkleTreeMessageBusOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the MerkleTreeMessageBus contract. type MerkleTreeMessageBusOwnershipTransferredIterator struct { Event *MerkleTreeMessageBusOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/contracts/generated/MessageBus/MessageBus.go b/contracts/generated/MessageBus/MessageBus.go index 153506d5d1..f62b0efaf3 100644 --- a/contracts/generated/MessageBus/MessageBus.go +++ b/contracts/generated/MessageBus/MessageBus.go @@ -41,8 +41,8 @@ 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\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"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\":\"payable\",\"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: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ab3806101596000396000f3fe6080604052600436106100c05760003560e01c8063715018a61161007457806399a3ad211161004e57806399a3ad2114610285578063b1454caa146102a5578063f2fde38b146102c557610134565b8063715018a61461020b5780638da5cb5b146102205780639730886d1461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063485cc955146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610d37565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610d86565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610db1565b6102e5565b6040516101829190610dec565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610db1565b610344565b6040516101829190610e02565b6101326101c6366004610e40565b610396565b3480156101d757600080fd5b506101326101e6366004610e78565b6104e5565b3480156101f757600080fd5b50610132610206366004610e97565b610564565b34801561021757600080fd5b506101326106cf565b34801561022c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610ec6565b34801561027157600080fd5b50610132610280366004610ed4565b6106e3565b34801561029157600080fd5b506101326102a0366004610e40565b61084f565b6102b86102b3366004610f9d565b6108cf565b604051610182919061102a565b3480156102d157600080fd5b506101326102e0366004610e78565b6109d7565b600080826040516020016102f991906111d7565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061033d5760405162461bcd60e51b815260040161014c90611242565b9392505050565b6000808260405160200161035891906111d7565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061038e5750428111155b949350505050565b6000341180156103a557508034145b6103c15760405162461bcd60e51b815260040161014c906112aa565b60035434906001600160a01b0316156104855760006103de610a2e565b9050803410156104005760405162461bcd60e51b815260040161014c906112ea565b61040a8134611310565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d806000811461045c576040519150601f19603f3d011682016040523d82523d6000602084013e610461565b606091505b50509050806104825760405162461bcd60e51b815260040161014c9061137b565b50505b600061049033610abf565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516104d792919061138b565b60405180910390a350505050565b6104ed610b1d565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461053a576040519150601f19603f3d011682016040523d82523d6000602084013e61053f565b606091505b50509050806105605760405162461bcd60e51b815260040161014c906113d8565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105af5750825b905060008267ffffffffffffffff1660011480156105cc5750303b155b9050811580156105da575080155b15610611576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064557845468ff00000000000000001916680100000000000000001785555b61064e87610b91565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106c657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106bd9060019061140c565b60405180910390a15b50505050505050565b6106d7610b1d565b6106e16000610ba2565b565b60006106f060013061141a565b90506107237f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061074a5750336001600160a01b038216145b6107665760405162461bcd60e51b815260040161014c9061146f565b6000610772834261147f565b905060008460405160200161078791906111d7565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107cb5760405162461bcd60e51b815260040161014c906114ea565b6000818152602081815260408220849055600191906107ec90880188610e78565b6001600160a01b03168152602081019190915260400160009081209061081860808801606089016114fa565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106c68282611943565b610857610b1d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108a4576040519150601f19603f3d011682016040523d82523d6000602084013e6108a9565b606091505b50509050806108ca5760405162461bcd60e51b815260040161014c906113d8565b505050565b6003546000906001600160a01b031615610980576108ec83610c20565b34101561090b5760405162461bcd60e51b815260040161014c906119a5565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610958576040519150601f19603f3d011682016040523d82523d6000602084013e61095d565b606091505b505090508061097e5760405162461bcd60e51b815260040161014c9061137b565b505b61098933610abf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516109c697969594939291906119b5565b60405180910390a195945050505050565b6109df610b1d565b6001600160a01b038116610a225760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610ec6565b610a2b81610ba2565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610a7990602090600401611a21565b602060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190611a3a565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610af28385611a59565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610b4f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106e157336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610ec6565b610b99610ca2565b610a2b81610d09565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610c3f60118561147f565b6040518263ffffffff1660e01b8152600401610c5b9190610dec565b602060405180830381865afa158015610c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9c9190611a3a565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106e1576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109df610ca2565b60006001600160a01b038216610c9c565b610d2b81610d11565b82525050565b80610d2b565b60408101610d458285610d22565b61033d6020830184610d31565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610c9c81610d52565b600060c08284031215610dab57610dab600080fd5b50919050565b600060208284031215610dc657610dc6600080fd5b813567ffffffffffffffff811115610de057610de0600080fd5b61038e84828501610d96565b60208101610c9c8284610d31565b801515610d2b565b60208101610c9c8284610dfa565b610e1981610d11565b8114610a2b57600080fd5b8035610c9c81610e10565b80610e19565b8035610c9c81610e2f565b60008060408385031215610e5657610e56600080fd5b610e608484610e24565b9150610e6f8460208501610e35565b90509250929050565b600060208284031215610e8d57610e8d600080fd5b61033d8383610e24565b60008060408385031215610ead57610ead600080fd5b610eb78484610e24565b9150610e6f8460208501610e24565b60208101610c9c8284610d22565b60008060408385031215610eea57610eea600080fd5b823567ffffffffffffffff811115610f0457610f04600080fd5b610f1085828601610d96565b925050610e6f8460208501610e35565b63ffffffff8116610e19565b8035610c9c81610f20565b60008083601f840112610f4c57610f4c600080fd5b50813567ffffffffffffffff811115610f6757610f67600080fd5b602083019150836001820283011115610f8257610f82600080fd5b9250929050565b60ff8116610e19565b8035610c9c81610f89565b600080600080600060808688031215610fb857610fb8600080fd5b610fc28787610f2c565b9450610fd18760208801610f2c565b9350604086013567ffffffffffffffff811115610ff057610ff0600080fd5b610ffc88828901610f37565b935093505061100e8760608801610f92565b90509295509295909350565b67ffffffffffffffff8116610d2b565b60208101610c9c828461101a565b506000610c9c6020830183610e24565b67ffffffffffffffff8116610e19565b8035610c9c81611048565b506000610c9c6020830183611058565b506000610c9c6020830183610f2c565b63ffffffff8116610d2b565b6000808335601e19368590030181126110aa576110aa600080fd5b830160208101925035905067ffffffffffffffff8111156110cd576110cd600080fd5b36819003821315610f8257610f82600080fd5b82818337506000910152565b8183526020830192506111008284836110e0565b50601f01601f19160190565b506000610c9c6020830183610f92565b60ff8116610d2b565b600060c083016111358380611038565b61113f8582610d22565b5061114d6020840184611063565b61115a602086018261101a565b506111686040840184611073565b6111756040860182611083565b506111836060840184611073565b6111906060860182611083565b5061119e608084018461108f565b85830360808701526111b18382846110ec565b925050506111c260a084018461110c565b6111cf60a086018261111c565b509392505050565b6020808252810161033d8184611125565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610c9c816111e8565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e67204574686572000000000000000000000000000000006020820152905061123c565b60208082528101610c9c81611252565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610d80565b60208082528101610c9c816112ba565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c9c57610c9c6112fa565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f72616374000000000000000000000000000000000000000000000000000000006020820152905061123c565b60208082528101610c9c81611323565b604081016113998285610d31565b61033d602083018461101a565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610d80565b60208082528101610c9c816113a6565b6000610c9c826113f6565b90565b67ffffffffffffffff1690565b610d2b816113e8565b60208101610c9c8284611403565b6001600160a01b03918216919081169082820390811115610c9c57610c9c6112fa565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610d80565b60208082528101610c9c8161143d565b80820180821115610c9c57610c9c6112fa565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f21000000000000000000000000000000000000000000000000000000000000006020820152905061123c565b60208082528101610c9c81611492565b60006020828403121561150f5761150f600080fd5b61033d8383610f2c565b60008135610c9c81610e10565b60006001600160a01b03835b81169019929092169190911792915050565b6000610c9c82610d11565b6000610c9c82611544565b6115638261154f565b61156e818354611526565b8255505050565b60008135610c9c81611048565b60007bffffffffffffffff00000000000000000000000000000000000000006115328460a01b90565b6000610c9c67ffffffffffffffff83166113f6565b6115c9826115ab565b61156e818354611582565b60008135610c9c81610f20565b60007fffffffff000000000000000000000000000000000000000000000000000000006115328460e01b90565b600063ffffffff8216610c9c565b6116258261160e565b61156e8183546115e1565b600063ffffffff83611532565b6116468261160e565b61156e818354611630565b6000808335601e193685900301811261166c5761166c600080fd5b8301915050803567ffffffffffffffff81111561168b5761168b600080fd5b602082019150600181023603821315610f8257610f82600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806116e657607f821691505b602082108103610dab57610dab6116bc565b6000610c9c6113f38381565b61170d836116f8565b815460001960089490940293841b1916921b91909117905550565b60006108ca818484611704565b8181101561056057611748600082611728565b600101611735565b601f8211156108ca576000818152602090206020601f850104810160208510156117775750805b6117896020601f860104830182611735565b5050505050565b8267ffffffffffffffff8111156117a9576117a96116a6565b6117b382546116d2565b6117be828285611750565b506000601f8211600181146117f357600083156117db5750848201355b600019600885021c198116600285021785555061184d565b600084815260209020601f19841690835b828110156118245787850135825560209485019460019092019101611804565b5084821015611841576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108ca838383611790565b60008135610c9c81610f89565b600060ff8216610c9c565b6118818261186d565b815460ff191660ff82161761156e565b80828061189d81611519565b90506118a9818461155a565b505060208301806118b982611575565b90506118c581846115c0565b505060408301806118d5826115d4565b90506118e1818461161c565b50505060608201806118f2826115d4565b9050611901816001850161163d565b50506119106080830183611651565b61191e818360028601611855565b505060a082018061192e82611860565b905061193d8160038501611878565b50505050565b6105608282611891565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f73736167650000000000000000000000000000000000000000000000000000006020820152905061123c565b60208082528101610c9c8161194d565b60c081016119c3828a610d22565b6119d0602083018961101a565b6119dd6040830188611083565b6119ea6060830187611083565b81810360808301526119fd8185876110ec565b9050611a0c60a083018461111c565b98975050505050505050565b610d2b816116f8565b60208101610c9c8284611a18565b8051610c9c81610e2f565b600060208284031215611a4f57611a4f600080fd5b61033d8383611a2f565b67ffffffffffffffff918216919081169082820190811115610c9c57610c9c6112fa56fea26469706673582212201f500c1ed66462b882c75dccce6728c6e38010a1e90ea1306d187fe1d8d0d83b64736f6c634300081c0033", + 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\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeDeposit\",\"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\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"notifyDeposit\",\"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\":\"payable\",\"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: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ba7806101596000396000f3fe6080604052600436106100cb5760003560e01c80638da5cb5b11610074578063ab53bddc1161004e578063ab53bddc146102b0578063b1454caa146102d0578063f2fde38b146102f05761013f565b80638da5cb5b1461022b5780639730886d1461027057806399a3ad21146102905761013f565b806336d2da90116100a557806336d2da90146101d6578063485cc955146101f6578063715018a6146102165761013f565b80630fcfbd111461016057806333a88c7214610196578063346633fb146101c35761013f565b3661013f576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101109033908390600401610e2b565b6000604051808303818588803b15801561012957600080fd5b505af115801561013d573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161015790610e7a565b60405180910390fd5b34801561016c57600080fd5b5061018061017b366004610ea5565b610310565b60405161018d9190610ee0565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004610ea5565b61036f565b60405161018d9190610ef6565b61013d6101d1366004610f34565b6103c1565b3480156101e257600080fd5b5061013d6101f1366004610f6c565b610510565b34801561020257600080fd5b5061013d610211366004610f8b565b61058f565b34801561022257600080fd5b5061013d6106fa565b34801561023757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018d9190610fba565b34801561027c57600080fd5b5061013d61028b366004610fc8565b61070e565b34801561029c57600080fd5b5061013d6102ab366004610f34565b61087a565b3480156102bc57600080fd5b5061013d6102cb366004610f34565b6108fa565b6102e36102de366004611091565b6109c3565b60405161018d919061111e565b3480156102fc57600080fd5b5061013d61030b366004610f6c565b610acb565b6000808260405160200161032491906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103685760405162461bcd60e51b815260040161015790611336565b9392505050565b6000808260405160200161038391906112cb565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906103b95750428111155b949350505050565b6000341180156103d057508034145b6103ec5760405162461bcd60e51b81526004016101579061139e565b60035434906001600160a01b0316156104b0576000610409610b22565b90508034101561042b5760405162461bcd60e51b8152600401610157906113de565b6104358134611404565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610487576040519150601f19603f3d011682016040523d82523d6000602084013e61048c565b606091505b50509050806104ad5760405162461bcd60e51b81526004016101579061146f565b50505b60006104bb33610bb3565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6848460405161050292919061147f565b60405180910390a350505050565b610518610c11565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610565576040519150601f19603f3d011682016040523d82523d6000602084013e61056a565b606091505b505090508061058b5760405162461bcd60e51b8152600401610157906114cc565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105da5750825b905060008267ffffffffffffffff1660011480156105f75750303b155b905081158015610605575080155b1561063c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561067057845468ff00000000000000001916680100000000000000001785555b61067987610c85565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106f157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106e890600190611500565b60405180910390a15b50505050505050565b610702610c11565b61070c6000610c96565b565b600061071b60013061150e565b905061074e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806107755750336001600160a01b038216145b6107915760405162461bcd60e51b815260040161015790611563565b600061079d8342611573565b90506000846040516020016107b291906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107f65760405162461bcd60e51b8152600401610157906115de565b60008181526020818152604082208490556001919061081790880188610f6c565b6001600160a01b03168152602081019190915260400160009081209061084360808801606089016115ee565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106f18282611a37565b610882610c11565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108cf576040519150601f19603f3d011682016040523d82523d6000602084013e6108d4565b606091505b50509050806108f55760405162461bcd60e51b8152600401610157906114cc565b505050565b600061090760013061150e565b905061093a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109615750336001600160a01b038216145b61097d5760405162461bcd60e51b815260040161015790611563565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3836040516109b69190610ee0565b60405180910390a2505050565b6003546000906001600160a01b031615610a74576109e083610d14565b3410156109ff5760405162461bcd60e51b815260040161015790611a99565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b5050905080610a725760405162461bcd60e51b81526004016101579061146f565b505b610a7d33610bb3565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610aba9796959493929190611aa9565b60405180910390a195945050505050565b610ad3610c11565b6001600160a01b038116610b165760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610b1f81610c96565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610b6d90602090600401611b15565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611b2e565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610be68385611b4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461070c57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610c8d610d96565b610b1f81610dfd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610d33601185611573565b6040518263ffffffff1660e01b8152600401610d4f9190610ee0565b602060405180830381865afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190611b2e565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad3610d96565b60006001600160a01b038216610d90565b610e1f81610e05565b82525050565b80610e1f565b60408101610e398285610e16565b6103686020830184610e25565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610d9081610e46565b600060c08284031215610e9f57610e9f600080fd5b50919050565b600060208284031215610eba57610eba600080fd5b813567ffffffffffffffff811115610ed457610ed4600080fd5b6103b984828501610e8a565b60208101610d908284610e25565b801515610e1f565b60208101610d908284610eee565b610f0d81610e05565b8114610b1f57600080fd5b8035610d9081610f04565b80610f0d565b8035610d9081610f23565b60008060408385031215610f4a57610f4a600080fd5b610f548484610f18565b9150610f638460208501610f29565b90509250929050565b600060208284031215610f8157610f81600080fd5b6103688383610f18565b60008060408385031215610fa157610fa1600080fd5b610fab8484610f18565b9150610f638460208501610f18565b60208101610d908284610e16565b60008060408385031215610fde57610fde600080fd5b823567ffffffffffffffff811115610ff857610ff8600080fd5b61100485828601610e8a565b925050610f638460208501610f29565b63ffffffff8116610f0d565b8035610d9081611014565b60008083601f84011261104057611040600080fd5b50813567ffffffffffffffff81111561105b5761105b600080fd5b60208301915083600182028301111561107657611076600080fd5b9250929050565b60ff8116610f0d565b8035610d908161107d565b6000806000806000608086880312156110ac576110ac600080fd5b6110b68787611020565b94506110c58760208801611020565b9350604086013567ffffffffffffffff8111156110e4576110e4600080fd5b6110f08882890161102b565b93509350506111028760608801611086565b90509295509295909350565b67ffffffffffffffff8116610e1f565b60208101610d90828461110e565b506000610d906020830183610f18565b67ffffffffffffffff8116610f0d565b8035610d908161113c565b506000610d90602083018361114c565b506000610d906020830183611020565b63ffffffff8116610e1f565b6000808335601e193685900301811261119e5761119e600080fd5b830160208101925035905067ffffffffffffffff8111156111c1576111c1600080fd5b3681900382131561107657611076600080fd5b82818337506000910152565b8183526020830192506111f48284836111d4565b50601f01601f19160190565b506000610d906020830183611086565b60ff8116610e1f565b600060c08301611229838061112c565b6112338582610e16565b506112416020840184611157565b61124e602086018261110e565b5061125c6040840184611167565b6112696040860182611177565b506112776060840184611167565b6112846060860182611177565b506112926080840184611183565b85830360808701526112a58382846111e0565b925050506112b660a0840184611200565b6112c360a0860182611210565b509392505050565b602080825281016103688184611219565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610d90816112dc565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611330565b60208082528101610d9081611346565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e74565b60208082528101610d90816113ae565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9057610d906113ee565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611417565b6040810161148d8285610e25565b610368602083018461110e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e74565b60208082528101610d908161149a565b6000610d90826114ea565b90565b67ffffffffffffffff1690565b610e1f816114dc565b60208101610d9082846114f7565b6001600160a01b03918216919081169082820390811115610d9057610d906113ee565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e74565b60208082528101610d9081611531565b80820180821115610d9057610d906113ee565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611586565b60006020828403121561160357611603600080fd5b6103688383611020565b60008135610d9081610f04565b60006001600160a01b03835b81169019929092169190911792915050565b6000610d9082610e05565b6000610d9082611638565b61165782611643565b61166281835461161a565b8255505050565b60008135610d908161113c565b60007bffffffffffffffff00000000000000000000000000000000000000006116268460a01b90565b6000610d9067ffffffffffffffff83166114ea565b6116bd8261169f565b611662818354611676565b60008135610d9081611014565b60007fffffffff000000000000000000000000000000000000000000000000000000006116268460e01b90565b600063ffffffff8216610d90565b61171982611702565b6116628183546116d5565b600063ffffffff83611626565b61173a82611702565b611662818354611724565b6000808335601e193685900301811261176057611760600080fd5b8301915050803567ffffffffffffffff81111561177f5761177f600080fd5b60208201915060018102360382131561107657611076600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117da57607f821691505b602082108103610e9f57610e9f6117b0565b6000610d906114e78381565b611801836117ec565b815460001960089490940293841b1916921b91909117905550565b60006108f58184846117f8565b8181101561058b5761183c60008261181c565b600101611829565b601f8211156108f5576000818152602090206020601f8501048101602085101561186b5750805b61187d6020601f860104830182611829565b5050505050565b8267ffffffffffffffff81111561189d5761189d61179a565b6118a782546117c6565b6118b2828285611844565b506000601f8211600181146118e757600083156118cf5750848201355b600019600885021c1981166002850217855550611941565b600084815260209020601f19841690835b8281101561191857878501358255602094850194600190920191016118f8565b5084821015611935576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108f5838383611884565b60008135610d908161107d565b600060ff8216610d90565b61197582611961565b815460ff191660ff821617611662565b8082806119918161160d565b905061199d818461164e565b505060208301806119ad82611669565b90506119b981846116b4565b505060408301806119c9826116c8565b90506119d58184611710565b50505060608201806119e6826116c8565b90506119f58160018501611731565b5050611a046080830183611745565b611a12818360028601611949565b505060a0820180611a2282611954565b9050611a31816003850161196c565b50505050565b61058b8282611985565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611a41565b60c08101611ab7828a610e16565b611ac4602083018961110e565b611ad16040830188611177565b611ade6060830187611177565b8181036080830152611af18185876111e0565b9050611b0060a0830184611210565b98975050505050505050565b610e1f816117ec565b60208101610d908284611b0c565b8051610d9081610f23565b600060208284031215611b4357611b43600080fd5b6103688383611b23565b67ffffffffffffffff918216919081169082820190811115610d9057610d906113ee56fea26469706673582212205827e6100538af9307eff1914e07e481a82d2ed05aab2e5cf52b967c89af264964736f6c634300081c0033", } // MessageBusABI is the input ABI used to generate the binding from. @@ -326,6 +326,27 @@ func (_MessageBus *MessageBusTransactorSession) Initialize(caller common.Address return _MessageBus.Contract.Initialize(&_MessageBus.TransactOpts, caller, feesAddress) } +// NotifyDeposit is a paid mutator transaction binding the contract method 0xab53bddc. +// +// Solidity: function notifyDeposit(address receiver, uint256 amount) returns() +func (_MessageBus *MessageBusTransactor) NotifyDeposit(opts *bind.TransactOpts, receiver common.Address, amount *big.Int) (*types.Transaction, error) { + return _MessageBus.contract.Transact(opts, "notifyDeposit", receiver, amount) +} + +// NotifyDeposit is a paid mutator transaction binding the contract method 0xab53bddc. +// +// Solidity: function notifyDeposit(address receiver, uint256 amount) returns() +func (_MessageBus *MessageBusSession) NotifyDeposit(receiver common.Address, amount *big.Int) (*types.Transaction, error) { + return _MessageBus.Contract.NotifyDeposit(&_MessageBus.TransactOpts, receiver, amount) +} + +// NotifyDeposit is a paid mutator transaction binding the contract method 0xab53bddc. +// +// Solidity: function notifyDeposit(address receiver, uint256 amount) returns() +func (_MessageBus *MessageBusTransactorSession) NotifyDeposit(receiver common.Address, amount *big.Int) (*types.Transaction, error) { + return _MessageBus.Contract.NotifyDeposit(&_MessageBus.TransactOpts, receiver, amount) +} + // PublishMessage is a paid mutator transaction binding the contract method 0xb1454caa. // // Solidity: function publishMessage(uint32 nonce, uint32 topic, bytes payload, uint8 consistencyLevel) payable returns(uint64 sequence) @@ -788,6 +809,151 @@ func (_MessageBus *MessageBusFilterer) ParseLogMessagePublished(log types.Log) ( return event, nil } +// MessageBusNativeDepositIterator is returned from FilterNativeDeposit and is used to iterate over the raw logs and unpacked data for NativeDeposit events raised by the MessageBus contract. +type MessageBusNativeDepositIterator struct { + Event *MessageBusNativeDeposit // 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 *MessageBusNativeDepositIterator) 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(MessageBusNativeDeposit) + 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(MessageBusNativeDeposit) + 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 *MessageBusNativeDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MessageBusNativeDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MessageBusNativeDeposit represents a NativeDeposit event raised by the MessageBus contract. +type MessageBusNativeDeposit struct { + Receiver common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNativeDeposit is a free log retrieval operation binding the contract event 0xcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3. +// +// Solidity: event NativeDeposit(address indexed receiver, uint256 amount) +func (_MessageBus *MessageBusFilterer) FilterNativeDeposit(opts *bind.FilterOpts, receiver []common.Address) (*MessageBusNativeDepositIterator, error) { + + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _MessageBus.contract.FilterLogs(opts, "NativeDeposit", receiverRule) + if err != nil { + return nil, err + } + return &MessageBusNativeDepositIterator{contract: _MessageBus.contract, event: "NativeDeposit", logs: logs, sub: sub}, nil +} + +// WatchNativeDeposit is a free log subscription operation binding the contract event 0xcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3. +// +// Solidity: event NativeDeposit(address indexed receiver, uint256 amount) +func (_MessageBus *MessageBusFilterer) WatchNativeDeposit(opts *bind.WatchOpts, sink chan<- *MessageBusNativeDeposit, receiver []common.Address) (event.Subscription, error) { + + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _MessageBus.contract.WatchLogs(opts, "NativeDeposit", receiverRule) + 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(MessageBusNativeDeposit) + if err := _MessageBus.contract.UnpackLog(event, "NativeDeposit", 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 +} + +// ParseNativeDeposit is a log parse operation binding the contract event 0xcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3. +// +// Solidity: event NativeDeposit(address indexed receiver, uint256 amount) +func (_MessageBus *MessageBusFilterer) ParseNativeDeposit(log types.Log) (*MessageBusNativeDeposit, error) { + event := new(MessageBusNativeDeposit) + if err := _MessageBus.contract.UnpackLog(event, "NativeDeposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // MessageBusOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the MessageBus contract. type MessageBusOwnershipTransferredIterator struct { Event *MessageBusOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/contracts/generated/ObsERC20/ObsERC20.go b/contracts/generated/ObsERC20/ObsERC20.go index e687ddf24d..3d6676f30f 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: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b50604051610dc8380380610dc883398101604081905261005591610191565b8181600361006383826102ef565b50600461007082826102ef565b50505050506103ae565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156100b5576100b561007a565b6040525050565b60006100c760405190565b90506100d38282610090565b919050565b60006001600160401b038211156100f1576100f161007a565b601f19601f83011660200192915050565b60005b8381101561011d578181015183820152602001610105565b50506000910152565b6000610139610134846100d8565b6100bc565b905082815283838301111561015057610150600080fd5b61015e836020830184610102565b9392505050565b600082601f83011261017957610179600080fd5b8151610189848260208601610126565b949350505050565b600080604083850312156101a7576101a7600080fd5b82516001600160401b038111156101c0576101c0600080fd5b6101cc85828601610165565b602085015190935090506001600160401b038111156101ed576101ed600080fd5b6101f985828601610165565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061022d57607f821691505b60208210810361023f5761023f610203565b50919050565b60006102546102518381565b90565b92915050565b61026383610245565b815460001960089490940293841b1916921b91909117905550565b600061028b81848461025a565b505050565b818110156102ab576102a360008261027e565b600101610290565b5050565b601f82111561028b576000818152602090206020601f850104810160208510156102d65750805b6102e86020601f860104830182610290565b5050505050565b81516001600160401b038111156103085761030861007a565b6103128254610219565b61031d8282856102af565b506020601f821160018114610352576000831561033a5750848201515b600019600885021c19811660028502178555506102e8565b600084815260208120601f198516915b828110156103825787850151825560209485019460019092019101610362565b508482101561039f5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a0b806103bd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107b7565b6002545b6040516100bd91906107cb565b6100d96101053660046107d9565b610206565b60126040516100bd919061082b565b6100ea610127366004610839565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea610155366004610858565b6102c6565b6060600380546101699061089d565b80601f01602080910402602001604051908101604052809291908181526020018280546101959061089d565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108c9565b60405180910390fd5b6060600480546101699061089d565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a090610904565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107cb565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109c2565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107cb565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b6107958484610759565b91506107a4846020850161076a565b90509250929050565b8015155b82525050565b6020810161020082846107ad565b806107b1565b6020810161020082846107c5565b6000806000606084860312156107f1576107f1600080fd5b6107fb8585610759565b925061080a8560208601610759565b9150610819856040860161076a565b90509250925092565b60ff81166107b1565b602081016102008284610822565b60006020828403121561084e5761084e600080fd5b61072a8383610759565b6000806040838503121561086e5761086e600080fd5b6108788484610759565b91506107a48460208501610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108b157607f821691505b6020821081036108c3576108c3610887565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b181610731565b6060810161097c8286610965565b61098960208301856107c5565b61099660408301846107c5565b949350505050565b602081016102008284610965565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109ac56fea2646970667358221220dd7e955880107c16bdd736ddc71f082aa6f1d6a128a71b0c7d3ed6d3b32a5a0064736f6c634300081c0033", + Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b50604051610dc8380380610dc883398101604081905261005591610191565b8181600361006383826102ef565b50600461007082826102ef565b50505050506103ae565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156100b5576100b561007a565b6040525050565b60006100c760405190565b90506100d38282610090565b919050565b60006001600160401b038211156100f1576100f161007a565b601f19601f83011660200192915050565b60005b8381101561011d578181015183820152602001610105565b50506000910152565b6000610139610134846100d8565b6100bc565b905082815283838301111561015057610150600080fd5b61015e836020830184610102565b9392505050565b600082601f83011261017957610179600080fd5b8151610189848260208601610126565b949350505050565b600080604083850312156101a7576101a7600080fd5b82516001600160401b038111156101c0576101c0600080fd5b6101cc85828601610165565b602085015190935090506001600160401b038111156101ed576101ed600080fd5b6101f985828601610165565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061022d57607f821691505b60208210810361023f5761023f610203565b50919050565b60006102546102518381565b90565b92915050565b61026383610245565b815460001960089490940293841b1916921b91909117905550565b600061028b81848461025a565b505050565b818110156102ab576102a360008261027e565b600101610290565b5050565b601f82111561028b576000818152602090206020601f850104810160208510156102d65750805b6102e86020601f860104830182610290565b5050505050565b81516001600160401b038111156103085761030861007a565b6103128254610219565b61031d8282856102af565b506020601f821160018114610352576000831561033a5750848201515b600019600885021c19811660028502178555506102e8565b600084815260208120601f198516915b828110156103825787850151825560209485019460019092019101610362565b508482101561039f5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a0b806103bd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107b7565b6002545b6040516100bd91906107cb565b6100d96101053660046107d9565b610206565b60126040516100bd919061082b565b6100ea610127366004610839565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea610155366004610858565b6102c6565b6060600380546101699061089d565b80601f01602080910402602001604051908101604052809291908181526020018280546101959061089d565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108c9565b60405180910390fd5b6060600480546101699061089d565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a090610904565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a0919061099e565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107cb565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109c2565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a09392919061096e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107cb565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b6107958484610759565b91506107a4846020850161076a565b90509250929050565b8015155b82525050565b6020810161020082846107ad565b806107b1565b6020810161020082846107c5565b6000806000606084860312156107f1576107f1600080fd5b6107fb8585610759565b925061080a8560208601610759565b9150610819856040860161076a565b90509250925092565b60ff81166107b1565b602081016102008284610822565b60006020828403121561084e5761084e600080fd5b61072a8383610759565b6000806040838503121561086e5761086e600080fd5b6108788484610759565b91506107a48460208501610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108b157607f821691505b6020821081036108c3576108c3610887565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b181610731565b6060810161097c8286610965565b61098960208301856107c5565b61099660408301846107c5565b949350505050565b602081016102008284610965565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109ac56fea2646970667358221220040f9b1774f491b981d504c0f392f310b7fe5ceb2e584bb687ef21fd301bb0cb64736f6c634300081c0033", } // 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 6ddcf52b33..37ae03a947 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\":\"payable\",\"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: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611b5d8061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103a7578063d547741f146103c7578063e4c3ebc7146103e757600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611314565b61041b565b604051610176919061133d565b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004611370565b610484565b005b61019f6101af366004611370565b6104de565b3480156101c057600080fd5b506101e46101cf3660046113a0565b60009081526002602052604090206001015490565b60405161017691906113c5565b3480156101fd57600080fd5b5061019f61020c3660046113d3565b6105e9565b34801561021d57600080fd5b5061019f61022c3660046113d3565b610614565b34801561023d57600080fd5b5061019f61024c36600461145d565b610665565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a0366004611370565b61072a565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f4366004611370565b61077e565b34801561030557600080fd5b5061019f6103143660046114ea565b610859565b34801561032557600080fd5b506101696103343660046113d3565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a366004611370565b610973565b34801561038b57600080fd5b506101e4600081565b61019f6103a23660046114ea565b6109c7565b3480156103b357600080fd5b5061019f6103c2366004611370565b610ab6565b3480156103d357600080fd5b5061019f6103e23660046113d3565b610c4f565b3480156103f357600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061047e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104ae81610c74565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105075760405162461bcd60e51b81526004016104fe90611567565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b0316815250604051602001610537919061159f565b60408051601f19818403018152919052600354909150610566906001600160a01b03168260025b600080610c81565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105b390869083906004016115ad565b6000604051808303818588803b1580156105cc57600080fd5b505af11580156105e0573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461060481610c74565b61060e8383610d8e565b50505050565b6001600160a01b0381163314610656576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106608282610e3c565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561068f81610c74565b6106b97f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d8e565b50600063458ffd6360e01b87878787876040516024016106dd9594939291906115f4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105e0906001600160a01b031682600161055e565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561075481610c74565b6106607f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e3c565b610786610ec3565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108299190611640565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b039182169116331461088a5760405162461bcd60e51b81526004016104fe906116b9565b806001600160a01b031661089c610f2c565b6001600160a01b0316146108c25760405162461bcd60e51b81526004016104fe90611721565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16156109125761090d848484610fa9565b61060e565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff161561095b5761090d82610fb4565b60405162461bcd60e51b81526004016104fe90611789565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561099d81610c74565b6106607fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d8e565b600082116109e75760405162461bcd60e51b81526004016104fe906117cb565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a3e5760405162461bcd60e51b81526004016104fe906117db565b610a4a83333085611026565b60006383bece4d60e01b848484604051602401610a6993929190611862565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061060e906001600160a01b031682600061055e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b015750825b905060008267ffffffffffffffff166001148015610b1e5750303b155b905081158015610b2c575080155b15610b63576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b9757845468ff00000000000000001916680100000000000000001785555b610ba08661077e565b610bca7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d8e565b50610bf67fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d8e565b508315610c4757845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c3e906001906118ad565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c6a81610c74565b61060e8383610e3c565b610c7e8133611080565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cb7919061195a565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610d0b8361199a565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610d4b94939291906119d2565b60206040518083038185885af1158015610d69573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906105e09190611a32565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e345760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610dec3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161047e565b50600061047e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e345760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161047e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f2a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190611640565b905090565b6106608382846110e0565b6040516000906001600160a01b038316908281818181865af19150503d8060008114610ffc576040519150601f19603f3d011682016040523d82523d6000602084013e611001565b606091505b50509050806110225760405162461bcd60e51b81526004016104fe90611a83565b5050565b61060e84856001600160a01b03166323b872dd86868660405160240161104e93929190611a93565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611106565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff166110225780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016104fe9291906115ad565b61066083846001600160a01b031663a9059cbb858560405160240161104e9291906115ad565b600061111b6001600160a01b03841683611179565b9050805160001415801561114057508080602001905181019061113e9190611ace565b155b1561066057826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b60606111878383600061118e565b9392505050565b6060814710156111cc57306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b600080856001600160a01b031684866040516111e89190611b1d565b60006040518083038185875af1925050503d8060008114611225576040519150601f19603f3d011682016040523d82523d6000602084013e61122a565b606091505b509150915061123a868383611244565b9695505050505050565b60608261125957611254826112b0565b611187565b815115801561127057506001600160a01b0384163b155b156112a957836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b5080611187565b8051156112c05780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c7e57600080fd5b803561047e816112f2565b60006020828403121561132957611329600080fd5b6111878383611309565b8015155b82525050565b6020810161047e8284611333565b60006001600160a01b03821661047e565b6112fe8161134b565b803561047e8161135c565b60006020828403121561138557611385600080fd5b6111878383611365565b806112fe565b803561047e8161138f565b6000602082840312156113b5576113b5600080fd5b6111878383611395565b80611337565b6020810161047e82846113bf565b600080604083850312156113e9576113e9600080fd5b6113f38484611395565b91506114028460208501611365565b90509250929050565b60008083601f84011261142057611420600080fd5b50813567ffffffffffffffff81111561143b5761143b600080fd5b60208301915083600182028301111561145657611456600080fd5b9250929050565b60008060008060006060868803121561147857611478600080fd5b6114828787611365565b9450602086013567ffffffffffffffff8111156114a1576114a1600080fd5b6114ad8882890161140b565b9450945050604086013567ffffffffffffffff8111156114cf576114cf600080fd5b6114db8882890161140b565b92509250509295509295909350565b60008060006060848603121561150257611502600080fd5b61150c8585611365565b925061151b8560208601611395565b915061152a8560408601611365565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161047e81611533565b6113378161134b565b805161158c83826113bf565b5060208101516106606020840182611577565b6040810161047e8284611580565b604081016115bb8285611577565b61118760208301846113bf565b82818337506000910152565b8183526020830192506115e88284836115c8565b50601f01601f19160190565b606081016116028288611577565b81810360208301526116158186886115d4565b9050818103604083015261162a8184866115d4565b979650505050505050565b805161047e8161135c565b60006020828403121561165557611655600080fd5b6111878383611635565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161047e8161165f565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116b3565b6020808252810161047e816116c9565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116b3565b6020808252810161047e81611731565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e00000000000081529050611561565b6020808252810161047e81611799565b6020808252810161047e81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b606081016118708286611577565b61187d60208301856113bf565b61188a6040830184611577565b949350505050565b600067ffffffffffffffff821661047e565b61133781611892565b6020810161047e82846118a4565b60005b838110156118d65781810151838201526020016118be565b50506000910152565b60006118e9825190565b8084526020840193506119008185602086016118bb565b601f01601f19169290920192915050565b805160009060608401906119258582611577565b506020830151848203602086015261193d82826118df565b915050604083015161195260408601826113bf565b509392505050565b602080825281016111878184611911565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119b6576119b661196b565b5060010190565b63ffffffff8116611337565b60ff8116611337565b608081016119e082876119bd565b6119ed60208301866119bd565b81810360408301526119ff81856118df565b9050611a0e60608301846119c9565b95945050505050565b67ffffffffffffffff81166112fe565b805161047e81611a17565b600060208284031215611a4757611a47600080fd5b6111878383611a27565b60148152602081017f4661696c656420746f2073656e6420457468657200000000000000000000000081529050611561565b6020808252810161047e81611a51565b60608101611aa18286611577565b611aae6020830185611577565b61188a60408301846113bf565b8015156112fe565b805161047e81611abb565b600060208284031215611ae357611ae3600080fd5b6111878383611ac3565b6020810161047e8284611577565b6000611b05825190565b611b138185602086016118bb565b9290920192915050565b61047e8183611afb56fea26469706673582212209fdd1bc68a3088db5ac0f2032295ccf5b0417c76df07371cbbee256428e7531e64736f6c634300081c0033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611b5d8061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103a7578063d547741f146103c7578063e4c3ebc7146103e757600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611314565b61041b565b604051610176919061133d565b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004611370565b610484565b005b61019f6101af366004611370565b6104de565b3480156101c057600080fd5b506101e46101cf3660046113a0565b60009081526002602052604090206001015490565b60405161017691906113c5565b3480156101fd57600080fd5b5061019f61020c3660046113d3565b6105e9565b34801561021d57600080fd5b5061019f61022c3660046113d3565b610614565b34801561023d57600080fd5b5061019f61024c36600461145d565b610665565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a0366004611370565b61072a565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f4366004611370565b61077e565b34801561030557600080fd5b5061019f6103143660046114ea565b610859565b34801561032557600080fd5b506101696103343660046113d3565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a366004611370565b610973565b34801561038b57600080fd5b506101e4600081565b61019f6103a23660046114ea565b6109c7565b3480156103b357600080fd5b5061019f6103c2366004611370565b610ab6565b3480156103d357600080fd5b5061019f6103e23660046113d3565b610c4f565b3480156103f357600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061047e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104ae81610c74565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105075760405162461bcd60e51b81526004016104fe90611567565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b0316815250604051602001610537919061159f565b60408051601f19818403018152919052600354909150610566906001600160a01b03168260025b600080610c81565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105b390869083906004016115ad565b6000604051808303818588803b1580156105cc57600080fd5b505af11580156105e0573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461060481610c74565b61060e8383610d8e565b50505050565b6001600160a01b0381163314610656576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106608282610e3c565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561068f81610c74565b6106b97f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d8e565b50600063458ffd6360e01b87878787876040516024016106dd9594939291906115f4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105e0906001600160a01b031682600161055e565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561075481610c74565b6106607f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e3c565b610786610ec3565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108299190611640565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b039182169116331461088a5760405162461bcd60e51b81526004016104fe906116b9565b806001600160a01b031661089c610f2c565b6001600160a01b0316146108c25760405162461bcd60e51b81526004016104fe90611721565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16156109125761090d848484610fa9565b61060e565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff161561095b5761090d82610fb4565b60405162461bcd60e51b81526004016104fe90611789565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561099d81610c74565b6106607fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d8e565b600082116109e75760405162461bcd60e51b81526004016104fe906117cb565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a3e5760405162461bcd60e51b81526004016104fe906117db565b610a4a83333085611026565b60006383bece4d60e01b848484604051602401610a6993929190611862565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061060e906001600160a01b031682600061055e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b015750825b905060008267ffffffffffffffff166001148015610b1e5750303b155b905081158015610b2c575080155b15610b63576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b9757845468ff00000000000000001916680100000000000000001785555b610ba08661077e565b610bca7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d8e565b50610bf67fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d8e565b508315610c4757845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c3e906001906118ad565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c6a81610c74565b61060e8383610e3c565b610c7e8133611080565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cb7919061195a565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610d0b8361199a565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610d4b94939291906119d2565b60206040518083038185885af1158015610d69573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906105e09190611a32565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e345760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610dec3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161047e565b50600061047e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e345760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161047e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f2a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190611640565b905090565b6106608382846110e0565b6040516000906001600160a01b038316908281818181865af19150503d8060008114610ffc576040519150601f19603f3d011682016040523d82523d6000602084013e611001565b606091505b50509050806110225760405162461bcd60e51b81526004016104fe90611a83565b5050565b61060e84856001600160a01b03166323b872dd86868660405160240161104e93929190611a93565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611106565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff166110225780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016104fe9291906115ad565b61066083846001600160a01b031663a9059cbb858560405160240161104e9291906115ad565b600061111b6001600160a01b03841683611179565b9050805160001415801561114057508080602001905181019061113e9190611ace565b155b1561066057826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b60606111878383600061118e565b9392505050565b6060814710156111cc57306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b600080856001600160a01b031684866040516111e89190611b1d565b60006040518083038185875af1925050503d8060008114611225576040519150601f19603f3d011682016040523d82523d6000602084013e61122a565b606091505b509150915061123a868383611244565b9695505050505050565b60608261125957611254826112b0565b611187565b815115801561127057506001600160a01b0384163b155b156112a957836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016104fe9190611aed565b5080611187565b8051156112c05780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c7e57600080fd5b803561047e816112f2565b60006020828403121561132957611329600080fd5b6111878383611309565b8015155b82525050565b6020810161047e8284611333565b60006001600160a01b03821661047e565b6112fe8161134b565b803561047e8161135c565b60006020828403121561138557611385600080fd5b6111878383611365565b806112fe565b803561047e8161138f565b6000602082840312156113b5576113b5600080fd5b6111878383611395565b80611337565b6020810161047e82846113bf565b600080604083850312156113e9576113e9600080fd5b6113f38484611395565b91506114028460208501611365565b90509250929050565b60008083601f84011261142057611420600080fd5b50813567ffffffffffffffff81111561143b5761143b600080fd5b60208301915083600182028301111561145657611456600080fd5b9250929050565b60008060008060006060868803121561147857611478600080fd5b6114828787611365565b9450602086013567ffffffffffffffff8111156114a1576114a1600080fd5b6114ad8882890161140b565b9450945050604086013567ffffffffffffffff8111156114cf576114cf600080fd5b6114db8882890161140b565b92509250509295509295909350565b60008060006060848603121561150257611502600080fd5b61150c8585611365565b925061151b8560208601611395565b915061152a8560408601611365565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161047e81611533565b6113378161134b565b805161158c83826113bf565b5060208101516106606020840182611577565b6040810161047e8284611580565b604081016115bb8285611577565b61118760208301846113bf565b82818337506000910152565b8183526020830192506115e88284836115c8565b50601f01601f19160190565b606081016116028288611577565b81810360208301526116158186886115d4565b9050818103604083015261162a8184866115d4565b979650505050505050565b805161047e8161135c565b60006020828403121561165557611655600080fd5b6111878383611635565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161047e8161165f565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116b3565b6020808252810161047e816116c9565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116b3565b6020808252810161047e81611731565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e00000000000081529050611561565b6020808252810161047e81611799565b6020808252810161047e81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b606081016118708286611577565b61187d60208301856113bf565b61188a6040830184611577565b949350505050565b600067ffffffffffffffff821661047e565b61133781611892565b6020810161047e82846118a4565b60005b838110156118d65781810151838201526020016118be565b50506000910152565b60006118e9825190565b8084526020840193506119008185602086016118bb565b601f01601f19169290920192915050565b805160009060608401906119258582611577565b506020830151848203602086015261193d82826118df565b915050604083015161195260408601826113bf565b509392505050565b602080825281016111878184611911565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119b6576119b661196b565b5060010190565b63ffffffff8116611337565b60ff8116611337565b608081016119e082876119bd565b6119ed60208301866119bd565b81810360408301526119ff81856118df565b9050611a0e60608301846119c9565b95945050505050565b67ffffffffffffffff81166112fe565b805161047e81611a17565b600060208284031215611a4757611a47600080fd5b6111878383611a27565b60148152602081017f4661696c656420746f2073656e6420457468657200000000000000000000000081529050611561565b6020808252810161047e81611a51565b60608101611aa18286611577565b611aae6020830185611577565b61188a60408301846113bf565b8015156112fe565b805161047e81611abb565b600060208284031215611ae357611ae3600080fd5b6111878383611ac3565b6020810161047e8284611577565b6000611b05825190565b611b138185602086016118bb565b9290920192915050565b61047e8183611afb56fea264697066735822122032433aabb942ea26f27da50ceccad24f1c40e371b93725b5e6d103d9184127dc64736f6c634300081c0033", } // ObscuroBridgeABI 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 8ca5038720..31bb2f7273 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: "0x608060405234801561001057600080fd5b50604051615bb3380380615bb383398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615b938339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615b93833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615b938339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615b938339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610e368061061183390190565b6107c68061144783390190565b611c0c80611c0d83390190565b6110f08061381983390190565b61128a8061490983390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220f167613ef4e3f7e46b3b1dd1274a3d54289e4151c0baa0cfd458f522d9f7d93264736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ab3806101596000396000f3fe6080604052600436106100c05760003560e01c8063715018a61161007457806399a3ad211161004e57806399a3ad2114610285578063b1454caa146102a5578063f2fde38b146102c557610134565b8063715018a61461020b5780638da5cb5b146102205780639730886d1461026557610134565b8063346633fb116100a5578063346633fb146101b857806336d2da90146101cb578063485cc955146101eb57610134565b80630fcfbd111461015557806333a88c721461018b57610134565b36610134576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101059033908390600401610d37565b6000604051808303818588803b15801561011e57600080fd5b505af1158015610132573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014c90610d86565b60405180910390fd5b34801561016157600080fd5b50610175610170366004610db1565b6102e5565b6040516101829190610dec565b60405180910390f35b34801561019757600080fd5b506101ab6101a6366004610db1565b610344565b6040516101829190610e02565b6101326101c6366004610e40565b610396565b3480156101d757600080fd5b506101326101e6366004610e78565b6104e5565b3480156101f757600080fd5b50610132610206366004610e97565b610564565b34801561021757600080fd5b506101326106cf565b34801561022c57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101829190610ec6565b34801561027157600080fd5b50610132610280366004610ed4565b6106e3565b34801561029157600080fd5b506101326102a0366004610e40565b61084f565b6102b86102b3366004610f9d565b6108cf565b604051610182919061102a565b3480156102d157600080fd5b506101326102e0366004610e78565b6109d7565b600080826040516020016102f991906111d7565b60408051601f1981840301815291815281516020928301206000818152928390529120549091508061033d5760405162461bcd60e51b815260040161014c90611242565b9392505050565b6000808260405160200161035891906111d7565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061038e5750428111155b949350505050565b6000341180156103a557508034145b6103c15760405162461bcd60e51b815260040161014c906112aa565b60035434906001600160a01b0316156104855760006103de610a2e565b9050803410156104005760405162461bcd60e51b815260040161014c906112ea565b61040a8134611310565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d806000811461045c576040519150601f19603f3d011682016040523d82523d6000602084013e610461565b606091505b50509050806104825760405162461bcd60e51b815260040161014c9061137b565b50505b600061049033610abf565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516104d792919061138b565b60405180910390a350505050565b6104ed610b1d565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461053a576040519150601f19603f3d011682016040523d82523d6000602084013e61053f565b606091505b50509050806105605760405162461bcd60e51b815260040161014c906113d8565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105af5750825b905060008267ffffffffffffffff1660011480156105cc5750303b155b9050811580156105da575080155b15610611576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064557845468ff00000000000000001916680100000000000000001785555b61064e87610b91565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106c657845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106bd9060019061140c565b60405180910390a15b50505050505050565b6106d7610b1d565b6106e16000610ba2565b565b60006106f060013061141a565b90506107237f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061074a5750336001600160a01b038216145b6107665760405162461bcd60e51b815260040161014c9061146f565b6000610772834261147f565b905060008460405160200161078791906111d7565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107cb5760405162461bcd60e51b815260040161014c906114ea565b6000818152602081815260408220849055600191906107ec90880188610e78565b6001600160a01b03168152602081019190915260400160009081209061081860808801606089016114fa565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106c68282611943565b610857610b1d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108a4576040519150601f19603f3d011682016040523d82523d6000602084013e6108a9565b606091505b50509050806108ca5760405162461bcd60e51b815260040161014c906113d8565b505050565b6003546000906001600160a01b031615610980576108ec83610c20565b34101561090b5760405162461bcd60e51b815260040161014c906119a5565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610958576040519150601f19603f3d011682016040523d82523d6000602084013e61095d565b606091505b505090508061097e5760405162461bcd60e51b815260040161014c9061137b565b505b61098933610abf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516109c697969594939291906119b5565b60405180910390a195945050505050565b6109df610b1d565b6001600160a01b038116610a225760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014c9190610ec6565b610a2b81610ba2565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610a7990602090600401611a21565b602060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190611a3a565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610af28385611a59565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610b4f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106e157336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161014c9190610ec6565b610b99610ca2565b610a2b81610d09565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610c3f60118561147f565b6040518263ffffffff1660e01b8152600401610c5b9190610dec565b602060405180830381865afa158015610c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9c9190611a3a565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106e1576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109df610ca2565b60006001600160a01b038216610c9c565b610d2b81610d11565b82525050565b80610d2b565b60408101610d458285610d22565b61033d6020830184610d31565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610c9c81610d52565b600060c08284031215610dab57610dab600080fd5b50919050565b600060208284031215610dc657610dc6600080fd5b813567ffffffffffffffff811115610de057610de0600080fd5b61038e84828501610d96565b60208101610c9c8284610d31565b801515610d2b565b60208101610c9c8284610dfa565b610e1981610d11565b8114610a2b57600080fd5b8035610c9c81610e10565b80610e19565b8035610c9c81610e2f565b60008060408385031215610e5657610e56600080fd5b610e608484610e24565b9150610e6f8460208501610e35565b90509250929050565b600060208284031215610e8d57610e8d600080fd5b61033d8383610e24565b60008060408385031215610ead57610ead600080fd5b610eb78484610e24565b9150610e6f8460208501610e24565b60208101610c9c8284610d22565b60008060408385031215610eea57610eea600080fd5b823567ffffffffffffffff811115610f0457610f04600080fd5b610f1085828601610d96565b925050610e6f8460208501610e35565b63ffffffff8116610e19565b8035610c9c81610f20565b60008083601f840112610f4c57610f4c600080fd5b50813567ffffffffffffffff811115610f6757610f67600080fd5b602083019150836001820283011115610f8257610f82600080fd5b9250929050565b60ff8116610e19565b8035610c9c81610f89565b600080600080600060808688031215610fb857610fb8600080fd5b610fc28787610f2c565b9450610fd18760208801610f2c565b9350604086013567ffffffffffffffff811115610ff057610ff0600080fd5b610ffc88828901610f37565b935093505061100e8760608801610f92565b90509295509295909350565b67ffffffffffffffff8116610d2b565b60208101610c9c828461101a565b506000610c9c6020830183610e24565b67ffffffffffffffff8116610e19565b8035610c9c81611048565b506000610c9c6020830183611058565b506000610c9c6020830183610f2c565b63ffffffff8116610d2b565b6000808335601e19368590030181126110aa576110aa600080fd5b830160208101925035905067ffffffffffffffff8111156110cd576110cd600080fd5b36819003821315610f8257610f82600080fd5b82818337506000910152565b8183526020830192506111008284836110e0565b50601f01601f19160190565b506000610c9c6020830183610f92565b60ff8116610d2b565b600060c083016111358380611038565b61113f8582610d22565b5061114d6020840184611063565b61115a602086018261101a565b506111686040840184611073565b6111756040860182611083565b506111836060840184611073565b6111906060860182611083565b5061119e608084018461108f565b85830360808701526111b18382846110ec565b925050506111c260a084018461110c565b6111cf60a086018261111c565b509392505050565b6020808252810161033d8184611125565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610c9c816111e8565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e67204574686572000000000000000000000000000000006020820152905061123c565b60208082528101610c9c81611252565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610d80565b60208082528101610c9c816112ba565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c9c57610c9c6112fa565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f72616374000000000000000000000000000000000000000000000000000000006020820152905061123c565b60208082528101610c9c81611323565b604081016113998285610d31565b61033d602083018461101a565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610d80565b60208082528101610c9c816113a6565b6000610c9c826113f6565b90565b67ffffffffffffffff1690565b610d2b816113e8565b60208101610c9c8284611403565b6001600160a01b03918216919081169082820390811115610c9c57610c9c6112fa565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610d80565b60208082528101610c9c8161143d565b80820180821115610c9c57610c9c6112fa565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f21000000000000000000000000000000000000000000000000000000000000006020820152905061123c565b60208082528101610c9c81611492565b60006020828403121561150f5761150f600080fd5b61033d8383610f2c565b60008135610c9c81610e10565b60006001600160a01b03835b81169019929092169190911792915050565b6000610c9c82610d11565b6000610c9c82611544565b6115638261154f565b61156e818354611526565b8255505050565b60008135610c9c81611048565b60007bffffffffffffffff00000000000000000000000000000000000000006115328460a01b90565b6000610c9c67ffffffffffffffff83166113f6565b6115c9826115ab565b61156e818354611582565b60008135610c9c81610f20565b60007fffffffff000000000000000000000000000000000000000000000000000000006115328460e01b90565b600063ffffffff8216610c9c565b6116258261160e565b61156e8183546115e1565b600063ffffffff83611532565b6116468261160e565b61156e818354611630565b6000808335601e193685900301811261166c5761166c600080fd5b8301915050803567ffffffffffffffff81111561168b5761168b600080fd5b602082019150600181023603821315610f8257610f82600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806116e657607f821691505b602082108103610dab57610dab6116bc565b6000610c9c6113f38381565b61170d836116f8565b815460001960089490940293841b1916921b91909117905550565b60006108ca818484611704565b8181101561056057611748600082611728565b600101611735565b601f8211156108ca576000818152602090206020601f850104810160208510156117775750805b6117896020601f860104830182611735565b5050505050565b8267ffffffffffffffff8111156117a9576117a96116a6565b6117b382546116d2565b6117be828285611750565b506000601f8211600181146117f357600083156117db5750848201355b600019600885021c198116600285021785555061184d565b600084815260209020601f19841690835b828110156118245787850135825560209485019460019092019101611804565b5084821015611841576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108ca838383611790565b60008135610c9c81610f89565b600060ff8216610c9c565b6118818261186d565b815460ff191660ff82161761156e565b80828061189d81611519565b90506118a9818461155a565b505060208301806118b982611575565b90506118c581846115c0565b505060408301806118d5826115d4565b90506118e1818461161c565b50505060608201806118f2826115d4565b9050611901816001850161163d565b50506119106080830183611651565b61191e818360028601611855565b505060a082018061192e82611860565b905061193d8160038501611878565b50505050565b6105608282611891565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f73736167650000000000000000000000000000000000000000000000000000006020820152905061123c565b60208082528101610c9c8161194d565b60c081016119c3828a610d22565b6119d0602083018961101a565b6119dd6040830188611083565b6119ea6060830187611083565b81810360808301526119fd8185876110ec565b9050611a0c60a083018461111c565b98975050505050505050565b610d2b816116f8565b60208101610c9c8284611a18565b8051610c9c81610e2f565b600060208284031215611a4f57611a4f600080fd5b61033d8383611a2f565b67ffffffffffffffff918216919081169082820190811115610c9c57610c9c6112fa56fea26469706673582212201f500c1ed66462b882c75dccce6728c6e38010a1e90ea1306d187fe1d8d0d83b64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122008c491fc746109bf6d844f1a3820d634711f140a52c8d4923fc72a652b9ad03464736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051615ca7380380615ca783398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615c878339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615c87833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615c878339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615c878339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610e368061061183390190565b6107c68061144783390190565b611d0080611c0d83390190565b6110f08061390d83390190565b61128a806149fd83390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220d0f20e3983b2c5bc045b3377bc3dd8037b142c92b597228125d99bb762676d6764736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ba7806101596000396000f3fe6080604052600436106100cb5760003560e01c80638da5cb5b11610074578063ab53bddc1161004e578063ab53bddc146102b0578063b1454caa146102d0578063f2fde38b146102f05761013f565b80638da5cb5b1461022b5780639730886d1461027057806399a3ad21146102905761013f565b806336d2da90116100a557806336d2da90146101d6578063485cc955146101f6578063715018a6146102165761013f565b80630fcfbd111461016057806333a88c7214610196578063346633fb146101c35761013f565b3661013f576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101109033908390600401610e2b565b6000604051808303818588803b15801561012957600080fd5b505af115801561013d573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161015790610e7a565b60405180910390fd5b34801561016c57600080fd5b5061018061017b366004610ea5565b610310565b60405161018d9190610ee0565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004610ea5565b61036f565b60405161018d9190610ef6565b61013d6101d1366004610f34565b6103c1565b3480156101e257600080fd5b5061013d6101f1366004610f6c565b610510565b34801561020257600080fd5b5061013d610211366004610f8b565b61058f565b34801561022257600080fd5b5061013d6106fa565b34801561023757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018d9190610fba565b34801561027c57600080fd5b5061013d61028b366004610fc8565b61070e565b34801561029c57600080fd5b5061013d6102ab366004610f34565b61087a565b3480156102bc57600080fd5b5061013d6102cb366004610f34565b6108fa565b6102e36102de366004611091565b6109c3565b60405161018d919061111e565b3480156102fc57600080fd5b5061013d61030b366004610f6c565b610acb565b6000808260405160200161032491906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103685760405162461bcd60e51b815260040161015790611336565b9392505050565b6000808260405160200161038391906112cb565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906103b95750428111155b949350505050565b6000341180156103d057508034145b6103ec5760405162461bcd60e51b81526004016101579061139e565b60035434906001600160a01b0316156104b0576000610409610b22565b90508034101561042b5760405162461bcd60e51b8152600401610157906113de565b6104358134611404565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610487576040519150601f19603f3d011682016040523d82523d6000602084013e61048c565b606091505b50509050806104ad5760405162461bcd60e51b81526004016101579061146f565b50505b60006104bb33610bb3565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6848460405161050292919061147f565b60405180910390a350505050565b610518610c11565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610565576040519150601f19603f3d011682016040523d82523d6000602084013e61056a565b606091505b505090508061058b5760405162461bcd60e51b8152600401610157906114cc565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105da5750825b905060008267ffffffffffffffff1660011480156105f75750303b155b905081158015610605575080155b1561063c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561067057845468ff00000000000000001916680100000000000000001785555b61067987610c85565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106f157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106e890600190611500565b60405180910390a15b50505050505050565b610702610c11565b61070c6000610c96565b565b600061071b60013061150e565b905061074e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806107755750336001600160a01b038216145b6107915760405162461bcd60e51b815260040161015790611563565b600061079d8342611573565b90506000846040516020016107b291906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107f65760405162461bcd60e51b8152600401610157906115de565b60008181526020818152604082208490556001919061081790880188610f6c565b6001600160a01b03168152602081019190915260400160009081209061084360808801606089016115ee565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106f18282611a37565b610882610c11565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108cf576040519150601f19603f3d011682016040523d82523d6000602084013e6108d4565b606091505b50509050806108f55760405162461bcd60e51b8152600401610157906114cc565b505050565b600061090760013061150e565b905061093a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109615750336001600160a01b038216145b61097d5760405162461bcd60e51b815260040161015790611563565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3836040516109b69190610ee0565b60405180910390a2505050565b6003546000906001600160a01b031615610a74576109e083610d14565b3410156109ff5760405162461bcd60e51b815260040161015790611a99565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b5050905080610a725760405162461bcd60e51b81526004016101579061146f565b505b610a7d33610bb3565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610aba9796959493929190611aa9565b60405180910390a195945050505050565b610ad3610c11565b6001600160a01b038116610b165760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610b1f81610c96565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610b6d90602090600401611b15565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611b2e565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610be68385611b4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461070c57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610c8d610d96565b610b1f81610dfd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610d33601185611573565b6040518263ffffffff1660e01b8152600401610d4f9190610ee0565b602060405180830381865afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190611b2e565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad3610d96565b60006001600160a01b038216610d90565b610e1f81610e05565b82525050565b80610e1f565b60408101610e398285610e16565b6103686020830184610e25565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610d9081610e46565b600060c08284031215610e9f57610e9f600080fd5b50919050565b600060208284031215610eba57610eba600080fd5b813567ffffffffffffffff811115610ed457610ed4600080fd5b6103b984828501610e8a565b60208101610d908284610e25565b801515610e1f565b60208101610d908284610eee565b610f0d81610e05565b8114610b1f57600080fd5b8035610d9081610f04565b80610f0d565b8035610d9081610f23565b60008060408385031215610f4a57610f4a600080fd5b610f548484610f18565b9150610f638460208501610f29565b90509250929050565b600060208284031215610f8157610f81600080fd5b6103688383610f18565b60008060408385031215610fa157610fa1600080fd5b610fab8484610f18565b9150610f638460208501610f18565b60208101610d908284610e16565b60008060408385031215610fde57610fde600080fd5b823567ffffffffffffffff811115610ff857610ff8600080fd5b61100485828601610e8a565b925050610f638460208501610f29565b63ffffffff8116610f0d565b8035610d9081611014565b60008083601f84011261104057611040600080fd5b50813567ffffffffffffffff81111561105b5761105b600080fd5b60208301915083600182028301111561107657611076600080fd5b9250929050565b60ff8116610f0d565b8035610d908161107d565b6000806000806000608086880312156110ac576110ac600080fd5b6110b68787611020565b94506110c58760208801611020565b9350604086013567ffffffffffffffff8111156110e4576110e4600080fd5b6110f08882890161102b565b93509350506111028760608801611086565b90509295509295909350565b67ffffffffffffffff8116610e1f565b60208101610d90828461110e565b506000610d906020830183610f18565b67ffffffffffffffff8116610f0d565b8035610d908161113c565b506000610d90602083018361114c565b506000610d906020830183611020565b63ffffffff8116610e1f565b6000808335601e193685900301811261119e5761119e600080fd5b830160208101925035905067ffffffffffffffff8111156111c1576111c1600080fd5b3681900382131561107657611076600080fd5b82818337506000910152565b8183526020830192506111f48284836111d4565b50601f01601f19160190565b506000610d906020830183611086565b60ff8116610e1f565b600060c08301611229838061112c565b6112338582610e16565b506112416020840184611157565b61124e602086018261110e565b5061125c6040840184611167565b6112696040860182611177565b506112776060840184611167565b6112846060860182611177565b506112926080840184611183565b85830360808701526112a58382846111e0565b925050506112b660a0840184611200565b6112c360a0860182611210565b509392505050565b602080825281016103688184611219565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610d90816112dc565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611330565b60208082528101610d9081611346565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e74565b60208082528101610d90816113ae565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9057610d906113ee565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611417565b6040810161148d8285610e25565b610368602083018461110e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e74565b60208082528101610d908161149a565b6000610d90826114ea565b90565b67ffffffffffffffff1690565b610e1f816114dc565b60208101610d9082846114f7565b6001600160a01b03918216919081169082820390811115610d9057610d906113ee565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e74565b60208082528101610d9081611531565b80820180821115610d9057610d906113ee565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611586565b60006020828403121561160357611603600080fd5b6103688383611020565b60008135610d9081610f04565b60006001600160a01b03835b81169019929092169190911792915050565b6000610d9082610e05565b6000610d9082611638565b61165782611643565b61166281835461161a565b8255505050565b60008135610d908161113c565b60007bffffffffffffffff00000000000000000000000000000000000000006116268460a01b90565b6000610d9067ffffffffffffffff83166114ea565b6116bd8261169f565b611662818354611676565b60008135610d9081611014565b60007fffffffff000000000000000000000000000000000000000000000000000000006116268460e01b90565b600063ffffffff8216610d90565b61171982611702565b6116628183546116d5565b600063ffffffff83611626565b61173a82611702565b611662818354611724565b6000808335601e193685900301811261176057611760600080fd5b8301915050803567ffffffffffffffff81111561177f5761177f600080fd5b60208201915060018102360382131561107657611076600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117da57607f821691505b602082108103610e9f57610e9f6117b0565b6000610d906114e78381565b611801836117ec565b815460001960089490940293841b1916921b91909117905550565b60006108f58184846117f8565b8181101561058b5761183c60008261181c565b600101611829565b601f8211156108f5576000818152602090206020601f8501048101602085101561186b5750805b61187d6020601f860104830182611829565b5050505050565b8267ffffffffffffffff81111561189d5761189d61179a565b6118a782546117c6565b6118b2828285611844565b506000601f8211600181146118e757600083156118cf5750848201355b600019600885021c1981166002850217855550611941565b600084815260209020601f19841690835b8281101561191857878501358255602094850194600190920191016118f8565b5084821015611935576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108f5838383611884565b60008135610d908161107d565b600060ff8216610d90565b61197582611961565b815460ff191660ff821617611662565b8082806119918161160d565b905061199d818461164e565b505060208301806119ad82611669565b90506119b981846116b4565b505060408301806119c9826116c8565b90506119d58184611710565b50505060608201806119e6826116c8565b90506119f58160018501611731565b5050611a046080830183611745565b611a12818360028601611949565b505060a0820180611a2282611954565b9050611a31816003850161196c565b50505050565b61058b8282611985565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611a41565b60c08101611ab7828a610e16565b611ac4602083018961110e565b611ad16040830188611177565b611ade6060830187611177565b8181036080830152611af18185876111e0565b9050611b0060a0830184611210565b98975050505050505050565b610e1f816117ec565b60208101610d908284611b0c565b8051610d9081610f23565b600060208284031215611b4357611b43600080fd5b6103688383611b23565b67ffffffffffffffff918216919081169082820190811115610d9057610d906113ee56fea26469706673582212205827e6100538af9307eff1914e07e481a82d2ed05aab2e5cf52b967c89af264964736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122008c491fc746109bf6d844f1a3820d634711f140a52c8d4923fc72a652b9ad03464736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI 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 16dc0554c2..df17d005c7 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: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea26469706673582212200ee33806c6a1becffd861d8aa4e1007a6ba713eed1a34e62ce1d3002a7a4167e64736f6c634300081c0033", + Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220c7199b3ba419978fd56f66d77e752344d9012ad608ca77ab3db04c58eb0ad63664736f6c634300081c0033", } // WrappedERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/src/messaging/IMessageBus.sol b/contracts/src/messaging/IMessageBus.sol index 94b53cde98..c39fe45283 100644 --- a/contracts/src/messaging/IMessageBus.sol +++ b/contracts/src/messaging/IMessageBus.sol @@ -28,6 +28,11 @@ interface IMessageBus { uint64 sequence ); + event NativeDeposit( + address indexed receiver, + uint256 amount + ); + // This method is called from contracts to publish messages to the other linked message bus. // nonce - This is provided and serves as deduplication nonce. It can also be used to group a batch of messages together. // topic - This is the topic for which the payload is published. diff --git a/contracts/src/messaging/MessageBus.sol b/contracts/src/messaging/MessageBus.sol index 1ed5c87609..c9231e45b2 100644 --- a/contracts/src/messaging/MessageBus.sol +++ b/contracts/src/messaging/MessageBus.sol @@ -169,6 +169,13 @@ contract MessageBus is IMessageBus, Initializable, OwnableUpgradeable { ); } + function notifyDeposit( + address receiver, + uint256 amount + ) external ownerOrSelf { + emit NativeDeposit(receiver, amount); + } + function retrieveAllFunds( address receiver ) external onlyOwner { diff --git a/go/enclave/components/batch_executor.go b/go/enclave/components/batch_executor.go index 050720f578..b894fc4636 100644 --- a/go/enclave/components/batch_executor.go +++ b/go/enclave/components/batch_executor.go @@ -190,7 +190,7 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE messages, transfers = executor.crossChainProcessors.Local.RetrieveInboundMessages(ctx, parentBlock, block, stateDB) } - crossChainTransactions := executor.crossChainProcessors.Local.CreateSyntheticTransactions(ctx, messages, stateDB) + crossChainTransactions := executor.crossChainProcessors.Local.CreateSyntheticTransactions(ctx, messages, transfers, stateDB) executor.crossChainProcessors.Local.ExecuteValueTransfers(ctx, transfers, stateDB) transactionsToProcess, freeTransactions := executor.filterTransactionsWithSufficientFunds(ctx, stateDB, context) diff --git a/go/enclave/crosschain/interfaces.go b/go/enclave/crosschain/interfaces.go index cf161ddee4..4c54322049 100644 --- a/go/enclave/crosschain/interfaces.go +++ b/go/enclave/crosschain/interfaces.go @@ -51,7 +51,7 @@ type Manager interface { ExtractOutboundTransfers(ctx context.Context, receipts common.L2Receipts) (common.ValueTransferEvents, error) - CreateSyntheticTransactions(ctx context.Context, messages common.CrossChainMessages, rollupState *state.StateDB) common.L2Transactions + CreateSyntheticTransactions(ctx context.Context, messages common.CrossChainMessages, transfers common.ValueTransferEvents, rollupState *state.StateDB) common.L2Transactions ExecuteValueTransfers(ctx context.Context, transfers common.ValueTransferEvents, rollupState *state.StateDB) diff --git a/go/enclave/crosschain/message_bus_manager.go b/go/enclave/crosschain/message_bus_manager.go index cdf9b5ec99..2b78066a04 100644 --- a/go/enclave/crosschain/message_bus_manager.go +++ b/go/enclave/crosschain/message_bus_manager.go @@ -210,7 +210,7 @@ func (m *MessageBusManager) ExecuteValueTransfers(ctx context.Context, transfers } // CreateSyntheticTransactions - generates transactions that the enclave should execute internally for the messages. -func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, messages common.CrossChainMessages, rollupState *state.StateDB) common.L2Transactions { +func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, messages common.CrossChainMessages, transfers common.ValueTransferEvents, rollupState *state.StateDB) common.L2Transactions { if len(messages) == 0 { return make(common.L2Transactions, 0) } @@ -251,5 +251,23 @@ func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, mes signedTransactions = append(signedTransactions, stx) } + startingNonce += uint64(len(messages)) + + for idx, transfer := range transfers { + data, err := MessageBusABI.Pack("notifyDeposit", transfer.Receiver, transfer.Amount) + if err != nil { + m.logger.Crit("Failed packing notifyDeposit message!") + return signedTransactions + } + + tx := &types.LegacyTx{ + Nonce: startingNonce + uint64(idx), + Value: transfer.Amount, + Data: data, + To: m.messageBusAddress, + } + signedTransactions = append(signedTransactions, types.NewTx(tx)) + } + return signedTransactions } From cf420de20b93ecd5d8513f48fe333b3f5ccf508b Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 4 Dec 2024 18:12:32 +0200 Subject: [PATCH 4/7] Changed the queueMessage function. --- contracts/generated/EthereumBridge/EthereumBridge.go | 2 +- contracts/generated/ObscuroBridge/ObscuroBridge.go | 2 +- contracts/src/bridge/L1/ObscuroBridge.sol | 3 ++- contracts/src/bridge/L2/EthereumBridge.sol | 2 +- .../src/messaging/messenger/CrossChainEnabledObscuro.sol | 5 +++-- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/contracts/generated/EthereumBridge/EthereumBridge.go b/contracts/generated/EthereumBridge/EthereumBridge.go index b6d8fe96b0..29789ec2cc 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\":\"payable\",\"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: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b5061284c8061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610264576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610c14565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610c5e565b3480156100fe57600080fd5b5061012861010d366004610ca1565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610cd6565b60405180910390f35b61015161014c366004610ca1565b6102a7565b005b34801561015f57600080fd5b5061015161016e366004610d36565b610349565b34801561017f57600080fd5b5061015161018e366004610dc3565b6104a3565b34801561019f57600080fd5b506101516101ae366004610ca1565b61060e565b3480156101bf57600080fd5b506101516101ce366004610e0c565b6106e9565b3480156101df57600080fd5b5061020e6101ee366004610ca1565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610e5d565b34801561022757600080fd5b50610128610236366004610ca1565b6003602052600090815260409020546001600160a01b031681565b61015161025f366004610e0c565b61081e565b34801561027057600080fd5b5061029a61027f366004610ca1565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610e8a565b600034116102c75760405162461bcd60e51b81526004016100d190610eca565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103149085908390600401610ee0565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b505050505050565b6005546000546001600160a01b039182169116331461037a5760405162461bcd60e51b81526004016100d190610f53565b806001600160a01b031661038c6109ba565b6001600160a01b0316146103b25760405162461bcd60e51b81526004016100d190610fbb565b6000858585856040516103c490610bad565b6103d19493929190610ff7565b604051809103906000f0801580156103ed573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610491908a9084908b908b908b908b90611028565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104ee5750825b905060008267ffffffffffffffff16600114801561050b5750303b155b905081158015610519575080155b15610550576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561058457845468ff00000000000000001916680100000000000000001785555b61058d8761060e565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561060557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105fc90600190611092565b60405180910390a15b50505050505050565b610616610a37565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b991906110ab565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b039182169116331461071a5760405162461bcd60e51b81526004016100d190610f53565b806001600160a01b031661072c6109ba565b6001600160a01b0316146107525760405162461bcd60e51b81526004016100d190610fbb565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061079d5760405162461bcd60e51b81526004016100d190611122565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906107e49087908990600401610ee0565b600060405180830381600087803b1580156107fe57600080fd5b505af1158015610812573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166108555760405162461bcd60e51b81526004016100d190611164565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906108b19033908790600401610ee0565b600060405180830381600087803b1580156108cb57600080fd5b505af11580156108df573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193507f83bece4d00000000000000000000000000000000000000000000000000000000926109379291169087908790602401611174565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526005549091506109b3906001600160a01b03168260008080610aa0565b5050505050565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3291906110ab565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610a9e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610ad69190611243565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610b2a83611283565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610b6a94939291906112bb565b60206040518083038185885af1158015610b88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610605919061131b565b6114dc8061133b83390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610c2481610bba565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610c2481610c2a565b60006001600160a01b038216610c24565b610c8881610c6e565b8114610c9357600080fd5b50565b8035610c2481610c7f565b600060208284031215610cb657610cb6600080fd5b610cc08383610c96565b9392505050565b610cd081610c6e565b82525050565b60208101610c248284610cc7565b60008083601f840112610cf957610cf9600080fd5b50813567ffffffffffffffff811115610d1457610d14600080fd5b602083019150836001820283011115610d2f57610d2f600080fd5b9250929050565b600080600080600060608688031215610d5157610d51600080fd5b610d5b8787610c96565b9450602086013567ffffffffffffffff811115610d7a57610d7a600080fd5b610d8688828901610ce4565b9450945050604086013567ffffffffffffffff811115610da857610da8600080fd5b610db488828901610ce4565b92509250509295509295909350565b60008060408385031215610dd957610dd9600080fd5b610de38484610c96565b9150610df28460208501610c96565b90509250929050565b80610c88565b8035610c2481610dfb565b600080600060608486031215610e2457610e24600080fd5b610e2e8585610c96565b9250610e3d8560208601610e01565b9150610e4c8560408601610c96565b90509250925092565b801515610cd0565b60208101610c248284610e55565b6000610c2482610c6e565b6000610c2482610e6b565b610cd081610e76565b60208101610c248284610e81565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610c58565b60208082528101610c2481610e98565b80610cd0565b60408101610eee8285610cc7565b610cc06020830184610eda565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610c0e565b60208082528101610c2481610efb565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610c0e565b60208082528101610c2481610f63565b82818337506000910152565b818352602083019250610feb828483610fcb565b50601f01601f19160190565b60408082528101611009818688610fd7565b9050818103602083015261101e818486610fd7565b9695505050505050565b608081016110368289610cc7565b6110436020830188610cc7565b8181036040830152611056818688610fd7565b9050818103606083015261106b818486610fd7565b98975050505050505050565b600067ffffffffffffffff8216610c24565b610cd081611077565b60208101610c248284611089565b8051610c2481610c7f565b6000602082840312156110c0576110c0600080fd5b610cc083836110a0565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610c0e565b60208082528101610c24816110ca565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610c58565b60208082528101610c2481611132565b606081016111828286610cc7565b61118f6020830185610eda565b61119c6040830184610cc7565b949350505050565b60005b838110156111bf5781810151838201526020016111a7565b50506000910152565b60006111d2825190565b8084526020840193506111e98185602086016111a4565b601f01601f19169290920192915050565b8051600090606084019061120e8582610cc7565b506020830151848203602086015261122682826111c8565b915050604083015161123b6040860182610eda565b509392505050565b60208082528101610cc081846111fa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820161129f5761129f611254565b5060010190565b63ffffffff8116610cd0565b60ff8116610cd0565b608081016112c982876112a6565b6112d660208301866112a6565b81810360408301526112e881856111c8565b90506112f760608301846112b2565b95945050505050565b67ffffffffffffffff8116610c88565b8051610c2481611300565b60006020828403121561133057611330600080fd5b610cc0838361131056fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220c7199b3ba419978fd56f66d77e752344d9012ad608ca77ab3db04c58eb0ad63664736f6c634300081c0033a26469706673582212208a0569c77ec5b0fcde4b1673076bdb764bd39e86b5b7f9d296851f17cec4dc5964736f6c634300081c0033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b506128578061002f6000396000f3fe6080604052600436106100b45760003560e01c806383bece4d116100695780639e405b711161004e5780639e405b711461021b578063a381c8e214610251578063d5c6b50414610264576100da565b806383bece4d146101b35780639813c7b2146101d3576100da565b8063458ffd631161009a578063458ffd6314610153578063485cc9551461017357806375cb267214610193576100da565b80628d48e3146100f25780631888d7121461013e576100da565b366100da5760405162461bcd60e51b81526004016100d190610c1f565b60405180910390fd5b60405162461bcd60e51b81526004016100d190610c69565b3480156100fe57600080fd5b5061012861010d366004610cac565b6004602052600090815260409020546001600160a01b031681565b6040516101359190610ce1565b60405180910390f35b61015161014c366004610cac565b6102a7565b005b34801561015f57600080fd5b5061015161016e366004610d41565b610349565b34801561017f57600080fd5b5061015161018e366004610dce565b6104a3565b34801561019f57600080fd5b506101516101ae366004610cac565b61060e565b3480156101bf57600080fd5b506101516101ce366004610e17565b6106e9565b3480156101df57600080fd5b5061020e6101ee366004610cac565b6001600160a01b0390811660009081526002602052604090205416151590565b6040516101359190610e68565b34801561022757600080fd5b50610128610236366004610cac565b6003602052600090815260409020546001600160a01b031681565b61015161025f366004610e17565b61081e565b34801561027057600080fd5b5061029a61027f366004610cac565b6002602052600090815260409020546001600160a01b031681565b6040516101359190610e95565b600034116102c75760405162461bcd60e51b81526004016100d190610ed5565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906103149085908390600401610eeb565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b505050505050565b6005546000546001600160a01b039182169116331461037a5760405162461bcd60e51b81526004016100d190610f5e565b806001600160a01b031661038c6109bb565b6001600160a01b0316146103b25760405162461bcd60e51b81526004016100d190610fc6565b6000858585856040516103c490610bb8565b6103d19493929190611002565b604051809103906000f0801580156103ed573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610491908a9084908b908b908b908b90611033565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104ee5750825b905060008267ffffffffffffffff16600114801561050b5750303b155b905081158015610519575080155b15610550576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561058457845468ff00000000000000001916680100000000000000001785555b61058d8761060e565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561060557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105fc9060019061109d565b60405180910390a15b50505050505050565b610616610a38565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b991906110b6565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b039182169116331461071a5760405162461bcd60e51b81526004016100d190610f5e565b806001600160a01b031661072c6109bb565b6001600160a01b0316146107525760405162461bcd60e51b81526004016100d190610fc6565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168061079d5760405162461bcd60e51b81526004016100d19061112d565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad906107e49087908990600401610eeb565b600060405180830381600087803b1580156107fe57600080fd5b505af1158015610812573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260026020526040902054166108555760405162461bcd60e51b81526004016100d19061116f565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906108b19033908790600401610eeb565b600060405180830381600087803b1580156108cb57600080fd5b505af11580156108df573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193507f83bece4d0000000000000000000000000000000000000000000000000000000092610937929116908790879060240161117f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526005549091506109b4906001600160a01b0316826000808034610aa1565b5050505050565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3391906110b6565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610a9f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006040518060600160405280886001600160a01b0316815260200187815260200185815250604051602001610ad7919061124e565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91859174010000000000000000000000000000000000000000900463ffffffff16906014610b2b8361128e565b91906101000a81548163ffffffff021916908363ffffffff1602179055508885886040518663ffffffff1660e01b8152600401610b6b94939291906112c6565b60206040518083038185885af1158015610b89573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610bae9190611326565b5050505050505050565b6114dc8061134683390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610c2f81610bc5565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b60208082528101610c2f81610c35565b60006001600160a01b038216610c2f565b610c9381610c79565b8114610c9e57600080fd5b50565b8035610c2f81610c8a565b600060208284031215610cc157610cc1600080fd5b610ccb8383610ca1565b9392505050565b610cdb81610c79565b82525050565b60208101610c2f8284610cd2565b60008083601f840112610d0457610d04600080fd5b50813567ffffffffffffffff811115610d1f57610d1f600080fd5b602083019150836001820283011115610d3a57610d3a600080fd5b9250929050565b600080600080600060608688031215610d5c57610d5c600080fd5b610d668787610ca1565b9450602086013567ffffffffffffffff811115610d8557610d85600080fd5b610d9188828901610cef565b9450945050604086013567ffffffffffffffff811115610db357610db3600080fd5b610dbf88828901610cef565b92509250509295509295909350565b60008060408385031215610de457610de4600080fd5b610dee8484610ca1565b9150610dfd8460208501610ca1565b90509250929050565b80610c93565b8035610c2f81610e06565b600080600060608486031215610e2f57610e2f600080fd5b610e398585610ca1565b9250610e488560208601610e0c565b9150610e578560408601610ca1565b90509250925092565b801515610cdb565b60208101610c2f8284610e60565b6000610c2f82610c79565b6000610c2f82610e76565b610cdb81610e81565b60208101610c2f8284610e8c565b600d8152602081017f4e6f7468696e672073656e742e0000000000000000000000000000000000000081529050610c63565b60208082528101610c2f81610ea3565b80610cdb565b60408101610ef98285610cd2565b610ccb6020830184610ee5565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050610c19565b60208082528101610c2f81610f06565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050610c19565b60208082528101610c2f81610f6e565b82818337506000910152565b818352602083019250610ff6828483610fd6565b50601f01601f19160190565b60408082528101611014818688610fe2565b90508181036020830152611029818486610fe2565b9695505050505050565b608081016110418289610cd2565b61104e6020830188610cd2565b8181036040830152611061818688610fe2565b90508181036060830152611076818486610fe2565b98975050505050505050565b600067ffffffffffffffff8216610c2f565b610cdb81611082565b60208101610c2f8284611094565b8051610c2f81610c8a565b6000602082840312156110cb576110cb600080fd5b610ccb83836110ab565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e2100000000000000000000000000000000000000000060208201529050610c19565b60208082528101610c2f816110d5565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e000000000000000000000081529050610c63565b60208082528101610c2f8161113d565b6060810161118d8286610cd2565b61119a6020830185610ee5565b6111a76040830184610cd2565b949350505050565b60005b838110156111ca5781810151838201526020016111b2565b50506000910152565b60006111dd825190565b8084526020840193506111f48185602086016111af565b601f01601f19169290920192915050565b805160009060608401906112198582610cd2565b506020830151848203602086015261123182826111d3565b91505060408301516112466040860182610ee5565b509392505050565b60208082528101610ccb8184611205565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016112aa576112aa61125f565b5060010190565b63ffffffff8116610cdb565b60ff8116610cdb565b608081016112d482876112b1565b6112e160208301866112b1565b81810360408301526112f381856111d3565b905061130260608301846112bd565b95945050505050565b67ffffffffffffffff8116610c93565b8051610c2f8161130b565b60006020828403121561133b5761133b600080fd5b610ccb838361131b56fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f317905534801561003657600080fd5b506040516114dc3803806114dc83398101604081905261005591610276565b81818181600361006583826103ce565b50600461007282826103ce565b50505050506100a77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100af60201b60201c565b50505061048d565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166101555760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561010d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610159565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561019a5761019a61015f565b6040525050565b60006101ac60405190565b90506101b88282610175565b919050565b60006001600160401b038211156101d6576101d661015f565b601f19601f83011660200192915050565b60005b838110156102025781810151838201526020016101ea565b50506000910152565b600061021e610219846101bd565b6101a1565b905082815283838301111561023557610235600080fd5b6102438360208301846101e7565b9392505050565b600082601f83011261025e5761025e600080fd5b815161026e84826020860161020b565b949350505050565b6000806040838503121561028c5761028c600080fd5b82516001600160401b038111156102a5576102a5600080fd5b6102b18582860161024a565b602085015190935090506001600160401b038111156102d2576102d2600080fd5b6102de8582860161024a565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061031257607f821691505b602082108103610324576103246102e8565b50919050565b60006101596103368381565b90565b6103428361032a565b815460001960089490940293841b1916921b91909117905550565b600061036a818484610339565b505050565b8181101561038a5761038260008261035d565b60010161036f565b5050565b601f82111561036a576000818152602090206020601f850104810160208510156103b55750805b6103c76020601f86010483018261036f565b5050505050565b81516001600160401b038111156103e7576103e761015f565b6103f182546102fe565b6103fc82828561038e565b506020601f82116001811461043157600083156104195750848201515b600019600885021c19811660028502178555506103c7565b600084815260208120601f198516915b828110156104615787850151825560209485019460019092019101610441565b508482101561047e5783870151600019601f87166008021c191681555b50505050600202600101905550565b6110408061049c6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c72565b60405180910390f35b6101876103a0565b6040516101769190610cd6565b6101696101a2366004610d1d565b610432565b6002545b6040516101769190610d5b565b6101cb6101c6366004610d1d565b61044a565b005b6101696101db366004610d69565b6104b4565b6101ab6101ee366004610db2565b60009081526007602052604090206001015490565b6101cb610211366004610dd1565b6104da565b60126040516101769190610e09565b6101cb610233366004610dd1565b610505565b6101ab610246366004610e17565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610dd1565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d1d565b6105d6565b6101ab600081565b6101696102dc366004610d1d565b61060a565b6101cb6102ef366004610dd1565b610618565b6101ab610302366004610e36565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e6c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e6c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610ecc565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f0e565b6060600480546103af90610e6c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f1e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610f88565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610f88565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610f88565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610f88565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610f88565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d5b565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fc6565b6001600160a01b038316610b0c578060026000828254610b019190610ff7565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610f96565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d5b565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6104d38383610c3e565b8015155b82525050565b6020810161039a8284610c68565b60005b83811015610c9b578181015183820152602001610c83565b50506000910152565b6000610cae825190565b808452602084019350610cc5818560208601610c80565b601f01601f19169290920192915050565b602080825281016104d38184610ca4565b60006001600160a01b03821661039a565b610c3381610ce7565b803561039a81610cf8565b80610c33565b803561039a81610d0c565b60008060408385031215610d3357610d33600080fd5b610d3d8484610d01565b9150610d4c8460208501610d12565b90509250929050565b80610c6c565b6020810161039a8284610d55565b600080600060608486031215610d8157610d81600080fd5b610d8b8585610d01565b9250610d9a8560208601610d01565b9150610da98560408601610d12565b90509250925092565b600060208284031215610dc757610dc7600080fd5b6104d38383610d12565b60008060408385031215610de757610de7600080fd5b610df18484610d12565b9150610d4c8460208501610d01565b60ff8116610c6c565b6020810161039a8284610e00565b600060208284031215610e2c57610e2c600080fd5b6104d38383610d01565b60008060408385031215610e4c57610e4c600080fd5b610df18484610d01565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610e8057607f821691505b602082108103610e9257610e92610e56565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610e98565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ec6565b6020808252810161039a81610edc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c6c81610ce7565b6020810161039a8284610f7f565b60608101610fa48286610f7f565b610fb16020830185610d55565b610fbe6040830184610d55565b949350505050565b60408101610fd48285610f7f565b6104d36020830184610d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610fe156fea2646970667358221220c7199b3ba419978fd56f66d77e752344d9012ad608ca77ab3db04c58eb0ad63664736f6c634300081c0033a2646970667358221220930b3746d4760c211a167a698d3d56b9c4a1707b14f75e9b8a8debf6fc1bbbc964736f6c634300081c0033", } // EthereumBridgeABI 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 3fd24eb155..ed6e25f073 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\":\"payable\",\"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: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611adc8061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103a7578063d547741f146103c7578063e4c3ebc7146103e757600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b506101696101643660046112c0565b61041b565b60405161017691906112e9565b60405180910390f35b34801561018b57600080fd5b5061019f61019a36600461131c565b610484565b005b61019f6101af36600461131c565b6104de565b3480156101c057600080fd5b506101e46101cf36600461134c565b60009081526002602052604090206001015490565b6040516101769190611371565b3480156101fd57600080fd5b5061019f61020c36600461137f565b610589565b34801561021d57600080fd5b5061019f61022c36600461137f565b6105b4565b34801561023d57600080fd5b5061019f61024c366004611409565b610605565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a036600461131c565b6106d7565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f436600461131c565b61072b565b34801561030557600080fd5b5061019f610314366004611496565b610806565b34801561032557600080fd5b5061016961033436600461137f565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a36600461131c565b610920565b34801561038b57600080fd5b506101e4600081565b61019f6103a2366004611496565b610974565b3480156103b357600080fd5b5061019f6103c236600461131c565b610a63565b3480156103d357600080fd5b5061019f6103e236600461137f565b610bfb565b3480156103f357600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061047e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104ae81610c20565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105075760405162461bcd60e51b81526004016104fe90611513565b60405180910390fd5b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb903490610554908590839060040161152c565b6000604051808303818588803b15801561056d57600080fd5b505af1158015610581573d6000803e3d6000fd5b505050505050565b6000828152600260205260409020600101546105a481610c20565b6105ae8383610c2d565b50505050565b6001600160a01b03811633146105f6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106008282610cdb565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561062f81610c20565b6106597f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610c2d565b50600063458ffd6360e01b878787878760405160240161067d959493929190611573565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506106ce906001600160a01b03168260015b600080610d62565b50505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561070181610c20565b6106007f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610cdb565b610733610e6f565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d691906115bf565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108375760405162461bcd60e51b81526004016104fe90611638565b806001600160a01b0316610849610ed8565b6001600160a01b03161461086f5760405162461bcd60e51b81526004016104fe906116a0565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16156108bf576108ba848484610f55565b6105ae565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff1615610908576108ba82610f60565b60405162461bcd60e51b81526004016104fe90611708565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561094a81610c20565b6106007fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610c2d565b600082116109945760405162461bcd60e51b81526004016104fe9061174a565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff166109eb5760405162461bcd60e51b81526004016104fe9061175a565b6109f783333085610fd2565b60006383bece4d60e01b848484604051602401610a16939291906117e1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ae906001600160a01b03168260006106c6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610aae5750825b905060008267ffffffffffffffff166001148015610acb5750303b155b905081158015610ad9575080155b15610b10576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b4457845468ff00000000000000001916680100000000000000001785555b610b4d8661072b565b610b777fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610c2d565b50610ba37fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610c2d565b50831561058157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610beb9060019061182c565b60405180910390a1505050505050565b600082815260026020526040902060010154610c1681610c20565b6105ae8383610cdb565b610c2a813361102c565b50565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610cd35760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610c8b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161047e565b50600061047e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610cd35760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161047e565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610d9891906118d9565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91349174010000000000000000000000000000000000000000900463ffffffff16906014610dec83611919565b91906101000a81548163ffffffff021916908363ffffffff1602179055508785876040518663ffffffff1660e01b8152600401610e2c9493929190611951565b60206040518083038185885af1158015610e4a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106ce91906119b1565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610ed6576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5091906115bf565b905090565b61060083828461108c565b6040516000906001600160a01b038316908281818181865af19150503d8060008114610fa8576040519150601f19603f3d011682016040523d82523d6000602084013e610fad565b606091505b5050905080610fce5760405162461bcd60e51b81526004016104fe90611a02565b5050565b6105ae84856001600160a01b03166323b872dd868686604051602401610ffa93929190611a12565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506110b2565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff16610fce5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016104fe92919061152c565b61060083846001600160a01b031663a9059cbb8585604051602401610ffa92919061152c565b60006110c76001600160a01b03841683611125565b905080516000141580156110ec5750808060200190518101906110ea9190611a4d565b155b1561060057826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016104fe9190611a6c565b60606111338383600061113a565b9392505050565b60608147101561117857306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016104fe9190611a6c565b600080856001600160a01b031684866040516111949190611a9c565b60006040518083038185875af1925050503d80600081146111d1576040519150601f19603f3d011682016040523d82523d6000602084013e6111d6565b606091505b50915091506111e68683836111f0565b9695505050505050565b606082611205576112008261125c565b611133565b815115801561121c57506001600160a01b0384163b155b1561125557836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016104fe9190611a6c565b5080611133565b80511561126c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c2a57600080fd5b803561047e8161129e565b6000602082840312156112d5576112d5600080fd5b61113383836112b5565b8015155b82525050565b6020810161047e82846112df565b60006001600160a01b03821661047e565b6112aa816112f7565b803561047e81611308565b60006020828403121561133157611331600080fd5b6111338383611311565b806112aa565b803561047e8161133b565b60006020828403121561136157611361600080fd5b6111338383611341565b806112e3565b6020810161047e828461136b565b6000806040838503121561139557611395600080fd5b61139f8484611341565b91506113ae8460208501611311565b90509250929050565b60008083601f8401126113cc576113cc600080fd5b50813567ffffffffffffffff8111156113e7576113e7600080fd5b60208301915083600182028301111561140257611402600080fd5b9250929050565b60008060008060006060868803121561142457611424600080fd5b61142e8787611311565b9450602086013567ffffffffffffffff81111561144d5761144d600080fd5b611459888289016113b7565b9450945050604086013567ffffffffffffffff81111561147b5761147b600080fd5b611487888289016113b7565b92509250509295509295909350565b6000806000606084860312156114ae576114ae600080fd5b6114b88585611311565b92506114c78560208601611341565b91506114d68560408601611311565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161047e816114df565b6112e3816112f7565b6040810161153a8285611523565b611133602083018461136b565b82818337506000910152565b818352602083019250611567828483611547565b50601f01601f19160190565b606081016115818288611523565b8181036020830152611594818688611553565b905081810360408301526115a9818486611553565b979650505050505050565b805161047e81611308565b6000602082840312156115d4576115d4600080fd5b61113383836115b4565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161047e816115de565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050611632565b6020808252810161047e81611648565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e00000000000000000000000000000000000000000000000000000060208201529050611632565b6020808252810161047e816116b0565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061150d565b6020808252810161047e81611718565b6020808252810161047e81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b606081016117ef8286611523565b6117fc602083018561136b565b6118096040830184611523565b949350505050565b600067ffffffffffffffff821661047e565b6112e381611811565b6020810161047e8284611823565b60005b8381101561185557818101518382015260200161183d565b50506000910152565b6000611868825190565b80845260208401935061187f81856020860161183a565b601f01601f19169290920192915050565b805160009060608401906118a48582611523565b50602083015184820360208601526118bc828261185e565b91505060408301516118d1604086018261136b565b509392505050565b602080825281016111338184611890565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe198201611935576119356118ea565b5060010190565b63ffffffff81166112e3565b60ff81166112e3565b6080810161195f828761193c565b61196c602083018661193c565b818103604083015261197e818561185e565b905061198d6060830184611948565b95945050505050565b67ffffffffffffffff81166112aa565b805161047e81611996565b6000602082840312156119c6576119c6600080fd5b61113383836119a6565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061150d565b6020808252810161047e816119d0565b60608101611a208286611523565b611a2d6020830185611523565b611809604083018461136b565b8015156112aa565b805161047e81611a3a565b600060208284031215611a6257611a62600080fd5b6111338383611a42565b6020810161047e8284611523565b6000611a84825190565b611a9281856020860161183a565b9290920192915050565b61047e8183611a7a56fea264697066735822122043f380152e610ecd164d67529af020f07a61a6291b1d7decda00ebbb4055e62564736f6c634300081c0033", + Bin: "0x60806040526001805463ffffffff60a01b19169055348015601f57600080fd5b50611ae88061002f6000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103a7578063d547741f146103c7578063e4c3ebc7146103e757600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b506101696101643660046112cc565b61041b565b60405161017691906112f5565b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004611328565b610484565b005b61019f6101af366004611328565b6104de565b3480156101c057600080fd5b506101e46101cf366004611358565b60009081526002602052604090206001015490565b604051610176919061137d565b3480156101fd57600080fd5b5061019f61020c36600461138b565b610589565b34801561021d57600080fd5b5061019f61022c36600461138b565b6105b4565b34801561023d57600080fd5b5061019f61024c366004611415565b610605565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a0366004611328565b6106d9565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f4366004611328565b61072d565b34801561030557600080fd5b5061019f6103143660046114a2565b610808565b34801561032557600080fd5b5061016961033436600461138b565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a366004611328565b610922565b34801561038b57600080fd5b506101e4600081565b61019f6103a23660046114a2565b610976565b3480156103b357600080fd5b5061019f6103c2366004611328565b610a65565b3480156103d357600080fd5b5061019f6103e236600461138b565b610bfd565b3480156103f357600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061047e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104ae81610c22565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105075760405162461bcd60e51b81526004016104fe9061151f565b60405180910390fd5b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105549085908390600401611538565b6000604051808303818588803b15801561056d57600080fd5b505af1158015610581573d6000803e3d6000fd5b505050505050565b6000828152600260205260409020600101546105a481610c22565b6105ae8383610c2f565b50505050565b6001600160a01b03811633146105f6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106008282610cdd565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561062f81610c22565b6106597f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610c2f565b50600063458ffd6360e01b878787878760405160240161067d95949392919061157f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506106d0906001600160a01b03168260015b6000806000610d64565b50505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561070381610c22565b6106007f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610cdd565b610735610e7b565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa1580156107b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d891906115cb565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108395760405162461bcd60e51b81526004016104fe90611644565b806001600160a01b031661084b610ee4565b6001600160a01b0316146108715760405162461bcd60e51b81526004016104fe906116ac565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16156108c1576108bc848484610f61565b6105ae565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff161561090a576108bc82610f6c565b60405162461bcd60e51b81526004016104fe90611714565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561094c81610c22565b6106007fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610c2f565b600082116109965760405162461bcd60e51b81526004016104fe90611756565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff166109ed5760405162461bcd60e51b81526004016104fe90611766565b6109f983333085610fde565b60006383bece4d60e01b848484604051602401610a18939291906117ed565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ae906001600160a01b03168260006106c6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610ab05750825b905060008267ffffffffffffffff166001148015610acd5750303b155b905081158015610adb575080155b15610b12576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b4657845468ff00000000000000001916680100000000000000001785555b610b4f8661072d565b610b797fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610c2f565b50610ba57fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610c2f565b50831561058157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610bed90600190611838565b60405180910390a1505050505050565b600082815260026020526040902060010154610c1881610c22565b6105ae8383610cdd565b610c2c8133611038565b50565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610cd55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610c8d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161047e565b50600061047e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610cd55760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161047e565b60006040518060600160405280886001600160a01b0316815260200187815260200185815250604051602001610d9a91906118e5565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa91859174010000000000000000000000000000000000000000900463ffffffff16906014610dee83611925565b91906101000a81548163ffffffff021916908363ffffffff1602179055508885886040518663ffffffff1660e01b8152600401610e2e949392919061195d565b60206040518083038185885af1158015610e4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7191906119bd565b5050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610ee2576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c91906115cb565b905090565b610600838284611098565b6040516000906001600160a01b038316908281818181865af19150503d8060008114610fb4576040519150601f19603f3d011682016040523d82523d6000602084013e610fb9565b606091505b5050905080610fda5760405162461bcd60e51b81526004016104fe90611a0e565b5050565b6105ae84856001600160a01b03166323b872dd86868660405160240161100693929190611a1e565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506110be565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff16610fda5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016104fe929190611538565b61060083846001600160a01b031663a9059cbb8585604051602401611006929190611538565b60006110d36001600160a01b03841683611131565b905080516000141580156110f85750808060200190518101906110f69190611a59565b155b1561060057826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016104fe9190611a78565b606061113f83836000611146565b9392505050565b60608147101561118457306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016104fe9190611a78565b600080856001600160a01b031684866040516111a09190611aa8565b60006040518083038185875af1925050503d80600081146111dd576040519150601f19603f3d011682016040523d82523d6000602084013e6111e2565b606091505b50915091506111f28683836111fc565b9695505050505050565b6060826112115761120c82611268565b61113f565b815115801561122857506001600160a01b0384163b155b1561126157836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016104fe9190611a78565b508061113f565b8051156112785780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c2c57600080fd5b803561047e816112aa565b6000602082840312156112e1576112e1600080fd5b61113f83836112c1565b8015155b82525050565b6020810161047e82846112eb565b60006001600160a01b03821661047e565b6112b681611303565b803561047e81611314565b60006020828403121561133d5761133d600080fd5b61113f838361131d565b806112b6565b803561047e81611347565b60006020828403121561136d5761136d600080fd5b61113f838361134d565b806112ef565b6020810161047e8284611377565b600080604083850312156113a1576113a1600080fd5b6113ab848461134d565b91506113ba846020850161131d565b90509250929050565b60008083601f8401126113d8576113d8600080fd5b50813567ffffffffffffffff8111156113f3576113f3600080fd5b60208301915083600182028301111561140e5761140e600080fd5b9250929050565b60008060008060006060868803121561143057611430600080fd5b61143a878761131d565b9450602086013567ffffffffffffffff81111561145957611459600080fd5b611465888289016113c3565b9450945050604086013567ffffffffffffffff81111561148757611487600080fd5b611493888289016113c3565b92509250509295509295909350565b6000806000606084860312156114ba576114ba600080fd5b6114c4858561131d565b92506114d3856020860161134d565b91506114e2856040860161131d565b90509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161047e816114eb565b6112ef81611303565b60408101611546828561152f565b61113f6020830184611377565b82818337506000910152565b818352602083019250611573828483611553565b50601f01601f19160190565b6060810161158d828861152f565b81810360208301526115a081868861155f565b905081810360408301526115b581848661155f565b979650505050505050565b805161047e81611314565b6000602082840312156115e0576115e0600080fd5b61113f83836115c0565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161047e816115ea565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e646572210000000000000000000000000000006020820152905061163e565b6020808252810161047e81611654565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e0000000000000000000000000000000000000000000000000000006020820152905061163e565b6020808252810161047e816116bc565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e00000000000081529050611519565b6020808252810161047e81611724565b6020808252810161047e81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b606081016117fb828661152f565b6118086020830185611377565b611815604083018461152f565b949350505050565b600067ffffffffffffffff821661047e565b6112ef8161181d565b6020810161047e828461182f565b60005b83811015611861578181015183820152602001611849565b50506000910152565b6000611874825190565b80845260208401935061188b818560208601611846565b601f01601f19169290920192915050565b805160009060608401906118b0858261152f565b50602083015184820360208601526118c8828261186a565b91505060408301516118dd6040860182611377565b509392505050565b6020808252810161113f818461189c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe198201611941576119416118f6565b5060010190565b63ffffffff81166112ef565b60ff81166112ef565b6080810161196b8287611948565b6119786020830186611948565b818103604083015261198a818561186a565b90506119996060830184611954565b95945050505050565b67ffffffffffffffff81166112b6565b805161047e816119a2565b6000602082840312156119d2576119d2600080fd5b61113f83836119b2565b60148152602081017f4661696c656420746f2073656e6420457468657200000000000000000000000081529050611519565b6020808252810161047e816119dc565b60608101611a2c828661152f565b611a39602083018561152f565b6118156040830184611377565b8015156112b6565b805161047e81611a46565b600060208284031215611a6e57611a6e600080fd5b61113f8383611a4e565b6020810161047e828461152f565b6000611a90825190565b611a9e818560208601611846565b9290920192915050565b61047e8183611a8656fea2646970667358221220208cc96396d6438cff3df1c3667ddaf815e3a7f29c3da8285737b433effbb21c64736f6c634300081c0033", } // ObscuroBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/src/bridge/L1/ObscuroBridge.sol b/contracts/src/bridge/L1/ObscuroBridge.sol index 2427f20277..67e6fc0725 100644 --- a/contracts/src/bridge/L1/ObscuroBridge.sol +++ b/contracts/src/bridge/L1/ObscuroBridge.sol @@ -59,6 +59,7 @@ contract ObscuroBridge is data, uint32(Topics.MANAGEMENT), 0, + 0, 0 ); } @@ -106,7 +107,7 @@ contract ObscuroBridge is amount, receiver ); - queueMessage(remoteBridgeAddress, data, uint32(Topics.TRANSFER), 0, 0); + queueMessage(remoteBridgeAddress, data, uint32(Topics.TRANSFER), 0, 0, 0); } function receiveAssets( diff --git a/contracts/src/bridge/L2/EthereumBridge.sol b/contracts/src/bridge/L2/EthereumBridge.sol index ad459f5507..e2de05cc3f 100644 --- a/contracts/src/bridge/L2/EthereumBridge.sol +++ b/contracts/src/bridge/L2/EthereumBridge.sol @@ -77,7 +77,7 @@ contract EthereumBridge is amount, receiver ); - queueMessage(remoteBridgeAddress, data, uint32(Topics.TRANSFER), 0, 0); + queueMessage(remoteBridgeAddress, data, uint32(Topics.TRANSFER), 0, 0, msg.value); } function receiveAssets( diff --git a/contracts/src/messaging/messenger/CrossChainEnabledObscuro.sol b/contracts/src/messaging/messenger/CrossChainEnabledObscuro.sol index 0204673086..7cb354da5d 100644 --- a/contracts/src/messaging/messenger/CrossChainEnabledObscuro.sol +++ b/contracts/src/messaging/messenger/CrossChainEnabledObscuro.sol @@ -63,11 +63,12 @@ abstract contract CrossChainEnabledObscuro is Initializable { bytes memory message, uint32 topic, uint256 gas, - uint8 consistencyLevel + uint8 consistencyLevel, + uint256 value ) internal { bytes memory payload = abi.encode( ICrossChainMessenger.CrossChainCall(target, message, gas) ); - messageBus.publishMessage{value: msg.value}(nonce++, topic, payload, consistencyLevel); + messageBus.publishMessage{value: value}(nonce++, topic, payload, consistencyLevel); } } From 44c2a39a69b1f2c45f6741ea6308b4cca9f0c9ee Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 4 Dec 2024 18:15:47 +0200 Subject: [PATCH 5/7] Fixed small bug. --- go/enclave/crosschain/message_bus_manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/enclave/crosschain/message_bus_manager.go b/go/enclave/crosschain/message_bus_manager.go index 2b78066a04..52a4e8ad90 100644 --- a/go/enclave/crosschain/message_bus_manager.go +++ b/go/enclave/crosschain/message_bus_manager.go @@ -211,7 +211,7 @@ func (m *MessageBusManager) ExecuteValueTransfers(ctx context.Context, transfers // CreateSyntheticTransactions - generates transactions that the enclave should execute internally for the messages. func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, messages common.CrossChainMessages, transfers common.ValueTransferEvents, rollupState *state.StateDB) common.L2Transactions { - if len(messages) == 0 { + if len(messages) == 0 && len(transfers) == 0 { return make(common.L2Transactions, 0) } From ccf591801635be135ab320f3973e179e7b4dfc9a Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 4 Dec 2024 18:17:20 +0200 Subject: [PATCH 6/7] A couple more bugs. --- go/enclave/crosschain/message_bus_manager.go | 29 ++++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/go/enclave/crosschain/message_bus_manager.go b/go/enclave/crosschain/message_bus_manager.go index 52a4e8ad90..706a853fba 100644 --- a/go/enclave/crosschain/message_bus_manager.go +++ b/go/enclave/crosschain/message_bus_manager.go @@ -223,13 +223,13 @@ func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, mes // There can be forks thus we cannot trust the wallet. startingNonce := rollupState.GetNonce(common.MaskedSender(*m.messageBusAddress)) - signedTransactions := make(types.Transactions, 0) + syntheticTransactions := make(types.Transactions, 0) for idx, message := range messages { delayInBlocks := big.NewInt(int64(message.ConsistencyLevel)) data, err := MessageBusABI.Pack("storeCrossChainMessage", message, delayInBlocks) if err != nil { - m.logger.Crit("Failed packing submitOutOfNetwork message!") - return signedTransactions + m.logger.Crit("Failed packing storeCrossChainMessage message!") + return syntheticTransactions // todo (@stefan) - return error // return nil, fmt.Errorf("failed packing submitOutOfNetworkMessage %w", err) @@ -244,11 +244,8 @@ func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, mes To: m.messageBusAddress, } - stx, err := m.wallet.SignTransaction(tx) - if err != nil { - panic(err) - } - signedTransactions = append(signedTransactions, stx) + stx := types.NewTx(tx) + syntheticTransactions = append(syntheticTransactions, stx) } startingNonce += uint64(len(messages)) @@ -257,17 +254,19 @@ func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, mes data, err := MessageBusABI.Pack("notifyDeposit", transfer.Receiver, transfer.Amount) if err != nil { m.logger.Crit("Failed packing notifyDeposit message!") - return signedTransactions + return syntheticTransactions } tx := &types.LegacyTx{ - Nonce: startingNonce + uint64(idx), - Value: transfer.Amount, - Data: data, - To: m.messageBusAddress, + Nonce: startingNonce + uint64(idx), + Value: transfer.Amount, + Data: data, + To: m.messageBusAddress, + Gas: 5_000_000, + GasPrice: gethcommon.Big0, // Synthetic transactions are on the house. Or the house. } - signedTransactions = append(signedTransactions, types.NewTx(tx)) + syntheticTransactions = append(syntheticTransactions, types.NewTx(tx)) } - return signedTransactions + return syntheticTransactions } From 5b4b25f43190937f77931c3721fcd2235b08eb65 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 5 Dec 2024 14:24:19 +0200 Subject: [PATCH 7/7] Wiggle wiggle wiggle yeah. --- contracts/generated/PublicCallbacks/PublicCallbacks.go | 2 +- contracts/generated/PublicCallbacksTest/PublicCallbacksTest.go | 2 +- contracts/generated/SystemDeployer/SystemDeployer.go | 2 +- contracts/src/system/PublicCallbacks.sol | 2 +- go/enclave/crosschain/message_bus_manager.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts/generated/PublicCallbacks/PublicCallbacks.go b/contracts/generated/PublicCallbacks/PublicCallbacks.go index cf886e7b83..74120b1503 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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122008c491fc746109bf6d844f1a3820d634711f140a52c8d4923fc72a652b9ad03464736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122022c0117e92f6ffb3d46b462f20642839c7b4f030bf531f7cf3eb5d72325f73f664736f6c634300081c0033", } // 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 326fdbcc79..4a07ffb88c 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\":[],\"name\":\"handleAllCallbacksRan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedGas\",\"type\":\"uint256\"}],\"name\":\"handleCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"handleCallbackFail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLastCallSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060408190526000805461ffff60a01b1916905561064b3881900390819083398101604081905261003091610285565b600080546001600160b01b0319166001600160a01b038316179055610053610059565b50610348565b6000486100676003346102c1565b61007191906102c1565b9050600063a072d7b060e01b8260405160240161008e91906102d5565b60408051601f19818403018152918152602080830180516001600160e01b039081166001600160e01b031990961695909517905281516004808252602480830185528284018051881663a4c016fb60e01b179052845191825281019093529082018051909416629e79db60e81b17909352600054919350906001600160a01b03166382fbdc9c61011f6003346102c1565b856040518363ffffffff1660e01b815260040161013c9190610337565b6000604051808303818588803b15801561015557600080fd5b505af1158015610169573d6000803e3d6000fd5b50506000546001600160a01b031692506382fbdc9c915061018d90506003346102c1565b846040518363ffffffff1660e01b81526004016101aa9190610337565b6000604051808303818588803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b50506000546001600160a01b031692506382fbdc9c91506101fb90506003346102c1565b836040518363ffffffff1660e01b81526004016102189190610337565b6000604051808303818588803b15801561023157600080fd5b505af1158015610245573d6000803e3d6000fd5b505050505050505050565b60006001600160a01b0382165b92915050565b61026c81610250565b811461027757600080fd5b50565b805161025d81610263565b60006020828403121561029a5761029a600080fd5b6102a4838361027a565b9392505050565b634e487b7160e01b600052601260045260246000fd5b6000826102d0576102d06102ab565b500490565b8181526020810161025d565b60005b838110156102fc5781810151838201526020016102e4565b50506000910152565b600061030f825190565b8084526020840193506103268185602086016102e1565b601f01601f19169290920192915050565b602080825281016102a48184610305565b6102f4806103576000396000f3fe608060405234801561001057600080fd5b50600436106100665760003560e01c8063a072d7b011610050578063a072d7b0146100d6578063a4c016fb146100e9578063ee1d5872146100f157600080fd5b8062b127831461006b5780639e79db00146100a1575b600080fd5b60005461008b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405161009891906101f0565b60405180910390f35b6100d4600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b179055565b005b6100d46100e4366004610205565b610106565b6100d4610135565b6100f9610183565b6040516100989190610233565b60005a905061011761083483610270565b8110610131576000805460ff60a01b1916600160a01b1790555b5050565b6000805460ff60a01b1916600160a01b1790556040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017a90610283565b60405180910390fd5b60008054600160a81b900460ff1680156101a65750600054600160a01b900460ff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b60006101c5826101ab565b60006101c5826101cb565b6101ea816101d6565b82525050565b602081016101c582846101e1565b80356101c5565b60006020828403121561021a5761021a600080fd5b61022483836101fe565b9392505050565b8015156101ea565b602081016101c5828461022b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156101c5576101c5610241565b602080825281016101c581601681527f5468697320697320612074657374206661696c7572650000000000000000000060208201526040019056fea2646970667358221220a632c12aa58f6a033122d8091a6fa1620beb5a3506b1d4afefb839156694dfec64736f6c634300081c0033", + Bin: "0x608060408190526000805461ffff60a01b191690556106ab38819003908190833981016040819052610030916102b5565b600080546001600160b01b0319166001600160a01b038316179055610053610059565b506103a8565b6000486100676003346102f1565b61007191906102f1565b9050600063a072d7b060e01b8260405160240161008e9190610305565b60408051601f19818403018152918152602080830180516001600160e01b039081166001600160e01b031990961695909517905281516004808252602480830185528284018051881663a4c016fb60e01b179052845191825281019093529082018051909416629e79db60e81b17909352600054919350906001600160a01b03166382fbdc9c61011f6003346102f1565b856040518363ffffffff1660e01b815260040161013c9190610367565b60206040518083038185885af115801561015a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061017f9190610389565b506000546001600160a01b03166382fbdc9c61019c6003346102f1565b846040518363ffffffff1660e01b81526004016101b99190610367565b60206040518083038185885af11580156101d7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906101fc9190610389565b506000546001600160a01b03166382fbdc9c6102196003346102f1565b836040518363ffffffff1660e01b81526004016102369190610367565b60206040518083038185885af1158015610254573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906102799190610389565b5050505050565b60006001600160a01b0382165b92915050565b61029c81610280565b81146102a757600080fd5b50565b805161028d81610293565b6000602082840312156102ca576102ca600080fd5b6102d483836102aa565b9392505050565b634e487b7160e01b600052601260045260246000fd5b600082610300576103006102db565b500490565b8181526020810161028d565b60005b8381101561032c578181015183820152602001610314565b50506000910152565b600061033f825190565b808452602084019350610356818560208601610311565b601f01601f19169290920192915050565b602080825281016102d48184610335565b8061029c565b805161028d81610378565b60006020828403121561039e5761039e600080fd5b6102d4838361037e565b6102f4806103b76000396000f3fe608060405234801561001057600080fd5b50600436106100665760003560e01c8063a072d7b011610050578063a072d7b0146100d6578063a4c016fb146100e9578063ee1d5872146100f157600080fd5b8062b127831461006b5780639e79db00146100a1575b600080fd5b60005461008b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405161009891906101f0565b60405180910390f35b6100d4600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b179055565b005b6100d46100e4366004610205565b610106565b6100d4610135565b6100f9610183565b6040516100989190610233565b60005a905061011761083483610270565b8110610131576000805460ff60a01b1916600160a01b1790555b5050565b6000805460ff60a01b1916600160a01b1790556040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017a90610283565b60405180910390fd5b60008054600160a81b900460ff1680156101a65750600054600160a01b900460ff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b60006101c5826101ab565b60006101c5826101cb565b6101ea816101d6565b82525050565b602081016101c582846101e1565b80356101c5565b60006020828403121561021a5761021a600080fd5b61022483836101fe565b9392505050565b8015156101ea565b602081016101c5828461022b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156101c5576101c5610241565b602080825281016101c581601681527f5468697320697320612074657374206661696c7572650000000000000000000060208201526040019056fea26469706673582212205dc6e4074380ecbf9611a7399d43d8d1f673e9cc5ef4a4412cf69149e98ba68364736f6c634300081c0033", } // 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 31bb2f7273..fcffdeafe9 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: "0x608060405234801561001057600080fd5b50604051615ca7380380615ca783398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615c878339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615c87833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615c878339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615c878339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610e368061061183390190565b6107c68061144783390190565b611d0080611c0d83390190565b6110f08061390d83390190565b61128a806149fd83390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220d0f20e3983b2c5bc045b3377bc3dd8037b142c92b597228125d99bb762676d6764736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ba7806101596000396000f3fe6080604052600436106100cb5760003560e01c80638da5cb5b11610074578063ab53bddc1161004e578063ab53bddc146102b0578063b1454caa146102d0578063f2fde38b146102f05761013f565b80638da5cb5b1461022b5780639730886d1461027057806399a3ad21146102905761013f565b806336d2da90116100a557806336d2da90146101d6578063485cc955146101f6578063715018a6146102165761013f565b80630fcfbd111461016057806333a88c7214610196578063346633fb146101c35761013f565b3661013f576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101109033908390600401610e2b565b6000604051808303818588803b15801561012957600080fd5b505af115801561013d573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161015790610e7a565b60405180910390fd5b34801561016c57600080fd5b5061018061017b366004610ea5565b610310565b60405161018d9190610ee0565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004610ea5565b61036f565b60405161018d9190610ef6565b61013d6101d1366004610f34565b6103c1565b3480156101e257600080fd5b5061013d6101f1366004610f6c565b610510565b34801561020257600080fd5b5061013d610211366004610f8b565b61058f565b34801561022257600080fd5b5061013d6106fa565b34801561023757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018d9190610fba565b34801561027c57600080fd5b5061013d61028b366004610fc8565b61070e565b34801561029c57600080fd5b5061013d6102ab366004610f34565b61087a565b3480156102bc57600080fd5b5061013d6102cb366004610f34565b6108fa565b6102e36102de366004611091565b6109c3565b60405161018d919061111e565b3480156102fc57600080fd5b5061013d61030b366004610f6c565b610acb565b6000808260405160200161032491906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103685760405162461bcd60e51b815260040161015790611336565b9392505050565b6000808260405160200161038391906112cb565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906103b95750428111155b949350505050565b6000341180156103d057508034145b6103ec5760405162461bcd60e51b81526004016101579061139e565b60035434906001600160a01b0316156104b0576000610409610b22565b90508034101561042b5760405162461bcd60e51b8152600401610157906113de565b6104358134611404565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610487576040519150601f19603f3d011682016040523d82523d6000602084013e61048c565b606091505b50509050806104ad5760405162461bcd60e51b81526004016101579061146f565b50505b60006104bb33610bb3565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6848460405161050292919061147f565b60405180910390a350505050565b610518610c11565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610565576040519150601f19603f3d011682016040523d82523d6000602084013e61056a565b606091505b505090508061058b5760405162461bcd60e51b8152600401610157906114cc565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105da5750825b905060008267ffffffffffffffff1660011480156105f75750303b155b905081158015610605575080155b1561063c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561067057845468ff00000000000000001916680100000000000000001785555b61067987610c85565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106f157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106e890600190611500565b60405180910390a15b50505050505050565b610702610c11565b61070c6000610c96565b565b600061071b60013061150e565b905061074e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806107755750336001600160a01b038216145b6107915760405162461bcd60e51b815260040161015790611563565b600061079d8342611573565b90506000846040516020016107b291906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107f65760405162461bcd60e51b8152600401610157906115de565b60008181526020818152604082208490556001919061081790880188610f6c565b6001600160a01b03168152602081019190915260400160009081209061084360808801606089016115ee565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106f18282611a37565b610882610c11565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108cf576040519150601f19603f3d011682016040523d82523d6000602084013e6108d4565b606091505b50509050806108f55760405162461bcd60e51b8152600401610157906114cc565b505050565b600061090760013061150e565b905061093a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109615750336001600160a01b038216145b61097d5760405162461bcd60e51b815260040161015790611563565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3836040516109b69190610ee0565b60405180910390a2505050565b6003546000906001600160a01b031615610a74576109e083610d14565b3410156109ff5760405162461bcd60e51b815260040161015790611a99565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b5050905080610a725760405162461bcd60e51b81526004016101579061146f565b505b610a7d33610bb3565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610aba9796959493929190611aa9565b60405180910390a195945050505050565b610ad3610c11565b6001600160a01b038116610b165760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610b1f81610c96565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610b6d90602090600401611b15565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611b2e565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610be68385611b4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461070c57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610c8d610d96565b610b1f81610dfd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610d33601185611573565b6040518263ffffffff1660e01b8152600401610d4f9190610ee0565b602060405180830381865afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190611b2e565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad3610d96565b60006001600160a01b038216610d90565b610e1f81610e05565b82525050565b80610e1f565b60408101610e398285610e16565b6103686020830184610e25565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610d9081610e46565b600060c08284031215610e9f57610e9f600080fd5b50919050565b600060208284031215610eba57610eba600080fd5b813567ffffffffffffffff811115610ed457610ed4600080fd5b6103b984828501610e8a565b60208101610d908284610e25565b801515610e1f565b60208101610d908284610eee565b610f0d81610e05565b8114610b1f57600080fd5b8035610d9081610f04565b80610f0d565b8035610d9081610f23565b60008060408385031215610f4a57610f4a600080fd5b610f548484610f18565b9150610f638460208501610f29565b90509250929050565b600060208284031215610f8157610f81600080fd5b6103688383610f18565b60008060408385031215610fa157610fa1600080fd5b610fab8484610f18565b9150610f638460208501610f18565b60208101610d908284610e16565b60008060408385031215610fde57610fde600080fd5b823567ffffffffffffffff811115610ff857610ff8600080fd5b61100485828601610e8a565b925050610f638460208501610f29565b63ffffffff8116610f0d565b8035610d9081611014565b60008083601f84011261104057611040600080fd5b50813567ffffffffffffffff81111561105b5761105b600080fd5b60208301915083600182028301111561107657611076600080fd5b9250929050565b60ff8116610f0d565b8035610d908161107d565b6000806000806000608086880312156110ac576110ac600080fd5b6110b68787611020565b94506110c58760208801611020565b9350604086013567ffffffffffffffff8111156110e4576110e4600080fd5b6110f08882890161102b565b93509350506111028760608801611086565b90509295509295909350565b67ffffffffffffffff8116610e1f565b60208101610d90828461110e565b506000610d906020830183610f18565b67ffffffffffffffff8116610f0d565b8035610d908161113c565b506000610d90602083018361114c565b506000610d906020830183611020565b63ffffffff8116610e1f565b6000808335601e193685900301811261119e5761119e600080fd5b830160208101925035905067ffffffffffffffff8111156111c1576111c1600080fd5b3681900382131561107657611076600080fd5b82818337506000910152565b8183526020830192506111f48284836111d4565b50601f01601f19160190565b506000610d906020830183611086565b60ff8116610e1f565b600060c08301611229838061112c565b6112338582610e16565b506112416020840184611157565b61124e602086018261110e565b5061125c6040840184611167565b6112696040860182611177565b506112776060840184611167565b6112846060860182611177565b506112926080840184611183565b85830360808701526112a58382846111e0565b925050506112b660a0840184611200565b6112c360a0860182611210565b509392505050565b602080825281016103688184611219565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610d90816112dc565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611330565b60208082528101610d9081611346565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e74565b60208082528101610d90816113ae565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9057610d906113ee565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611417565b6040810161148d8285610e25565b610368602083018461110e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e74565b60208082528101610d908161149a565b6000610d90826114ea565b90565b67ffffffffffffffff1690565b610e1f816114dc565b60208101610d9082846114f7565b6001600160a01b03918216919081169082820390811115610d9057610d906113ee565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e74565b60208082528101610d9081611531565b80820180821115610d9057610d906113ee565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611586565b60006020828403121561160357611603600080fd5b6103688383611020565b60008135610d9081610f04565b60006001600160a01b03835b81169019929092169190911792915050565b6000610d9082610e05565b6000610d9082611638565b61165782611643565b61166281835461161a565b8255505050565b60008135610d908161113c565b60007bffffffffffffffff00000000000000000000000000000000000000006116268460a01b90565b6000610d9067ffffffffffffffff83166114ea565b6116bd8261169f565b611662818354611676565b60008135610d9081611014565b60007fffffffff000000000000000000000000000000000000000000000000000000006116268460e01b90565b600063ffffffff8216610d90565b61171982611702565b6116628183546116d5565b600063ffffffff83611626565b61173a82611702565b611662818354611724565b6000808335601e193685900301811261176057611760600080fd5b8301915050803567ffffffffffffffff81111561177f5761177f600080fd5b60208201915060018102360382131561107657611076600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117da57607f821691505b602082108103610e9f57610e9f6117b0565b6000610d906114e78381565b611801836117ec565b815460001960089490940293841b1916921b91909117905550565b60006108f58184846117f8565b8181101561058b5761183c60008261181c565b600101611829565b601f8211156108f5576000818152602090206020601f8501048101602085101561186b5750805b61187d6020601f860104830182611829565b5050505050565b8267ffffffffffffffff81111561189d5761189d61179a565b6118a782546117c6565b6118b2828285611844565b506000601f8211600181146118e757600083156118cf5750848201355b600019600885021c1981166002850217855550611941565b600084815260209020601f19841690835b8281101561191857878501358255602094850194600190920191016118f8565b5084821015611935576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108f5838383611884565b60008135610d908161107d565b600060ff8216610d90565b61197582611961565b815460ff191660ff821617611662565b8082806119918161160d565b905061199d818461164e565b505060208301806119ad82611669565b90506119b981846116b4565b505060408301806119c9826116c8565b90506119d58184611710565b50505060608201806119e6826116c8565b90506119f58160018501611731565b5050611a046080830183611745565b611a12818360028601611949565b505060a0820180611a2282611954565b9050611a31816003850161196c565b50505050565b61058b8282611985565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611a41565b60c08101611ab7828a610e16565b611ac4602083018961110e565b611ad16040830188611177565b611ade6060830187611177565b8181036080830152611af18185876111e0565b9050611b0060a0830184611210565b98975050505050505050565b610e1f816117ec565b60208101610d908284611b0c565b8051610d9081610f23565b600060208284031215611b4357611b43600080fd5b6103688383611b23565b67ffffffffffffffff918216919081169082820190811115610d9057610d906113ee56fea26469706673582212205827e6100538af9307eff1914e07e481a82d2ed05aab2e5cf52b967c89af264964736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122008c491fc746109bf6d844f1a3820d634711f140a52c8d4923fc72a652b9ad03464736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051615ca7380380615ca783398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615c878339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615c87833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615c878339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615c878339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610e368061061183390190565b6107c68061144783390190565b611d0080611c0d83390190565b6110f08061390d83390190565b61128a806149fd83390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220d6d4d7132e8631956841e9da61cd856e5aaa08ec2049993d13224b35601df7d064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ba7806101596000396000f3fe6080604052600436106100cb5760003560e01c80638da5cb5b11610074578063ab53bddc1161004e578063ab53bddc146102b0578063b1454caa146102d0578063f2fde38b146102f05761013f565b80638da5cb5b1461022b5780639730886d1461027057806399a3ad21146102905761013f565b806336d2da90116100a557806336d2da90146101d6578063485cc955146101f6578063715018a6146102165761013f565b80630fcfbd111461016057806333a88c7214610196578063346633fb146101c35761013f565b3661013f576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101109033908390600401610e2b565b6000604051808303818588803b15801561012957600080fd5b505af115801561013d573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161015790610e7a565b60405180910390fd5b34801561016c57600080fd5b5061018061017b366004610ea5565b610310565b60405161018d9190610ee0565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004610ea5565b61036f565b60405161018d9190610ef6565b61013d6101d1366004610f34565b6103c1565b3480156101e257600080fd5b5061013d6101f1366004610f6c565b610510565b34801561020257600080fd5b5061013d610211366004610f8b565b61058f565b34801561022257600080fd5b5061013d6106fa565b34801561023757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018d9190610fba565b34801561027c57600080fd5b5061013d61028b366004610fc8565b61070e565b34801561029c57600080fd5b5061013d6102ab366004610f34565b61087a565b3480156102bc57600080fd5b5061013d6102cb366004610f34565b6108fa565b6102e36102de366004611091565b6109c3565b60405161018d919061111e565b3480156102fc57600080fd5b5061013d61030b366004610f6c565b610acb565b6000808260405160200161032491906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103685760405162461bcd60e51b815260040161015790611336565b9392505050565b6000808260405160200161038391906112cb565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906103b95750428111155b949350505050565b6000341180156103d057508034145b6103ec5760405162461bcd60e51b81526004016101579061139e565b60035434906001600160a01b0316156104b0576000610409610b22565b90508034101561042b5760405162461bcd60e51b8152600401610157906113de565b6104358134611404565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610487576040519150601f19603f3d011682016040523d82523d6000602084013e61048c565b606091505b50509050806104ad5760405162461bcd60e51b81526004016101579061146f565b50505b60006104bb33610bb3565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6848460405161050292919061147f565b60405180910390a350505050565b610518610c11565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610565576040519150601f19603f3d011682016040523d82523d6000602084013e61056a565b606091505b505090508061058b5760405162461bcd60e51b8152600401610157906114cc565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105da5750825b905060008267ffffffffffffffff1660011480156105f75750303b155b905081158015610605575080155b1561063c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561067057845468ff00000000000000001916680100000000000000001785555b61067987610c85565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106f157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106e890600190611500565b60405180910390a15b50505050505050565b610702610c11565b61070c6000610c96565b565b600061071b60013061150e565b905061074e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806107755750336001600160a01b038216145b6107915760405162461bcd60e51b815260040161015790611563565b600061079d8342611573565b90506000846040516020016107b291906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107f65760405162461bcd60e51b8152600401610157906115de565b60008181526020818152604082208490556001919061081790880188610f6c565b6001600160a01b03168152602081019190915260400160009081209061084360808801606089016115ee565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106f18282611a37565b610882610c11565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108cf576040519150601f19603f3d011682016040523d82523d6000602084013e6108d4565b606091505b50509050806108f55760405162461bcd60e51b8152600401610157906114cc565b505050565b600061090760013061150e565b905061093a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109615750336001600160a01b038216145b61097d5760405162461bcd60e51b815260040161015790611563565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3836040516109b69190610ee0565b60405180910390a2505050565b6003546000906001600160a01b031615610a74576109e083610d14565b3410156109ff5760405162461bcd60e51b815260040161015790611a99565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b5050905080610a725760405162461bcd60e51b81526004016101579061146f565b505b610a7d33610bb3565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610aba9796959493929190611aa9565b60405180910390a195945050505050565b610ad3610c11565b6001600160a01b038116610b165760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610b1f81610c96565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610b6d90602090600401611b15565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611b2e565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610be68385611b4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461070c57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610c8d610d96565b610b1f81610dfd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610d33601185611573565b6040518263ffffffff1660e01b8152600401610d4f9190610ee0565b602060405180830381865afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190611b2e565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad3610d96565b60006001600160a01b038216610d90565b610e1f81610e05565b82525050565b80610e1f565b60408101610e398285610e16565b6103686020830184610e25565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610d9081610e46565b600060c08284031215610e9f57610e9f600080fd5b50919050565b600060208284031215610eba57610eba600080fd5b813567ffffffffffffffff811115610ed457610ed4600080fd5b6103b984828501610e8a565b60208101610d908284610e25565b801515610e1f565b60208101610d908284610eee565b610f0d81610e05565b8114610b1f57600080fd5b8035610d9081610f04565b80610f0d565b8035610d9081610f23565b60008060408385031215610f4a57610f4a600080fd5b610f548484610f18565b9150610f638460208501610f29565b90509250929050565b600060208284031215610f8157610f81600080fd5b6103688383610f18565b60008060408385031215610fa157610fa1600080fd5b610fab8484610f18565b9150610f638460208501610f18565b60208101610d908284610e16565b60008060408385031215610fde57610fde600080fd5b823567ffffffffffffffff811115610ff857610ff8600080fd5b61100485828601610e8a565b925050610f638460208501610f29565b63ffffffff8116610f0d565b8035610d9081611014565b60008083601f84011261104057611040600080fd5b50813567ffffffffffffffff81111561105b5761105b600080fd5b60208301915083600182028301111561107657611076600080fd5b9250929050565b60ff8116610f0d565b8035610d908161107d565b6000806000806000608086880312156110ac576110ac600080fd5b6110b68787611020565b94506110c58760208801611020565b9350604086013567ffffffffffffffff8111156110e4576110e4600080fd5b6110f08882890161102b565b93509350506111028760608801611086565b90509295509295909350565b67ffffffffffffffff8116610e1f565b60208101610d90828461110e565b506000610d906020830183610f18565b67ffffffffffffffff8116610f0d565b8035610d908161113c565b506000610d90602083018361114c565b506000610d906020830183611020565b63ffffffff8116610e1f565b6000808335601e193685900301811261119e5761119e600080fd5b830160208101925035905067ffffffffffffffff8111156111c1576111c1600080fd5b3681900382131561107657611076600080fd5b82818337506000910152565b8183526020830192506111f48284836111d4565b50601f01601f19160190565b506000610d906020830183611086565b60ff8116610e1f565b600060c08301611229838061112c565b6112338582610e16565b506112416020840184611157565b61124e602086018261110e565b5061125c6040840184611167565b6112696040860182611177565b506112776060840184611167565b6112846060860182611177565b506112926080840184611183565b85830360808701526112a58382846111e0565b925050506112b660a0840184611200565b6112c360a0860182611210565b509392505050565b602080825281016103688184611219565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610d90816112dc565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611330565b60208082528101610d9081611346565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e74565b60208082528101610d90816113ae565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9057610d906113ee565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611417565b6040810161148d8285610e25565b610368602083018461110e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e74565b60208082528101610d908161149a565b6000610d90826114ea565b90565b67ffffffffffffffff1690565b610e1f816114dc565b60208101610d9082846114f7565b6001600160a01b03918216919081169082820390811115610d9057610d906113ee565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e74565b60208082528101610d9081611531565b80820180821115610d9057610d906113ee565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611586565b60006020828403121561160357611603600080fd5b6103688383611020565b60008135610d9081610f04565b60006001600160a01b03835b81169019929092169190911792915050565b6000610d9082610e05565b6000610d9082611638565b61165782611643565b61166281835461161a565b8255505050565b60008135610d908161113c565b60007bffffffffffffffff00000000000000000000000000000000000000006116268460a01b90565b6000610d9067ffffffffffffffff83166114ea565b6116bd8261169f565b611662818354611676565b60008135610d9081611014565b60007fffffffff000000000000000000000000000000000000000000000000000000006116268460e01b90565b600063ffffffff8216610d90565b61171982611702565b6116628183546116d5565b600063ffffffff83611626565b61173a82611702565b611662818354611724565b6000808335601e193685900301811261176057611760600080fd5b8301915050803567ffffffffffffffff81111561177f5761177f600080fd5b60208201915060018102360382131561107657611076600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117da57607f821691505b602082108103610e9f57610e9f6117b0565b6000610d906114e78381565b611801836117ec565b815460001960089490940293841b1916921b91909117905550565b60006108f58184846117f8565b8181101561058b5761183c60008261181c565b600101611829565b601f8211156108f5576000818152602090206020601f8501048101602085101561186b5750805b61187d6020601f860104830182611829565b5050505050565b8267ffffffffffffffff81111561189d5761189d61179a565b6118a782546117c6565b6118b2828285611844565b506000601f8211600181146118e757600083156118cf5750848201355b600019600885021c1981166002850217855550611941565b600084815260209020601f19841690835b8281101561191857878501358255602094850194600190920191016118f8565b5084821015611935576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108f5838383611884565b60008135610d908161107d565b600060ff8216610d90565b61197582611961565b815460ff191660ff821617611662565b8082806119918161160d565b905061199d818461164e565b505060208301806119ad82611669565b90506119b981846116b4565b505060408301806119c9826116c8565b90506119d58184611710565b50505060608201806119e6826116c8565b90506119f58160018501611731565b5050611a046080830183611745565b611a12818360028601611949565b505060a0820180611a2282611954565b9050611a31816003850161196c565b50505050565b61058b8282611985565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611a41565b60c08101611ab7828a610e16565b611ac4602083018961110e565b611ad16040830188611177565b611ade6060830187611177565b8181036080830152611af18185876111e0565b9050611b0060a0830184611210565b98975050505050505050565b610e1f816117ec565b60208101610d908284611b0c565b8051610d9081610f23565b600060208284031215611b4357611b43600080fd5b6103688383611b23565b67ffffffffffffffff918216919081169082820190811115610d9057610d906113ee56fea26469706673582212205827e6100538af9307eff1914e07e481a82d2ed05aab2e5cf52b967c89af264964736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122022c0117e92f6ffb3d46b462f20642839c7b4f030bf531f7cf3eb5d72325f73f664736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // 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 d8f90d59a6..793abc02ab 100644 --- a/contracts/src/system/PublicCallbacks.sol +++ b/contracts/src/system/PublicCallbacks.sol @@ -4,7 +4,7 @@ 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 register(bytes calldata callback) external payable returns (uint256); function reattemptCallback(uint256 callbackId) external; } diff --git a/go/enclave/crosschain/message_bus_manager.go b/go/enclave/crosschain/message_bus_manager.go index 706a853fba..6639e9024a 100644 --- a/go/enclave/crosschain/message_bus_manager.go +++ b/go/enclave/crosschain/message_bus_manager.go @@ -259,7 +259,7 @@ func (m *MessageBusManager) CreateSyntheticTransactions(ctx context.Context, mes tx := &types.LegacyTx{ Nonce: startingNonce + uint64(idx), - Value: transfer.Amount, + Value: gethcommon.Big0, Data: data, To: m.messageBusAddress, Gas: 5_000_000,