0 txs
8 calls
constructor
constructor()
functions
bridgeSlippage
viewfunction bridgeSlippage() view returns (uint256)
dstExternalFeeRate
viewfunction dstExternalFeeRate() view returns (uint16)
ETH_PLACEHOLDER
viewfunction ETH_PLACEHOLDER() 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 srcInfo, tuple dstInfo, tuple dstExtSwapInfo) view returns (uint256, uint256)
sgInfo
viewfunction sgInfo() view returns (address)
srcExternalFeeRate
viewfunction srcExternalFeeRate() view returns (uint16)
weth
viewfunction weth() view returns (address)
woofiCrossRouters
viewfunction woofiCrossRouters(uint32) view returns (address)
woofiRouter
viewfunction woofiRouter() view returns (address)
claimFee
nonpayablefunction claimFee(address token)
crossSwap
payablefunction crossSwap(uint256 refId, address to, tuple srcInfo, tuple dstInfo, tuple srcExtSwapInfo, tuple dstExtSwapInfo) payable
inCaseTokenGotStuck
nonpayablefunction inCaseTokenGotStuck(address stuckToken)
initialize
nonpayablefunction initialize(address _owner, address _weth, address _woofiRouter, address _sgInfo)
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)
setWOOFiCrossRouter
nonpayablefunction setWOOFiCrossRouter(uint32 _eid, address _crossRouter)
setWOOFiRouter
nonpayablefunction setWOOFiRouter(address _woofiRouter)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
Initialized
event Initialized(uint64 version)
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()
InvalidInitialization
error InvalidInitialization()
InvalidOptionType
error InvalidOptionType(uint16 optionType)
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
creation bytecode
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b604051614a629081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c8063027b4b6f146101bb578063117acd17146101b65780631b445c61146101b157806339e7fddc146101ac5780633f4ba83a146101a75780633fc8cef3146101a2578063403a01e51461019d57806348cdc47a1461019857806358800adf14610193578063590bae891461018e5780635c975abb146101895780636ebc51e114610184578063715018a61461017f57806383af55501461017a5780638456cb59146101755780638da5cb5b14610170578063b2855b4f1461016b578063b5daaf5814610166578063b929214114610161578063c45e15a01461015c578063d0a1026014610157578063e1a4e72a14610152578063ecb911de1461014d578063ecefc70514610148578063f2fde38b146101435763f8c8765e0361000e576117a6565b61175b565b61171f565b6116df565b6115d8565b611328565b6112ad565b61126a565b6111fb565b611174565b611103565b61104e565b611012565b610f50565b610dfe565b610d9e565b610c8d565b610c3b565b610af5565b610a1c565b6109ca565b6108ed565b61089b565b6107ab565b61027d565b6101d0565b60009103126101cb57565b600080fd5b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b73ffffffffffffffffffffffffffffffffffffffff8116036101cb57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c60c09101126101cb5760c490565b908160409103126101cb5790565b346101cb576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb576024356102b981610222565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126101cb576102ec36610240565b6101843567ffffffffffffffff81116101cb5761030d90369060040161026f565b9160209061031c8284016119eb565b906103756040956103496103318888016119eb565b91885195869360608a013591876004358b8801611a34565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361074a565b610392610380612cb4565b61038c60a08701611aea565b90612ce9565b9060808501906103b96103a483611aea565b6fffffffffffffffffffffffffffffffff1690565b610660575b505061042461040b6103f16103db6103d588611b07565b97611b07565b63ffffffff166000526006602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60a43561043081612ece565b9161044861043c61078b565b63ffffffff9098168852565b85870152868601526060850152608084015260a0830152610467611b4b565b60c083015261048e61040b60015473ffffffffffffffffffffffffffffffffffffffff1690565b9183517f42407dc40000000000000000000000000000000000000000000000000000000081528281600481875afa80156105fd57610536948492600092610631575b506104d96119dc565b87517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529094859190829081906044820190565b03915afa9283156105fd5773ffffffffffffffffffffffffffffffffffffffff93859261059a92600092610602575b5083519586809481937f3b6f743b00000000000000000000000000000000000000000000000000000000835260048301611ca3565b0392165afa9182156105fd576000926105ca575b50815191015191519081526020810191909152604090f35b0390f35b6105c69192506105ef90843d86116105f6575b6105e7818361074a565b810190611bbc565b91906105ae565b503d6105dd565b611b73565b610623919250853d871161062a575b61061b818361074a565b810190611b7f565b9038610565565b503d610611565b610652919250833d8511610659575b61064a818361074a565b810190611b5e565b90386104d0565b503d610640565b73ffffffffffffffffffffffffffffffffffffffff61068161068a93611aea565b91169083612e1e565b5038806103be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176106dd57604052565b610692565b6040810190811067ffffffffffffffff8211176106dd57604052565b67ffffffffffffffff81116106dd57604052565b6020810190811067ffffffffffffffff8211176106dd57604052565b60a0810190811067ffffffffffffffff8211176106dd57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106dd57604052565b6040519060e0820182811067ffffffffffffffff8211176106dd57604052565b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb576024356107e281610222565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126101cb5760405190610819826106c1565b60443561082581610222565b825260643561083381610222565b6020830152608435604083015260a435606083015261085136610240565b67ffffffffffffffff9290610184358481116101cb5761087590369060040161026f565b916101a4359485116101cb5761089261001995369060040161026f565b93600435611cc0565b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57610924613782565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff8116156109a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60046040517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57600435610a56613782565b6127108111610a6457600455005b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f574f4f466943726f7373526f7574657256353a20215f627269646765536c697060448201527f70616765000000000000000000000000000000000000000000000000000000006064820152fd5b63ffffffff8116036101cb57565b346101cb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57600435610b3081610ae7565b602435610b3c81610222565b610b44613782565b73ffffffffffffffffffffffffffffffffffffffff811615610bb75763ffffffff6100199216600052600660205260406000209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a20215f63726f7373526f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb5773ffffffffffffffffffffffffffffffffffffffff600435610cdd81610222565b610ce5613782565b168015610d1a577fffffffffffffffffffffffff00000000000000000000000000000000000000006000541617600055600080f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a20215f776f6f6669526f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346101cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57600435610e3981610222565b610e41612f41565b73ffffffffffffffffffffffffffffffffffffffff80600354168015610ef257610e6b3084613264565b9182610e9b575b61001960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee03610ee45750600354610edb925073ffffffffffffffffffffffffffffffffffffffff166138fe565b38808080610e72565b610eed926137f2565b610edb565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f574f4f466943726f7373526f7574657256353a202166656541646472000000006044820152fd5b346101cb576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261100f57610f88613782565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054907fffffffffffffffffffffffff000000000000000000000000000000000000000082169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb576020600454604051908152f35b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57611085613782565b61108d612eec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb5773ffffffffffffffffffffffffffffffffffffffff6004356111c481610222565b6111cc613782565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006003541617600355600080f35b346101cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb5763ffffffff60043561123b81610ae7565b166000526006602052602073ffffffffffffffffffffffffffffffffffffffff60406000205416604051908152f35b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602061ffff60055460101c16604051908152f35b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b9181601f840112156101cb5782359167ffffffffffffffff83116101cb57602083818601950101116101cb57565b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb5760043561135e81610222565b67ffffffffffffffff906044358281116101cb576113809036906004016112fa565b91909261138e606435610222565b6084359081116101cb576113a69036906004016112fa565b50506113ca61040b60015473ffffffffffffffffffffffffffffffffffffffff1690565b926040517f42407dc4000000000000000000000000000000000000000000000000000000008152602081600481885afa9081156105fd576000916115b9575b506040517f73f0c8f500000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602081602481895afa9081156105fd5761151573ffffffffffffffffffffffffffffffffffffffff956114a56114976020996114878a8098819860009161159b575b501633146128db565b611491818a613983565b98613992565b898082518301019101612966565b9c949d929891939b909b16971695869216976040518096819482937fbb0d15fe0000000000000000000000000000000000000000000000000000000084526004840190929173ffffffffffffffffffffffffffffffffffffffff60209163ffffffff604085019616845216910152565b03915afa80156105fd5773ffffffffffffffffffffffffffffffffffffffff809161154c9460009161157c575b5016911614612a38565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee810361157157506100199561410f565b919061001996613ae0565b611595915060203d60201161062a5761061b818361074a565b38611542565b6115b391508e3d60201161062a5761061b818361074a565b3861147e565b6115d2915060203d6020116106595761064a818361074a565b38611409565b346101cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb5760043561161381610222565b61161b613782565b73ffffffffffffffffffffffffffffffffffffffff81169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee820361165a57505061001947336138fe565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291602090839060249082905afa9081156105fd57610019926000926116ae575b5033906137f2565b6116d191925060203d6020116116d8575b6116c9818361074a565b8101906126b4565b90386116a6565b503d6116bf565b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb57602061ffff60055416604051908152f35b346101cb5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb576020604051620186a08152f35b346101cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb5761001960043561179981610222565b6117a1613782565b612ac3565b346101cb5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101cb576004356117e181610222565b602435906117ee82610222565b6044356117fa81610222565b6064359061180782610222565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549367ffffffffffffffff60ff8660401c16159516801590816119d4575b60011490816119ca575b1590816119c1575b50611997576118ba93856118b17ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b61193b57612b86565b6118c057005b61190c7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff8154169055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6119927ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff825416179055565b612b86565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b90501538611858565b303b159150611850565b869150611846565b6064356119e881610222565b90565b356119e881610222565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9594929390865273ffffffffffffffffffffffffffffffffffffffff8094818094166020890152166040870152166060850152608084015260c060a08401528135611a7e81610222565b1660c083015260208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156101cb57016020813591019067ffffffffffffffff81116101cb5780360382136101cb5761010083604060e06119e896015201916119f5565b356fffffffffffffffffffffffffffffffff811681036101cb5790565b356119e881610ae7565b67ffffffffffffffff81116106dd57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60405190611b5882610712565b60008252565b908160209103126101cb57516119e881610ae7565b6040513d6000823e3d90fd5b908160209103126101cb57516119e881610222565b91908260409103126101cb57604051611bac816106e2565b6020808294805184520151910152565b906040828203126101cb576119e891611b94565b60005b838110611be35750506000910152565b8181015183820152602001611bd3565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093611c2f81518092818752878088019101611bd0565b0116010190565b6119e89163ffffffff825116815260208201516020820152604082015160408201526060820151606082015260c0611c92611c80608085015160e0608086015260e0850190611bf3565b60a085015184820360a0860152611bf3565b9201519060c0818403910152611bf3565b91906020611cbb600092604086526040860190611c36565b930152565b929094919394611cce612eec565b611cd6612f41565b73ffffffffffffffffffffffffffffffffffffffff9586821696611cfb881515612424565b611d26611d1f61040b895173ffffffffffffffffffffffffffffffffffffffff1690565b1515612489565b6040611d40611d3961040b8388016119eb565b1515612514565b611d6261040b60015473ffffffffffffffffffffffffffffffffffffffff1690565b9381517f42407dc400000000000000000000000000000000000000000000000000000000815260209081816004818a5afa9081156105fd57611e28918391600091612407575b50818d0198611dcb8a5173ffffffffffffffffffffffffffffffffffffffff1690565b87517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529092839190829081906044820190565b03915afa9081156105fd57611e4a9186916000916123ea575b5016151561259e565b8960008095611e6d835173ffffffffffffffffffffffffffffffffffffffff1690565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee929082811684036123d45750611e9d87850151341015612629565b835173ffffffffffffffffffffffffffffffffffffffff1692611ed761040b8c5173ffffffffffffffffffffffffffffffffffffffff1690565b84841681810361205e5750505050505083915001515b83818751611f0e9073ffffffffffffffffffffffffffffffffffffffff1690565b30611f1891613264565b1015611f23906127b8565b611f2c91612843565b9660608a01968a898951811015611f4290612850565b611f4c948c6133bc565b8751819073ffffffffffffffffffffffffffffffffffffffff16980151935173ffffffffffffffffffffffffffffffffffffffff16945192611f8d906119eb565b73ffffffffffffffffffffffffffffffffffffffff161560001495612028937f546dc08c5438b68796e5047ad2ac863ab74300bdf49457917d47021f090c45c497612056576000925b51968796339b889360c0959160ff94999897939960e087019a73ffffffffffffffffffffffffffffffffffffffff80931688526020880152166040860152606085015260808401521660a08201520152565b0390a461205460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b600192611fd6565b829061208261040b60025473ffffffffffffffffffffffffffffffffffffffff1690565b1491826123ca575b505015612130575050505050506120bc61040b61040b60025473ffffffffffffffffffffffffffffffffffffffff1690565b828a0190815190803b156101cb5784517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092526000908290602490829084905af180156105fd57612117575b5051611eed565b8061212461212a926106fe565b806101c0565b38612110565b61216761215a61040b849b959697989b5473ffffffffffffffffffffffffffffffffffffffff1690565b95898801968751916131ff565b855173ffffffffffffffffffffffffffffffffffffffff16938416036123c3578351925b8a61219861040b8c6119eb565b156122d05791505087939291506121c761040b60005473ffffffffffffffffffffffffffffffffffffffff1690565b916121d18a6119eb565b6122696121dd8c6119eb565b918c61222f60606122206122058d5173ffffffffffffffffffffffffffffffffffffffff1690565b985173ffffffffffffffffffffffffffffffffffffffff1690565b99519b0151918a8101906126c3565b9290918d519b8c9a8b998a987f199b83fa000000000000000000000000000000000000000000000000000000008a52309560048b01612714565b03925af19384156105fd576000946122b1575b50506122ab6122a28461229c61229560055461ffff1690565b61ffff1690565b906127a0565b620186a0900490565b92611eed565b6122c8929450803d106116d8576116c9818361074a565b91388061227c565b909491958994606061231a6122ff61040b8b9e989e5473ffffffffffffffffffffffffffffffffffffffff1690565b945173ffffffffffffffffffffffffffffffffffffffff1690565b94519201518a517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff988916600482015294881660248601526044850192909252606484019190915230608484015294871660a48301529093849160c49183915af19283156105fd57926123a6575b5050611eed565b6123bc9250803d106116d8576116c9818361074a565b388061239f565b809261218b565b149050813861208a565b848801516123e59130903390612fe3565b611e9d565b6124019150843d861161062a5761061b818361074a565b38611e41565b61241e9150823d84116106595761064a818361074a565b38611da8565b1561242b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f574f4f466943726f7373526f7574657256353a2021746f0000000000000000006044820152fd5b1561249057565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e66726f60448201527f6d546f6b656e00000000000000000000000000000000000000000000000000006064820152fd5b1561251b57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f574f4f466943726f7373526f7574657256353a2021647374496e666f2e746f5460448201527f6f6b656e000000000000000000000000000000000000000000000000000000006064820152fd5b156125a557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e62726960448201527f646765546f6b656e0000000000000000000000000000000000000000000000006064820152fd5b1561263057565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e66726f60448201527f6d416d6f756e74000000000000000000000000000000000000000000000000006064820152fd5b908160209103126101cb575190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101cb570180359067ffffffffffffffff82116101cb576020019181360383136101cb57565b949095916119e8999793946101009773ffffffffffffffffffffffffffffffffffffffff96878094818094168b521660208a0152166040880152166060860152608085015260a08401521660c08201528160e082015201916119f5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102929181159184041417156127b357565b612771565b156127bf57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f574f4f466943726f7373526f7574657256353a202142616c616e63655f456e6f60448201527f75676800000000000000000000000000000000000000000000000000000000006064820152fd5b919082039182116127b357565b1561285757565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e6d696e60448201527f427269646765416d6f756e7400000000000000000000000000000000000000006064820152fd5b156128e257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f574f4f466943726f7373526f7574657256353a20494e56414c49445f43414c4c60448201527f45520000000000000000000000000000000000000000000000000000000000006064820152fd5b91909160c0818403126101cb5780519260208083015161298581610222565b93604084015161299481610222565b9360608101516129a381610222565b9360808201519360a083015167ffffffffffffffff938482116101cb5701926040848403126101cb57604051936129d9856106e2565b80516129e481610222565b8552828101519182116101cb570182601f820112156101cb578051612a0881611b11565b93612a16604051958661074a565b8185528382840101116101cb57612a3291838086019101611bd0565b82015290565b15612a3f57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f574f4f466943726f7373526f7574657256353a20215f66726f6d5f737461726760448201527f61746500000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116908115612b55577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805490837fffffffffffffffffffffffff00000000000000000000000000000000000000008316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b612b9d90939193612b956149d3565b6117a16149d3565b612ba56149d3565b612bad6149d3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055612bfc6149d3565b612c046149d3565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005573ffffffffffffffffffffffffffffffffffffffff8092817fffffffffffffffffffffffff0000000000000000000000000000000000000000951685600254161760025516836000541617600055169060015416176001556064600455621900197fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006005541617600555565b6040517e030000000000000000000000000000000000000000000000000000000000006020820152600281526119e8816106e2565b9061ffff91600383612cfa83614822565b1603612de3577fffffffffffffffffffffffffffffffff00000000000000000000000000000000604051926000602085015260801b16602283015260128252612d42826106e2565b600383612d4e83614822565b1603612de3578151838111612dab5783166001019283116127b357612d7f6119e89260405194859360208501614890565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261074a565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252601060048301526024820152fd5b82612def602492614822565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815291166004820152fd5b61ffff92600384612e2e84614822565b1603612ec2577fffffffffffffffffffffffffffffffff000000000000000000000000000000006040519360801b1660208401526030830152603082526060820182811067ffffffffffffffff8211176106dd57604052600383612e9183614822565b1603612de3578151838111612dab5783166001019283116127b357612d7f6119e89260405194859360208501614934565b602484612def84614822565b600454906127109182038281116127b357612ee8916127a0565b0490565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416612f1757565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006002815414612f715760029055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b3d15612fc6573d90612fac82611b11565b91612fba604051938461074a565b82523d6000602084013e565b606090565b908160209103126101cb575180151581036101cb5790565b9091600080949381946040519160208301947f23b872dd00000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff809216602485015216604483015260648201526064815261304d8161072e565b51925af1613059612f9b565b816130c5575b501561306757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152fd5b80518015925082156130da575b50503861305f565b6130ed9250602080918301019101612fcb565b38806130d2565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201526000604482018190529283929183906131588160648101612d7f565b51925af1613164612f9b565b816131d0575b501561317257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53410000000000000000000000000000000000000000000000000000000000006044820152fd5b80518015925082156131e5575b50503861316a565b6131f89250602080918301019101612fcb565b38806131dd565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff9093166024820152604481019390935260009283929083906131588160648101612d7f565b73ffffffffffffffffffffffffffffffffffffffff9081169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee820361329e5750503190565b60246020929360405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa9081156105fd576000916132e9575090565b6119e8915060203d6020116116d8576116c9818361074a565b919082018092116127b357565b919082810360c081126101cb576080136101cb576040519067ffffffffffffffff60608301818111848210176106dd5760405284518352602085015190811681036101cb578260809160206119e895015261336d8360408801611b94565b60408201529401611b94565b91939273ffffffffffffffffffffffffffffffffffffffff9060206133a8606094608087526080870190611c36565b968051828701520151604085015216910152565b91939290946020926133f86133d28587016119eb565b612d7f6040946133e3868a016119eb565b9486519586948d60608d0135938c8801611a34565b61340f613403612cb4565b61038c60a08801611aea565b9660808601906134216103a483611aea565b613750575b505061344a61040b60015473ffffffffffffffffffffffffffffffffffffffff1690565b968251937f42407dc400000000000000000000000000000000000000000000000000000000855285856004818c5afa80156105fd5786809261350c97600093613731575b5001996134af8b5173ffffffffffffffffffffffffffffffffffffffff1690565b86517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529095869190829081906044820190565b03915afa9384156105fd57600094613712575b5073ffffffffffffffffffffffffffffffffffffffff80941694613557895173ffffffffffffffffffffffffffffffffffffffff1690565b888773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8098841603613701575b50505061359661040b6103f16103db6135908b611b07565b9a611b07565b61359f89612ece565b916135b76135ab61078b565b63ffffffff909a168a52565b88015287848801526060870152608086015260a08501526135d6611b4b565b60c08501528051947f3b6f743b0000000000000000000000000000000000000000000000000000000086528186806136118860048301611ca3565b0381875afa9283156105fd576136949760c0976000956136da575b505161364d9073ffffffffffffffffffffffffffffffffffffffff1661040b565b036136d15761365d908351613302565b905b518096819582947fc7c7f5b3000000000000000000000000000000000000000000000000000000008452329160048501613379565b03925af180156105fd576136a55750565b6136c69060c03d60c0116136ca575b6136be818361074a565b81019061330f565b5050565b503d6136b4565b5081519061365f565b61364d9195506136f961040b91863d88116105f6576105e7818361074a565b95915061362c565b61370a926131ff565b388887613578565b61372a919450853d871161062a5761061b818361074a565b923861351f565b613749919350823d84116106595761064a818361074a565b913861348e565b73ffffffffffffffffffffffffffffffffffffffff61377161377a93611aea565b91169089612e1e565b503880613426565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633036137c257565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff9093166024820152604481019390935260009283929083906138578160648101612d7f565b51925af1613863612f9b565b816138cf575b501561387157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53540000000000000000000000000000000000000000000000000000000000006044820152fd5b80518015925082156138e4575b505038613869565b6138f79250602080918301019101612fcb565b38806138dc565b600080809381938260405161391281610712565b525af161391d612f9b565b501561392557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152fd5b90602c116101cb57600c013590565b81604c116101cb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48201906139c782611b11565b926139d5604051948561074a565b82845236818301116101cb57600092604c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4930160208601378301015290565b936119e89796929395916101009673ffffffffffffffffffffffffffffffffffffffff809681809416895216602088015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040880152166060860152608085015260a08401521660c08201528160e08201520190611bf3565b949095916119e8989793946101009773ffffffffffffffffffffffffffffffffffffffff96878094818094168b521660208a0152166040880152166060860152608085015260a08401521660c08201528160e08201520190611bf3565b9395929490919573ffffffffffffffffffffffffffffffffffffffff9384871685891614600014613bd657918185613b5d8695613b43613bc9967fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c9a998d6137f2565b5173ffffffffffffffffffffffffffffffffffffffff1690565b16613bce576000915b60405195869516998083339b88939460ff9398979260e0966000989361010088019b73ffffffffffffffffffffffffffffffffffffffff93848093168a5260208a0152166040880152166060860152608085015260a08401521660c08201520152565b0390a4565b600191613b66565b84613bfb829998959496995173ffffffffffffffffffffffffffffffffffffffff1690565b1615613ed95760055460101c61ffff1661ffff16613c1990836127a0565b620186a090049182613c2a91612843565b91600092808454613c4e9073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690613c6f91886131ff565b8354819073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a888651613cc09073ffffffffffffffffffffffffffffffffffffffff1690565b9d89169d8e6020890151908d60405197889687967f199b83fa000000000000000000000000000000000000000000000000000000008852866004890197613d0698613a83565b0381885a94602095f1859181613eb8575b50613dfb575061040b7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c97969593613b43613d838795613d8b95613d7e613d7861040b613bc99c5473ffffffffffffffffffffffffffffffffffffffff1690565b8c6130f4565b613302565b8096896137f2565b613df257905b6040519485943399838288939460ff9398979260e0966000989361010088019b73ffffffffffffffffffffffffffffffffffffffff93848093168a5260208a0152166040880152166060860152608085015260a08401521660c08201520152565b50600190613d91565b909450613bc993613e4961040b7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c9994959b989b5173ffffffffffffffffffffffffffffffffffffffff1690565b613eaf57915b86604051978897339c8994909160ff9460e097939a9998949a61010088019b73ffffffffffffffffffffffffffffffffffffffff93848093168a5260208a0152166040880152166060860152608085015260a08401521660c08201520152565b50600191613e4f565b613ed291925060203d6020116116d8576116c9818361074a565b9038613d17565b828560009993949993858554613f029073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690613f2391896131ff565b858a888754613f459073ffffffffffffffffffffffffffffffffffffffff1690565b6040517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015292821660248401526044830193909352606482019490945291841680841660848401529b831660a48301529091168160c481875a94602095f18491816140ee575b50614033575091613d8b61040b8593613b437fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c999897613bc99761402d61402761040b895473ffffffffffffffffffffffffffffffffffffffff1690565b8b6130f4565b896137f2565b9050613bc99261407f61040b7fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c98949a979a5173ffffffffffffffffffffffffffffffffffffffff1690565b6140e557915b85604051968796339b88939460ff9398979260e0966000989361010088019b73ffffffffffffffffffffffffffffffffffffffff93848093168a5260208a0152166040880152166060860152608085015260a08401521660c08201520152565b50600191614085565b61410891925060203d6020116116d8576116c9818361074a565b9038613fc9565b9291939073ffffffffffffffffffffffffffffffffffffffff9586861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8114614769578761416760025473ffffffffffffffffffffffffffffffffffffffff1690565b168091146145fb57508661418f825173ffffffffffffffffffffffffffffffffffffffff1690565b16156144195760055460101c61ffff1661ffff166141ad90856127a0565b620186a09004916141be8386612843565b6000938585546141e19073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16838b87516142189073ffffffffffffffffffffffffffffffffffffffff1690565b9d87169d8e60208a01519060405196879586957f199b83fa00000000000000000000000000000000000000000000000000000000875285600488019661425d97613a15565b0381865a94602095f18691816143f8575b5061432d5750505061040b85949392613b437fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c976142ab946138fe565b61432257613bc9905b6040519384933398828691959460009460e09460ff9373ffffffffffffffffffffffffffffffffffffffff61010087019a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9283895260208901521660408701526060860152608085015260a08401521660c08201520152565b50613bc960016142b4565b9198949092507fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c965061437a61040b613bc9955173ffffffffffffffffffffffffffffffffffffffff1690565b6143ef57905b60405195858796339b889360e095919897969260ff9461010087019a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8852602088015273ffffffffffffffffffffffffffffffffffffffff8092166040880152166060860152608085015260a08401521660c08201520152565b50600190614380565b61441291925060203d6020116116d8576116c9818361074a565b903861426e565b829691600092602061444261040b865473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f7dc2038200000000000000000000000000000000000000000000000000000000815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600482015273ffffffffffffffffffffffffffffffffffffffff8b81166024830152604482018a9052606482019c909c52928416808c1660848501529a841660a4840152829060c49082908a905af18491816145da575b5061450f575061040b85949392613b437fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c976142ab946138fe565b90507fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c94969261455961040b613bc9945173ffffffffffffffffffffffffffffffffffffffff1690565b6145d157905b60405194848695339a87929460e09460ff936000979998939961010087019a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8852602088015273ffffffffffffffffffffffffffffffffffffffff8092166040880152166060860152608085015260a08401521660c08201520152565b5060019061455f565b6145f491925060203d6020116116d8576116c9818361074a565b90386144d4565b909692813b156101cb57600085926004604051809881937fd0e30db00000000000000000000000000000000000000000000000000000000083525af19182156105fd577fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c95613bc993614756575b50614693818561468e60025473ffffffffffffffffffffffffffffffffffffffff1690565b6137f2565b846146d16146b660025473ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b1661474e576000915b604051958695169933998387929460e09460ff936000979998939961010087019a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8852602088015273ffffffffffffffffffffffffffffffffffffffff8092166040880152166060860152608085015260a08401521660c08201520152565b6001916146da565b80612124614763926106fe565b38614669565b5083876147a1613bc993613b437fe025e234368c681f94aa603de304cf6708c5638fe7454d6ed22a55430776a71c98879c989c6138fe565b1661481a576000905b60405194859416983398828691959460009460e09460ff9373ffffffffffffffffffffffffffffffffffffffff61010087019a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9283895260208901521660408701526060860152608085015260a08401521660c08201520152565b6001906147aa565b6002815110614832576002015190565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152fd5b60207fffff000000000000000000000000000000000000000000000000000000000000916148c8600496959482815194859201611bd0565b01917f0100000000000000000000000000000000000000000000000000000000000000835260f01b1660018201527f0300000000000000000000000000000000000000000000000000000000000000600382015261492f8251809360208685019101611bd0565b010190565b60207fffff0000000000000000000000000000000000000000000000000000000000009161496c600496959482815194859201611bd0565b01917f0100000000000000000000000000000000000000000000000000000000000000835260f01b1660018201527f0200000000000000000000000000000000000000000000000000000000000000600382015261492f8251809360208685019101611bd0565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614a0257565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fdfea2646970667358221220f94d53e89b10edda90718f658162219411c0d256c5096ca24ad8bec4a1d5ae9264736f6c63430008160033