0 txs
2.3k calls
constructor
constructor()
functions
consortium
viewfunction consortium() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
getDefaultMaxPayloadSize
viewfunction getDefaultMaxPayloadSize() view returns (uint32)
getFee
viewfunction getFee(address sender, bytes body) view returns (uint256)
getInboundMessagePath
viewfunction getInboundMessagePath(bytes32 pathId) view returns (bytes32)
getOutboundMessagePath
viewfunction getOutboundMessagePath(bytes32 pathId) view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSenderConfigWithDefault
viewfunction getSenderConfigWithDefault(address sender) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TREASURER_ROLE
viewfunction TREASURER_ROLE() view returns (bytes32)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
deliverAndHandle
nonpayablefunction deliverAndHandle(bytes rawPayload, bytes proof) returns (bytes32, bool, bytes)
disableMessagePath
nonpayablefunction disableMessagePath(bytes32 destinationChain, bytes32 destinationMailbox, uint8 direction)
enableMessagePath
nonpayablefunction enableMessagePath(bytes32 destinationChain, bytes32 destinationMailbox, uint8 direction)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address defaultAdmin, address consortium_, uint256 feePerByte, uint48 defaultAdminChangeDelay)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
rescueERC20
nonpayablefunction rescueERC20(address tokenContract, address to, uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
send
payablefunction send(bytes32 destinationChain, bytes32 recipient, bytes32 destinationCaller, bytes body) payable returns (uint256, bytes32)
setDefaultMaxPayloadSize
nonpayablefunction setDefaultMaxPayloadSize(uint32 maxPayloadSize)
setFee
nonpayablefunction setFee(uint256 weiPerByte)
setSenderConfig
nonpayablefunction setSenderConfig(address sender, uint32 maxPayloadSize, bool feeDisabled)
unpause
nonpayablefunction unpause()
withdrawFee
nonpayablefunction withdrawFee()
events
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
DefaultPayloadSizeSet
event DefaultPayloadSizeSet(uint64 maxPayloadSize)
FeePerByteSet
event FeePerByteSet(uint256 fee)
FeeWithdrawn
event FeeWithdrawn(address indexed treasury, uint256 amount)
Initialized
event Initialized(uint64 version)
MessageDelivered
event MessageDelivered(bytes32 indexed payloadHash, address indexed caller, uint256 indexed nonce, bytes32 msgSender, bytes payload)
MessageHandled
event MessageHandled(bytes32 indexed payloadHash, address indexed destinationCaller, bytes executionResult)
MessageHandleError
event MessageHandleError(bytes32 indexed payloadHash, address indexed destinationCaller, string reason, bytes customError)
MessagePaid
event MessagePaid(bytes32 indexed payloadHash, address indexed msgSender, uint256 payloadSize, uint256 value)
MessagePathDisabled
event MessagePathDisabled(bytes32 indexed destinationChain, bytes32 indexed inboundMessagePath, bytes32 indexed outboundMessagePath, bytes32 destinationMailbox)
MessagePathEnabled
event MessagePathEnabled(bytes32 indexed destinationChain, bytes32 indexed inboundMessagePath, bytes32 indexed outboundMessagePath, bytes32 destinationMailbox)
MessageSent
event MessageSent(bytes32 indexed destinationLChainId, address indexed msgSender, bytes32 indexed recipient, bytes payload)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SenderConfigUpdated
event SenderConfigUpdated(address indexed sender, uint64 maxPayloadSize, bool feeDisabled)
Unpaused
event Unpaused(address account)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
GMP_InvalidAction
error GMP_InvalidAction(bytes4 expectedVal, bytes4 actualVal)
GMP_WrongPayloadLength
error GMP_WrongPayloadLength()
GMP_ZeroRecipient
error GMP_ZeroRecipient()
GMP_ZeroSender
error GMP_ZeroSender()
InvalidInitialization
error InvalidInitialization()
Mailbox_CallFailed
error Mailbox_CallFailed()
Mailbox_HandlerNotImplemented
error Mailbox_HandlerNotImplemented()
Mailbox_MessagePathDisabled
error Mailbox_MessagePathDisabled(bytes32 id)
Mailbox_MessagePathEnabled
error Mailbox_MessagePathEnabled(bytes32 id)
Mailbox_NotEnoughFee
error Mailbox_NotEnoughFee(uint256 expected, uint256 actual)
Mailbox_PayloadOversize
error Mailbox_PayloadOversize(uint32 max, uint256 actual)
Mailbox_UnexpectedDestinationCaller
error Mailbox_UnexpectedDestinationCaller(address expected, address actual)
Mailbox_ZeroAmount
error Mailbox_ZeroAmount()
Mailbox_ZeroChainId
error Mailbox_ZeroChainId()
Mailbox_ZeroConsortium
error Mailbox_ZeroConsortium()
Mailbox_ZeroMailbox
error Mailbox_ZeroMailbox()
Mailbox_ZeroRecipient
error Mailbox_ZeroRecipient()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61343b80620000e66000396000f3fe6080604052600436106102305760003560e01c80638da5cb5b1161012e578063c8f8dcd1116100ab578063d602b9fd1161006f578063d602b9fd14610777578063d68548f11461078c578063e63ab1e9146107ac578063e941fa78146107e0578063f0a3a97c146107f557600080fd5b8063c8f8dcd1146106d2578063cc8463c8146106f2578063cefc142914610707578063cf6eefb71461071c578063d547741f1461075757600080fd5b8063a1eda53c116100f2578063a1eda53c14610612578063a217fddf14610646578063a62085061461065b578063a9fb35501461068a578063b2118a8d146106b257600080fd5b80638da5cb5b1461056057806391d14854146105755780639ad18765146105955780639bd79019146105d2578063a1230fd5146105f257600080fd5b8063572b200c116101bc5780637134637211610180578063713463721461046f57806382dbd093146104b25780638456cb59146104d257806384ef8ffc146104e75780638576ee401461051457600080fd5b8063572b200c146103ca5780635c975abb146103ea578063634e93da1461040f578063649a5ec71461042f57806369fe0e2d1461044f57600080fd5b8063248a9ca311610203578063248a9ca3146102fb5780632f2ff15d1461032957806336568abe146103495780633a863921146103695780633f4ba83a146103b557600080fd5b806301ffc9a714610235578063022d63fb1461026a5780630aa6220b146102935780631fe9d6b3146102aa575b600080fd5b34801561024157600080fd5b50610255610250366004612a64565b610829565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b50620697805b60405165ffffffffffff9091168152602001610261565b34801561029f57600080fd5b506102a8610854565b005b3480156102b657600080fd5b507f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b30740554600160a01b900463ffffffff1660405163ffffffff9091168152602001610261565b34801561030757600080fd5b5061031b610316366004612a8e565b61086a565b604051908152602001610261565b34801561033557600080fd5b506102a8610344366004612abc565b61088c565b34801561035557600080fd5b506102a8610364366004612abc565b6108b8565b34801561037557600080fd5b5061031b610384366004612a8e565b60009081527f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b307402602052604090205490565b3480156103c157600080fd5b506102a8610981565b3480156103d657600080fd5b506102a86103e5366004612aec565b610994565b3480156103f657600080fd5b506000805160206133a68339815191525460ff16610255565b34801561041b57600080fd5b506102a861042a366004612b29565b610ad9565b34801561043b57600080fd5b506102a861044a366004612b61565b610aed565b34801561045b57600080fd5b506102a861046a366004612a8e565b610b01565b34801561047b57600080fd5b5061048f61048a366004612b29565b610b68565b60408051825163ffffffff16815260209283015115159281019290925201610261565b3480156104be57600080fd5b506102a86104cd366004612b7c565b610b94565b3480156104de57600080fd5b506102a8610cca565b3480156104f357600080fd5b506104fc610cfc565b6040516001600160a01b039091168152602001610261565b34801561052057600080fd5b5061031b61052f366004612a8e565b60009081527f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b307401602052604090205490565b34801561056c57600080fd5b506104fc610d18565b34801561058157600080fd5b50610255610590366004612abc565b610d27565b3480156105a157600080fd5b507f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b307405546001600160a01b03166104fc565b3480156105de57600080fd5b506102a86105ed366004612aec565b610d5f565b3480156105fe57600080fd5b506102a861060d366004612bef565b610efd565b34801561061e57600080fd5b50610627610fe3565b6040805165ffffffffffff938416815292909116602083015201610261565b34801561065257600080fd5b5061031b600081565b34801561066757600080fd5b5061067b610676366004612c76565b611056565b60405161026193929190612d32565b61069d610698366004612d5c565b6110de565b60408051928352602083019190915201610261565b3480156106be57600080fd5b506102a86106cd366004612dbd565b61126f565b3480156106de57600080fd5b5061031b6106ed366004612dfe565b6112b2565b3480156106fe57600080fd5b5061027c611339565b34801561071357600080fd5b506102a86113b7565b34801561072857600080fd5b506107316113f7565b604080516001600160a01b03909316835265ffffffffffff909116602083015201610261565b34801561076357600080fd5b506102a8610772366004612abc565b611425565b34801561078357600080fd5b506102a861144d565b34801561079857600080fd5b506102a86107a7366004612e53565b611460565b3480156107b857600080fd5b5061031b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156107ec57600080fd5b506102a8611506565b34801561080157600080fd5b5061031b7f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d0781565b60006001600160e01b031982166318a4c3c360e11b148061084e575061084e8261161a565b92915050565b600061085f8161164f565b610867611659565b50565b6000908152600080516020613386833981519152602052604090206001015490565b816108aa57604051631fe1e13d60e11b815260040160405180910390fd5b6108b48282611666565b5050565b600080516020613366833981519152821580156108ed57506108d8610cfc565b6001600160a01b0316826001600160a01b0316145b15610972576000806108fd6113f7565b90925090506001600160a01b03821615158061091f575065ffffffffffff8116155b8061093257504265ffffffffffff821610155b1561095f576040516319ca5ebb60e01b815265ffffffffffff821660048201526024015b60405180910390fd5b5050805465ffffffffffff60a01b191681555b61097c8383611682565b505050565b600061098c8161164f565b6108676116b5565b600061099f8161164f565b836109bd57604051631abf915360e21b815260040160405180910390fd5b826109db57604051631e90905f60e31b815260040160405180910390fd5b6000805160206133468339815191526000806001856003811115610a0157610a01612e6e565b1480610a1e57506003856003811115610a1c57610a1c612e6e565b145b15610a4057610a2c87611715565b600081815260018501602052604081205591505b6002856003811115610a5457610a54612e6e565b1480610a7157506003856003811115610a6f57610a6f612e6e565b145b15610a9457610a808787611755565b600081815260028501602052604081205590505b8181887f30b19f1bd280b803e480a2a32c6b45a0e45f89cf5dc13efc17b9f3a908f5f3f589604051610ac891815260200190565b60405180910390a450505050505050565b6000610ae48161164f565b6108b482611794565b6000610af88161164f565b6108b482611807565b6000610b0c8161164f565b7f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b3074078290556040518281527fbc385390f7bf2b358ca5c9a54a46fe68827f3e203f124aef89877c7919dc03b2906020015b60405180910390a15050565b604080518082019091526000808252602082015261084e60008051602061334683398151915283611870565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610bda5750825b905060008267ffffffffffffffff166001148015610bf75750303b155b905081158015610c05575080155b15610c235760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4d57845460ff60401b1916600160401b1785555b610c556118ea565b610c5f868a6118f2565b610c67611904565b610c6f611914565b610c798888611924565b8315610cbf57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf48161164f565b6108676119c9565b6000805160206133e6833981519152546001600160a01b031690565b6000610d22610cfc565b905090565b6000918252600080516020613386833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610d6a8161164f565b83610d8857604051631abf915360e21b815260040160405180910390fd5b82610da657604051631e90905f60e31b815260040160405180910390fd5b6000806000805160206133468339815191526001856003811115610dcc57610dcc612e6e565b1480610de957506003856003811115610de757610de7612e6e565b145b15610e4057610df787611715565b600081815260018301602052604090205490935015610e2c5760405163706a9ab160e11b815260048101849052602401610956565b600083815260018201602052604090208790555b6002856003811115610e5457610e54612e6e565b1480610e7157506003856003811115610e6f57610e6f612e6e565b145b15610ec957610e808787611755565b600081815260028301602052604090205490925015610eb55760405163706a9ab160e11b815260048101839052602401610956565b600082815260028201602052604090208790555b8282887f274a17bf3d8c94c13f1a838ecaee5256fef243fd21840e056c155c8ed6f921d489604051610ac891815260200190565b6000610f088161164f565b61271063ffffffff84161115610f41576040516309afb60960e31b8152612710600482015263ffffffff84166024820152604401610956565b6001600160a01b03841660008181527f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b30740660209081526040918290208054861515640100000000810264ffffffffff1990921663ffffffff8a1690811792909217835584519182529281019290925282519093927f520a324a4902438cb3f802e1c7e8a62542c494049a1966a7058d5e669e881e30928290030190a25050505050565b6000805160206133e683398151915254600090600160d01b900465ffffffffffff16600080516020613366833981519152811580159061102b57504265ffffffffffff831610155b6110375760008061104d565b6001810154600160a01b900465ffffffffffff16825b92509250509091565b6000806060611063611a12565b61106b611a43565b60006110778888611a7b565b90506000600080516020613346833981519152905061109f818384600001518c8c8c8c611b9b565b6000806110b183858660000151611bf8565b9451975095509293505050506110d460016000805160206133c683398151915255565b9450945094915050565b6000806110e9611a12565b6110f1611a43565b8561110f5760405163d0921f6560e01b815260040160405180910390fd5b600061111a88611715565b60008181527f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b30740160205260409020549091506000805160206133468339815191529061117b576040516301b7abc560e71b815260048101839052602401610956565b8054600090828261118b83612e9a565b909155509050600033905060006111e585846001600160a01b0385168e8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e8792505050565b905060006111f282611eea565b90506112018582845186611f3c565b8b836001600160a01b03168e7f8784acf2b096380844b252c1cc85752ea2dcccf0fd55ed7a440e0ccd3b56b9088560405161123c9190612eb3565b60405180910390a49296509194505050505061126560016000805160206133c683398151915255565b9550959350505050565b611277611a12565b7f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d076112a18161164f565b6112ac848484611fde565b50505050565b60008061130381806001600160a01b038816604080516020601f8a018190048102820181019092528881526000918291908b908b9081908401838280828437600092019190915250611e8792505050565b905060008051602061334683398151915261132d6113218288611870565b82600701548451612030565b925050505b9392505050565b6000805160206133e68339815191525460009060008051602061336683398151915290600160d01b900465ffffffffffff16801580159061138157504265ffffffffffff8216105b61139b578154600160d01b900465ffffffffffff166113b0565b6001820154600160a01b900465ffffffffffff165b9250505090565b60006113c16113f7565b509050336001600160a01b038216146113ef57604051636116401160e11b8152336004820152602401610956565b61086761204e565b600080516020613366833981519152546001600160a01b03811691600160a01b90910465ffffffffffff1690565b8161144357604051631fe1e13d60e11b815260040160405180910390fd5b6108b482826120eb565b60006114588161164f565b610867612107565b600061146b8161164f565b61271063ffffffff831611156114a4576040516309afb60960e31b8152612710600482015263ffffffff83166024820152604401610956565b81600080516020613346833981519152600501805463ffffffff60a01b1916600160a01b63ffffffff9384160217905560405190831681527fde5bd912c5bfccc809a3ba8a469cbd3257b8339e714964e28bf30ffd5e7c389290602001610b5c565b61150e611a12565b7f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d076115388161164f565b611540611a43565b47600081900361156357604051633953a72f60e21b815260040160405180910390fd5b604051600090339083908381818185875af1925050503d80600081146115a5576040519150601f19603f3d011682016040523d82523d6000602084013e6115aa565b606091505b50509050806115cc57604051639067924d60e01b815260040160405180910390fd5b60405182815233907f78473f3f373f7673597f4f0fa5873cb4d375fea6d4339ad6b56dbd411513cb3f9060200160405180910390a2505061086760016000805160206133c683398151915255565b60006001600160e01b03198216637965db0b60e01b148061084e57506301ffc9a760e01b6001600160e01b031983161461084e565b6108678133612112565b61166460008061214b565b565b61166f8261086a565b6116788161164f565b6112ac8383612226565b6001600160a01b03811633146116ab5760405163334bd91960e11b815260040160405180910390fd5b61097c8282612295565b6116bd6122ee565b6000805160206133a6833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6000806040518060600160405280611733306001600160a01b031690565b8152602001466001600160f81b0316815260200184905290506113328161231e565b600080604051806060016040528084815260200185815260200161177f6001600160f81b03461690565b9052905061178c8161231e565b949350505050565b600061179e611339565b6117a742612363565b6117b19190612ec6565b90506117bd828261239a565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b600061181282612427565b61181b42612363565b6118259190612ec6565b9050611831828261214b565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b9101610b5c565b60408051808201909152600080825260208201526001600160a01b0382166000908152600684016020908152604080832081518083019092525463ffffffff811680835264010000000090910460ff161515928201929092529103611332576005840154600160a01b900463ffffffff1681529392505050565b61166461246f565b6118fa61246f565b6108b482826124b8565b61190c61246f565b611664612521565b61191c61246f565b611664612529565b61192c61246f565b6001600160a01b03821661195357604051632253763960e01b815260040160405180910390fd5b7f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b30740580546001600160a01b0319166001600160a01b0393909316929092179091557f0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b30740755600160008051602061334683398151915255565b6119d1611a12565b6000805160206133a6833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336116f7565b6000805160206133a68339815191525460ff16156116645760405163d93c066560e01b815260040160405180910390fd5b6000805160206133c6833981519152805460011901611a7557604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c0810191909152611ac0838361254a565b611acd8260048186612ee5565b810190611ada9190612f7a565b60c08701526001600160a01b0390811660a08701521660808501526060840181905260408401919091526020830191909152611b295760405163e0098b0560e01b815260040160405180910390fd5b60808101516001600160a01b0316611b545760405163bc0700ad60e01b815260040160405180910390fd5b611b9383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eea92505050565b815292915050565b6020808701516000908152600289019091526040902054611bd75785602001516040516301b7abc560e71b815260040161095691815260200190565b611bef87868860400151896060015186868a8a6125cc565b50505050505050565b60a082015160009060609033906001600160a01b031615801590611c325750806001600160a01b03168560a001516001600160a01b031614155b15611c695760a0850151604051639c240d1560e01b81526001600160a01b0391821660048201529082166024820152604401610956565b611c7e8560800151630963936560e31b6126bd565b611c9b5760405163639f1d4b60e11b815260040160405180910390fd5b84608001516001600160a01b0316634b1c9b28866040518263ffffffff1660e01b8152600401611ccb9190613041565b6000604051808303816000875af1925050508015611d0b57506040513d6000823e601f3d908101601f19168201604052611d0891908101906130a7565b60015b611dea57611d17613129565b806308c379a003611d7e5750611d2b613145565b80611d365750611d80565b816001600160a01b0316857fc0bac192c521e835d842e99f2a0e19aafb75d28a773f290902595541599e338c83604051611d7091906131cf565b60405180910390a350611e55565b505b3d808015611daa576040519150601f19603f3d011682016040523d82523d6000602084013e611daf565b606091505b50816001600160a01b0316857fc0bac192c521e835d842e99f2a0e19aafb75d28a773f290902595541599e338c83604051611d7091906131f9565b816001600160a01b0316857f054e5e8f0bf80e9ca94abff6efe1e1de51035bc58a218f7e1c5aa39359d083eb83604051611e249190612eb3565b60405180910390a360008581526004880160205260409020805460ff1916600190811790915593509150611e6b9050565b6040805160008082526020820190925292509250505b935093915050565b60016000805160206133c683398151915255565b606063e288fb4a60e01b878787878787604051602401611eac9695949392919061321a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290509695505050505050565b6000600282604051611efc9190613257565b602060405180830381855afa158015611f19573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061084e9190613273565b6000611f488583611870565b9050611f5481846126d9565b6000611f6582876007015486612030565b905080341015611f915760405163c891194b60e01b815260048101829052346024820152604401610956565b604080518581523460208201526001600160a01b0385169187917f9dc3b73405d09bb19251eb01a8d30328c24e25c6780df085e1b278660de0da1f910160405180910390a3505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261097c908490612713565b600083602001511561204457506000611332565b61178c838361328c565b6000805160206133668339815191526000806120686113f7565b9150915061207d8165ffffffffffff16151590565b158061209157504265ffffffffffff821610155b156120b9576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610956565b6120cb60006120c6610cfc565b612295565b506120d7600083612226565b505081546001600160d01b03191690915550565b6120f48261086a565b6120fd8161164f565b6112ac8383612295565b61166460008061239a565b61211c8282610d27565b6108b45760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610956565b6000805160206133e68339815191525460008051602061336683398151915290600160d01b900465ffffffffffff1680156121e8574265ffffffffffff821610156121be57600182015482546001600160d01b0316600160a01b90910465ffffffffffff16600160d01b021782556121e8565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b5060010180546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b60006000805160206133668339815191528361228b576000612246610cfc565b6001600160a01b03161461226d57604051631fe1e13d60e11b815260040160405180910390fd5b6001810180546001600160a01b0319166001600160a01b0385161790555b61178c8484612776565b6000600080516020613366833981519152831580156122cc57506122b7610cfc565b6001600160a01b0316836001600160a01b0316145b156122e4576001810180546001600160a01b03191690555b61178c8484612822565b6000805160206133a68339815191525460ff1661166457604051638dfc202b60e01b815260040160405180910390fd5b80516020808301516040808501518151938401949094528201526060810191909152600090608001604051602081830303815290604052805190602001209050919050565b600065ffffffffffff821115612396576040516306dfcc6560e41b81526030600482015260248101839052604401610956565b5090565b60008051602061336683398151915260006123b36113f7565b835465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b0388161717845591506123f390508165ffffffffffff16151590565b156112ac576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a150505050565b600080612432611339565b90508065ffffffffffff168365ffffffffffff161161245a5761245583826132a3565b611332565b61133265ffffffffffff84166206978061289e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661166457604051631afcd79f60e31b815260040160405180910390fd5b6124c061246f565b6000805160206133668339815191526001600160a01b0382166124f957604051636116401160e11b815260006004820152602401610956565b80546001600160d01b0316600160d01b65ffffffffffff8516021781556112ac600083612226565b611e7361246f565b61253161246f565b6000805160206133a6833981519152805460ff19169055565b6371447da560e11b61255c82846132c2565b6001600160e01b031916146125aa576371447da560e11b61257d82846132c2565b604051636299160160e01b81526001600160e01b0319928316600482015291166024820152604401610956565b60c48110156108b4576040516338c61f7160e01b815260040160405180910390fd5b600087815260038901602052604090205460ff166126b3576005880154604051631f68c5f560e11b81526001600160a01b0390911690633ed18bea9061261a908a90889088906004016132f2565b60006040518083038186803b15801561263257600080fd5b505afa158015612646573d6000803e3d6000fd5b505050600088815260038a0160205260409020805460ff19166001179055508561266d3390565b6001600160a01b0316887fb174a65fbe3c90cc24a620623ea3d1702d72ed9960ddf173a437c8f77a62ffac8886866040516126aa939291906132f2565b60405180910390a45b5050505050505050565b60006126c8836128b4565b8015611332575061133283836128e7565b815163ffffffff168111156108b45781516040516309afb60960e31b815263ffffffff909116600482015260248101829052604401610956565b60006127286001600160a01b03841683612971565b9050805160001415801561274d57508080602001905181019061274b9190613328565b155b1561097c57604051635274afe760e01b81526001600160a01b0384166004820152602401610956565b60006000805160206133868339815191526127918484610d27565b612811576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556127c73390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061084e565b600091505061084e565b5092915050565b600060008051602061338683398151915261283d8484610d27565b15612811576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061084e565b60008183106128ad5781611332565b5090919050565b60006128c7826301ffc9a760e01b6128e7565b801561084e57506128e0826001600160e01b03196128e7565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d9150600051905082801561295a575060208210155b80156129665750600081115b979650505050505050565b60606113328383600084600080856001600160a01b031684866040516129979190613257565b60006040518083038185875af1925050503d80600081146129d4576040519150601f19603f3d011682016040523d82523d6000602084013e6129d9565b606091505b509150915061132d8683836060826129f45761245582612a3b565b8151158015612a0b57506001600160a01b0384163b155b15612a3457604051639996b31560e01b81526001600160a01b0385166004820152602401610956565b5080611332565b805115612a4b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600060208284031215612a7657600080fd5b81356001600160e01b03198116811461133257600080fd5b600060208284031215612aa057600080fd5b5035919050565b6001600160a01b038116811461086757600080fd5b60008060408385031215612acf57600080fd5b823591506020830135612ae181612aa7565b809150509250929050565b600080600060608486031215612b0157600080fd5b8335925060208401359150604084013560048110612b1e57600080fd5b809150509250925092565b600060208284031215612b3b57600080fd5b813561133281612aa7565b803565ffffffffffff81168114612b5c57600080fd5b919050565b600060208284031215612b7357600080fd5b61133282612b46565b60008060008060808587031215612b9257600080fd5b8435612b9d81612aa7565b93506020850135612bad81612aa7565b925060408501359150612bc260608601612b46565b905092959194509250565b803563ffffffff81168114612b5c57600080fd5b801515811461086757600080fd5b600080600060608486031215612c0457600080fd5b8335612c0f81612aa7565b9250612c1d60208501612bcd565b91506040840135612b1e81612be1565b60008083601f840112612c3f57600080fd5b50813567ffffffffffffffff811115612c5757600080fd5b602083019150836020828501011115612c6f57600080fd5b9250929050565b60008060008060408587031215612c8c57600080fd5b843567ffffffffffffffff80821115612ca457600080fd5b612cb088838901612c2d565b90965094506020870135915080821115612cc957600080fd5b50612cd687828801612c2d565b95989497509550505050565b60005b83811015612cfd578181015183820152602001612ce5565b50506000910152565b60008151808452612d1e816020860160208601612ce2565b601f01601f19169290920160200192915050565b8381528215156020820152606060408201526000612d536060830184612d06565b95945050505050565b600080600080600060808688031215612d7457600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115612da057600080fd5b612dac88828901612c2d565b969995985093965092949392505050565b600080600060608486031215612dd257600080fd5b8335612ddd81612aa7565b92506020840135612ded81612aa7565b929592945050506040919091013590565b600080600060408486031215612e1357600080fd5b8335612e1e81612aa7565b9250602084013567ffffffffffffffff811115612e3a57600080fd5b612e4686828701612c2d565b9497909650939450505050565b600060208284031215612e6557600080fd5b61133282612bcd565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612eac57612eac612e84565b5060010190565b6020815260006113326020830184612d06565b65ffffffffffff81811683821601908082111561281b5761281b612e84565b60008085851115612ef557600080fd5b83861115612f0257600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715612f4b57612f4b612f0f565b6040525050565b600067ffffffffffffffff821115612f6c57612f6c612f0f565b50601f01601f191660200190565b60008060008060008060c08789031215612f9357600080fd5b8635955060208701359450604087013593506060870135612fb381612aa7565b92506080870135612fc381612aa7565b915060a087013567ffffffffffffffff811115612fdf57600080fd5b8701601f81018913612ff057600080fd5b8035612ffb81612f52565b6040516130088282612f25565b8281528b602084860101111561301d57600080fd5b82602085016020830137600060208483010152809450505050509295509295509295565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160018060a01b0380821660a08501528060a08601511660c0850152505060c083015160e08084015261178c610100840182612d06565b6000602082840312156130b957600080fd5b815167ffffffffffffffff8111156130d057600080fd5b8201601f810184136130e157600080fd5b80516130ec81612f52565b6040516130f98282612f25565b82815286602084860101111561310e57600080fd5b61311f836020830160208701612ce2565b9695505050505050565b600060033d11156131425760046000803e5060005160e01c5b90565b600060443d10156131535790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561318357505050505090565b828501915081518181111561319b5750505050505090565b843d87010160208285010111156131b55750505050505090565b6131c460208286010187612f25565b509095945050505050565b6040815260006131e26040830184612d06565b828103602093840152600081529190910192915050565b60408152600060408201526060602082015260006113326060830184612d06565b86815285602082015284604082015283606082015282608082015260c060a0820152600061324b60c0830184612d06565b98975050505050505050565b60008251613269818460208701612ce2565b9190910192915050565b60006020828403121561328557600080fd5b5051919050565b808202811582820484141761084e5761084e612e84565b65ffffffffffff82811682821603908082111561281b5761281b612e84565b6001600160e01b031981358181169160048510156132ea5780818660040360031b1b83161692505b505092915050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561333a57600080fd5b815161133281612be156fe0278229f5c76f980110e38383ce9a522090076c3f8b366b016a9b1421b307400eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401a2646970667358221220a8acde286f03daacb1bab1cdb82f0e522536975e8acc417b625c3914e50449e164736f6c63430008180033