0 txs
1.1k calls
constructor
constructor()
functions
chain
viewfunction chain() view returns (string)
checkOrderInfo
viewfunction checkOrderInfo(tuple orderInfo) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
EXPIRATION
viewfunction EXPIRATION() view returns (uint256)
getOrderHash
viewfunction getOrderHash(uint256 idx) view returns (bytes32)
getOrderHashLength
viewfunction getOrderHashLength() view returns (uint256)
getOrderHashs
viewfunction getOrderHashs() view returns (bytes32[])
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSwapRequest
viewfunction getSwapRequest(bytes32 orderHash) view returns (tuple)
getTakerAddresses
viewfunction getTakerAddresses() view returns (string[] receivers, string[] senders)
getWhiteListToken
viewfunction getWhiteListToken(uint256 nonce) view returns (tuple token)
getWhiteListTokenLength
viewfunction getWhiteListTokenLength() view returns (uint256)
getWhiteListTokens
viewfunction getWhiteListTokens() view returns (tuple[] tokens)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAKER_ROLE
viewfunction MAKER_ROLE() view returns (bytes32)
MAX_MARKER_CONFIRM_DELAY
viewfunction MAX_MARKER_CONFIRM_DELAY() view returns (uint256)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TAKER_ROLE
viewfunction TAKER_ROLE() view returns (bytes32)
takerReceivers
viewfunction takerReceivers(uint256) view returns (string)
takerSenders
viewfunction takerSenders(uint256) view returns (string)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
whiteListTokens
viewfunction whiteListTokens(bytes32) view returns (string chain, string symbol, string addr, uint8 decimals, uint256 amount)
addSwapRequest
nonpayablefunction addSwapRequest(tuple orderInfo, bool inByContract, bool outByContract)
addWhiteListTokens
nonpayablefunction addWhiteListTokens(tuple[] tokens)
cancelSwapRequest
nonpayablefunction cancelSwapRequest(tuple orderInfo)
confirmSwapRequest
nonpayablefunction confirmSwapRequest(tuple orderInfo, bytes[] inTxHashs)
forceCancelSwapRequest
nonpayablefunction forceCancelSwapRequest(tuple orderInfo)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, string chain_)
makerConfirmSwapRequest
nonpayablefunction makerConfirmSwapRequest(tuple orderInfo, bytes[] outTxHashs)
makerRejectSwapRequest
nonpayablefunction makerRejectSwapRequest(tuple orderInfo)
pause
nonpayablefunction pause()
removeWhiteListTokens
nonpayablefunction removeWhiteListTokens(tuple[] tokens)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackSwapRequest
nonpayablefunction rollbackSwapRequest(tuple orderInfo)
setTakerAddresses
nonpayablefunction setTakerAddresses(string[] takerReceivers_, string[] takerSenders_)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AddSwapRequest
event AddSwapRequest(address indexed taker, bool inByContract, bool outByContract, ((string chain, address maker, uint256 nonce, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] inTokenset, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] outTokenset, string[] inAddressList, string[] outAddressList, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester) order, bytes32 orderHash, bytes orderSign) orderInfo)
AddWhiteListToken
event AddWhiteListToken((string chain, string symbol, string addr, uint8 decimals, uint256 amount) token)
CancelSwapRequest
event CancelSwapRequest(address indexed taker, bytes32 orderHash)
ConfirmSwapRequest
event ConfirmSwapRequest(address indexed taker, bytes32 orderHash)
ForceCancelSwapRequest
event ForceCancelSwapRequest(bytes32 orderHash)
Initialized
event Initialized(uint64 version)
MakerConfirmSwapRequest
event MakerConfirmSwapRequest(address indexed maker, bytes32 orderHash)
MakerRejectSwapRequest
event MakerRejectSwapRequest(address indexed maker, bytes32 orderHash)
Paused
event Paused(address account)
RemoveWhiteListToken
event RemoveWhiteListToken((string chain, string symbol, string addr, uint8 decimals, uint256 amount) token)
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)
RollbackSwapRequest
event RollbackSwapRequest(address indexed taker, bytes32 orderHash)
SetTakerAddresses
event SetTakerAddresses(string[] receivers, string[] senders)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100c257306080525f5160206145255f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161445e90816100c782396080518181816118320152611ada0152f35b6001600160401b0319166001600160401b039081175f5160206145255f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a71461252257508063020641ac1461236a57806305e0a9b51461234d57806318b5477a1461201a578063248a9ca314611fe35780632f2ff15d14611f9957806333abcb7014611f7c578063347b423114611e4757806336568abe14611e035780633dd4bab314611dd05780633f4ba83a14611d5257806348193a8714611c6a5780634f1ef28614611a9d578063500a217c1461188657806352d1902d146118205780635489583c146117de578063577bcce5146116b95780635c975abb1461168b5780637b66e189146115d55780637c331170146113025780638456cb59146112915780638582a84c146111a157806391d148541461114c578063a217fddf14611132578063a38a938f146110bb578063a4a85ee614610f4d578063ad3cb1cc14610f06578063b983456a14610ba9578063b9f0d68e14610b07578063bb4b5734146101df578063bd32961b14610a51578063c72c5be214610934578063c763e5a1146108f1578063c8eff9ed146108b7578063d547741f14610866578063dd4eddd4146106c1578063e22ae4cd1461054c578063e477a57114610496578063f399e22e14610222578063f65de94a146101e45763faa5042a146101df575f80fd5b612c63565b3461021e575f36600319011261021e5760206040517f508ee82d0bdf04e000303ab4f02b172e60c5f2d35b2e559b05bed2cf403bb58b8152f35b5f80fd5b3461021e57604036600319011261021e5761023b612642565b6024356001600160401b03811161021e5761025a9036906004016125e8565b905f5160206144095f395f51905f525460ff8160401c1615916001600160401b0382168015908161048e575b6001149081610484575b15908161047b575b5061046c5767ffffffffffffffff1982166001175f5160206144095f395f51905f525561030d9183610440575b506102ce6141c6565b6102d66141c6565b6102de6141c6565b6102e66141c6565b60ff195f5160206143e95f395f51905f5254165f5160206143e95f395f51905f525561393a565b5081516001600160401b03811161042c576103328161032c5f54612abc565b5f612ee0565b602092601f82116001146103cd57610362929382915f926103c2575b50508160011b915f199060031b1c19161790565b5f555b61036b57005b68ff0000000000000000195f5160206144095f395f51905f5254165f5160206144095f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b01519050848061034e565b601f198216935f8052805f20915f5b86811061041457508360019596106103fc575b505050811b015f55610365565b01515f1960f88460031b161c191690558380806103ef565b919260206001819286850151815501940192016103dc565b634e487b7160e01b5f52604160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f5160206144095f395f51905f5255846102c5565b63f92ee8a960e01b5f5260045ffd5b90501585610298565b303b159150610290565b849150610286565b3461021e575f36600319011261021e576040518060206001549283815201809260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6905f5b81811061053657505050816104f49103826125ac565b604051918291602083019060208452518091526040830191905f5b81811061051d575050500390f35b825184528594506020938401939092019160010161050f565b82548452602090930192600192830192016104de565b3461021e57602036600319011261021e575f60e060405161056c81612575565b60608152606060208201528260408201528260608201528260808201528260a08201528260c082015201526004355f52600360205260405f20604051906105b282612575565b6105bb81612d74565b82526105c960018201612d74565b6020830190815260028201549160408401919060ff841660078110156106ad578352606085019360018060a01b038160081c1685526080860160ff8260a81c161515815260ff60a088019260b01c161515825261066a600460038501549460c08a0195865201549460e089019586526106576040519960208b525161010060208c01526101208b0190612bb4565b9051898203601f190160408b0152612bb4565b94519560078710156106ad578796606088015260018060a01b03905116608087015251151560a086015251151560c08501525160e0840152516101008301520390f35b634e487b7160e01b5f52602160045260245ffd5b3461021e57602036600319011261021e576004356001600160401b03811161021e576106f36020913690600401612821565b6106fb6134df565b610703613603565b61070c8161362a565b0151805f52600360205261073360018060a01b03600260405f20015460081c163314612e51565b805f52600360205260ff600260405f2001541660078110156106ad5760020361080e57805f52600360205260ff600260405f20015460b01c166107c957805f526003602052600260405f2001600160ff19825416179055805f52600360205243600360405f2001556040519081527f687ac0baa99a9d73568a904a4f9b4682a4c56fdb2baf4f9d38547a09056c860760203392a2005b60405162461bcd60e51b815260206004820152601f60248201527f6f757420627920636f6e74726163742063616e6e6f7420726f6c6c6261636b006044820152606490fd5b60405162461bcd60e51b815260206004820152602a60248201527f73776170207265717565737420737461747573206973206e6f74206d616b657260448201526917d8dbdb999a5c9b595960b21b6064820152608490fd5b3461021e57604036600319011261021e576108b560043561088561262c565b906108b06108ab825f525f5160206143c95f395f51905f52602052600160405f20015490565b6135bd565b613afe565b005b3461021e575f36600319011261021e5760206040517f70d8f6b4dfca278d41482e0778a0bf123d87b86b23b71cc0ef42c2f082e8053a8152f35b3461021e575f36600319011261021e5761093060405161091c81610915815f612af4565b03826125ac565b604051918291602083526020830190612b90565b0390f35b3461021e575f36600319011261021e576007546109508161266c565b9061095e60405192836125ac565b80825261096d601f199161266c565b015f5b818110610a3a57825f5b8151811015610a24578061098f600192612a8f565b90549060031b1c5f52600960205260405f206004604051916109b083612591565b6040516109c1816109158185612af4565b83526040516109d68161091581898601612af4565b60208401526040516109ef816109158160028601612af4565b604084015260ff600382015416606084015201546080820152610a128285612f25565b52610a1d8184612f25565b500161097a565b6040516020808252819061093090820185612c7f565b602090610a4561338b565b82828601015201610970565b3461021e57602036600319011261021e576004355f526009602052610adc60405f2060405190610a8c82610a858184612af4565b03836125ac565b604051610aa0816109158160018601612af4565b610af8604051610ab7816109158160028801612af4565b610aea600460ff6003870154169501549360405197889760a0895260a0890190612b90565b908782036020890152612b90565b908582036040870152612b90565b91606084015260808301520390f35b3461021e57602036600319011261021e57600435600154811015610b7557600154811015610b615760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60154604051908152602090f35b634e487b7160e01b5f52603260045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b6044820152606490fd5b3461021e57610bb7366129b7565b610bbf61354e565b610bc7613603565b610bd08261362a565b602082015191825f52600360205260405f2060405190610bef82612575565b610bf881612d74565b8252610c0660018201612d74565b6020830152600281015491604081019160ff841660078110156106ad5760e091600491855260018060a01b038660081c16606085015260ff8660a81c161515608085015260ff60a085019660b01c1615158652600381015460c08501520154910152610c8060018060a01b03602085510151163314612ffc565b5160078110156106ad576001610c969114612e8f565b5115610d1357610cba91505160808101519060c061010082015191015191336136ea565b805f526003602052600260405f2001600260ff19825416179055805f52600360205243600360405f2001556040519081527fa62d33d023f8a43030ca7ac80fe4f281147d0f38b3d70fe070a1738424de470f60203392a2005b516080015151815103610ec157815f526003602052600160405f200190805190600160401b821161042c578254828455808310610e4a575b50602001915f5260205f20915f905b828210610d6a5750505050610cba565b80518051906001600160401b03821161042c57610d9182610d8b8854612abc565b88612ee0565b602090601f8311600114610de15792610dc7836001959460209487965f92610dd65750508160011b915f199060031b1c19161790565b87555b01940191019092610d5a565b015190508b8061034e565b90601f19831691875f52815f20925f5b818110610e325750936020936001969387969383889510610e1a575b505050811b018755610dca565b01515f1960f88460031b161c191690558a8080610e0d565b92936020600181928786015181550195019301610df1565b835f528260205f2091820191015b818110610e655750610d4b565b80610e7260019254612abc565b80610e7f575b5001610e58565b601f81118314610e9457505f81555b87610e78565b610eb090825f5283601f60205f20920160051c82019101612eca565b805f525f6020812081835555610e8e565b60405162461bcd60e51b815260206004820152601760248201527f77726f6e67206f757454784861736873206c656e6774680000000000000000006044820152606490fd5b3461021e575f36600319011261021e57610930604051610f276040826125ac565b60058152640352e302e360dc1b6020820152604051918291602083526020830190612b90565b3461021e57602036600319011261021e576004356001600160401b03811161021e57610f7f6020913690600401612821565b610f876134df565b610f8f613603565b610f988161362a565b0151805f526003602052610fbf60018060a01b03600260405f20015460081c163314612e51565b805f52600360205260ff600260405f2001541660078110156106ad576001610fe7911461303a565b805f526003602052600460405f200154610e1081018091116110a757421061106257805f526003602052600260405f2001600560ff19825416179055805f52600360205243600360405f2001556040519081527fe8ba3f3f3a6d41466268c349d9f92c9f88c057d168743198d5d5b28112a6495260203392a2005b60405162461bcd60e51b815260206004820152601860248201527f737761702072657175657374206e6f742074696d656f757400000000000000006044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b3461021e57602036600319011261021e5760043560065481101561021e57600654811015610b615760065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0161091561091c6109309260405192838092612af4565b634e487b7160e01b5f525f60045260245ffd5b3461021e575f36600319011261021e5760206040515f8152f35b3461021e57604036600319011261021e5761116561262c565b6004355f525f5160206143c95f395f51905f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461021e57602036600319011261021e576004356001600160401b03811161021e576111d1903690600401612683565b6111d9613490565b5f5b81518110156108b557806111fa6111f460019385612f25565b51613a8d565b61120381614107565b61120f575b50016111db565b5f5260096020525f60046040822061122681613442565b611231858201613442565b61123d60028201613442565b82600382015501557f322eb65de8ac88004dcdd926eca55e4a24ac3552ff6599c572ef65955c077ffa6112886112738386612f25565b51604051918291602083526020830190612c0c565b0390a183611208565b3461021e575f36600319011261021e576112a9613490565b6112b1613603565b600160ff195f5160206143e95f395f51905f525416175f5160206143e95f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461021e57604036600319011261021e576004356001600160401b03811161021e576113329036906004016127a3565b6024356001600160401b03811161021e576113519036906004016127a3565b9061135a613490565b5f5b600554811015611389578061137b611375600193612a77565b506133b8565b805460ff191690550161135c565b506005545f6005558061158c575b505f5b81518110156113fc576113ad8183612f25565b5190600554600160401b81101561042c578060016113d092016005556005612aa7565b61111f576001926113e091612f39565b6113ec61137582612a77565b805460ff1916831790550161139a565b826006545f60065580611543575b505f5b8151811015611459576114208183612f25565b5190600654600160401b81101561042c5780600161144392016006556006612aa7565b61111f5760019261145391612f39565b0161140d565b60405160408101906040815260055480925260608101602060408460051b840101019260055f5260205f20915f905b8282106115155785858082036020820152600654808352602083019060208160051b8501019360065f5260205f20925f915b8383106114e9577fcd8f5b01816ea1fd62930707db3b2e211841775baab35b28e1486e279cff237d86880387a1005b9091929395602060016115068193601f198682030187528a612af4565b980193019301919392906114ba565b90919294602060016115358193601f19603f198a83030101865289612af4565b970192019201909291611488565b60065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f908101905b81811061157a575061140a565b80611586600192613442565b0161156d565b60055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0908101905b8181106115c35750611397565b806115cf600192613442565b016115b6565b3461021e57602036600319011261021e576115ee61338b565b506115fa600435612a8f565b90549060031b1c5f52600960205261093060405f2060046040519161161e83612591565b60405161162f816109158185612af4565b8352604051611645816109158160018601612af4565b602084015260405161165e816109158160028601612af4565b604084015260ff600382015416606084015201546080820152604051918291602083526020830190612c0c565b3461021e575f36600319011261021e57602060ff5f5160206143e95f395f51905f5254166040519015158152f35b3461021e575f36600319011261021e576005546116d58161266c565b906116e360405192836125ac565b80825260055f9081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0602084015b8383106117b957600654856117268261266c565b9161173460405193846125ac565b80835260065f9081527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f602085015b838310611794576117868561093088604051938493604085526040850190612bb4565b908382036020850152612bb4565b6001602081926040516117ab816109158189612af4565b815201920192019190611763565b6001602081926040516117d0816109158189612af4565b815201920192019190611712565b3461021e57602036600319011261021e576004356001600160401b03811161021e576118186118136020923690600401612821565b61314d565b604051908152f35b3461021e575f36600319011261021e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036118775760206040515f5160206143a95f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b3461021e57606036600319011261021e576004356001600160401b03811161021e576118b6903690600401612821565b602435908115159081830361021e57604435918215159182840361021e576118dc6134df565b6118e4613603565b6118ed8161314d565b611a66576040817feaac43431372830ccf7467860567859497968b38eef5801eedccff85ec29f874956020611a2d94019788515f5260036020526002845f2001600160ff1982541617905588515f5260036020526002845f20018054610100600160a81b033360081b1690610100600160a81b031916179055611970895161404e565b50611a4c575b611a32575b86515f5260036020526002825f2001805460ff60a81b8660a81b169060ff60a81b191617905586515f5260036020526002825f2001805460ff60b01b8760b01b169060ff60b01b191617905586515f526003602052436003835f20015586515f526003602052426004835f200155815194859485526020850152606082850152611a10815160608087015260c0860190613091565b965160808501520151828603605f190160a0840152339590612b90565b0390a2005b611a47815160c0608082015191015190613b9a565b61197b565b611a61825160a0606082015191015190613b9a565b611976565b60405162461bcd60e51b815260206004820152600f60248201526e1bdc99195c881b9bdd081d985b1a59608a1b6044820152606490fd5b604036600319011261021e57611ab1612642565b6024356001600160401b03811161021e57611ad09036906004016125e8565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611c48575b5061187757611b12613490565b6040516352d1902d60e01b81526001600160a01b0383169290602081600481875afa5f9181611c14575b50611b545783634c9c8ce360e01b5f5260045260245ffd5b805f5160206143a95f395f51905f52859203611c025750813b15611bf0575f5160206143a95f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611bd8575f808360206108b595519101845af4611bd261409e565b9161434a565b505034611be157005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d602011611c40575b81611c30602093836125ac565b8101031261021e57519085611b3c565b3d9150611c23565b5f5160206143a95f395f51905f52546001600160a01b03161415905083611b05565b3461021e57602036600319011261021e576004356001600160401b03811161021e57611c9a903690600401612821565b611ca261354e565b611caa613603565b611cb38161362a565b60208181015191510151611cd1906001600160a01b03163314612ffc565b805f52600360205260ff600260405f2001541660078110156106ad576001611cf9911461303a565b805f526003602052600260405f2001600460ff19825416179055805f52600360205243600360405f2001556040519081527fbc45fa33776297b698cb5875e39f4c323b19038dcb08d5edde4dbf094bb7a04e60203392a2005b3461021e575f36600319011261021e57611d6a613490565b5f5160206143e95f395f51905f525460ff811615611dc15760ff19165f5160206143e95f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b3461021e57602036600319011261021e5760043560055481101561021e5761091c611dfd61093092612a77565b90612b75565b3461021e57604036600319011261021e57611e1c61262c565b336001600160a01b03821603611e38576108b590600435613afe565b63334bd91960e11b5f5260045ffd5b3461021e57602036600319011261021e576004356001600160401b03811161021e57611e77903690600401612683565b611e7f613490565b5f5b81518110156108b55780611e9a6111f460019385612f25565b611ea381613fe8565b611eaf575b5001611e81565b611ecf611ebc8386612f25565b5151825f52600960205260405f20612f39565b611ef46020611ede8487612f25565b510151825f5260096020528460405f2001612f39565b611f1a6040611f038487612f25565b510151825f526009602052600260405f2001612f39565b60ff6060611f288487612f25565b51015116905f526009602052600360405f20019060ff198254161790557f4f251df180e16a8fe86d46ef086c56fb1f8718248a2c33105c1e5d1d5cae5f1f611f736112738386612f25565b0390a183611ea8565b3461021e575f36600319011261021e576020600754604051908152f35b3461021e57604036600319011261021e576108b5600435611fb861262c565b90611fde6108ab825f525f5160206143c95f395f51905f52602052600160405f20015490565b6139e9565b3461021e57602036600319011261021e5760206118186004355f525f5160206143c95f395f51905f52602052600160405f20015490565b3461021e57612028366129b7565b6120306134df565b612038613603565b6120418261362a565b602082015191825f52600360205260405f2060405161205f81612575565b61206882612d74565b815261207660018301612d74565b602082015260028201549160ff831690604083019260078310156106ad576120e392845260e0600460018060a01b038760081c169384606085015260ff6080850198818160a81c1615158a5260b01c16151560a0850152600381015460c085015201549101523314612e51565b5160078110156106ad5760026120f99114612e8f565b51156121755761211c91505160608101519060a060e082015191015191336136ea565b805f526003602052600260405f2001600360ff19825416179055805f52600360205243600360405f2001556040519081527f787f54b5701ae8d92f5fe167c9046362bd2d16ecabd8a2eb01ac5e0e90ff159560203392a2005b51606001515181510361230f57815f52600360205260405f2090805190600160401b821161042c578254828455808310612298575b50602001915f5260205f20915f905b8282106121c9575050505061211c565b80518051906001600160401b03821161042c576121ea82610d8b8854612abc565b602090601f831160011461222f5792612220836001959460209487965f92610dd65750508160011b915f199060031b1c19161790565b87555b019401910190926121b9565b90601f19831691875f52815f20925f5b8181106122805750936020936001969387969383889510612268575b505050811b018755612223565b01515f1960f88460031b161c191690558a808061225b565b9293602060018192878601518155019501930161223f565b835f528260205f2091820191015b8181106122b357506121aa565b806122c060019254612abc565b806122cd575b50016122a6565b601f811183146122e257505f81555b876122c6565b6122fe90825f5283601f60205f20920160051c82019101612eca565b805f525f60208120818355556122dc565b60405162461bcd60e51b81526020600482015260166024820152750eee4dedcce40d2dca8f090c2e6d0e640d8cadccee8d60531b6044820152606490fd5b3461021e575f36600319011261021e576020600154604051908152f35b3461021e57602036600319011261021e576004356001600160401b03811161021e5761239c6020913690600401612821565b6123a4613490565b6123ac613603565b6123b58161362a565b0151805f52600360205260ff600260405f2001541660078110156106ad5760011480156124fd575b1561249a57805f526003602052600460405f200154610e1081018091116110a7574210612455575f8181526003602081815260409283902060028101805460ff191660061790554392019190915590519182527f93c5e4b71845d08837fbe3c5efed43976f31cd310635f1c142fc4cef1916f55c91a1005b60405162461bcd60e51b815260206004820152601860248201527f737761702072657175657374206e6f74206578706972656400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152603560248201527f73776170207265717565737420737461747573206973206e6f742070656e64696044820152741b99c81bdc881b585ad95c8818dbdb999a5c9b5959605a1b6064820152608490fd5b50805f52600360205260ff600260405f2001541660078110156106ad576002146123dd565b3461021e57602036600319011261021e576004359063ffffffff60e01b821680920361021e57602091637965db0b60e01b8114908115612564575b5015158152f35b6301ffc9a760e01b1490508361255d565b61010081019081106001600160401b0382111761042c57604052565b60a081019081106001600160401b0382111761042c57604052565b90601f801991011681019081106001600160401b0382111761042c57604052565b6001600160401b03811161042c57601f01601f191660200190565b81601f8201121561021e57602081359101612602826125cd565b9261261060405194856125ac565b8284528282011161021e57815f92602092838601378301015290565b602435906001600160a01b038216820361021e57565b600435906001600160a01b038216820361021e57565b35906001600160a01b038216820361021e57565b6001600160401b03811161042c5760051b60200190565b9080601f8301121561021e5781359161269b8361266c565b926126a960405194856125ac565b80845260208085019160051b8301019183831161021e5760208101915b8383106126d557505050505090565b82356001600160401b03811161021e57820160a0818703601f19011261021e576040519161270283612591565b60208201356001600160401b03811161021e57876020612724928501016125e8565b835260408201356001600160401b03811161021e57876020612748928501016125e8565b602084015260608201356001600160401b03811161021e5787602061276f928501016125e8565b604084015260808201359260ff8416840361021e5760a06020949385946060840152013560808201528152019201916126c6565b9080601f8301121561021e5781356127ba8161266c565b926127c860405194856125ac565b81845260208085019260051b8201019183831161021e5760208201905b8382106127f457505050505090565b81356001600160401b03811161021e57602091612816878480948801016125e8565b8152019101906127e5565b919060608382031261021e5760405190606082018281106001600160401b0382111761042c57604052819380356001600160401b03811161021e5781016101608184031261021e576040519061016082018281106001600160401b0382111761042c5760405280356001600160401b03811161021e57846128a39183016125e8565b82526128b160208201612658565b60208301526040810135604083015260608101356001600160401b03811161021e57846128df918301612683565b606083015260808101356001600160401b03811161021e5784612903918301612683565b608083015260a08101356001600160401b03811161021e57846129279183016127a3565b60a083015260c08101356001600160401b03811161021e5781612952866101409361297f95016127a3565b60c085015260e081013560e085015261010081013561010085015261012081013561012085015201612658565b6101408201528352602081013560208401526040810135916001600160401b03831161021e576040926129b292016125e8565b910152565b90604060031983011261021e576004356001600160401b03811161021e57826129e291600401612821565b91602435906001600160401b03821161021e578060238301121561021e578160040135612a0e8161266c565b92612a1c60405194856125ac565b8184526024602085019260051b8201019183831161021e5760248201905b838210612a4957505050505090565b81356001600160401b03811161021e57602091612a6c87602485948801016125e8565b815201910190612a3a565b600554811015610b615760055f5260205f2001905f90565b600754811015610b615760075f5260205f2001905f90565b8054821015610b61575f5260205f2001905f90565b90600182811c92168015612aea575b6020831014612ad657565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612acb565b5f9291815491612b0383612abc565b8083529260018116908115612b585750600114612b1f57505050565b5f9081526020812093945091925b838310612b3e575060209250010190565b600181602092949394548385870101520191019190612b2d565b915050602093945060ff929192191683830152151560051b010190565b9061111f57612b8d6109159160405192838092612af4565b90565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9080602083519182815201916020808360051b8301019401925f915b838310612bdf57505050505090565b9091929394602080612bfd600193601f198682030187528951612b90565b97019301930191939290612bd0565b90608080612c4d612c3b612c29865160a0875260a0870190612b90565b60208701518682036020880152612b90565b60408601518582036040870152612b90565b9360ff6060820151166060850152015191015290565b3461021e575f36600319011261021e576020604051610e108152f35b9080602083519182815201916020808360051b8301019401925f915b838310612caa57505050505090565b9091929394602080612cc8600193601f198682030187528951612c0c565b97019301930191939290612c9b565b905f915f5490612ce682612abc565b8082529160018116908115612d585750600114612d01575050565b5f8080529293509091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b838310612d3e575060209250010190565b600181602092949394548385870101520191019190612d2d565b9050602093945060ff929192191683830152151560051b010190565b90815491612d818361266c565b92612d8f60405194856125ac565b80845260208401915f5260205f20915f905b828210612dae5750505050565b6040515f8554612dbd81612abc565b8084529060018116908115612e2e5750600114612df7575b5060019282612de9859460209403826125ac565b815201940191019092612da1565b5f878152602081209092505b818310612e1857505081016020016001612dd5565b6001816020925483868801015201920191612e03565b60ff191660208581019190915291151560051b8401909101915060019050612dd5565b15612e5857565b60405162461bcd60e51b815260206004820152600f60248201526e3737ba1037b93232b9103a30b5b2b960891b6044820152606490fd5b15612e9657565b60405162461bcd60e51b815260206004820152600c60248201526b39ba30ba3ab99032b93937b960a11b6044820152606490fd5b818110612ed5575050565b5f8155600101612eca565b9190601f8111612eef57505050565b612f19925f5260205f20906020601f840160051c83019310612f1b575b601f0160051c0190612eca565b565b9091508190612f0c565b8051821015610b615760209160051b010190565b91909182516001600160401b03811161042c57612f6081612f5a8454612abc565b84612ee0565b6020601f8211600114612f9e578190612f8f9394955f92612f935750508160011b915f199060031b1c19161790565b9055565b015190505f8061034e565b601f19821690835f52805f20915f5b818110612fe457509583600195969710612fcc575b505050811b019055565b01515f1960f88460031b161c191690555f8080612fc2565b9192602060018192868b015181550194019201612fad565b1561300357565b60405162461bcd60e51b815260206004820152600f60248201526e3737ba1037b93232b91036b0b5b2b960891b6044820152606490fd5b1561304157565b60405162461bcd60e51b815260206004820152602260248201527f73776170207265717565737420737461747573206973206e6f742070656e64696044820152616e6760f01b6064820152608490fd5b9061014061311a6131086130f66130e46130b687516101608852610160880190612b90565b60018060a01b0360208901511660208801526040880151604088015260608801518782036060890152612c7f565b60808701518682036080880152612c7f565b60a086015185820360a0870152612bb4565b60c085015184820360c0860152612bb4565b60e0808501519084015261010080850151908401526101208085015190840152928101516001600160a01b031691015290565b805161012081015142101561338457604051613187816131796020820194602086526040830190613091565b03601f1981018352826125ac565b5190206020820151810361337d5781516020015160408301516131b49183906001600160a01b0316613d29565b15613376576131ce905f52600260205260405f2054151590565b61337057805160a081015151606082015151036133695760c08101515160808201515103613362576020908101516001600160a01b03165f9081527f94e00e0b0ac5b6b04feb6c78152cab166d8fef9dc693d2e5acc698f616a7e4a3909152604090205460ff161561335c575f5b60c08251015180518210156132895760208061325a8460ff94612f25565b51604051928184925191829101835e810160048152030190205416156132825760010161323c565b5050600890565b50508051516040516132ab816131796020820194602086526040830190612b90565b5190206040516020810190602082526132ca8161317960408201612cd7565b51902003613356575f5b6060825101518051821015613318576132f36111f48361330493612f25565b5f52600860205260405f2054151590565b15613311576001016132d4565b5050600a90565b50505f5b608082510151805182101561334f576132f36111f48361333b93612f25565b156133485760010161331c565b5050600b90565b5050505f90565b50600990565b50600790565b5050600690565b5050600590565b50600490565b5050600390565b5050600290565b5050600190565b6040519061339882612591565b5f6080836060815260606020820152606060408201528260608201520152565b60405190815f8254926133ca84612abc565b936001811690811561342857506001146133ef575b5060209250600481520301902090565b9150505f528160205f205f905b83821061341057505060209181015f6133df565b602091925080600191548487015201910183916133fc565b60ff191684525060209380151502830191505f90506133df565b61344c8154612abc565b9081613456575050565b81601f5f9311600114613467575055565b8183526020832061348391601f0160051c810190600101612eca565b8082528160208120915555565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16156134c857565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527fc792f139702502df0ee35d5990c04ed6dd68b503b8ebe95f6f6ce2d2d4dabbd2602052604090205460ff161561351757565b63e2517d3f60e01b5f52336004527f508ee82d0bdf04e000303ab4f02b172e60c5f2d35b2e559b05bed2cf403bb58b60245260445ffd5b335f9081527f94e00e0b0ac5b6b04feb6c78152cab166d8fef9dc693d2e5acc698f616a7e4a3602052604090205460ff161561358657565b63e2517d3f60e01b5f52336004527f70d8f6b4dfca278d41482e0778a0bf123d87b86b23b71cc0ef42c2f082e8053a60245260445ffd5b5f8181525f5160206143c95f395f51905f526020908152604080832033845290915290205460ff16156135ed5750565b63e2517d3f60e01b5f523360045260245260445ffd5b60ff5f5160206143e95f395f51905f52541661361b57565b63d93c066560e01b5f5260045ffd5b6020810161364481515f52600260205260405f2054151590565b156136ad57519051604051613669816131796020820194602086526040830190613091565b5190200361367357565b60405162461bcd60e51b81526020600482015260126024820152711bdc99195c881a185cda081a5b9d985b1a5960721b6044820152606490fd5b60405162461bcd60e51b81526020600482015260156024820152746f726465722068617368206e6f742065786973747360581b6044820152606490fd5b909392915f5b85518110156139325761371060406137088389612f25565b510151613e07565b61372361371d8387612f25565b51613e07565b6001600160a01b0390911690608061373b848a612f25565b510151848102908082048614901517156110a7576040516370a0823160e01b81526001600160a01b038716600482018190526305f5e1009092049190602081602481885afa80156138495783915f916138fe575b50106138c457604051636eb1769f60e11b815260048101829052306024820152602081604481885afa80156138495783915f91613890575b5010613854576020925f9260405191858301936323b872dd60e01b8552602484015260018060a01b0316604483015260648201526064815261380a6084826125ac565b519082855af115613849575f513d6138405750803b155b61382e57506001016136f0565b635274afe760e01b5f5260045260245ffd5b60011415613821565b6040513d5f823e3d90fd5b60405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606490fd5b9150506020813d82116138bc575b816138ab602093836125ac565b8101031261021e578290515f6137c7565b3d915061389e565b60405162461bcd60e51b81526020600482015260126024820152716e6f7420656e6f7567682062616c616e636560701b6044820152606490fd5b9150506020813d821161392a575b81613919602093836125ac565b8101031261021e578290515f61378f565b3d915061390c565b505050509050565b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166139e4576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b5f8181525f5160206143c95f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16613a87575f8181525f5160206143c95f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b6020613af86001835193838101519084606060408301519201519181604051978895818088019b8051918291018d5e8701908282015f8152815193849201905e0101905f8252805192839101825e019060ff60f81b9060f81b16815203601e198101845201826125ac565b51902090565b5f8181525f5160206143c95f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff1615613a87575f8181525f5160206143c95f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b8051825103613ccf575f5b8151811015613cca57613bb88183612f25565b515160208151910120604051613bd18161091581612cd7565b6020815191012003613c93576001600160a01b03613bf460406137088486612f25565b1615613c59576001600160a01b03613c0f61371d8386612f25565b1615613c1d57600101613ba5565b60405162461bcd60e51b81526020600482015260146024820152737a65726f2072656365697665206164647265737360601b6044820152606490fd5b60405162461bcd60e51b81526020600482015260126024820152717a65726f20746f6b656e206164647265737360701b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e0c6d0c2d2dc40dcdee840dac2e8c6d608b1b6044820152606490fd5b505050565b60405162461bcd60e51b815260206004820152602c60248201527f746f6b656e736574206c656e677468206e6f74206d617463682061646472657360448201526b0e698d2e6e840d8cadccee8d60a31b6064820152608490fd5b9190823b613d645790613d3b916140cd565b5060048110156106ad57159182613d5157505090565b6001600160a01b03918216911614919050565b915f92613179613d9a85946040519283916020830195630b135d3f60e11b87526024840152604060448401526064830190612b90565b51915afa613da661409e565b81613dd7575b81613db5575090565b805160208083019350908201919091031261021e5751630b135d3f60e11b1490565b905060208151101590613dac565b908151811015610b61570160200190565b60ff16600a019060ff82116110a757565b602a815103613faa57805115610b615760208101516001600160f81b031916600360fc1b1480613f85575b15613f4757604051613e456040826125ac565b60148152602080820192903684375f5b60148110613eaa5750505190516bffffffffffffffffffffffff198116919060148210613e85575b505060601c90565b6bffffffffffffffffffffffff1960149290920360031b82901b161690505f80613e7d565b8060011b818104600214821517156110a75780600201806002116110a757613ee7906001600160f81b031990613ee09086613de5565b51166141f1565b60041b90610ff060f08316921682036110a757600301806003116110a757613f1960ff91613ee08360f81b9187613de5565b16019060ff82116110a75760019160f81b6001600160f81b0319165f1a613f408286613de5565b5301613e55565b60405162461bcd60e51b8152602060048201526016602482015275092dcecc2d8d2c840c2c8c8e4cae6e640e0e4caccd2f60531b6044820152606490fd5b50805160011015610b615760218101516001600160f81b031916600f60fb1b14613e32565b60405162461bcd60e51b8152602060048201526016602482015275092dcecc2d8d2c840c2c8c8e4cae6e640d8cadccee8d60531b6044820152606490fd5b805f52600860205260405f2054155f146139e457600754600160401b81101561042c576140376140218260018594016007556007612aa7565b819391549060031b91821b915f19901b19161790565b9055600754905f52600860205260405f2055600190565b805f52600260205260405f2054155f146139e457600154600160401b81101561042c576140876140218260018594016001556001612aa7565b9055600154905f52600260205260405f2055600190565b3d156140c8573d906140af826125cd565b916140bd60405193846125ac565b82523d5f602084013e565b606090565b81519190604183036140fd576140f69250602082015190606060408401519301515f1a906142c8565b9192909190565b50505f9160029190565b5f818152600860205260409020548015613a87575f1981018181116110a7576007545f198101919082116110a75781810361418e575b505050600754801561417a575f1901614157816007612aa7565b8154905f199060031b1b191690556007555f5260086020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6141b061419f614021936007612aa7565b90549060031b1c9283926007612aa7565b90555f52600860205260405f20555f808061413d565b60ff5f5160206144095f395f51905f525460401c16156141e257565b631afcd79f60e31b5f5260045ffd5b60f81c6030811015806142bd575b1561421357602f190160ff81116110a75790565b6061811015806142b2575b1561423f5761422c90613df6565b60ff60601991160160ff81116110a75790565b6041811015806142a7575b61428b5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103432bc1031b430b930b1ba32b960591b6044820152606490fd5b61429490613df6565b60ff60401991160160ff81116110a75790565b50604681111561424a565b50606681111561421e565b5060398111156141ff565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161433f579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15613849575f516001600160a01b0381161561433557905f905f90565b505f906001905f90565b5050505f9160039190565b9061436e575080511561435f57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061439f575b61437f575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561437756fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122096507328f4aa56008b9581a4228214be12728835f8ac642641baad9d522987c464736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00