0 txs
0 calls
constructor
constructor()
functions
addressToBytes32
purefunction addressToBytes32(address _addr) pure returns (bytes32)
ADMIN_DELEGATE_ROLE
viewfunction ADMIN_DELEGATE_ROLE() view returns (bytes32)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
controller
viewfunction controller() view returns (address)
decodeComposeParams
purefunction decodeComposeParams(bytes compose) pure returns (tuple params)
decodeLzComposeMsg
purefunction decodeLzComposeMsg(bytes _message) pure returns (tuple composeData)
decodeTransportParams
purefunction decodeTransportParams(bytes transport) pure returns (tuple params)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
endcodeComposeMsg
purefunction endcodeComposeMsg(address _depositor, address _depositedTokenAddress, uint256 _amount, bytes _externalCallData) pure returns (bytes composeMsg)
fundVault
viewfunction fundVault() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAdmin
viewfunction isAdmin(address _sender) view returns (bool)
isDelegateAdmin
viewfunction isDelegateAdmin(address _sender) view returns (bool)
isOperator
viewfunction isOperator(address _sender) view returns (bool)
isSigner
viewfunction isSigner(address _sender) view returns (bool)
isTransferToFunVaultLzComposeAlert
viewfunction isTransferToFunVaultLzComposeAlert(bytes32 guid, bytes originMessage) view returns (bool isTransfer)
LZ_ENDPOINT
viewfunction LZ_ENDPOINT() view returns (address)
OPERATOR
viewfunction OPERATOR() view returns (bytes32)
payload
viewfunction payload(uint32, bytes32) view returns (bytes)
prepareForTransport
viewfunction prepareForTransport(address _token, uint32 _dstChainId, address _receiver, uint256 _amount, uint256 _amountOutMin, bytes _composeMsg, uint128 _composeGasLimit) view returns (uint256 valueToSend, tuple sendParam, tuple messagingFee)
prepareTransportMsg
purefunction prepareTransportMsg(uint32 _dstChainId, uint128 _composeGasLimit) pure returns (bytes transpostMsg)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
SIGNER
viewfunction SIGNER() view returns (bytes32)
stargateChainPoolToken
viewfunction stargateChainPoolToken(address, uint256) view returns (address)
stargateEndpointID
viewfunction stargateEndpointID(uint256) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
executeTransferFundFromRouterToFundVaultCrossChain
nonpayablefunction executeTransferFundFromRouterToFundVaultCrossChain(bytes32 _guid, uint32 _srcId, bytes _composeMessage, address depositor, address _depositedToken, uint256 _amount, uint256 _transferFee)
executeTransferFundFromRouterToFundVaultCrossChainLzComposeAlert
nonpayablefunction executeTransferFundFromRouterToFundVaultCrossChainLzComposeAlert(bytes _originMessage, address _depositedToken, bytes32 _guid, uint256 _transferFee)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin_, address moneyfiFundVault_, address controller_, address lzEndpoint_)
lzCompose
payablefunction lzCompose(address _from, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setController
nonpayablefunction setController(address _controller)
setFundVault
nonpayablefunction setFundVault(address _fundVault)
setLzEndpoint
nonpayablefunction setLzEndpoint(address _lzEndpoint)
setStargateEndpointId
nonpayablefunction setStargateEndpointId(uint256 _chainId, uint256 _stargateEndpointID)
setStargatePoolToken
nonpayablefunction setStargatePoolToken(address _token, uint256 _desChainID, address _stargateSourcePoolToken)
takeTransportDeposit
payablefunction takeTransportDeposit(tuple _depositParam) payable
takeTransportWithdraw
payablefunction takeTransportWithdraw(tuple _withdrawParam) payable
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawal
nonpayablefunction withdrawal(address _token, address _to, uint256 _amount)
events
ExecuteReceiveFundCrossChainFailed
event ExecuteReceiveFundCrossChainFailed(bytes32 indexed guid, bytes composeMsg, address indexed depositor, address depositedTokenAddress, uint256 amount, uint256 srcId, uint256 executedAt)
ExecuteTransferFundFromRouterToFundVaultCrossChain
event ExecuteTransferFundFromRouterToFundVaultCrossChain(address indexed depositor, address indexed depositToken, uint256 amount, uint256 executedAt)
Initialized
event Initialized(uint64 version)
LzCompose
event LzCompose(address sender, address _from, bytes32 _guid, bytes _message, address _executor, bytes _extraData, uint256 lzComposeAt)
LzComposeLogs
event LzComposeLogs(string message)
ReceiveFundCrossChainFailed
event ReceiveFundCrossChainFailed(address router, bytes message)
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)
TakeTransport
event TakeTransport(address indexed _token, uint32 _dstChainId, uint256 _amount, address indexed _receiver, bytes _composeMsg, uint128 _composeGasLimit)
TestReceiver
event TestReceiver(address strategyAddress, address depositor, address depositedTokenAddress, uint256 amount, bytes externalCallData)
TransferFundFromDexCrossChainToFundVault
event TransferFundFromDexCrossChainToFundVault(address depositor, address tokenAddress, uint256 amount, uint256 depositedAt)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InsufficientValue
error InsufficientValue(uint256 value, uint256 exptected)
InvalidAddress
error InvalidAddress(address addr)
InvalidAdminRole
error InvalidAdminRole()
InvalidAmount
error InvalidAmount(uint256 amount)
InvalidAtLeastOperatorRole
error InvalidAtLeastOperatorRole()
InvalidChainId
error InvalidChainId(uint256 chainId)
InvalidDelegateRole
error InvalidDelegateRole()
InvalidDepositedToken
error InvalidDepositedToken(address depositedToken, address expectedDepositedToken)
InvalidDepositor
error InvalidDepositor(address depositor, address expectedDepositor)
InvalidInitialization
error InvalidInitialization()
InvalidLzEndpoint
error InvalidLzEndpoint(address lzEndpoint)
InvalidOptionType
error InvalidOptionType(uint16 optionType)
InvalidOriginComposeMsg
error InvalidOriginComposeMsg()
InvalidPayloadHash
error InvalidPayloadHash(bytes payloadHash, bytes32 guid)
InvalidRouter
error InvalidRouter()
InvalidSender
error InvalidSender(address sender)
InvalidSignerRole
error InvalidSignerRole()
InvalidSlippage
error InvalidSlippage(uint256 slippage)
InvalidStargatePool
error InvalidStargatePool(address pool)
InvalidTargetChainAmount
error InvalidTargetChainAmount(uint256 amount, uint256 targetMinAmount, uint256 expectedAmount)
InvalidTokenAddress
error InvalidTokenAddress(address token)
NotInitializing
error NotInitializing()
RequiredAddressNotNull
error RequiredAddressNotNull()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TokenNotSupportBridgeToTargetChain
error TokenNotSupportBridgeToTargetChain(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516144e56100f95f395f81816124290152818161245201526125b101526144e55ff3fe608060405260043610610272575f3560e01c806391d148541161014d578063caafcd93116100ba578063e711a99911610076578063e711a9991461084c578063e7c5078d1461086b578063f77c47911461088a578063f7800e69146108a9578063f8c8765e146108c8578063fcb7278b146108e757005b8063caafcd9314610791578063cd4d1c64146107bd578063d0a10260146107dc578063d547741f146107ef578063d9331a111461080e578063d9e3a8f61461082d57005b8063a3246ad311610109578063a3246ad31461068e578063abb853ea146106ba578063ad3cb1cc146106d9578063b220205a14610709578063c8e82af714610728578063ca15c8731461077257005b806391d14854146105d357806392bf51e9146105f257806392eefe9b1461061d578063983d27371461063c578063a16a95f31461065c578063a217fddf1461067b57005b80634882acd6116101eb5780636d70f7ae116101a75780636d70f7ae1461050457806375b238fc1461052357806376043e3e146105435780637df73e271461056f57806382c947b71461058e5780639010d07c146105b457005b80634882acd61461046c5780634f1ef2861461048b578063501c19151461049e57806352d1902d146104b1578063582abd12146104c55780635dda53fd146104e557005b8063248a9ca31161023a578063248a9ca3146103af57806324d7806c146103dd5780632f2ff15d146103fc5780633635698b1461041b578063363710f81461043a57806336568abe1461044d57005b806229c0b41461027b57806301ffc9a71461029a5780630952ff54146102ce578063103a2c96146102fc578063227978561461035857005b3661027957005b005b348015610286575f80fd5b5061027961029536600461306b565b610915565b3480156102a5575f80fd5b506102b96102b43660046130a9565b6109ae565b60405190151581526020015b60405180910390f35b3480156102d9575f80fd5b506102ee5f8051602061445983398151915281565b6040519081526020016102c5565b348015610307575f80fd5b5061034b6103163660046130f5565b6040805163ffffffff9390931660208401526001600160801b0391909116828201528051808303820181526060909201905290565b6040516102c5919061315a565b348015610363575f80fd5b5061039761037236600461316c565b600660209081525f92835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103ba575f80fd5b506102ee6103c9366004613196565b5f9081526020819052604090206001015490565b3480156103e8575f80fd5b506102b96103f73660046131ad565b6109d8565b348015610407575f80fd5b506102796104163660046131c8565b6109f0565b348015610426575f80fd5b5061034b6104353660046131eb565b610a1a565b610279610448366004613352565b610abc565b348015610458575f80fd5b506102796104673660046131c8565b610d82565b348015610477575f80fd5b5061027961048636600461343f565b610db5565b61027961049936600461347e565b610e9c565b6102796104ac3660046134ca565b610ebb565b3480156104bc575f80fd5b506102ee611131565b3480156104d0575f80fd5b506102ee5f8051602061443983398151915281565b3480156104f0575f80fd5b506102796104ff36600461356e565b61114c565b34801561050f575f80fd5b506102b961051e3660046131ad565b6111a6565b34801561052e575f80fd5b506102ee5f8051602061447983398151915281565b34801561054e575f80fd5b5061056261055d3660046135d2565b6111be565b6040516102c59190613610565b34801561057a575f80fd5b506102b96105893660046131ad565b6111fd565b348015610599575f80fd5b506102ee6105a83660046131ad565b6001600160a01b031690565b3480156105bf575f80fd5b506103976105ce36600461356e565b611215565b3480156105de575f80fd5b506102b96105ed3660046131c8565b611233565b3480156105fd575f80fd5b506102ee61060c366004613196565b60056020525f908152604090205481565b348015610628575f80fd5b506102796106373660046131ad565b61125b565b348015610647575f80fd5b506102ee5f805160206144b983398151915281565b348015610667575f80fd5b506102b96106763660046131ad565b6112a3565b348015610686575f80fd5b506102ee5f81565b348015610699575f80fd5b506106ad6106a8366004613196565b6112bb565b6040516102c59190613658565b3480156106c5575f80fd5b506102796106d43660046131ad565b6112d4565b3480156106e4575f80fd5b5061034b604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610714575f80fd5b506102796107233660046136a3565b61131c565b348015610733575f80fd5b506102b9610742366004613733565b600860209081525f9283526040909220815180830184018051928152908401929093019190912091525460ff1681565b34801561077d575f80fd5b506102ee61078c366004613196565b611668565b34801561079c575f80fd5b506107b06107ab366004613760565b61167e565b6040516102c59190613791565b3480156107c8575f80fd5b50600454610397906001600160a01b031681565b6102796107ea366004613809565b611700565b3480156107fa575f80fd5b506102796108093660046131c8565b611a18565b348015610819575f80fd5b506102796108283660046131ad565b611a3c565b348015610838575f80fd5b506102796108473660046138a4565b611a84565b348015610857575f80fd5b5061034b610866366004613905565b611cce565b348015610876575f80fd5b50610562610885366004613760565b611d00565b348015610895575f80fd5b50600354610397906001600160a01b031681565b3480156108b4575f80fd5b50600254610397906001600160a01b031681565b3480156108d3575f80fd5b506102796108e236600461396c565b611d56565b3480156108f2575f80fd5b506109066109013660046139c5565b611eec565b6040516102c593929190613ad0565b61091e336112a3565b61093b5760405163dade674960e01b815260040160405180910390fd5b6001600160a01b03821661097257604051637330680360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b805f0361099557604051633728b83d60e01b815260048101829052602401610969565b6109a96001600160a01b0384168383612271565b505050565b5f6001600160e01b03198216635a05180f60e01b14806109d257506109d2826122d0565b92915050565b5f6109d25f8051602061447983398151915283611233565b5f82815260208190526040902060010154610a0a81612304565b610a148383612311565b50505050565b600760209081525f928352604080842090915290825290208054610a3d90613b00565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6990613b00565b8015610ab45780601f10610a8b57610100808354040283529160200191610ab4565b820191905f5260205f20905b815481529060010190602001808311610a9757829003601f168201915b505050505081565b60035f9054906101000a90046001600160a01b03166001600160a01b03166348db35096040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b309190613b38565b6001600160a01b0316336001600160a01b031614610b615760405163466d7fef60e01b815260040160405180910390fd5b5f610b7e8260600151836040015184608001518560c00151611cce565b90505f808360e00151806020019051810190610b9a9190613b53565b915091505f805f610bbf875f01518689602001518a608001518b60a001518b8a611eec565b9250925092505f60065f895f01516001600160a01b03166001600160a01b031681526020019081526020015f205f8763ffffffff1681526020019081526020015f205f9054906101000a90046001600160a01b031690505f610c3389606001518a6040015186606001518c60c00151611cce565b60a0850181905260808a01518a51919250610c5b916001600160a01b03169033903090612344565b60808901518951610c79916001600160a01b0390911690849061236c565b84341015610ca357604051631c102d6360e21b815234600482015260248101869052604401610969565b60405163cbef2aa960e01b81526001600160a01b0383169063cbef2aa9903490610cd590889088903390600401613b80565b5f6040518083038185885af1158015610cf0573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610d189190810190613cab565b50505088602001516001600160a01b0316895f01516001600160a01b03167f2ce4b1a62baf2a250d3aaf174a3330c4be239031a80fadb8ccb48ef6d6f4b4c8898c608001518c8b604051610d6f9493929190613d47565b60405180910390a3505050505050505050565b6001600160a01b0381163314610dab5760405163334bd91960e11b815260040160405180910390fd5b6109a982826123f3565b610dbe336112a3565b610ddb5760405163dade674960e01b815260040160405180910390fd5b6001600160a01b038316610e0d57604051637330680360e01b81526001600160a01b0384166004820152602401610969565b6001600160a01b038116610e3f57604051637330680360e01b81526001600160a01b0382166004820152602401610969565b815f03610e625760405163331003b360e01b815260048101839052602401610969565b6001600160a01b039283165f9081526006602090815260408083209483529390529190912080546001600160a01b03191691909216179055565b610ea461241e565b610ead826124c4565b610eb782826124ea565b5050565b60035f9054906101000a90046001600160a01b03166001600160a01b03166348db35096040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2f9190613b38565b6001600160a01b0316336001600160a01b031614610f605760405163466d7fef60e01b815260040160405180910390fd5b5f808260800151806020019051810190610f7a9190613b53565b915091505f805f610fad865f015186886020015189604001518a6060015160405180602001604052805f8152508a611eec565b88516001600160a01b039081165f90815260066020908152604080832063ffffffff808e16855292529182902054918c01518c51969950949750929550811693610ffe939116913391309161234416565b6040870151875161101c916001600160a01b0390911690839061236c565b8334101561104657604051631c102d6360e21b815234600482015260248101859052604401610969565b60405163cbef2aa960e01b81526001600160a01b0382169063cbef2aa990349061107890879087903390600401613b80565b5f6040518083038185885af1158015611093573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526110bb9190810190613cab565b50505086602001516001600160a01b0316875f01516001600160a01b03167f2ce4b1a62baf2a250d3aaf174a3330c4be239031a80fadb8ccb48ef6d6f4b4c8888a6040015160405180602001604052805f8152508a6040516111209493929190613d47565b60405180910390a350505050505050565b5f61113a6125a6565b505f8051602061449983398151915290565b611155336112a3565b6111725760405163dade674960e01b815260040160405180910390fd5b815f036111955760405163331003b360e01b815260048101829052602401610969565b5f9182526005602052604090912055565b5f6109d25f805160206144b983398151915283611233565b604080516080810182525f80825260208201819052918101829052606080820152906111ea84846125ef565b90506111f581611d00565b949350505050565b5f6109d25f8051602061443983398151915283611233565b5f82815260016020526040812061122c9083612639565b9392505050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b611264336109d8565b61128157604051632d4d7bb360e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b5f6109d25f8051602061445983398151915283611233565b5f8181526001602052604090206060906109d290612644565b6112dd336109d8565b6112fa57604051632d4d7bb360e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611325336111a6565b61134257604051631784501560e11b815260040160405180910390fd5b63ffffffff87165f9081526007602090815260408083208b84529091528120805461136c90613b00565b80601f016020809104026020016040519081016040528092919081815260200182805461139890613b00565b80156113e35780601f106113ba576101008083540402835291602001916113e3565b820191905f5260205f20905b8154815290600101906020018083116113c657829003601f168201915b505050505090505f89888860405160200161140093929190613d85565b6040516020818303038152906040529050808051906020012082805190602001201461144357818a604051634ccfce9960e01b8152600401610969929190613d9e565b5f61148289898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d0092505050565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156114c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ed9190613dbf565b9050815f01516001600160a01b0316886001600160a01b03161461153a578151604051635f539c3d60e01b81526001600160a01b03808b1660048301529091166024820152604401610969565b8581101561155b57604051631e9acf1760e31b815260040160405180910390fd5b600254611575906001600160a01b0389811691168861236c565b60025460405163745e87f760e01b81526001600160a01b039091169063745e87f7906115a9908a908c908b90600401613dd6565b6020604051808303815f875af11580156115c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e99190613dbf565b5063ffffffff8b165f9081526007602090815260408083208f8452909152812061161291613001565b604080518781524260208201526001600160a01b03808a1692908b16917fea72be751f2e3a5e8fa5d73b525f6f01f5e6da6a3f66c13dce3c1825f5a3805a910160405180910390a3505050505050505050505050565b5f8181526001602052604081206109d290612650565b6040805160c0810182525f80825260208083018290529282018190526060808301829052608083015260a0820152825190916116c09184018101908401613dfa565b6001600160801b031660a087015260808601526001600160a01b039081166060860152604085019190915263ffffffff9091166020840152168152919050565b6004546001600160a01b0316331461172d57604051637af1762360e11b8152336004820152602401610969565b5f61173886866125ef565b90505f6117458787612659565b90505f61175183611d00565b90505f61175e898961267b565b60408084018290525190915061177a908b908690602001613ea0565b60408051601f1981840301815291815263ffffffff85165f908152600760209081528282208e8352905220906117b09082613efc565b50602082015160025460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303815f875af1925050508015611823575060408051601f3d908101601f1916820190925261182091810190613fb6565b60015b61187d57815f01516001600160a01b03168a7f52a3aafebb8b72b865eef49add720192c790c58da6e21f6d2cd640fff5c1d291868560200151858842604051611870959493929190613fd5565b60405180910390a36119c4565b506002546020830151835160405163745e87f760e01b81526001600160a01b039093169263745e87f7926118b79290918690600401613dd6565b6020604051808303815f875af19250505080156118f1575060408051601f3d908101601f191682019092526118ee91810190613dbf565b60015b61193e57815f01516001600160a01b03168a7f52a3aafebb8b72b865eef49add720192c790c58da6e21f6d2cd640fff5c1d291868560200151858842604051611870959493929190613fd5565b5063ffffffff83165f9081526007602090815260408083208d8452909152812061196791613001565b8151602080840151604080516001600160a01b039485168152939091169183019190915281018290524260608201527f6233dbc6d9818c091288133deee63732a90cfc837811ca316d8395fc28fcad2b9060800160405180910390a15b7ff6c4207b797e11fc20e55320622d0fa05735df1f358ad791d02ce78c28175703338c8c8c8c8c8c8c42604051611a0399989796959493929190614042565b60405180910390a15050505050505050505050565b5f82815260208190526040902060010154611a3281612304565b610a1483836123f3565b611a45336109d8565b611a6257604051632d4d7bb360e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611a8d336111a6565b611aaa57604051631784501560e11b815260040160405180910390fd5b5f611ab586866125ef565b90505f611ac182611d00565b90505f611ace888861267b565b905060085f8681526020019081526020015f208888604051611af19291906140ae565b9081526040519081900360200190205460ff1615611b2257604051633211585b60e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015281906001600160a01b038816906370a0823190602401602060405180830381865afa158015611b66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8a9190613dbf565b1015611ba957604051631e9acf1760e31b815260040160405180910390fd5b600160085f8781526020019081526020015f208989604051611bcc9291906140ae565b908152604051908190036020019020805491151560ff19909216919091179055600254611c06906001600160a01b0388811691168361236c565b600254825160405163745e87f760e01b81526001600160a01b039092169163745e87f791611c3b918a91908690600401613dd6565b6020604051808303815f875af1158015611c57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c7b9190613dbf565b508151604080518381524260208201526001600160a01b03808a169316917fea72be751f2e3a5e8fa5d73b525f6f01f5e6da6a3f66c13dce3c1825f5a3805a910160405180910390a35050505050505050565b606084848484604051602001611ce794939291906140bd565b6040516020818303038152906040529050949350505050565b604080516080810182525f80825260208083018290529282015260608082015282519091611d3491840181019084016140ef565b606085015260408401526001600160a01b039081166020840152168152919050565b5f611d5f612693565b805490915060ff600160401b82041615906001600160401b03165f81158015611d855750825b90505f826001600160401b03166001148015611da05750303b155b905081158015611dae575080155b15611dcc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611df657845460ff60401b1916600160401b1785555b6001600160a01b0389161580611e1357506001600160a01b038816155b80611e2557506001600160a01b038616155b80611e3757506001600160a01b038716155b15611e555760405163706e379b60e11b815260040160405180910390fd5b611e5e896126bb565b600280546001600160a01b03808b166001600160a01b031992831617909255600380548a841690831617905560048054928916929091169190911790558315611ee157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b6040805160e0810182525f8082526020820181905291810182905260608082018390526080820181905260a0820181905260c0820152604080518082019091525f80825260208201526001600160a01b03808b165f90815260066020908152604080832063ffffffff8e168085529252909120548c9216611f8b5760405163a51fc05560e01b81526001600160a01b0383166004820152602401610969565b5f60065f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f8d63ffffffff1681526020019081526020015f205f9054906101000a90046001600160a01b031690505f60055f8e63ffffffff1681526020019081526020015f205490505f808a51116120115760405180602001604052805f815250612045565b6120455f8a5f61203d60408051600360f01b602082015281516002818303018152602290910190915290565b92919061279e565b90506040518060e001604052808363ffffffff16815260200161206e8f6001600160a01b031690565b81526020018d81526020018d81526020018281526020018b815260200160405180602001604052805f81525081525096505f8390505f816001600160a01b0316630d35b4158a6040518263ffffffff1660e01b81526004016120d0919061414c565b5f60405180830381865afa1580156120ea573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612111919081019061415e565b925050508c81602001511015612155578d81602001518e604051634590f73d60e01b8152600401610969939291909283526020830191909152604082015260600190565b602081015160608a0152604051633b6f743b60e01b81526001600160a01b03831690633b6f743b9061218d908c905f906004016142a7565b6040805180830381865afa1580156121a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121cb91906142ca565b9750875f015199505f6001600160a01b0316826001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612219573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061223d9190613b38565b6001600160a01b03160361225d57604089015161225a908b6142f8565b99505b505050505050509750975097945050505050565b6040516001600160a01b038381166024830152604482018390526109a991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612805565b5f6001600160e01b03198216637965db0b60e01b14806109d257506301ffc9a760e01b6001600160e01b03198316146109d2565b61230e8133612871565b50565b5f8061231d84846128aa565b9050801561122c575f84815260016020526040902061233c9084612939565b509392505050565b610a1484856001600160a01b03166323b872dd86868660405160240161229e93929190613dd6565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156123b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123dd9190613dbf565b9050610a1484846123ee85856142f8565b61294d565b5f806123ff84846129dc565b9050801561122c575f84815260016020526040902061233c9084612a45565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806124a457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124985f80516020614499833981519152546001600160a01b031690565b6001600160a01b031614155b156124c25760405163703e46dd60e11b815260040160405180910390fd5b565b6124cd336112a3565b61230e5760405163dade674960e01b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612544575060408051601f3d908101601f1916820190925261254191810190613dbf565b60015b61256c57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610969565b5f80516020614499833981519152811461259c57604051632a87526960e21b815260048101829052602401610969565b6109a98383612a59565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124c25760405163703e46dd60e11b815260040160405180910390fd5b60606125fe82604c818661430b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b5f61122c8383612aae565b60605f61122c83612ad4565b5f6109d2825490565b5f612668600c6008848661430b565b61267191614332565b60e01c9392505050565b5f61268a602c600c848661430b565b61122c91614368565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006109d2565b6126d25f805160206144b983398151915282612311565b506126ea5f8051602061447983398151915282612311565b506127025f8051602061445983398151915282612311565b5061271a5f8051602061443983398151915282612311565b506127325f8051602061447983398151915280612b2d565b6127565f805160206144598339815191525f80516020614479833981519152612b2d565b61277a5f805160206144b98339815191525f80516020614459833981519152612b2d565b61230e5f805160206144398339815191525f80516020614459833981519152612b2d565b60608460036127ad825f612b77565b61ffff16146127e0576127c0815f612b77565b604051633a51740d60e01b815261ffff9091166004820152602401610969565b5f6127ec868686612bd3565b90506127fa87600383612c75565b979650505050505050565b5f8060205f8451602086015f885af180612824576040513d5f823e3d81fd5b50505f513d9150811561283b578060011415612848565b6001600160a01b0384163b155b15610a1457604051635274afe760e01b81526001600160a01b0385166004820152602401610969565b61287b8282611233565b610eb75760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610969565b5f6128b58383611233565b612932575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556128ea3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016109d2565b505f6109d2565b5f61122c836001600160a01b038416612cde565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299e8482612d23565b610a14576040516001600160a01b0384811660248301525f60448301526129d291869182169063095ea7b39060640161229e565b610a148482612805565b5f6129e78383611233565b15612932575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016109d2565b5f61122c836001600160a01b038416612d6c565b612a6282612e56565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612aa6576109a98282612eb9565b610eb7612f2b565b5f825f018281548110612ac357612ac3614385565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015612b2157602002820191905f5260205f20905b815481526020019060010190808311612b0d575b50505050509050919050565b5f82815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f612b838260026142f8565b83511015612bca5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610969565b50016002015190565b60606001600160801b03821615612c30576040516001600160f01b031960f086901b1660208201526001600160801b0319608085811b8216602284015284901b1660328201526042016040516020818303038152906040526111f5565b6040516001600160f01b031960f086901b1660208201526001600160801b0319608085901b166022820152603201604051602081830303815290604052949350505050565b6060836003612c84825f612b77565b61ffff1614612c97576127c0815f612b77565b846001612ca48551612f4a565b612caf906001614399565b8686604051602001612cc59594939291906143b3565b6040516020818303038152906040529150509392505050565b5f81815260018301602052604081205461293257508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556109d2565b5f805f8060205f8651602088015f8a5af192503d91505f519050828015612d6257508115612d545780600114612d62565b5f866001600160a01b03163b115b9695505050505050565b5f8181526001830160205260408120548015612e46575f612d8e600183614406565b85549091505f90612da190600190614406565b9050808214612e00575f865f018281548110612dbf57612dbf614385565b905f5260205f200154905080875f018481548110612ddf57612ddf614385565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612e1157612e11614419565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506109d2565b5f9150506109d2565b5092915050565b806001600160a01b03163b5f03612e8b57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610969565b5f8051602061449983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051612ed5919061442d565b5f60405180830381855af49150503d805f8114612f0d576040519150601f19603f3d011682016040523d82523d5f602084013e612f12565b606091505b5091509150612f22858383612f7c565b95945050505050565b34156124c25760405163b398979f60e01b815260040160405180910390fd5b5f61ffff821115612f78576040516306dfcc6560e41b81526010600482015260248101839052604401610969565b5090565b606082612f9157612f8c82612fd8565b61122c565b8151158015612fa857506001600160a01b0384163b155b15612fd157604051639996b31560e01b81526001600160a01b0385166004820152602401610969565b508061122c565b805115612fe85780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461300d90613b00565b5f825580601f1061301c575050565b601f0160209004905f5260205f209081019061230e91905b80821115612f78575f8155600101613034565b6001600160a01b038116811461230e575f80fd5b803561306681613047565b919050565b5f805f6060848603121561307d575f80fd5b833561308881613047565b9250602084013561309881613047565b929592945050506040919091013590565b5f602082840312156130b9575f80fd5b81356001600160e01b03198116811461122c575f80fd5b63ffffffff8116811461230e575f80fd5b6001600160801b038116811461230e575f80fd5b5f8060408385031215613106575f80fd5b8235613111816130d0565b91506020830135613121816130e1565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61122c602083018461312c565b5f806040838503121561317d575f80fd5b823561318881613047565b946020939093013593505050565b5f602082840312156131a6575f80fd5b5035919050565b5f602082840312156131bd575f80fd5b813561122c81613047565b5f80604083850312156131d9575f80fd5b82359150602083013561312181613047565b5f80604083850312156131fc575f80fd5b8235613188816130d0565b634e487b7160e01b5f52604160045260245ffd5b60405161010081016001600160401b038111828210171561323e5761323e613207565b60405290565b60405160a081016001600160401b038111828210171561323e5761323e613207565b604080519081016001600160401b038111828210171561323e5761323e613207565b604051606081016001600160401b038111828210171561323e5761323e613207565b604051601f8201601f191681016001600160401b03811182821017156132d2576132d2613207565b604052919050565b5f6001600160401b038211156132f2576132f2613207565b50601f01601f191660200190565b5f82601f83011261330f575f80fd5b813561332261331d826132da565b6132aa565b818152846020838601011115613336575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215613362575f80fd5b81356001600160401b03811115613377575f80fd5b82016101008185031215613389575f80fd5b61339161321b565b61339a8261305b565b81526133a86020830161305b565b60208201526133b96040830161305b565b60408201526133ca6060830161305b565b60608201526080828101359082015260a0808301359082015260c08201356001600160401b038111156133fb575f80fd5b61340786828501613300565b60c08301525060e08201356001600160401b03811115613425575f80fd5b61343186828501613300565b60e083015250949350505050565b5f805f60608486031215613451575f80fd5b833561345c81613047565b925060208401359150604084013561347381613047565b809150509250925092565b5f806040838503121561348f575f80fd5b823561349a81613047565b915060208301356001600160401b038111156134b4575f80fd5b6134c085828601613300565b9150509250929050565b5f602082840312156134da575f80fd5b81356001600160401b038111156134ef575f80fd5b820160a08185031215613500575f80fd5b613508613244565b813561351381613047565b8152602082013561352381613047565b6020820152604082810135908201526060808301359082015260808201356001600160401b03811115613554575f80fd5b61356086828501613300565b608083015250949350505050565b5f806040838503121561357f575f80fd5b50508035926020909101359150565b5f8083601f84011261359e575f80fd5b5081356001600160401b038111156135b4575f80fd5b6020830191508360208285010111156135cb575f80fd5b9250929050565b5f80602083850312156135e3575f80fd5b82356001600160401b038111156135f8575f80fd5b6136048582860161358e565b90969095509350505050565b6020815260018060a01b03825116602082015260018060a01b036020830151166040820152604082015160608201525f60608301516080808401526111f560a084018261312c565b602080825282518282018190525f918401906040840190835b818110156136985783516001600160a01b0316835260209384019390920191600101613671565b509095945050505050565b5f805f805f805f8060e0898b0312156136ba575f80fd5b8835975060208901356136cc816130d0565b965060408901356001600160401b038111156136e6575f80fd5b6136f28b828c0161358e565b909750955050606089013561370681613047565b9350608089013561371681613047565b979a969950949793969295929450505060a08201359160c0013590565b5f8060408385031215613744575f80fd5b8235915060208301356001600160401b038111156134b4575f80fd5b5f60208284031215613770575f80fd5b81356001600160401b03811115613785575f80fd5b6111f584828501613300565b6020815260018060a01b03825116602082015263ffffffff60208301511660408201526040820151606082015260018060a01b0360608301511660808201525f608083015160c060a08401526137ea60e084018261312c565b90506001600160801b0360a08501511660c08401528091505092915050565b5f805f805f805f60a0888a03121561381f575f80fd5b873561382a81613047565b96506020880135955060408801356001600160401b0381111561384b575f80fd5b6138578a828b0161358e565b909650945050606088013561386b81613047565b925060808801356001600160401b03811115613885575f80fd5b6138918a828b0161358e565b989b979a50959850939692959293505050565b5f805f805f608086880312156138b8575f80fd5b85356001600160401b038111156138cd575f80fd5b6138d98882890161358e565b90965094505060208601356138ed81613047565b94979396509394604081013594506060013592915050565b5f805f8060808587031215613918575f80fd5b843561392381613047565b9350602085013561393381613047565b92506040850135915060608501356001600160401b03811115613954575f80fd5b61396087828801613300565b91505092959194509250565b5f805f806080858703121561397f575f80fd5b843561398a81613047565b9350602085013561399a81613047565b925060408501356139aa81613047565b915060608501356139ba81613047565b939692955090935050565b5f805f805f805f60e0888a0312156139db575f80fd5b87356139e681613047565b965060208801356139f6816130d0565b95506040880135613a0681613047565b9450606088013593506080880135925060a08801356001600160401b03811115613a2e575f80fd5b613a3a8a828b01613300565b92505060c0880135613a4b816130e1565b8091505092959891949750929550565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e06080850152613a9d60e085018261312c565b905060a083015184820360a0860152613ab6828261312c565b91505060c083015184820360c0860152612f22828261312c565b838152608060208201525f613ae86080830185613a5b565b835160408401526020840151606084015290506111f5565b600181811c90821680613b1457607f821691505b602082108103613b3257634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613b48575f80fd5b815161122c81613047565b5f8060408385031215613b64575f80fd5b8251613b6f816130d0565b6020840151909250613121816130e1565b608081525f613b926080830186613a5b565b9050613bab602083018580518252602090810151910152565b6001600160a01b03929092166060919091015292915050565b5f60408284031215613bd4575f80fd5b613bdc613266565b825181526020928301519281019290925250919050565b5f613c0061331d846132da565b9050828152838383011115613c13575f80fd5b8282602083015e5f602084830101529392505050565b5f82601f830112613c38575f80fd5b61122c83835160208501613bf3565b5f60408284031215613c57575f80fd5b613c5f613266565b9050815168ffffffffffffffffff81168114613c79575f80fd5b815260208201516001600160401b03811115613c93575f80fd5b613c9f84828501613c29565b60208301525092915050565b5f805f83850360e0811215613cbe575f80fd5b6080811215613ccb575f80fd5b50613cd4613288565b8451815260208501516001600160401b0381168114613cf1575f80fd5b6020820152613d038660408701613bc4565b60408201529250613d178560808601613bc4565b915060c08401516001600160401b03811115613d31575f80fd5b613d3d86828701613c47565b9150509250925092565b63ffffffff85168152836020820152608060408201525f613d6b608083018561312c565b90506001600160801b038316606083015295945050505050565b838152818360208301375f910160200190815292915050565b604081525f613db0604083018561312c565b90508260208301529392505050565b5f60208284031215613dcf575f80fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f805f805f8060c08789031215613e0f575f80fd5b8651613e1a81613047565b6020880151909650613e2b816130d0565b604088015160608901519196509450613e4381613047565b60808801519093506001600160401b03811115613e5e575f80fd5b613e6a89828a01613c29565b92505060a0870151613e7b816130e1565b809150509295509295509295565b5f81518060208401855e5f93019283525090919050565b8281525f6111f56020830184613e89565b601f8211156109a957805f5260205f20601f840160051c81016020851015613ed65750805b601f840160051c820191505b81811015613ef5575f8155600101613ee2565b5050505050565b81516001600160401b03811115613f1557613f15613207565b613f2981613f238454613b00565b84613eb1565b6020601f821160018114613f5b575f8315613f445750848201515b5f19600385901b1c1916600184901b178455613ef5565b5f84815260208120601f198516915b82811015613f8a5787850151825560209485019460019092019101613f6a565b5084821015613fa757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215613fc6575f80fd5b8151801515811461122c575f80fd5b60a081525f613fe760a083018861312c565b6001600160a01b0396909616602083015250604081019390935263ffffffff919091166060830152608090910152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038a81168252891660208201526040810188905260e0606082018190525f90614075908301888a61401a565b6001600160a01b038716608084015282810360a084015261409781868861401a565b9150508260c08301529a9950505050505050505050565b818382375f9101908152919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612d629083018461312c565b5f805f8060808587031215614102575f80fd5b845161410d81613047565b602086015190945061411e81613047565b6040860151606087015191945092506001600160401b03811115614140575f80fd5b61396087828801613c29565b602081525f61122c6020830184613a5b565b5f805f60a08486031215614170575f80fd5b61417a8585613bc4565b925060408401516001600160401b03811115614194575f80fd5b8401601f810186136141a4575f80fd5b80516001600160401b038111156141bd576141bd613207565b8060051b6141cd602082016132aa565b918252602081840181019290810190898411156141e8575f80fd5b6020850192505b838310156142895782516001600160401b0381111561420c575f80fd5b85016040818c03601f19011215614221575f80fd5b614229613266565b6020820151815260408201516001600160401b03811115614248575f80fd5b6020818401019250508b601f83011261425f575f80fd5b61426e8c835160208501613bf3565b602082015280845250506020820191506020830192506141ef565b809650505050505061429e8560608601613bc4565b90509250925092565b604081525f6142b96040830185613a5b565b905082151560208301529392505050565b5f604082840312156142da575f80fd5b61122c8383613bc4565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109d2576109d26142e4565b5f8085851115614319575f80fd5b83861115614325575f80fd5b5050820193919092039150565b80356001600160e01b03198116906004841015612e4f576001600160e01b031960049490940360031b84901b1690921692915050565b803560208310156109d2575f19602084900360031b1b1692915050565b634e487b7160e01b5f52603260045260245ffd5b61ffff81811683821601908111156109d2576109d26142e4565b5f6143be8288613e89565b6001600160f81b031960f888811b821683526001600160f01b031960f089901b16600184015286901b1660038201526143fa6004820185613e89565b98975050505050505050565b818103818111156109d2576109d26142e4565b634e487b7160e01b5f52603160045260245ffd5b5f61122c8284613e8956fe6c8d7f768a6bb4aafe85e8a2f5a9680355239c7e14646ed62b044e39de154512c171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d7f23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d8360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622a164736f6c634300081a000a