1 tx
2 calls
constructor
constructor(address _owner, address _weth, address _wooRouter, address _sgInfo)
functions
bridgeSlippage
viewfunction bridgeSlippage() view returns (uint256)
dstExternalFeeRate
viewfunction dstExternalFeeRate() view returns (uint16)
ETH_PLACEHOLDER_ADDR
viewfunction ETH_PLACEHOLDER_ADDR() view returns (address)
FEE_BASE
viewfunction FEE_BASE() view returns (uint256)
feeAddr
viewfunction feeAddr() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
quoteLayerZeroFee
viewfunction quoteLayerZeroFee(uint256 refId, address to, tuple srcInfos, tuple dstInfos, tuple dstExtSwapInfo) view returns (uint256, uint256)
sgInfo
viewfunction sgInfo() view returns (address)
srcExternalFeeRate
viewfunction srcExternalFeeRate() view returns (uint16)
weth
viewfunction weth() view returns (address)
wooCrossRouters
viewfunction wooCrossRouters(uint32) view returns (address)
wooRouter
viewfunction wooRouter() view returns (address)
claimFee
nonpayablefunction claimFee(address token)
crossSwap
payablefunction crossSwap(uint256 refId, address to, tuple srcInfos, tuple dstInfos, tuple srcExtSwapInfo, tuple dstExtSwapInfo) payable
inCaseTokenGotStuck
nonpayablefunction inCaseTokenGotStuck(address stuckToken)
lzCompose
payablefunction lzCompose(address _from, bytes32, bytes _message, address, bytes) payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setBridgeSlippage
nonpayablefunction setBridgeSlippage(uint256 _bridgeSlippage)
setFeeAddr
nonpayablefunction setFeeAddr(address _feeAddr)
setWooCrossRouter
nonpayablefunction setWooCrossRouter(uint32 _eid, address _crossRouter)
setWooRouter
nonpayablefunction setWooRouter(address _wooRouter)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
WooCrossSwapOnDstChain
event WooCrossSwapOnDstChain(uint256 indexed refId, address indexed sender, address indexed to, address bridgedToken, uint256 bridgedAmount, address toToken, address realToToken, uint256 minToAmount, uint256 realToAmount, uint8 swapType, uint256 fee)
WooCrossSwapOnSrcChain
event WooCrossSwapOnSrcChain(uint256 indexed refId, address indexed sender, address indexed to, address fromToken, uint256 fromAmount, address bridgeToken, uint256 minBridgeAmount, uint256 realBridgeAmount, uint8 swapType, uint256 fee)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InvalidOptionType
error InvalidOptionType(uint16 optionType)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
creation bytecode
0x60a06040523480156200001157600080fd5b5060405162004eb838038062004eb883398101604081905262000034916200013f565b836001600160a01b0381166200006457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006f81620000d2565b506000805460ff60a01b19169055600180556001600160a01b03928316608052600280549284166001600160a01b031993841617905560038054919093169116179055506064600555600680546219001963ffffffff199091161790556200019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200013a57600080fd5b919050565b600080600080608085870312156200015657600080fd5b620001618562000122565b9350620001716020860162000122565b9250620001816040860162000122565b9150620001916060860162000122565b905092959194509250565b608051614c9e6200021a6000396000818161026e01528181612b8501528181612c0601528181612c5c01528181612ceb01528181612dab01528181612e3101528181612ee201528181612f2401528181612fb30152818161319901528181613215015281816132d30152818161331501526133a40152614c9e6000f3fe60806040526004361061019a5760003560e01c806383af5550116100e1578063d0a102601161008a578063ecb911de11610064578063ecb911de146104e3578063ecefc705146104fe578063f2fde38b14610515578063fdeba4e51461053557600080fd5b8063d0a1026014610490578063d6b4c897146104a3578063e1a4e72a146104c357600080fd5b80638da5cb5b116100bb5780638da5cb5b14610411578063b2855b4f1461043c578063b92921411461045c57600080fd5b806383af5550146103b05780638456cb59146103d457806388c4cb36146103e957600080fd5b80634dba39a21161014357806369d2299c1161011d57806369d2299c146103385780636ebc51e11461037b578063715018a61461039b57600080fd5b80634dba39a2146102b057806358800adf146102d05780635c975abb146102fd57600080fd5b80633f4ba83a116101745780633f4ba83a146102475780633fc8cef31461025c578063403a01e51461029057600080fd5b8063117acd17146101a65780631b445c61146101e057806339e7fddc146101f557600080fd5b366101a157005b600080fd5b3480156101b257600080fd5b506101c66101c1366004613fd9565b610562565b604080519283526020830191909152015b60405180910390f35b6101f36101ee36600461414b565b6108c6565b005b34801561020157600080fd5b506004546102229073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d7565b34801561025357600080fd5b506101f361131b565b34801561026857600080fd5b506102227f000000000000000000000000000000000000000000000000000000000000000081565b34801561029c57600080fd5b506101f36102ab366004614254565b61132d565b3480156102bc57600080fd5b506101f36102cb36600461426d565b6113cc565b3480156102dc57600080fd5b506003546102229073ffffffffffffffffffffffffffffffffffffffff1681565b34801561030957600080fd5b5060005474010000000000000000000000000000000000000000900460ff1660405190151581526020016101d7565b34801561034457600080fd5b506102226103533660046142a3565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561038757600080fd5b506101f361039636600461426d565b6114be565b3480156103a757600080fd5b506101f36115f0565b3480156103bc57600080fd5b506103c660055481565b6040519081526020016101d7565b3480156103e057600080fd5b506101f3611602565b3480156103f557600080fd5b5061022273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561041d57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610222565b34801561044857600080fd5b506101f361045736600461426d565b611612565b34801561046857600080fd5b5060065461047d9062010000900461ffff1681565b60405161ffff90911681526020016101d7565b6101f361049e366004614309565b611661565b3480156104af57600080fd5b506101f36104be3660046143aa565b611a74565b3480156104cf57600080fd5b506101f36104de36600461426d565b611b79565b3480156104ef57600080fd5b5060065461047d9061ffff1681565b34801561050a57600080fd5b506103c6620186a081565b34801561052157600080fd5b506101f361053036600461426d565b611c6a565b34801561054157600080fd5b506002546102229073ffffffffffffffffffffffffffffffffffffffff1681565b600080808787610578604088016020890161426d565b6105886060890160408a0161426d565b8860600135886040516020016105a3969594939291906144d1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600061063c816105e960c0890160a08a0161452a565b6105f960a08a0160808b0161452a565b604080517e030000000000000000000000000000000000000000000000000000000000006020820152815180820360020181526022909101909152929190611ccb565b6040805160e081019091529091506000908061065b60208a018a6142a3565b63ffffffff1681526020016106b0600760008b600001602081019061068091906142a3565b63ffffffff16815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1690565b81526040808b01356020808401919091526060808d01358385015283018690526080830187905281518082018352600080825260a09094015260035482517f42407dc40000000000000000000000000000000000000000000000000000000081529251949550929373ffffffffffffffffffffffffffffffffffffffff9093169263bb0d15fe9284926342407dc4926004808401938290030181865afa15801561075e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610782919061455c565b61079260408d0160208e0161426d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015273ffffffffffffffffffffffffffffffffffffffff166024820152604401602060405180830381865afa158015610807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082b9190614579565b905060008173ffffffffffffffffffffffffffffffffffffffff16633b6f743b8460006040518363ffffffff1660e01b815260040161086b92919061467a565b6040805180830381865afa158015610887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ab91906146ce565b8051602090910151909d909c509a5050505050505050505050565b6108ce611d4e565b6108d6611da3565b73ffffffffffffffffffffffffffffffffffffffff8516610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f576f6f43726f7373436861696e526f7574657256353a2021746f00000000000060448201526064015b60405180910390fd5b835173ffffffffffffffffffffffffffffffffffffffff166109fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f576f6f43726f7373436861696e526f7574657256353a2021737263496e666f7360448201527f2e66726f6d546f6b656e00000000000000000000000000000000000000000000606482015260840161094f565b6000610a0e606085016040860161426d565b73ffffffffffffffffffffffffffffffffffffffff1603610ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f576f6f43726f7373436861696e526f7574657256353a2021647374496e666f7360448201527f2e746f546f6b656e000000000000000000000000000000000000000000000000606482015260840161094f565b600354604080517f42407dc4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163bb0d15fe9183916342407dc49160048083019260209291908290030181865afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d919061455c565b60208801516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015273ffffffffffffffffffffffffffffffffffffffff166024820152604401602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190614579565b73ffffffffffffffffffffffffffffffffffffffff1603610c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f576f6f43726f7373436861696e526f7574657256353a2021737263496e666f7360448201527f2e627269646765546f6b656e0000000000000000000000000000000000000000606482015260840161094f565b8351600090819073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff111111111111111111111111111111111111111201610d6a573486604001511115610d65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f576f6f43726f7373436861696e526f7574657256353a2021737263496e666f7360448201527f2e66726f6d416d6f756e74000000000000000000000000000000000000000000606482015260840161094f565b610d7e565b610d7e866000015133308960400151611de6565b856020015173ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff16146110125785516002546040880151610de4929173ffffffffffffffffffffffffffffffffffffffff1690611f57565b855160009073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610e20576000610e26565b86604001515b90506000610e37602087018761426d565b73ffffffffffffffffffffffffffffffffffffffff1614610f415760025473ffffffffffffffffffffffffffffffffffffffff1663199b83fa82610e7e602089018961426d565b610e8b60208a018a61426d565b8b600001518c602001518d604001518e60600151308e8060200190610eb091906146ea565b6040518b63ffffffff1660e01b8152600401610ed49998979695949392919061474f565b60206040518083038185885af1158015610ef2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f1791906147be565b600654909350620186a090610f309061ffff1685614806565b610f3a919061481d565b915061100c565b600254875160208901516040808b015160608c015191517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152604483015260648201523060848201528a821660a4820152911690637dc2038290839060c40160206040518083038185885af1158015610fe4573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061100991906147be565b92505b506110b1565b85606001518660400151146110a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f576f6f43726f7373436861696e526f7574657256353a2021737263496e666f7360448201527f2e6d696e427269646765416d6f756e7400000000000000000000000000000000606482015260840161094f565b856040015191505b816110c08760200151306120c7565b101561114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f576f6f43726f7373436861696e526f7574657256353a202142616c616e63655f60448201527f456e6f7567680000000000000000000000000000000000000000000000000000606482015260840161094f565b6111588183614858565b915085606001518210156111ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f576f6f43726f7373436861696e526f7574657256353a2021737263496e666f7360448201527f2e6d696e427269646765416d6f756e7400000000000000000000000000000000606482015260840161094f565b6111fc8888848989886121b1565b73ffffffffffffffffffffffffffffffffffffffff87163373ffffffffffffffffffffffffffffffffffffffff16897f546dc08c5438b68796e5047ad2ac863ab74300bdf49457917d47021f090c45c489600001518a604001518b602001518c6060015189600073ffffffffffffffffffffffffffffffffffffffff168d600001602081019061128c919061426d565b73ffffffffffffffffffffffffffffffffffffffff16146112ae5760016112b1565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9788168152602081019690965293909516928401929092526060830152608082015260ff90911660a082015260c0810186905260e00160405180910390a4505061131360018055565b505050505050565b6113236125ab565b61132b6125fe565b565b6113356125ab565b6127108111156113c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f576f6f43726f7373436861696e526f7574657256353a20215f6272696467655360448201527f6c69707061676500000000000000000000000000000000000000000000000000606482015260840161094f565b600555565b6113d46125ab565b73ffffffffffffffffffffffffffffffffffffffff8116611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f576f6f43726f7373436861696e526f7574657256353a20215f776f6f526f757460448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161094f565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6114c6611da3565b60045473ffffffffffffffffffffffffffffffffffffffff16611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f576f6f43726f7373436861696e526f7574657256353a20216665654164647200604482015260640161094f565b600061155182306120c7565b905080156115e3577fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8316016115be576004546115b99073ffffffffffffffffffffffffffffffffffffffff168261267b565b6115e3565b6004546115e390839073ffffffffffffffffffffffffffffffffffffffff1683612764565b506115ed60018055565b50565b6115f86125ab565b61132b60006128cd565b61160a6125ab565b61132b612942565b61161a6125ab565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600354604080517f42407dc4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916342407dc49160048083019260209291908290030181865afa1580156116d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f5919061455c565b6003546040517f73f0c8f500000000000000000000000000000000000000000000000000000000815263ffffffff8316600482015291925073ffffffffffffffffffffffffffffffffffffffff16906373f0c8f590602401602060405180830381865afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178e9190614579565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f576f6f43726f7373436861696e526f7574657256353a20494e56414c49445f4360448201527f414c4c4552000000000000000000000000000000000000000000000000000000606482015260840161094f565b600061185487876129b1565b90506000806000806000806118698d8d6129ca565b80602001905181019061187c919061486b565b6003546040517fbb0d15fe000000000000000000000000000000000000000000000000000000008152969c50949a509298509096509450925073ffffffffffffffffffffffffffffffffffffffff169063bb0d15fe90611909908b90889060040163ffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b602060405180830381865afa158015611926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194a9190614579565b73ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f576f6f43726f7373436861696e526f7574657256353a20215f66726f6d5f737460448201527f6172676174650000000000000000000000000000000000000000000000000000606482015260840161094f565b7fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff851601611a5457611a4f8686858a8686612a15565b611a63565b611a63868685878b8787613583565b505050505050505050505050505050565b611a7c6125ab565b73ffffffffffffffffffffffffffffffffffffffff8116611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f576f6f43726f7373436861696e526f7574657256353a20215f63726f7373526f60448201527f7574657200000000000000000000000000000000000000000000000000000000606482015260840161094f565b63ffffffff91909116600090815260076020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b611b816125ab565b7fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611bc8576115ed334761267b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5991906147be565b9050611c66823383612764565b5050565b611c726125ab565b73ffffffffffffffffffffffffffffffffffffffff8116611cc2576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161094f565b6115ed816128cd565b6060846003611cdb826000613cf6565b61ffff1614611d2857611cef816000613cf6565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240161094f565b6000611d35868686613d76565b9050611d4387600383613e82565b979650505050505050565b60005474010000000000000000000000000000000000000000900460ff161561132b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015403611ddf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790529151600092839290881691611e8591906149ab565b6000604051808303816000865af19150503d8060008114611ec2576040519150601f19603f3d011682016040523d82523d6000602084013e611ec7565b606091505b5091509150818015611ef1575080511580611ef1575080806020019051810190611ef191906149c7565b611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015260640161094f565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790529151600092839290871691611fee91906149ab565b6000604051808303816000865af19150503d806000811461202b576040519150601f19603f3d011682016040523d82523d6000602084013e612030565b606091505b509150915081801561205a57508051158061205a57508080602001905181019061205a91906149c7565b6120c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015260640161094f565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461218f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906370a0823190602401602060405180830381865afa158015612166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218a91906147be565b6121a8565b8173ffffffffffffffffffffffffffffffffffffffff16315b90505b92915050565b600086866121c5604086016020870161426d565b6121d5606087016040880161426d565b8660600135866040516020016121f0969594939291906144d1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060006122468161223660c0870160a0880161452a565b6105f960a088016080890161452a565b600354604080517f42407dc4000000000000000000000000000000000000000000000000000000008152905192935060009273ffffffffffffffffffffffffffffffffffffffff9092169163bb0d15fe9183916342407dc4916004808201926020929091908290030181865afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e8919061455c565b60208901516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015273ffffffffffffffffffffffffffffffffffffffff166024820152604401602060405180830381865afa158015612362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123869190614579565b602087015190915073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146123cd576123cd86602001518289611f57565b6040805160e08101909152600090806123e960208901896142a3565b63ffffffff16815260200161240e600760008a600001602081019061068091906142a3565b8152602001886040015181526020018860600151815260200184815260200185815260200160405180602001604052806000815250815250905060008273ffffffffffffffffffffffffffffffffffffffff16633b6f743b8360006040518363ffffffff1660e01b815260040161248692919061467a565b6040805180830381865afa1580156124a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c691906146ce565b90508273ffffffffffffffffffffffffffffffffffffffff1663c7c7f5b373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168a6020015173ffffffffffffffffffffffffffffffffffffffff1614612536578251612538565b345b8484326040518563ffffffff1660e01b8152600401612559939291906149e9565b60c06040518083038185885af1158015612577573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061259c9190614a33565b50505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461132b576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161094f565b612606613eed565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516126b291906149ab565b60006040518083038185875af1925050503d80600081146126ef576040519150601f19603f3d011682016040523d82523d6000602084013e6126f4565b606091505b505090508061275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015260640161094f565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916127fb91906149ab565b6000604051808303816000865af19150503d8060008114612838576040519150601f19603f3d011682016040523d82523d6000602084013e61283d565b606091505b509150915081801561286757508051158061286757508080602001905181019061286791906149c7565b6120c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015260640161094f565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61294a611d4e565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126513390565b60006129c1602c600c8486614ac7565b6121a891614af1565b60606129d982604c8186614ac7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff111111111111111111111111111111111111111201612b8357612a5d868561267b565b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16887fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8a8c600073ffffffffffffffffffffffffffffffffffffffff168c6000015173ffffffffffffffffffffffffffffffffffffffff1614612b1a576001612b1d565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c0820152600060e08201529051908190036101000190a450611313565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612beb57600080fd5b505af1158015612bff573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612d4b57612c827f00000000000000000000000000000000000000000000000000000000000000008786612764565b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16887fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888a7f00000000000000000000000000000000000000000000000000000000000000008a8c600073ffffffffffffffffffffffffffffffffffffffff168c6000015173ffffffffffffffffffffffffffffffffffffffff1614612b1a576001612b1d565b815173ffffffffffffffffffffffffffffffffffffffff161561319057600654600090620186a090612d879062010000900461ffff1687614806565b612d91919061481d565b90506000612d9f8287614858565b600254909150612de7907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff1683611f57565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663199b83fa856000015186600001517f00000000000000000000000000000000000000000000000000000000000000008b868b8f8c602001516040518963ffffffff1660e01b8152600401612e7c989796959493929190614b2d565b6020604051808303816000875af1925050508015612ed5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612ed2918101906147be565b60015b61307b57600254612f1f907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff166000611f57565b612f4a7f00000000000000000000000000000000000000000000000000000000000000008988612764565b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168a7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8a8c7f00000000000000000000000000000000000000000000000000000000000000008c8e600073ffffffffffffffffffffffffffffffffffffffff168e6000015173ffffffffffffffffffffffffffffffffffffffff1614613013576001613016565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c0820152600060e08201529051908190036101000190a4613189565b8873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168b7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee868d8e8d89600073ffffffffffffffffffffffffffffffffffffffff168f6000015173ffffffffffffffffffffffffffffffffffffffff1614613124576001613127565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c082015260e081018990529051908190036101000190a4505b505061357a565b6002546131d5907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff1686611f57565b6002546040517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152878116602483015260448201879052606482018690528881166084830181905260a483015290911690637dc203829060c4016020604051808303816000875af19250505080156132c6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526132c3918101906147be565b60015b61346c57600254613310907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff166000611f57565b61333b7f00000000000000000000000000000000000000000000000000000000000000008786612764565b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16887fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888a7f00000000000000000000000000000000000000000000000000000000000000008a8c600073ffffffffffffffffffffffffffffffffffffffff168c6000015173ffffffffffffffffffffffffffffffffffffffff1614613404576001613407565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c0820152600060e08201529051908190036101000190a461357a565b8673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16897fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee898b8c8b89600073ffffffffffffffffffffffffffffffffffffffff168d6000015173ffffffffffffffffffffffffffffffffffffffff1614613515576001613518565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c0820152600060e08201529051908190036101000190a4505b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff808616908716036136ac576135af858886612764565b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16897fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c88888b8c8a8c600073ffffffffffffffffffffffffffffffffffffffff168c6000015173ffffffffffffffffffffffffffffffffffffffff1614613644576001613647565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c0820152600060e08201529051908190036101000190a4613cec565b815173ffffffffffffffffffffffffffffffffffffffff1615613a3257600654600090620186a0906136e89062010000900461ffff1687614806565b6136f2919061481d565b90506136fe8186614858565b60025490955061372690879073ffffffffffffffffffffffffffffffffffffffff1687611f57565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663199b83fa84600001518560000151898b8a8a8f8b602001516040518963ffffffff1660e01b815260040161379b989796959493929190614b2d565b6020604051808303816000875af19250505080156137f4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526137f1918101906147be565b60015b6139325760025461381e90879073ffffffffffffffffffffffffffffffffffffffff166000611f57565b6138288186614b9a565b9450613835868987612764565b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168a7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c89898c8c8b8d600073ffffffffffffffffffffffffffffffffffffffff168d6000015173ffffffffffffffffffffffffffffffffffffffff16146138ca5760016138cd565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c0820152600060e08201529051908190036101000190a4613a2c565b8873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168b7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c8a8a8d8e8c89600073ffffffffffffffffffffffffffffffffffffffff168e6000015173ffffffffffffffffffffffffffffffffffffffff16146139c75760016139ca565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c082015260e081018890529051908190036101000190a4505b50613cec565b600254613a5790869073ffffffffffffffffffffffffffffffffffffffff1686611f57565b6002546040517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152888116602483015260448201879052606482018690528981166084830181905260a483015290911690637dc203829060c4016020604051808303816000875af1925050508015613b28575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613b25918101906147be565b60015b613bf257600254613b5290869073ffffffffffffffffffffffffffffffffffffffff166000611f57565b613b5d858886612764565b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16897fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c88888b8b8a8c600073ffffffffffffffffffffffffffffffffffffffff168c6000015173ffffffffffffffffffffffffffffffffffffffff1614613644576001613647565b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168a7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c89898c8d8b89600073ffffffffffffffffffffffffffffffffffffffff168d6000015173ffffffffffffffffffffffffffffffffffffffff1614613c87576001613c8a565b60005b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152602081019790975294871686860152929095166060850152608084015260a083019390935260ff90921660c0820152600060e08201529051908190036101000190a4505b5050505050505050565b6000613d03826002614b9a565b83511015613d6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640161094f565b50016002015190565b60606fffffffffffffffffffffffffffffffff821615613e0c576040517fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660208201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085811b8216602284015284901b166032820152604201604051602081830303815290604052613e7a565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660208201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b1660228201526032016040516020818303038152906040525b949350505050565b6060836003613e92826000613cf6565b61ffff1614613ea657611cef816000613cf6565b846001613eb38551613f41565b613ebe906001614bad565b8686604051602001613ed4959493929190614bcf565b6040516020818303038152906040529150509392505050565b60005474010000000000000000000000000000000000000000900460ff1661132b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061ffff821115613f89576040517f6dfcc650000000000000000000000000000000000000000000000000000000008152601060048201526024810183905260440161094f565b5090565b73ffffffffffffffffffffffffffffffffffffffff811681146115ed57600080fd5b600060c08284031215613fc157600080fd5b50919050565b600060408284031215613fc157600080fd5b60008060008060008587036101a0811215613ff357600080fd5b86359550602087013561400581613f8d565b945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561403757600080fd5b5060408601925061404b8760c08801613faf565b915061018086013567ffffffffffffffff81111561406857600080fd5b61407488828901613fc7565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156140d3576140d3614081565b60405290565b6040805190810167ffffffffffffffff811182821017156140d3576140d3614081565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561414357614143614081565b604052919050565b6000806000806000808688036101c081121561416657600080fd5b87359650602088013561417881613f8d565b955060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0820112156141aa57600080fd5b506141b36140b0565b60408801356141c181613f8d565b815260608801356141d181613f8d565b60208201526080880135604082015260a0880135606082015293506141f98860c08901613faf565b925061018087013567ffffffffffffffff8082111561421757600080fd5b6142238a838b01613fc7565b93506101a089013591508082111561423a57600080fd5b5061424789828a01613fc7565b9150509295509295509295565b60006020828403121561426657600080fd5b5035919050565b60006020828403121561427f57600080fd5b813561428a81613f8d565b9392505050565b63ffffffff811681146115ed57600080fd5b6000602082840312156142b557600080fd5b813561428a81614291565b60008083601f8401126142d257600080fd5b50813567ffffffffffffffff8111156142ea57600080fd5b60208301915083602082850101111561430257600080fd5b9250929050565b600080600080600080600060a0888a03121561432457600080fd5b873561432f81613f8d565b965060208801359550604088013567ffffffffffffffff8082111561435357600080fd5b61435f8b838c016142c0565b909750955060608a0135915061437482613f8d565b9093506080890135908082111561438a57600080fd5b506143978a828b016142c0565b989b979a50959850939692959293505050565b600080604083850312156143bd57600080fd5b82356143c881614291565b915060208301356143d881613f8d565b809150509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000813561443981613f8d565b73ffffffffffffffffffffffffffffffffffffffff1683526020820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261448757600080fd5b820160208101903567ffffffffffffffff8111156144a457600080fd5b8036038213156144b357600080fd5b604060208601526144c86040860182846143e3565b95945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff8088166020840152808716604084015280861660608401525083608083015260c060a083015261451e60c083018461442c565b98975050505050505050565b60006020828403121561453c57600080fd5b81356fffffffffffffffffffffffffffffffff8116811461428a57600080fd5b60006020828403121561456e57600080fd5b815161428a81614291565b60006020828403121561458b57600080fd5b815161428a81613f8d565b60005b838110156145b1578181015183820152602001614599565b50506000910152565b600081518084526145d2816020860160208601614596565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301526000608082015160e0608085015261464760e08501826145ba565b905060a083015184820360a086015261466082826145ba565b91505060c083015184820360c08601526144c882826145ba565b60408152600061468d6040830185614604565b905082151560208301529392505050565b6000604082840312156146b057600080fd5b6146b86140d9565b9050815181526020820151602082015292915050565b6000604082840312156146e057600080fd5b6121a8838361469e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261471f57600080fd5b83018035915067ffffffffffffffff82111561473a57600080fd5b60200191503681900382131561430257600080fd5b600061010073ffffffffffffffffffffffffffffffffffffffff808d168452808c166020850152808b166040850152808a1660608501528860808501528760a085015280871660c0850152508060e08401526147ae81840185876143e3565b9c9b505050505050505050505050565b6000602082840312156147d057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176121ab576121ab6147d7565b600082614853577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156121ab576121ab6147d7565b60008060008060008060c0878903121561488457600080fd5b8651955060208088015161489781613f8d565b60408901519096506148a881613f8d565b60608901519095506148b981613f8d565b608089015160a08a0151919550935067ffffffffffffffff808211156148de57600080fd5b908901906040828c0312156148f257600080fd5b6148fa6140d9565b825161490581613f8d565b8152828401518281111561491857600080fd5b8084019350508b601f84011261492d57600080fd5b82518281111561493f5761493f614081565b61496f857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016140fc565b92508083528c8582860101111561498557600080fd5b61499481868501878701614596565b508184820152809450505050509295509295509295565b600082516149bd818460208701614596565b9190910192915050565b6000602082840312156149d957600080fd5b8151801515811461428a57600080fd5b6080815260006149fc6080830186614604565b9050835160208301526020840151604083015273ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b60008082840360c0811215614a4757600080fd5b6080811215614a5557600080fd5b506040516060810167ffffffffffffffff8282108183111715614a7a57614a7a614081565b8160405285518352602086015191508082168214614a9757600080fd5b506020820152614aaa856040860161469e565b60408201529150614abe846080850161469e565b90509250929050565b60008085851115614ad757600080fd5b83861115614ae457600080fd5b5050820193919092039150565b803560208310156121ab577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600061010073ffffffffffffffffffffffffffffffffffffffff808c168452808b166020850152808a16604085015280891660608501528760808501528660a085015280861660c0850152508060e0840152614b8b818401856145ba565b9b9a5050505050505050505050565b808201808211156121ab576121ab6147d7565b61ffff818116838216019080821115614bc857614bc86147d7565b5092915050565b60008651614be1818460208b01614596565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b166003830152508351614c59816004840160208801614596565b0160040197965050505050505056fea2646970667358221220dd479cc54cbd0f6245c82e1746dd11bf92868e861c4f813f2453c161b9f61de764736f6c6343000816003300000000000000000000000097471c0fdddb5e5cc34cb08cb17961bd3a53f38f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000004c4af8dbc524681930a27b2f1af5bcc8062e6fb70000000000000000000000005b87c631308c6fb0ead5aa89b6fb8c78421cc807