195 txs
1.2k calls
constructor
constructor(address _token, uint8 _sharedDecimals, address _lzEndpoint)
functions
BP_DENOMINATOR
viewfunction BP_DENOMINATOR() view returns (uint256)
chainIdToFeeBps
viewfunction chainIdToFeeBps(uint16) view returns (uint16 feeBP, bool enabled)
circulatingSupply
viewfunction circulatingSupply() view returns (uint256)
creditedPackets
viewfunction creditedPackets(uint16, bytes, uint64) view returns (bool)
DEFAULT_PAYLOAD_SIZE_LIMIT
viewfunction DEFAULT_PAYLOAD_SIZE_LIMIT() view returns (uint256)
defaultFeeBp
viewfunction defaultFeeBp() view returns (uint16)
estimateSendAndCallFee
viewfunction estimateSendAndCallFee(uint16 _dstChainId, bytes32 _toAddress, uint256 _amount, bytes _payload, uint64 _dstGasForCall, bool _useZro, bytes _adapterParams) view returns (uint256 nativeFee, uint256 zroFee)
estimateSendFee
viewfunction estimateSendFee(uint16 _dstChainId, bytes32 _toAddress, uint256 _amount, bool _useZro, bytes _adapterParams) view returns (uint256 nativeFee, uint256 zroFee)
failedMessages
viewfunction failedMessages(uint16, bytes, uint64) view returns (bytes32)
feeOwner
viewfunction feeOwner() view returns (address)
getConfig
viewfunction getConfig(uint16 _version, uint16 _chainId, address, uint256 _configType) view returns (bytes)
getTrustedRemoteAddress
viewfunction getTrustedRemoteAddress(uint16 _remoteChainId) view returns (bytes)
innerToken
viewfunction innerToken() view returns (address)
isTrustedRemote
viewfunction isTrustedRemote(uint16 _srcChainId, bytes _srcAddress) view returns (bool)
ld2sdRate
viewfunction ld2sdRate() view returns (uint256)
lzEndpoint
viewfunction lzEndpoint() view returns (address)
MAX_FEE
viewfunction MAX_FEE() view returns (uint256)
minDstGasLookup
viewfunction minDstGasLookup(uint16, uint16) view returns (uint256)
NO_EXTRA_GAS
viewfunction NO_EXTRA_GAS() view returns (uint256)
owner
viewfunction owner() view returns (address)
payloadSizeLimitLookup
viewfunction payloadSizeLimitLookup(uint16) view returns (uint256)
precrime
viewfunction precrime() view returns (address)
PT_SEND_AND_CALL
viewfunction PT_SEND_AND_CALL() view returns (uint8)
PT_SEND
viewfunction PT_SEND() view returns (uint8)
quoteOFTFee
viewfunction quoteOFTFee(uint16 _dstChainId, uint256 _amount) view returns (uint256 fee)
sharedDecimals
viewfunction sharedDecimals() view returns (uint8)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
token
viewfunction token() view returns (address)
totalCreditedAmount
viewfunction totalCreditedAmount() view returns (uint256)
trustedRemoteLookup
viewfunction trustedRemoteLookup(uint16) view returns (bytes)
useCustomAdapterParams
viewfunction useCustomAdapterParams() view returns (bool)
callOnOFTReceived
nonpayablefunction callOnOFTReceived(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes32 _from, address _to, uint256 _amount, bytes _payload, uint256 _gasForCall)
forceResumeReceive
nonpayablefunction forceResumeReceive(uint16 _srcChainId, bytes _srcAddress)
lzReceive
nonpayablefunction lzReceive(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload)
nonblockingLzReceive
nonpayablefunction nonblockingLzReceive(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload)
renounceOwnership
nonpayablefunction renounceOwnership()
retryMessage
payablefunction retryMessage(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload) payable
sendAndCall
payablefunction sendAndCall(address _from, uint16 _dstChainId, bytes32 _toAddress, uint256 _amount, uint256 _minAmount, bytes _payload, uint64 _dstGasForCall, tuple _callParams) payable
sendFrom
payablefunction sendFrom(address _from, uint16 _dstChainId, bytes32 _toAddress, uint256 _amount, uint256 _minAmount, tuple _callParams) payable
setConfig
nonpayablefunction setConfig(uint16 _version, uint16 _chainId, uint256 _configType, bytes _config)
setDefaultFeeBp
nonpayablefunction setDefaultFeeBp(uint16 _feeBp)
setFeeBp
nonpayablefunction setFeeBp(uint16 _dstChainId, bool _enabled, uint16 _feeBp)
setFeeOwner
nonpayablefunction setFeeOwner(address _feeOwner)
setMinDstGas
nonpayablefunction setMinDstGas(uint16 _dstChainId, uint16 _packetType, uint256 _minGas)
setPayloadSizeLimit
nonpayablefunction setPayloadSizeLimit(uint16 _dstChainId, uint256 _size)
setPrecrime
nonpayablefunction setPrecrime(address _precrime)
setReceiveVersion
nonpayablefunction setReceiveVersion(uint16 _version)
setSendVersion
nonpayablefunction setSendVersion(uint16 _version)
setTrustedRemote
nonpayablefunction setTrustedRemote(uint16 _remoteChainId, bytes _path)
setTrustedRemoteAddress
nonpayablefunction setTrustedRemoteAddress(uint16 _remoteChainId, bytes _remoteAddress)
setUseCustomAdapterParams
nonpayablefunction setUseCustomAdapterParams(bool _useCustomAdapterParams)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
CallOFTReceivedSuccess
event CallOFTReceivedSuccess(uint16 indexed _srcChainId, bytes _srcAddress, uint64 _nonce, bytes32 _hash)
MessageFailed
event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload, bytes _reason)
NonContractAddress
event NonContractAddress(address _address)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ReceiveFromChain
event ReceiveFromChain(uint16 indexed _srcChainId, address indexed _to, uint256 _amount, address indexed from)
RetryMessageSuccess
event RetryMessageSuccess(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes32 _payloadHash)
SendToChain
event SendToChain(uint16 indexed _dstChainId, address indexed _from, bytes32 indexed _toAddress, uint256 _amount)
SetDefaultFeeBp
event SetDefaultFeeBp(uint16 feeBp)
SetFeeBp
event SetFeeBp(uint16 dstchainId, bool enabled, uint16 feeBp)
SetFeeOwner
event SetFeeOwner(address feeOwner)
SetMinDstGas
event SetMinDstGas(uint16 _dstChainId, uint16 _type, uint256 _minDstGas)
SetPrecrime
event SetPrecrime(address precrime)
SetTrustedRemote
event SetTrustedRemote(uint16 _remoteChainId, bytes _path)
SetTrustedRemoteAddress
event SetTrustedRemoteAddress(uint16 _remoteChainId, bytes _remoteAddress)
SetUseCustomAdapterParams
event SetUseCustomAdapterParams(bool _useCustomAdapterParams)
errors
No errors.
creation bytecode
0x6101006040523480156200001257600080fd5b5060405162004b5f38038062004b5f8339810160408190526200003591620002ca565b81818181808062000046336200024b565b6001600160a01b0316608052505060ff1660a0526200006d6000546001600160a01b031690565b600a80546001600160a01b03928316620100000262010000600160b01b0319909116179055851660c081905260408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009450849350620000d6919062000314565b600060405180830381855afa9150503d806000811462000113576040519150601f19603f3d011682016040523d82523d6000602084013e62000118565b606091505b509150915081620001895760405162461bcd60e51b815260206004820152603060248201527f496e6469726563744f4654576974684665653a206661696c656420746f20676560448201526f7420746f6b656e20646563696d616c7360801b60648201526084015b60405180910390fd5b600081806020019051810190620001a1919062000345565b90508060ff168560ff1611158015620001be5750600a8560ff1611155b620002225760405162461bcd60e51b815260206004820152602d60248201527f496e6469726563744f4654576974684665653a20736861726564446563696d6160448201526c6c7320697320746f6f2062696760981b606482015260840162000180565b6200022e858262000380565b6200023b90600a6200049f565b60e05250620004b0945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620002b357600080fd5b919050565b805160ff81168114620002b357600080fd5b600080600060608486031215620002e057600080fd5b620002eb846200029b565b9250620002fb60208501620002b8565b91506200030b604085016200029b565b90509250925092565b6000825160005b818110156200033757602081860181015185830152016200031b565b506000920191825250919050565b6000602082840312156200035857600080fd5b6200036382620002b8565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156200039c576200039c6200036a565b92915050565b600181815b80851115620003e3578160001904821115620003c757620003c76200036a565b80851615620003d557918102915b93841c9390800290620003a7565b509250929050565b600082620003fc575060016200039c565b816200040b575060006200039c565b81600181146200042457600281146200042f576200044f565b60019150506200039c565b60ff8411156200044357620004436200036a565b50506001821b6200039c565b5060208310610133831016604e8410600b841016171562000474575081810a6200039c565b620004808383620003a2565b80600019048211156200049757620004976200036a565b029392505050565b60006200036360ff841683620003eb565b60805160a05160c05160e0516145f762000568600039600081816104fe0152818161275601528181612890015261310a015260008181610a2a01528181610a5b015281816114e3015281816125460152818161257f015281816128230152613161015260006106230152600081816107d401528181610a8201528181610d0801528181610db001528181610fca015281816117fe01528181611e4201528181612100015281816124990152612a8901526145f76000f3fe6080604052600436106102fe5760003560e01c80639bdb981211610190578063d1deba1f116100dc578063eb8d72b711610095578063f2fde38b1161006f578063f2fde38b146109d8578063f5ecbdbc146109f8578063fad0457614610a18578063fc0c546a14610a4c57600080fd5b8063eb8d72b71461097e578063ecd8f2121461099e578063ed629c5c146109be57600080fd5b8063d1deba1f146108c8578063d8882968146108db578063df2a5b3b14610909578063e6a20ae614610929578063eab45d9c1461093e578063eaffd49a1461095e57600080fd5b8063b353aaa711610149578063bc063e1a11610123578063bc063e1a1461083c578063c446183414610796578063c83330ce14610852578063cbed8b9c146108a857600080fd5b8063b353aaa7146107c2578063b9818be1146107f6578063baf3292d1461081c57600080fd5b80639bdb9812146106e45780639f38369a14610736578063a4c51df514610756578063a6c3d16514610776578063abe685cd14610796578063b07d421c146107ac57600080fd5b80634c42899a1161024f5780637533d788116102085780638cfd8f5c116101e25780638cfd8f5c146106455780638da5cb5b1461067d5780639358928b146106af578063950c8a74146106c457600080fd5b80637533d788146105c457806379c0ad4b146105f1578063857749b01461061157600080fd5b80634c42899a146104c557806351cd0bec146104ec5780635a359dc5146105205780635b8c41e61461054057806366ad5c8a1461058f578063715018a6146105af57600080fd5b8063365260b4116102bc57806342d65a8d1161029657806342d65a8d1461045d578063447705151461047d578063455ba27d146104925780634b104eff146104a557600080fd5b8063365260b4146103cd5780633d8b38f6146104025780633f1f4fa41461042257600080fd5b80621d35671461030357806301ffc9a71461032557806307e0db171461035a5780630df374831461037a57806310ddb1371461039a5780632cdf0b95146103ba575b600080fd5b34801561030f57600080fd5b5061032361031e366004613668565b610a7f565b005b34801561033157600080fd5b506103456103403660046136fb565b610cb0565b60405190151581526020015b60405180910390f35b34801561036657600080fd5b50610323610375366004613725565b610ce7565b34801561038657600080fd5b50610323610395366004613740565b610d70565b3480156103a657600080fd5b506103236103b5366004613725565b610d8f565b6103236103c8366004613797565b610de7565b3480156103d957600080fd5b506103ed6103e8366004613820565b610e8a565b60408051928352602083019190915201610351565b34801561040e57600080fd5b5061034561041d366004613887565b610edf565b34801561042e57600080fd5b5061044f61043d366004613725565b60036020526000908152604090205481565b604051908152602001610351565b34801561046957600080fd5b50610323610478366004613887565b610fab565b34801561048957600080fd5b5061044f600081565b6103236104a03660046138d9565b611031565b3480156104b157600080fd5b506103236104c0366004613995565b611112565b3480156104d157600080fd5b506104da600081565b60405160ff9091168152602001610351565b3480156104f857600080fd5b5061044f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052c57600080fd5b5061032361053b366004613725565b6111cf565b34801561054c57600080fd5b5061044f61055b366004613a1f565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561059b57600080fd5b506103236105aa366004613668565b611271565b3480156105bb57600080fd5b50610323611345565b3480156105d057600080fd5b506105e46105df366004613725565b611359565b6040516103519190613b0f565b3480156105fd57600080fd5b5061032361060c366004613b22565b6113f3565b34801561061d57600080fd5b506104da7f000000000000000000000000000000000000000000000000000000000000000081565b34801561065157600080fd5b5061044f610660366004613b5e565b600260209081526000928352604080842090915290825290205481565b34801561068957600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610351565b3480156106bb57600080fd5b5061044f6114df565b3480156106d057600080fd5b50600454610697906001600160a01b031681565b3480156106f057600080fd5b506103456106ff366004613a1f565b6007602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205460ff1681565b34801561074257600080fd5b506105e4610751366004613725565b611568565b34801561076257600080fd5b506103ed610771366004613b91565b61167e565b34801561078257600080fd5b50610323610791366004613887565b61170d565b3480156107a257600080fd5b5061044f61271081565b3480156107b857600080fd5b5061044f60085481565b3480156107ce57600080fd5b506106977f000000000000000000000000000000000000000000000000000000000000000081565b34801561080257600080fd5b50600a54610697906201000090046001600160a01b031681565b34801561082857600080fd5b50610323610837366004613995565b611789565b34801561084857600080fd5b5061044f6107d081565b34801561085e57600080fd5b5061088e61086d366004613725565b60096020526000908152604090205461ffff81169062010000900460ff1682565b6040805161ffff9093168352901515602083015201610351565b3480156108b457600080fd5b506103236108c3366004613c4e565b6117df565b6103236108d6366004613668565b611869565b3480156108e757600080fd5b50600a546108f69061ffff1681565b60405161ffff9091168152602001610351565b34801561091557600080fd5b50610323610924366004613cbc565b611a7f565b34801561093557600080fd5b506104da600181565b34801561094a57600080fd5b50610323610959366004613cf8565b611b31565b34801561096a57600080fd5b50610323610979366004613d15565b611b7a565b34801561098a57600080fd5b50610323610999366004613887565b611cac565b3480156109aa57600080fd5b5061044f6109b9366004613740565b611d06565b3480156109ca57600080fd5b506006546103459060ff1681565b3480156109e457600080fd5b506103236109f3366004613995565b611d98565b348015610a0457600080fd5b506105e4610a13366004613ddd565b611e11565b348015610a2457600080fd5b506106977f000000000000000000000000000000000000000000000000000000000000000081565b348015610a5857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610697565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610afc5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526001602052604081208054610b1a90613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4690613e2a565b8015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b50505050509050805186869050148015610bae575060008151115b8015610bd6575080516020820120604051610bcc9088908890613e5e565b6040518091039020145b610c315760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610af3565b610ca78787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611ec492505050565b50505050505050565b60006001600160e01b03198216630d30953d60e31b1480610ce157506301ffc9a760e01b6001600160e01b03198316145b92915050565b610cef611f3d565b6040516307e0db1760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b5050505050565b610d78611f3d565b61ffff909116600090815260036020526040902055565b610d97611f3d565b6040516310ddb13760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb13790602401610d3b565b610df2868685611f97565b509250610e6086868686610e096020870187613995565b610e196040880160208901613995565b610e266040890189613e6e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fe092505050565b925081831015610e825760405162461bcd60e51b8152600401610af390613eb4565b505050505050565b600080610ed08888888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120ce92505050565b91509150965096945050505050565b61ffff831660009081526001602052604081208054829190610f0090613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2c90613e2a565b8015610f795780601f10610f4e57610100808354040283529160200191610f79565b820191906000526020600020905b815481529060010190602001808311610f5c57829003601f168201915b505050505090508383604051610f90929190613e5e565b60405180910390208180519060200120149150509392505050565b610fb3611f3d565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061100390869086908690600401613f2a565b600060405180830381600087803b15801561101d57600080fd5b505af1158015610ca7573d6000803e3d6000fd5b61103c898988611f97565b50809650506110e58989898988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a925061108e9150506020890189613995565b61109e60408a0160208b01613995565b6110ab60408b018b613e6e565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061218c92505050565b9550848610156111075760405162461bcd60e51b8152600401610af390613eb4565b505050505050505050565b61111a611f3d565b6001600160a01b0381166111705760405162461bcd60e51b815260206004820152601a60248201527f4665653a206665654f776e65722063616e6e6f742062652030780000000000006044820152606401610af3565b600a805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040519081527f047912631afa564eebd3db2efe191a0dec62da1fede6bbbc1ffc89d87845b1b5906020015b60405180910390a150565b6111d7611f3d565b6107d08161ffff16111561122d5760405162461bcd60e51b815260206004820152601e60248201527f4665653a20666565206270206d757374206265203c3d204d41585f46454500006044820152606401610af3565b600a805461ffff191661ffff83169081179091556040519081527fd26030ef4a8c225ee12b646eb4466acb41fb96b6cd4660b22d0ba0124e7bdc74906020016111c4565b3330146112cf5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610af3565b610e828686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061228892505050565b61134d611f3d565b611357600061230f565b565b6001602052600090815260409020805461137290613e2a565b80601f016020809104026020016040519081016040528092919081815260200182805461139e90613e2a565b80156113eb5780601f106113c0576101008083540402835291602001916113eb565b820191906000526020600020905b8154815290600101906020018083116113ce57829003601f168201915b505050505081565b6113fb611f3d565b6107d08161ffff1611156114515760405162461bcd60e51b815260206004820152601e60248201527f4665653a20666565206270206d757374206265203c3d204d41585f46454500006044820152606401610af3565b60408051808201825261ffff83811680835285151560208085018281528985166000818152600984528890209651875492511515620100000262ffffff1990931696169590951717909455845192835292820192909252918201527fdd9c9685af3e6dcb56d8f4b88d2595d4add6837a150034e7781c46b6dcf8aaab906060015b60405180910390a1505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190613f48565b905090565b61ffff811660009081526001602052604081208054606092919061158b90613e2a565b80601f01602080910402602001604051908101604052809291908181526020018280546115b790613e2a565b80156116045780601f106115d957610100808354040283529160200191611604565b820191906000526020600020905b8154815290600101906020018083116115e757829003601f168201915b50505050509050805160000361165c5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610af3565b61167760006014835161166f9190613f77565b83919061235f565b9392505050565b6000806116fb8b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c908190840183828082843760009201919091525061246c92505050565b91509150995099975050505050505050565b611715611f3d565b81813060405160200161172a93929190613f8a565b60408051601f1981840301815291815261ffff85166000908152600160205220906117559082613ff6565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce8383836040516114d293929190613f2a565b611791611f3d565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b906020016111c4565b6117e7611f3d565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c9061183b90889088908890889088906004016140b5565b600060405180830381600087803b15801561185557600080fd5b505af1158015611107573d6000803e3d6000fd5b61ffff8616600090815260056020526040808220905161188c9088908890613e5e565b90815260408051602092819003830190206001600160401b0387166000908152925290205490508061190c5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610af3565b80838360405161191d929190613e5e565b60405180910390201461197c5760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610af3565b61ffff8716600090815260056020526040808220905161199f9089908990613e5e565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252611a37918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061228892505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051611a6e9594939291906140e3565b60405180910390a150505050505050565b611a87611f3d565b60008111611acf5760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610af3565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac0906060016114d2565b611b39611f3d565b6006805460ff19168215159081179091556040519081527f1584ad594a70cbe1e6515592e1272a987d922b097ead875069cebe8b40c004a4906020016111c4565b333014611bc95760405162461bcd60e51b815260206004820152601f60248201527f4f4654436f72653a2063616c6c6572206d757374206265204f4654436f7265006044820152606401610af3565b611bd4308686612527565b935060008660001c9050806001600160a01b0316866001600160a01b03168c61ffff167f485bd77f985a4f4eeb71f6c1cb373b6a5d3c5467e58f81e05e65c59cf4e87d0188604051611c2891815260200190565b60405180910390a4604051633fe79aed60e11b81526001600160a01b03871690637fcf35da908490611c6c908f908f908f908f908f908e908e908e9060040161411e565b600060405180830381600088803b158015611c8657600080fd5b5087f1158015611c9a573d6000803e3d6000fd5b50505050505050505050505050505050565b611cb4611f3d565b61ffff83166000908152600160205260409020611cd2828483614179565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab8383836040516114d293929190613f2a565b61ffff828116600090815260096020908152604080832081518083019092525493841681526201000090930460ff1615801591840191909152909190611d6b57805161271090611d5a9061ffff1685614238565b611d649190614265565b9150611d91565b600a5461ffff1615611d8c57600a5461271090611d5a9061ffff1685614238565b600091505b5092915050565b611da0611f3d565b6001600160a01b038116611e055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610af3565b611e0e8161230f565b50565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa158015611e91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eb99190810190614279565b90505b949350505050565b600080611f275a60966366ad5c8a60e01b89898989604051602401611eec94939291906142ef565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152309291906125a7565b9150915081610e8257610e828686868685612631565b6000546001600160a01b031633146113575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610af3565b600080611fa48484611d06565b9050611fb08184613f77565b91508015611fd857600a54611fd69086906201000090046001600160a01b031683612527565b505b935093915050565b6000611fee878284816126ce565b611ff78561274e565b5090506120068888888461278e565b9050600081116120545760405162461bcd60e51b815260206004820152601960248201527813d19510dbdc994e88185b5bdd5b9d081d1bdbc81cdb585b1b603a1b6044820152606401610af3565b60006120698761206384612888565b8b61290e565b9050612079888287878734612960565b86896001600160a01b03168961ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a856040516120ba91815260200190565b60405180910390a450979650505050505050565b60008060006120e6876120e088612888565b3361290e565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb109061213d908b90309086908b908b9060040161432d565b6040805180830381865afa158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d9190614381565b92509250509550959350505050565b60006121a4896001846001600160401b0389166126ce565b6121ad8761274e565b5090506121bc8a8a8a8461278e565b90506000811161220a5760405162461bcd60e51b815260206004820152601960248201527813d19510dbdc994e88185b5bdd5b9d081d1bdbc81cdb585b1b603a1b6044820152606401610af3565b6000612221338a61221a85612888565b8a8a612b05565b90506122318a8287878734612960565b888b6001600160a01b03168b61ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a8560405161227291815260200190565b60405180910390a4509998505050505050505050565b60006122948282612b46565b905060ff81166122af576122aa85858585612ba2565b610d69565b60001960ff8216016122c7576122aa85858585612c41565b60405162461bcd60e51b815260206004820152601c60248201527f4f4654436f72653a20756e6b6e6f776e207061636b65742074797065000000006044820152606401610af3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161236d81601f6143a5565b10156123ac5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610af3565b6123b682846143a5565b845110156123fa5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610af3565b6060821580156124195760405191506000825260208201604052612463565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561245257805183526020928301920161243a565b5050858452601f01601f1916604052505b50949350505050565b600080600061247f338a61221a8b612888565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb10906124d6908d90309086908b908b9060040161432d565b6040805180830381865afa1580156124f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125169190614381565b925092505097509795505050505050565b6000306001600160a01b038516036125725761256d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484612e7f565b611d91565b611d916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858585612ee7565b6000606060008060008661ffff166001600160401b038111156125cc576125cc6139b2565b6040519080825280601f01601f1916602001820160405280156125f6576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612618578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff1681526020019081526020016000208560405161266291906143b8565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c906126bf90879087908790879087906143d4565b60405180910390a15050505050565b60065460ff16156126ea576126e584848484612f1f565b612748565b8151156127485760405162461bcd60e51b815260206004820152602660248201527f4f4654436f72653a205f61646170746572506172616d73206d7573742062652060448201526532b6b83a3c9760d11b6064820152608401610af3565b50505050565b60008061277b7f000000000000000000000000000000000000000000000000000000000000000084614426565b90506127878184613f77565b9150915091565b60006001600160a01b03851633146127fd5760405162461bcd60e51b815260206004820152602c60248201527f496e6469726563744f4654576974684665653a206f776e6572206973206e6f7460448201526b1039b2b7321031b0b63632b960a11b6064820152608401610af3565b60405163079cc67960e41b81526001600160a01b038681166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b15801561286757600080fd5b505af115801561287b573d6000803e3d6000fd5b5093979650505050505050565b6000806128b57f000000000000000000000000000000000000000000000000000000000000000084614265565b90506001600160401b03811115610ce15760405162461bcd60e51b815260206004820152601a60248201527f4f4654436f72653a20616d6f756e745344206f766572666c6f770000000000006044820152606401610af3565b60405160006020820152602181018490526001600160c01b031960c084901b1660418201526001600160a01b038216604982015260609060690160405160208183030381529060405290509392505050565b61ffff86166000908152600160205260408120805461297e90613e2a565b80601f01602080910402602001604051908101604052809291908181526020018280546129aa90613e2a565b80156129f75780601f106129cc576101008083540402835291602001916129f7565b820191906000526020600020905b8154815290600101906020018083116129da57829003601f168201915b505050505090508051600003612a685760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610af3565b612a73878751612ffe565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490612aca908b9086908c908c908c908c9060040161443a565b6000604051808303818588803b158015612ae357600080fd5b505af1158015612af7573d6000803e3d6000fd5b505050505050505050505050565b6060600185856001600160a01b0389168587604051602001612b2c969594939291906144a1565b604051602081830303815290604052905095945050505050565b6000612b538260016143a5565b83511015612b995760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610af3565b50016001015190565b6000806000612bb08461306f565b919450925090506001600160a01b038316612bcb5761dead92505b6000612bd683613103565b9050612be3888583613138565b9050816001600160a01b0316846001600160a01b03168961ffff167f485bd77f985a4f4eeb71f6c1cb373b6a5d3c5467e58f81e05e65c59cf4e87d0184604051612c2f91815260200190565b60405180910390a45050505050505050565b6000806000806000612c52866131c7565b945094509450945094506000600760008b61ffff1661ffff16815260200190815260200160002089604051612c8791906143b8565b90815260408051602092819003830190206001600160401b038b166000908152925281205460ff169150612cba85613103565b905081612d4057612ccc8b3083613138565b61ffff8c16600090815260076020526040908190209051919250600191612cf4908d906143b8565b90815260408051602092819003830190206001600160401b038d16600090815292528120805460ff19169215159290921790915560088054839290612d3a9084906143a5565b90915550505b6001600160a01b0386163b612d97576040516001600160a01b03871681527f9aedf5fdba8716db3b6705ca00150643309995d4f818a249ed6dde6677e7792d9060200160405180910390a150505050505050612748565b8a8a8a8a8a8a868a60008a612db5578b6001600160401b0316612db7565b5a5b9050600080612de95a609663eaffd49a60e01b8e8e8e8d8d8d8d8d604051602401611eec989796959493929190614502565b915091508115612e5a578751602089012060405161ffff8d16907fb8890edbfc1c74692f527444645f95489c3703cc2df42e4a366f5d06fa6cd88490612e34908e908e908690614576565b60405180910390a28c60086000828254612e4e9190613f77565b90915550612e67915050565b612e678b8b8b8b85612631565b50505050505050505050505050505050505050505050565b6040516001600160a01b038316602482015260448101829052612ee290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261327e565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526127489085906323b872dd60e01b90608401612eab565b6000612f2a83613353565b61ffff808716600090815260026020908152604080832093891683529290529081205491925090612f5c9084906143a5565b905060008111612fae5760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610af3565b80821015610e825760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610af3565b61ffff82166000908152600360205260408120549081900361301f57506127105b80821115612ee25760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610af3565b600080808061307e8582612b46565b60ff1614801561308f575083516049145b6130d65760405162461bcd60e51b815260206004820152601860248201527713d19510dbdc994e881a5b9d985b1a59081c185e5b1bd85960421b6044820152606401610af3565b6130e184600d6133af565b92506130ee846021613414565b91506130fb8460356133af565b929491935050565b6000610ce17f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416614238565b6040516340c10f1960e01b81526001600160a01b038381166004830152602482018390526000917f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b1580156131a757600080fd5b505af11580156131bb573d6000803e3d6000fd5b50939695505050505050565b6000808060608160016131da8783612b46565b60ff16146132255760405162461bcd60e51b815260206004820152601860248201527713d19510dbdc994e881a5b9d985b1a59081c185e5b1bd85960421b6044820152606401610af3565b61323086600d6133af565b935061323d866021613414565b925061324a866029613471565b9450613257866049613414565b9050613273605180885161326b9190613f77565b88919061235f565b915091939590929450565b60006132d3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134cf9092919063ffffffff16565b90508051600014806132f45750808060200190518101906132f491906145a4565b612ee25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610af3565b60006022825110156133a75760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c69642061646170746572506172616d73000000006044820152606401610af3565b506022015190565b60006133bc8260146143a5565b835110156134045760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610af3565b500160200151600160601b900490565b60006134218260086143a5565b835110156134685760405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606401610af3565b50016008015190565b600061347e8260206143a5565b835110156134c65760405162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b6044820152606401610af3565b50016020015190565b6060611ebc848460008585600080866001600160a01b031685876040516134f691906143b8565b60006040518083038185875af1925050503d8060008114613533576040519150601f19603f3d011682016040523d82523d6000602084013e613538565b606091505b509150915061354987838387613554565b979650505050505050565b606083156135c35782516000036135bc576001600160a01b0385163b6135bc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610af3565b5081611ebc565b611ebc83838151156135d85781518083602001fd5b8060405162461bcd60e51b8152600401610af39190613b0f565b803561ffff8116811461360457600080fd5b919050565b60008083601f84011261361b57600080fd5b5081356001600160401b0381111561363257600080fd5b60208301915083602082850101111561364a57600080fd5b9250929050565b80356001600160401b038116811461360457600080fd5b6000806000806000806080878903121561368157600080fd5b61368a876135f2565b955060208701356001600160401b03808211156136a657600080fd5b6136b28a838b01613609565b90975095508591506136c660408a01613651565b945060608901359150808211156136dc57600080fd5b506136e989828a01613609565b979a9699509497509295939492505050565b60006020828403121561370d57600080fd5b81356001600160e01b03198116811461167757600080fd5b60006020828403121561373757600080fd5b611677826135f2565b6000806040838503121561375357600080fd5b61375c836135f2565b946020939093013593505050565b6001600160a01b0381168114611e0e57600080fd5b60006060828403121561379157600080fd5b50919050565b60008060008060008060c087890312156137b057600080fd5b86356137bb8161376a565b95506137c9602088016135f2565b945060408701359350606087013592506080870135915060a08701356001600160401b038111156137f957600080fd5b61380589828a0161377f565b9150509295509295509295565b8015158114611e0e57600080fd5b60008060008060008060a0878903121561383957600080fd5b613842876135f2565b95506020870135945060408701359350606087013561386081613812565b925060808701356001600160401b0381111561387b57600080fd5b6136e989828a01613609565b60008060006040848603121561389c57600080fd5b6138a5846135f2565b925060208401356001600160401b038111156138c057600080fd5b6138cc86828701613609565b9497909650939450505050565b60008060008060008060008060006101008a8c0312156138f857600080fd5b89356139038161376a565b985061391160208b016135f2565b975060408a0135965060608a0135955060808a0135945060a08a01356001600160401b038082111561394257600080fd5b61394e8d838e01613609565b909650945084915061396260c08d01613651565b935060e08c013591508082111561397857600080fd5b506139858c828d0161377f565b9150509295985092959850929598565b6000602082840312156139a757600080fd5b81356116778161376a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139f0576139f06139b2565b604052919050565b60006001600160401b03821115613a1157613a116139b2565b50601f01601f191660200190565b600080600060608486031215613a3457600080fd5b613a3d846135f2565b925060208401356001600160401b03811115613a5857600080fd5b8401601f81018613613a6957600080fd5b8035613a7c613a77826139f8565b6139c8565b818152876020838501011115613a9157600080fd5b81602084016020830137600060208383010152809450505050613ab660408501613651565b90509250925092565b60005b83811015613ada578181015183820152602001613ac2565b50506000910152565b60008151808452613afb816020860160208601613abf565b601f01601f19169290920160200192915050565b6020815260006116776020830184613ae3565b600080600060608486031215613b3757600080fd5b613b40846135f2565b92506020840135613b5081613812565b9150613ab6604085016135f2565b60008060408385031215613b7157600080fd5b613b7a836135f2565b9150613b88602084016135f2565b90509250929050565b600080600080600080600080600060e08a8c031215613baf57600080fd5b613bb88a6135f2565b985060208a0135975060408a0135965060608a01356001600160401b0380821115613be257600080fd5b613bee8d838e01613609565b9098509650869150613c0260808d01613651565b955060a08c01359150613c1482613812565b90935060c08b01359080821115613c2a57600080fd5b50613c378c828d01613609565b915080935050809150509295985092959850929598565b600080600080600060808688031215613c6657600080fd5b613c6f866135f2565b9450613c7d602087016135f2565b93506040860135925060608601356001600160401b03811115613c9f57600080fd5b613cab88828901613609565b969995985093965092949392505050565b600080600060608486031215613cd157600080fd5b613cda846135f2565b9250613ce8602085016135f2565b9150604084013590509250925092565b600060208284031215613d0a57600080fd5b813561167781613812565b6000806000806000806000806000806101008b8d031215613d3557600080fd5b613d3e8b6135f2565b995060208b01356001600160401b0380821115613d5a57600080fd5b613d668e838f01613609565b909b509950899150613d7a60408e01613651565b985060608d0135975060808d01359150613d938261376a565b90955060a08c0135945060c08c01359080821115613db057600080fd5b50613dbd8d828e01613609565b9150809450508092505060e08b013590509295989b9194979a5092959850565b60008060008060808587031215613df357600080fd5b613dfc856135f2565b9350613e0a602086016135f2565b92506040850135613e1a8161376a565b9396929550929360600135925050565b600181811c90821680613e3e57607f821691505b60208210810361379157634e487b7160e01b600052602260045260246000fd5b8183823760009101908152919050565b6000808335601e19843603018112613e8557600080fd5b8301803591506001600160401b03821115613e9f57600080fd5b60200191503681900382131561364a57600080fd5b6020808252602d908201527f426173654f4654576974684665653a20616d6f756e74206973206c657373207460408201526c1a185b881b5a5b905b5bdd5b9d609a1b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff84168152604060208201526000611eb9604083018486613f01565b600060208284031215613f5a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ce157610ce1613f61565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b601f821115612ee257600081815260208120601f850160051c81016020861015613fd75750805b601f850160051c820191505b81811015610e8257828155600101613fe3565b81516001600160401b0381111561400f5761400f6139b2565b6140238161401d8454613e2a565b84613fb0565b602080601f83116001811461405857600084156140405750858301515b600019600386901b1c1916600185901b178555610e82565b600085815260208120601f198616915b8281101561408757888601518255948401946001909101908401614068565b50858210156140a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600061ffff808816835280871660208401525084604083015260806060830152613549608083018486613f01565b61ffff86168152608060208201526000614101608083018688613f01565b6001600160401b0394909416604083015250606001529392505050565b61ffff8916815260c06020820152600061413c60c08301898b613f01565b6001600160401b038816604084015286606084015285608084015282810360a084015261416a818587613f01565b9b9a5050505050505050505050565b6001600160401b03831115614190576141906139b2565b6141a48361419e8354613e2a565b83613fb0565b6000601f8411600181146141d857600085156141c05750838201355b600019600387901b1c1916600186901b178355610d69565b600083815260209020601f19861690835b8281101561420957868501358255602094850194600190920191016141e9565b50868210156142265760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8082028115828204841417610ce157610ce1613f61565b634e487b7160e01b600052601260045260246000fd5b6000826142745761427461424f565b500490565b60006020828403121561428b57600080fd5b81516001600160401b038111156142a157600080fd5b8201601f810184136142b257600080fd5b80516142c0613a77826139f8565b8181528560208385010111156142d557600080fd5b6142e6826020830160208601613abf565b95945050505050565b61ffff8516815260806020820152600061430c6080830186613ae3565b6001600160401b038516604084015282810360608401526135498185613ae3565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061435b90830186613ae3565b841515606084015282810360808401526143758185613ae3565b98975050505050505050565b6000806040838503121561439457600080fd5b505080516020909101519092909150565b80820180821115610ce157610ce1613f61565b600082516143ca818460208701613abf565b9190910192915050565b61ffff8616815260a0602082015260006143f160a0830187613ae3565b6001600160401b038616604084015282810360608401526144128186613ae3565b905082810360808401526143758185613ae3565b6000826144355761443561424f565b500690565b61ffff8716815260c06020820152600061445760c0830188613ae3565b82810360408401526144698188613ae3565b6001600160a01b0387811660608601528616608085015283810360a085015290506144948185613ae3565b9998505050505050505050565b60ff60f81b8760f81b16815285600182015260006001600160401b0360c01b808760c01b166021840152856029840152808560c01b1660498401525082516144f0816051850160208701613abf565b91909101605101979650505050505050565b600061010061ffff8b1683528060208401526145208184018b613ae3565b6001600160401b038a166040850152606084018990526001600160a01b038816608085015260a0840187905283810360c085015290506145608186613ae3565b9150508260e08301529998505050505050505050565b6060815260006145896060830186613ae3565b6001600160401b039490941660208301525060400152919050565b6000602082840312156145b657600080fd5b81516116778161381256fea26469706673582212209215ea3ef1c028a2ece9df8fac96e3dc7b1f298c83a42101d2f6d1f1afcf3e9a64736f6c634300081300330000000000000000000000007636d8722fdf7cd34232a915e48e96aa3eb386bf000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62