0 txs
30 calls
constructor
constructor(uint32 _localDomain, uint32 _version)
functions
attesterManager
viewfunction attesterManager() view returns (address)
getEnabledAttester
viewfunction getEnabledAttester(uint256 index) view returns (address)
getNumEnabledAttesters
viewfunction getNumEnabledAttesters() view returns (uint256)
initializedVersion
viewfunction initializedVersion() view returns (uint64)
isEnabledAttester
viewfunction isEnabledAttester(address attester) view returns (bool)
localDomain
viewfunction localDomain() view returns (uint32)
maxMessageBodySize
viewfunction maxMessageBodySize() view returns (uint256)
NONCE_USED
viewfunction NONCE_USED() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pauser
viewfunction pauser() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
rescuer
viewfunction rescuer() view returns (address)
signatureThreshold
viewfunction signatureThreshold() view returns (uint256)
usedNonces
viewfunction usedNonces(bytes32) view returns (uint256)
version
viewfunction version() view returns (uint32)
acceptOwnership
nonpayablefunction acceptOwnership()
disableAttester
nonpayablefunction disableAttester(address attester)
enableAttester
nonpayablefunction enableAttester(address newAttester)
initialize
nonpayablefunction initialize(address owner_, address pauser_, address rescuer_, address attesterManager_, address[] attesters_, uint256 signatureThreshold_, uint256 maxMessageBodySize_)
pause
nonpayablefunction pause()
receiveMessage
nonpayablefunction receiveMessage(bytes message, bytes attestation) returns (bool success)
rescueERC20
nonpayablefunction rescueERC20(address tokenContract, address to, uint256 amount)
sendMessage
nonpayablefunction sendMessage(uint32 destinationDomain, bytes32 recipient, bytes32 destinationCaller, uint32 minFinalityThreshold, bytes messageBody)
setMaxMessageBodySize
nonpayablefunction setMaxMessageBodySize(uint256 newMaxMessageBodySize)
setSignatureThreshold
nonpayablefunction setSignatureThreshold(uint256 newSignatureThreshold)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateAttesterManager
nonpayablefunction updateAttesterManager(address newAttesterManager)
updatePauser
nonpayablefunction updatePauser(address _newPauser)
updateRescuer
nonpayablefunction updateRescuer(address newRescuer)
events
AttesterDisabled
event AttesterDisabled(address indexed attester)
AttesterEnabled
event AttesterEnabled(address indexed attester)
AttesterManagerUpdated
event AttesterManagerUpdated(address indexed previousAttesterManager, address indexed newAttesterManager)
Initialized
event Initialized(uint64 version)
MaxMessageBodySizeUpdated
event MaxMessageBodySizeUpdated(uint256 newMaxMessageBodySize)
MessageReceived
event MessageReceived(address indexed caller, uint32 sourceDomain, bytes32 indexed nonce, bytes32 sender, uint32 indexed finalityThresholdExecuted, bytes messageBody)
MessageSent
event MessageSent(bytes message)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Pause
event Pause()
PauserChanged
event PauserChanged(address indexed newAddress)
RescuerChanged
event RescuerChanged(address indexed newRescuer)
SignatureThresholdUpdated
event SignatureThresholdUpdated(uint256 oldSignatureThreshold, uint256 newSignatureThreshold)
Unpause
event Unpause()
errors
No errors.
creation bytecode
0x60c06040526002805460ff60a01b191690553480156200001e57600080fd5b506040516200470638038062004706833981810160405260408110156200004457600080fd5b508051602090910151818133620000646200005e620000ab565b620000af565b6200006f33620000d9565b60016004556200007f8162000187565b506001600160e01b031960e092831b8116608052911b1660a052620000a3620001f2565b5050620004ac565b3390565b600180546001600160a01b0319169055620000d681620002b1602090811b62001abc17901c565b50565b6001600160a01b03811662000135576040805162461bcd60e51b815260206004820181905260248201527f496e76616c6964206174746573746572206d616e616765722061646472657373604482015290519081900360640190fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0cee1b7ae04f3c788dd3a46c6fa677eb95b913611ef7ab59524fdc09d346021990600090a35050565b6007546001600160a01b03163314620001e7576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b620000d68162000301565b6000620001fe62000401565b805490915068010000000000000000900460ff1615620002505760405162461bcd60e51b8152600401808060200182810382526025815260200180620046e16025913960400191505060405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b03908117825560408051918252517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29181900360200190a150565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166200035d576040805162461bcd60e51b815260206004820152601c60248201527f4e6577206174746573746572206d757374206265206e6f6e7a65726f00000000604482015290519081900360640190fd5b620003788160056200042560201b62001b311790919060201c565b620003ca576040805162461bcd60e51b815260206004820152601860248201527f417474657374657220616c726561647920656e61626c65640000000000000000604482015290519081900360640190fd5b6040516001600160a01b038216907f5b99bab45c72ce67e89466dbc47480b9c1fde1400e7268bbf463b8354ee4653f90600090a250565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b60006200043c836001600160a01b03841662000445565b90505b92915050565b600062000453838362000494565b6200048b575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200043f565b5060006200043f565b60009081526001919091016020526040902054151590565b60805160e01c60a05160e01c6141f2620004ef600039806109305280610d4e52806120fb5250806107a6528061095152806117915280611f6552506141f26000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638456cb591161010f578063b2118a8d116100a2578063e30c397811610071578063e30c397814610680578063f2fde38b14610688578063fae36879146106bb578063feb61724146106ee576101e5565b8063b2118a8d146105d0578063bbde537414610613578063beb673d814610630578063de7769d41461064d576101e5565b80639b0d94b7116100de5780639b0d94b7146105b05780639fd0506d146105b8578063a82f2e26146105c0578063af47b9bb146105c8576101e5565b80638456cb591461057b5780638d3638f4146105835780638da5cb5b1461058b57806392492c6814610593576101e5565b806354fd4d50116101875780635f747e7d116101565780635f747e7d1461048d57806379ba5097146105385780637af82f60146105405780637de25ae414610573576101e5565b806354fd4d501461035b578063554bab3c1461037c57806357ecfd28146103af5780635c975abb14610485576101e5565b80632d025080116101c35780632d025080146102d557806338a63183146103085780633f4ba83a1461033957806351079a5314610341576101e5565b806308828eb7146101ea57806314b157ab1461020f5780632ab60045146102a2575b600080fd5b6101f261070b565b6040805167ffffffffffffffff9092168252519081900360200190f35b6102a0600480360360a081101561022557600080fd5b63ffffffff8235811692602081013592604082013592606083013516919081019060a08101608082013564010000000081111561026157600080fd5b82018360208201111561027357600080fd5b8035906020019184600183028401116401000000008311171561029557600080fd5b50909250905061071a565b005b6102a0600480360360208110156102b857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a21565b6102a0600480360360208110156102eb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a35565b610310610c61565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102a0610c7d565b610349610d40565b60408051918252519081900360200190f35b610363610d4c565b6040805163ffffffff9092168252519081900360200190f35b6102a06004803603602081101561039257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d70565b610471600480360360408110156103c557600080fd5b8101906020810181356401000000008111156103e057600080fd5b8201836020820111156103f257600080fd5b8035906020019184600183028401116401000000008311171561041457600080fd5b91939092909160208101903564010000000081111561043257600080fd5b82018360208201111561044457600080fd5b8035906020019184600183028401116401000000008311171561046657600080fd5b509092509050610d81565b604080519115158252519081900360200190f35b6104716111ee565b6102a0600480360360e08110156104a357600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101358216926040820135831692606083013516919081019060a0810160808201356401000000008111156104f357600080fd5b82018360208201111561050557600080fd5b8035906020019184602083028401116401000000008311171561052757600080fd5b91935091508035906020013561120f565b6102a06115fb565b6104716004803603602081101561055657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661169b565b6103496116b0565b6102a06116b5565b61036361178f565b6103106117b3565b6102a0600480360360208110156105a957600080fd5b50356117cf565b6103106117e0565b6103106117fc565b610349611818565b61034961181e565b6102a0600480360360608110156105e657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611824565b6102a06004803603602081101561062957600080fd5b50356118ba565b6103106004803603602081101561064657600080fd5b5035611949565b6102a06004803603602081101561066357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611956565b610310611967565b6102a06004803603602081101561069e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611983565b6102a0600480360360208110156106d157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a1b565b6103496004803603602081101561070457600080fd5b5035611aaa565b6000610715611b5c565b905090565b60025474010000000000000000000000000000000000000000900460ff16156107a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168663ffffffff16141561083f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f446f6d61696e206973206c6f63616c20646f6d61696e00000000000000000000604482015290519081900360640190fd5b601c548111156108b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65737361676520626f64792065786365656473206d61782073697a65000000604482015290519081900360640190fd5b8461091c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f526563697069656e74206d757374206265206e6f6e7a65726f00000000000000604482015290519081900360640190fd5b600061092733611b76565b9050600061097c7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a858b8b8b8b8b611b8f565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036816040518080602001828103825283818151815260200191508051906020019080838360005b838110156109dd5781810151838201526020016109c5565b50505050905090810190601f168015610a0a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a15050505050505050565b610a29611c42565b610a3281611cec565b50565b60075473ffffffffffffffffffffffffffffffffffffffff163314610abb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b6000610ac5610d40565b905060018111610b3657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6f2066657720656e61626c65642061747465737465727300000000000000604482015290519081900360640190fd5b6004548111610ba657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e6174757265207468726573686f6c6420697320746f6f206c6f770000604482015290519081900360640190fd5b610bb1600583611dc7565b610c1c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f417474657374657220616c72656164792064697361626c656400000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316907f78e573a18c75957b7cadaab01511aa1c19a659f06ecf53e01de37ed92d3261fc90600090a25050565b60035473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff163314610ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140c16022913960400191505060405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60006107156005611de9565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d78611c42565b610a3281611df4565b60025460009074010000000000000000000000000000000000000000900460ff1615610e0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b600080600080600080610e238b8b8b8b611ed5565b6000868152601d6020526040902060019055949a509298509096509450925090506107d063ffffffff83161015610fb3578273ffffffffffffffffffffffffffffffffffffffff16637c92f219868685856040518563ffffffff1660e01b8152600401808563ffffffff1681526020018481526020018363ffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ede578181015183820152602001610ec6565b50505050905090810190601f168015610f0b5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b505050506040513d6020811015610f5757600080fd5b5051610fae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141956028913960400191505060405180910390fd5b61110d565b8273ffffffffffffffffffffffffffffffffffffffff166311cffb67868685856040518563ffffffff1660e01b8152600401808563ffffffff1681526020018481526020018363ffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103d578181015183820152602001611025565b50505050905090810190601f16801561106a5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561108c57600080fd5b505af11580156110a0573d6000803e3d6000fd5b505050506040513d60208110156110b657600080fd5b505161110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613f8f6026913960400191505060405180910390fd5b8163ffffffff16863373ffffffffffffffffffffffffffffffffffffffff167fff48c13eda96b1cceacc6b9edeedc9e9db9d6226afbc30146b720c19d3addb1c888886604051808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561119f578181015183820152602001611187565b50505050905090810190601f1680156111cc5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a4600196505050505050505b949350505050565b60025474010000000000000000000000000000000000000000900460ff1681565b6000611219612382565b805490915060ff68010000000000000000820416159067ffffffffffffffff166000811580156112465750825b905060008267ffffffffffffffff16600114801561126a5750611268306123a6565b155b905081806112755750805b6112ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ef26025913960400191505060405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561132b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b73ffffffffffffffffffffffffffffffffffffffff8d166113ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f776e657220697320746865207a65726f206164647265737300000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8a16611419576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140646023913960400191505060405180910390fd5b87871115611472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613f6a6025913960400191505060405180910390fd5b600086116114e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d61784d657373616765426f647953697a65206973207a65726f000000000000604482015290519081900360640190fd5b6114ea8d6123ac565b6114f38b611cec565b6114fc8c611df4565b6115058a6123dd565b61150e866124d6565b8760005b818110156115535761154b8b8b8381811061152957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612511565b600101611512565b5061155d8861264d565b5060008052601d60205260017f0a51588b1664495f089dd83d2d26f247920f94a57a4a09f20cf068efc8f82bd45583156115ec5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604080516001815290517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29181900360200190a15b50505050505050505050505050565b60006116056127e9565b90508073ffffffffffffffffffffffffffffffffffffffff16611626611967565b73ffffffffffffffffffffffffffffffffffffffff1614611692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613f176029913960400191505060405180910390fd5b610a32816123ac565b60006116a86005836127ed565b90505b919050565b600181565b60025473ffffffffffffffffffffffffffffffffffffffff163314611725576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140c16022913960400191505060405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6117d7611c42565b610a32816124d6565b60075473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60045481565b601c5481565b60035473ffffffffffffffffffffffffffffffffffffffff163314611894576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806140406024913960400191505060405180910390fd5b6118b573ffffffffffffffffffffffffffffffffffffffff8416838361280f565b505050565b60075473ffffffffffffffffffffffffffffffffffffffff16331461194057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b610a328161264d565b60006116a860058361289c565b61195e611c42565b610a32816123dd565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b61198b611c42565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556119d66117b3565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60075473ffffffffffffffffffffffffffffffffffffffff163314611aa157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b610a3281612511565b601d6020526000908152604090205481565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611b538373ffffffffffffffffffffffffffffffffffffffff84166128a8565b90505b92915050565b6000611b66612382565b5467ffffffffffffffff16905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b60608989896000801b8a8a8a8a60008b8b604051602001808c63ffffffff1660e01b81526004018b63ffffffff1660e01b81526004018a63ffffffff1660e01b81526004018981526020018881526020018781526020018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b8152600401838380828437808301925050509b50505050505050505050505060405160208183030381529060405290509998505050505050505050565b611c4a6127e9565b73ffffffffffffffffffffffffffffffffffffffff16611c686117b3565b73ffffffffffffffffffffffffffffffffffffffff1614611cea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b73ffffffffffffffffffffffffffffffffffffffff8116611d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613f40602a913960400191505060405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b6000611b538373ffffffffffffffffffffffffffffffffffffffff84166128f2565b60006116a8826129d6565b73ffffffffffffffffffffffffffffffffffffffff8116611e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613eca6028913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60008060008060006060611eeb8a8a8a8a6129da565b6000611f3160008c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050612bf79050565b9050611f5e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612c1b565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fb07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612d59565b63ffffffff161461202257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642064657374696e6174696f6e20646f6d61696e000000000000604482015290519081900360640190fd5b600061204f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612d8a565b146120f45761205d33611b76565b6120887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612d8a565b146120f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642063616c6c657220666f72206d657373616765000000000000604482015290519081900360640190fd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166121467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612dbb565b63ffffffff16146121b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206d6573736167652076657273696f6e000000000000000000604482015290519081900360640190fd5b6121e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612deb565b6000818152601d60205260409020549097501561226157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f6e636520616c726561647920757365640000000000000000000000000000604482015290519081900360640190fd5b61228c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612e1c565b95506122b97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612e4c565b94506122ee6122e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612e7d565b612eae565b935061231b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612eb1565b925061237261234b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612ee2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612f51565b9150509499939850945094509450565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b3b151590565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610a3281611abc565b73ffffffffffffffffffffffffffffffffffffffff811661245f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c6964206174746573746572206d616e616765722061646472657373604482015290519081900360640190fd5b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f0cee1b7ae04f3c788dd3a46c6fa677eb95b913611ef7ab59524fdc09d346021990600090a35050565b601c8190556040805182815290517fb13bf6bebed03d1b318e3ea32e4b2a3ad9f5e2312cdf340a2f4bbfaee39f928d9181900360200190a150565b73ffffffffffffffffffffffffffffffffffffffff811661259357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4e6577206174746573746572206d757374206265206e6f6e7a65726f00000000604482015290519081900360640190fd5b61259e600582611b31565b61260957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f417474657374657220616c726561647920656e61626c65640000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f5b99bab45c72ce67e89466dbc47480b9c1fde1400e7268bbf463b8354ee4653f90600090a250565b806126b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964207369676e6174757265207468726573686f6c640000000000604482015290519081900360640190fd5b6126c36005611de9565b81111561273157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e6577207369676e6174757265207468726573686f6c6420746f6f2068696768604482015290519081900360640190fd5b6004548114156127a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5369676e6174757265207468726573686f6c6420616c72656164792073657400604482015290519081900360640190fd5b6004805490829055604080518281526020810184905281517f149153f58b4da003a8cfd4523709a202402182cb5aa335046911277a1be6eede929181900390910190a15050565b3390565b6000611b538373ffffffffffffffffffffffffffffffffffffffff8416612f95565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526118b5908490612fad565b6000611b538383613085565b60006128b48383612f95565b6128ea57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611b56565b506000611b56565b600081815260018301602052604081205480156129cc5783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061294357fe5b906000526020600020015490508087600001848154811061296057fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061299057fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611b56565b6000915050611b56565b5490565b6004546041028114612a4d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206174746573746174696f6e206c656e677468000000000000604482015290519081900360640190fd5b60008085856040518083838082843760405192018290039091209450600093505050505b600454811015612bee576000612a906041838102908101908789613e7f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939450612ad39250869150849050613103565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612b6f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c6964207369676e6174757265206f72646572206f72206475706500604482015290519081900360640190fd5b612b788161169b565b612be357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c6964207369676e61747572653a206e6f7420617474657374657200604482015290519081900360640190fd5b935050600101612a71565b50505050505050565b815160009060208401612c1264ffffffffff8516828461310f565b95945050505050565b612c467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216613170565b612cb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d616c666f726d6564206d657373616765000000000000000000000000000000604482015290519081900360640190fd5b6094612cde7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166131ad565b6bffffffffffffffffffffffff161015610a3257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206d6573736167653a20746f6f2073686f7274000000000000604482015290519081900360640190fd5b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600860046131c1565b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316606c60206131e2565b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083168260046131c1565b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600c60206131e2565b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166004806131c1565b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316602c60206131e2565b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316604c60206131e2565b90565b60006116a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316609060046131c1565b60006116a8609480612f157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000086166131ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff910316600061338d565b6060600080612f5f846131ad565b6bffffffffffffffffffffffff1690506040519150819250612f84848360200161341d565b508181016020016040529052919050565b60009081526001919091016020526040902054151590565b600061300f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135c29092919063ffffffff16565b8051909150156118b55780806020019051602081101561302e57600080fd5b50516118b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806140e3602a913960400191505060405180910390fd5b815460009082106130e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ea86022913960400191505060405180910390fd5b8260000182815481106130f057fe5b9060005260206000200154905092915050565b6000611b5383836135d1565b60008061311c8484613661565b905060405181111561312c575060005b8061315a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050613169565b6131658585856136d3565b9150505b9392505050565b600061317b826136e6565b64ffffffffff1664ffffffffff1415613196575060006116ab565b60006131a1836136ec565b60405110159392505050565b60181c6bffffffffffffffffffffffff1690565b60008160200360080260ff166131d88585856131e2565b901c949350505050565b600060ff82166131f457506000613169565b6131fd846131ad565b6bffffffffffffffffffffffff166132188460ff8516613661565b11156132f75761325961322a85613716565b6bffffffffffffffffffffffff16613241866131ad565b6bffffffffffffffffffffffff16858560ff1661372a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132bc5781810151838201526020016132a4565b50505050905090810190601f1680156132e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff161115613354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614087603a913960400191505060405180910390fd5b60088202600061336386613716565b6bffffffffffffffffffffffff169050600061337e83613885565b91909501511695945050505050565b60008061339986613716565b6bffffffffffffffffffffffff1690506133b2866136ec565b6133c6856133c08489613661565b90613661565b11156133f5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506111e6565b6133ff8186613661565b90506134138364ffffffffff16828661310f565b9695505050505050565b6000613428836138ce565b61347d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061410d6028913960400191505060405180910390fd5b61348683613170565b6134db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614135602b913960400191505060405180910390fd5b60006134e6846131ad565b6bffffffffffffffffffffffff169050600061350185613716565b6bffffffffffffffffffffffff1690506000806040519150858211156135275760206060fd5b8386858560045afa90508061359d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6964656e74697479204f4f470000000000000000000000000000000000000000604482015290519081900360640190fd5b6135b76135a9886136e6565b64ffffffffff1687866136d3565b979650505050505050565b60606111e684846000856138e0565b6000815160411461364357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61341386828585613a8f565b81810182811015611b5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60d81c90565b60006136f7826131ad565b61370083613716565b016bffffffffffffffffffffffff169050919050565b60781c6bffffffffffffffffffffffff1690565b6060600061373786613c7d565b915050600061374586613c7d565b915050600061375386613c7d565b915050600061376186613c7d565b915050838383836040516020018080614160603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a8201526050016021613ffd82397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b60006138d982613d51565b1592915050565b60608247101561393b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613fd76026913960400191505060405180910390fd5b613944856123a6565b6139af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613a1857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016139db565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613a7a576040519150601f19603f3d011682016040523d82523d6000602084013e613a7f565b606091505b50915091506135b7828286613d79565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613fb56022913960400191505060405180910390fd5b8360ff16601b1480613b1f57508360ff16601c145b613b74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061401e6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613bd0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612c1257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600080601f5b600f8160ff161115613ce55760ff600882021684901c613ca281613df9565b61ffff16841793508160ff16601014613cbd57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613c83565b50600f5b60ff8160ff161015613d4b5760ff600882021684901c613d0881613df9565b61ffff16831792508160ff16600014613d2357601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ce9565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315613d88575081613169565b825115613d985782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156132bc5781810151838201526020016132a4565b6000613e0b60048360ff16901c613e29565b60ff161760081b62ffff0016613e2082613e29565b60ff1617919050565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f84169182908110613e7057fe5b016020015160f81c9392505050565b60008085851115613e8e578182fd5b83861115613e9a578182fd5b505082019391909203915056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64735061757361626c653a206e65772070617573657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20696e76616c696420696e697469616c697a6174696f6e4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206e6577206f776e6572526573637561626c653a206e6577207265736375657220697320746865207a65726f20616464726573735369676e6174757265207468726573686f6c6420657863656564732061747465737465727368616e646c655265636569766546696e616c697a65644d6573736167652829206661696c656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f666673657420307845434453413a20696e76616c6964207369676e6174757265202776272076616c7565526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657241747465737465724d616e6167657220697320746865207a65726f206164647265737354797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735061757361626c653a2063616c6c6572206973206e6f7420746865207061757365725361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c69636520697320617420307868616e646c6552656365697665556e66696e616c697a65644d6573736167652829206661696c6564a2646970667358221220a00165ce6e6796a53230fb3366595e0ea95a7bf3ce20f2ff3464ada879d3f15764736f6c63430007060033496e697469616c697a61626c653a20696e76616c696420696e697469616c697a6174696f6e00000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000001