2 txs
4 calls
constructor
constructor(address _vault, address _WETH9, address _signer)
functions
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
isNativePools
viewfunction isNativePools(address) view returns (bool)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
signers
viewfunction signers(address) view returns (bool)
vault
viewfunction vault() view returns (address)
WETH9
viewfunction WETH9() view returns (address)
whitelistRouter
viewfunction whitelistRouter(address) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
fillOrder
nonpayablefunction fillOrder(tuple quote, tuple swapperPermit, bytes swapperSig)
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
multicall
payablefunction multicall(uint256 deadline, bytes[] data) payable returns (bytes[])
pause
nonpayablefunction pause()
refundERC20
payablefunction refundERC20(address token, address recipient, uint256 amount) payable
refundETH
payablefunction refundETH(address recipient, uint256 amount) payable
renounceOwnership
nonpayablefunction renounceOwnership()
setNativePool
nonpayablefunction setNativePool(address pool, bool isActive)
setSigner
nonpayablefunction setSigner(address signer, bool isSigner)
setWhitelistRouter
nonpayablefunction setWhitelistRouter(address[] routers, bool[] values)
tradeRFQT
payablefunction tradeRFQT(tuple quote) payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
unwrapWETH9
payablefunction unwrapWETH9(address recipient) payable
events
EIP712DomainChanged
event EIP712DomainChanged()
ExternalSwapExecuted
event ExternalSwapExecuted(address externalRouter, address sender, address tokenIn, address tokenOut, int256 amountIn, int256 amountOut, bytes16 quoteId)
NativePoolUpdated
event NativePoolUpdated(address indexed pool, bool isActive)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RefundERC20
event RefundERC20(address token, address recipient, uint256 amount)
RefundETH
event RefundETH(address recipient, uint256 amount)
SignerUpdated
event SignerUpdated(address signer, bool isSigner)
Unpaused
event Unpaused(address account)
UnwrapWETH9
event UnwrapWETH9(address indexed recipient, uint256 amount)
WhitelistRouterSet
event WhitelistRouterSet(address indexed router, bool isWhitelisted)
WidgetFeesWithdrawn
event WidgetFeesWithdrawn(address indexed recipient, address token, uint256 amount)
WidgetFeeTransfer
event WidgetFeeTransfer(address widgetFeeRecipient, uint256 widgetFeeRate, uint256 widgetFeeAmount, address widgetFeeToken)
errors
ArraysLengthMismatch
error ArraysLengthMismatch()
ExternalCallFailed
error ExternalCallFailed(address target, bytes4 selector)
InsufficientWETH9
error InsufficientWETH9()
InvalidAmount
error InvalidAmount()
InvalidNativePool
error InvalidNativePool()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
InvalidWidgetFeeRate
error InvalidWidgetFeeRate()
NotEnoughAmountOut
error NotEnoughAmountOut(uint256 amountOut, uint256 amountOutMinimum)
NotEnoughTokenReceived
error NotEnoughTokenReceived()
OnlyWETH9
error OnlyWETH9()
OrderExpired
error OrderExpired()
Permit2TokenMismatch
error Permit2TokenMismatch()
QuoteExpired
error QuoteExpired()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
StringTooLong
error StringTooLong(string str)
UnexpectedMsgValue
error UnexpectedMsgValue()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x610180604052348015610010575f5ffd5b50604051614ed3380380614ed383398101604081905261002f91610393565b604080518082018252600d81526c2730ba34bb32902937baba32b960991b602080830191909152825180840190935260018352603160f81b9083015290610076825f6101a6565b610120526100858160016101a6565b61014052815160208084019190912060e052815190820120610100524660a05261011160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052610123336101d8565b6003805460ff60a01b191690556001600160a01b0383161580159061015057506001600160a01b03821615155b61016d5760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b038581169190911790915582166101605261019e8160016101f4565b50505061057d565b5f6020835110156101c1576101ba83610285565b90506101d2565b816101cc848261046b565b5060ff90505b92915050565b600380546001600160a01b03191690556101f1816102cb565b50565b6101fc61031c565b6001600160a01b0382166102235760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527ffcaa24b1276bfa7dbf77797c0a984b9df924acbeaabd48cd2f1b0eca379b78fa910160405180910390a15050565b5f5f829050601f815111156102b8578260405163305a27a960e01b81526004016102af9190610525565b60405180910390fd5b80516102c38261055a565b179392505050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6002546001600160a01b031633146103765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102af565b565b80516001600160a01b038116811461038e575f5ffd5b919050565b5f5f5f606084860312156103a5575f5ffd5b6103ae84610378565b92506103bc60208501610378565b91506103ca60408501610378565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806103fb57607f821691505b60208210810361041957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561046657805f5260205f20601f840160051c810160208510156104445750805b601f840160051c820191505b81811015610463575f8155600101610450565b50505b505050565b81516001600160401b03811115610484576104846103d3565b6104988161049284546103e7565b8461041f565b6020601f8211600181146104ca575f83156104b35750848201515b5f19600385901b1c1916600184901b178455610463565b5f84815260208120601f198516915b828110156104f957878501518255602094850194600190920191016104d9565b508482101561051657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610419575f1960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051610160516148d16106025f395f81816101a3015281816102d8015281816114410152818161152b01528181612135015281816121b701526121e401525f610f8b01525f610f6101525f612f6801525f612f4001525f612e9b01525f612ec501525f612eef01526148d15ff3fe608060405260043610610186575f3560e01c806379ba5097116100d1578063a1b754461161007c578063e30c397811610057578063e30c3978146104c2578063f2fde38b146104ec578063fbfa77cf1461050b575f5ffd5b8063a1b754461461046e578063ac9650d814610481578063db2c656b14610494575f5ffd5b806384b0196e116100ac57806384b0196e1461040a5780638da5cb5b1461043157806393eb86e41461045b575f5ffd5b806379ba5097146103c3578063832eb648146103d75780638456cb59146103f6575f5ffd5b80634aa4a4fc116101315780635c975abb1161010c5780635c975abb14610352578063715018a614610381578063736c0d5b14610395575f5ffd5b80634aa4a4fc146102c75780634bd227661461031f5780635ae401dc14610332575f5ffd5b80633f4ba83a116101615780633f4ba83a1461028157806348c447121461029557806349927653146102a8575f5ffd5b806314eaf7f4146102005780631751faee1461024357806331cb610514610262575f5ffd5b366101fc573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101fa576040517f21aba8c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b5f5ffd5b34801561020b575f5ffd5b5061022e61021a3660046136d0565b60056020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561024e575f5ffd5b506101fa61025d3660046138f7565b610537565b34801561026d575f5ffd5b506101fa61027c366004613a99565b6108f9565b34801561028c575f5ffd5b506101fa6109db565b6101fa6102a3366004613ad0565b6109ed565b3480156102b3575f5ffd5b506101fa6102c2366004613a99565b610b05565b3480156102d2575f5ffd5b506102fa7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161023a565b6101fa61032d366004613b0e565b610be3565b610345610340366004613b79565b610c64565b60405161023a9190613c0d565b34801561035d575f5ffd5b5060035474010000000000000000000000000000000000000000900460ff1661022e565b34801561038c575f5ffd5b506101fa610ce9565b3480156103a0575f5ffd5b5061022e6103af3660046136d0565b60066020525f908152604090205460ff1681565b3480156103ce575f5ffd5b506101fa610cfa565b3480156103e2575f5ffd5b506101fa6103f1366004613c8e565b610daf565b348015610401575f5ffd5b506101fa610f44565b348015610415575f5ffd5b5061041e610f54565b60405161023a9796959493929190613cee565b34801561043c575f5ffd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102fa565b6101fa610469366004613ddc565b610ff6565b6101fa61047c3660046136d0565b6113bc565b61034561048f366004613f6a565b611609565b34801561049f575f5ffd5b5061022e6104ae3660046136d0565b60076020525f908152604090205460ff1681565b3480156104cd575f5ffd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102fa565b3480156104f7575f5ffd5b506101fa6105063660046136d0565b61176a565b348015610516575f5ffd5b506004546102fa9073ffffffffffffffffffffffffffffffffffffffff1681565b61053f61181a565b61054761189e565b6107d0846101a0015160200151111561058c576040517f965a1fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83610120015142111580156105a5575082606001354211155b6105db576040517f8727a7f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604084015173ffffffffffffffffffffffffffffffffffffffff1661060360208501856136d0565b73ffffffffffffffffffffffffffffffffffffffff1614801561062d575060808401516020840135145b610663576040517f3562a24300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e084015173ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205460ff166106c5576040517f17c6676300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ce84611923565b60408051808201825230815260808601516020820152855191517f30f28b7a0000000000000000000000000000000000000000000000000000000081526e22d473030f116ddee9f6b43ac78ba3926330f28b7a926107359288929088908890600401613fa9565b5f604051808303815f87803b15801561074c575f5ffd5b505af115801561075e573d5f5f3e3d5ffd5b505050505f5f856101a001516020015111610779575f61079f565b612710856101a0015160200151866080015161079591906140b9565b61079f91906140d0565b608086015190915081156107e7576107b78282614108565b6101a08701515160408801519192506107e79173ffffffffffffffffffffffffffffffffffffffff169084611ad2565b61087d8660e0015173ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610837573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085b919061411b565b604088015173ffffffffffffffffffffffffffffffffffffffff169083611ad2565b8560e0015173ffffffffffffffffffffffffffffffffffffffff1663fee5b7a782886040518363ffffffff1660e01b81526004016108bc929190614136565b5f604051808303815f87803b1580156108d3575f5ffd5b505af11580156108e5573d5f5f3e3d5ffd5b5050505050506108f3611ba6565b50505050565b610901611bd0565b73ffffffffffffffffffffffffffffffffffffffff821661094e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527ffcaa24b1276bfa7dbf77797c0a984b9df924acbeaabd48cd2f1b0eca379b78fa910160405180910390a15050565b6109e3611bd0565b6109eb611c51565b565b6109f5611bd0565b6109fd61181a565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152610a939073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015610a69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8d91906142ee565b82611cce565b9050610aa0838383611ce7565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fdbdf8eb487847e4c0f22847f5dac07f2d3690f96f581a6ae4b102769917645a89060600160405180910390a1610b00611ba6565b505050565b610b0d611bd0565b73ffffffffffffffffffffffffffffffffffffffff8216610b5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527ffaf49cc693ce3c0463a5ee92d3dd6d6b1ee310fe10c4ccd1e345431f9b62f1cd910160405180910390a25050565b610beb611bd0565b610bf361181a565b610bfd4782611cce565b9050610c098282611d08565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527f289360176646a5f99cb4b6300628426dca46b723f40db3c04449d6ed1745a0e7910160405180910390a1610c60611ba6565b5050565b606083421115610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064015b60405180910390fd5b610cdf8383611609565b90505b9392505050565b610cf1611bd0565b6109eb5f611de8565b600354339073ffffffffffffffffffffffffffffffffffffffff168114610da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610ccc565b610dac81611de8565b50565b610db7611bd0565b828114610df0576040517ffc23596000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610f3d57828282818110610e0c57610e0c614305565b9050602002016020810190610e219190614332565b60075f878785818110610e3657610e36614305565b9050602002016020810190610e4b91906136d0565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055848482818110610eaf57610eaf614305565b9050602002016020810190610ec491906136d0565b73ffffffffffffffffffffffffffffffffffffffff167f79add9381c7fcbebf829640f96bb6b401fd1455920a01d072260989d8675b7ca848484818110610f0d57610f0d614305565b9050602002016020810190610f229190614332565b604051901515815260200160405180910390a2600101610df2565b5050505050565b610f4c611bd0565b6109eb611e19565b5f60608082808083610f867f000000000000000000000000000000000000000000000000000000000000000083611e88565b610fb17f00000000000000000000000000000000000000000000000000000000000000006001611e88565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b610ffe61181a565b61100661189e565b6107d081610180015160200151111561104b576040517f965a1fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060e00151421115611089576040517f8727a7f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61109281611f31565b805173ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081205460ff1690816110c75730611137565b825f015173ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611113573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611137919061411b565b90505f6111598461014001518386606001518760a00151886101800151612099565b905082156111ea5783516040517ff1fbd69400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f1fbd694906111b8908490889060040161434d565b5f604051808303815f87803b1580156111cf575f5ffd5b505af11580156111e1573d5f5f3e3d5ffd5b505050506113b1565b835173ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205460ff161561137f575f6040518061016001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001866060015173ffffffffffffffffffffffffffffffffffffffff1681526020018660c0015181526020018660a0015181526020018660e0015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018661012001516fffffffffffffffffffffffffffffffff191681525090505f61133182848860400151308a6101c00151612243565b6101e08701519091508190808210156111e1576040517fa20e999d00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610ccc565b6040517f17c6676300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050610dac611ba6565b6113c461181a565b73ffffffffffffffffffffffffffffffffffffffff8116611411576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561149b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114bf91906142ee565b90505f81116114fa576040517f409a171f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905247907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906024015f604051808303815f87803b158015611581575f5ffd5b505af1158015611593573d5f5f3e3d5ffd5b5050505080476115a39190614108565b91506115af8383611d08565b8273ffffffffffffffffffffffffffffffffffffffff167f788ab6452512428d16fe809d92c0dd69b99bc3db368437d73455c5e371638dcf836040516115f791815260200190565b60405180910390a25050610dac611ba6565b60608167ffffffffffffffff811115611624576116246136eb565b60405190808252806020026020018201604052801561165757816020015b60608152602001906001900390816116425790505b5090505f5b82811015611763575f803086868581811061167957611679614305565b905060200281019061168b919061455a565b6040516116999291906145bb565b5f60405180830381855af49150503d805f81146116d1576040519150601f19603f3d011682016040523d82523d5f602084013e6116d6565b606091505b50915091508161173b576044815110156116ee575f5ffd5b6004810190508080602001905181019061170891906145ca565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc919061463f565b8084848151811061174e5761174e614305565b6020908102919091010152505060010161165c565b5092915050565b611772611bd0565b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556117d560025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611873576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109eb7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0060016128ca565b60035474010000000000000000000000000000000000000000900460ff16156109eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610ccc565b5f611a0d7f98dc6b1206414ae61e7872f37f04ce8472fae37ca9dcfbc4abeba391b39b0d1e8361010001518460c001518560400151866060015187608001518860a001518961012001518a6101a001515f01518b6101a00151602001516040516020016119f29a99989796959493929190998a5260208a019890985273ffffffffffffffffffffffffffffffffffffffff96871660408a01529486166060890152928516608088015260a087019190915260c086015260e0850152166101008301526101208201526101400190565b604051602081830303815290604052805190602001206128d1565b90505f611a1f82846101400151612918565b90505f611a36846101800151856101600151612918565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526006602052604090205490915060ff168015611a9c57508073ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff16145b6108f3576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b009084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261293a565b6109eb7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f6128ca565b60025473ffffffffffffffffffffffffffffffffffffffff1633146109eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ccc565b611c59612a47565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b5f818310611cdc5781611cde565b825b90505b92915050565b610b0073ffffffffffffffffffffffffffffffffffffffff84168383611ad2565b604080515f8082526020820190925273ffffffffffffffffffffffffffffffffffffffff8416908390604051611d3e9190614651565b5f6040518083038185875af1925050503d805f8114611d78576040519150601f19603f3d011682016040523d82523d5f602084013e611d7d565b606091505b5050905080610b00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152606401610ccc565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610dac81612acb565b611e2161189e565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ca43390565b606060ff8314611ea257611e9b83612b41565b9050611ce1565b818054611eae90614667565b80601f0160208091040260200160405190810160405280929190818152602001828054611eda90614667565b8015611f255780601f10611efc57610100808354040283529160200191611f25565b820191905f5260205f20905b815481529060010190602001808311611f0857829003601f168201915b50505050509050611ce1565b80516020808301516040808501516060860151608087015160a088015160c089015160e08a01516101008b01516101408c01516101608d01516101c08e015199515f9d611f849d909c9b913391016146b2565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201206101808601518051908301517ffd31a2912d3475581e84c29fe1c526bf62e33b9de527004478bffeae06bb217a9386019390935292840181905273ffffffffffffffffffffffffffffffffffffffff9092166060840152608083015291505f906120269060a0016119f2565b90505f61203882856101a00151612918565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526006602052604090205490915060ff166108f3576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f341180156120a7575085155b1561220f5773ffffffffffffffffffffffffffffffffffffffff8416156120fa576040517fbd28e88900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b348314612133576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b158015612199575f5ffd5b505af11580156121ab573d5f5f3e3d5ffd5b50505050506121dd82847f00000000000000000000000000000000000000000000000000000000000000006001612b7e565b905061220a7f00000000000000000000000000000000000000000000000000000000000000008683611ce7565b61223a565b61221b8284865f612b7e565b9050851561222e5761220a848683611ce7565b61223a84338784612c50565b95945050505050565b5f5f851161227d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4286610100015110156122bc576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091525f80825260208201526122d98688612c72565b6020830152815273ffffffffffffffffffffffffffffffffffffffff8416301461233257612332843083602001518a60a0015173ffffffffffffffffffffffffffffffffffffffff16612d2e909392919063ffffffff16565b612369876040015182602001518960a0015173ffffffffffffffffffffffffffffffffffffffff16612d8c9092919063ffffffff16565b60808701516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156123d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123fb91906142ee565b60808901516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301529293505f92909116906370a0823190602401602060405180830381865afa158015612470573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249491906142ee565b90505f896040015173ffffffffffffffffffffffffffffffffffffffff16866040516124c09190614651565b5f604051808303815f865af19150503d805f81146124f9576040519150601f19603f3d011682016040523d82523d5f602084013e6124fe565b606091505b50509050808a60400151876125129061479e565b909161258a576040517f8a67d2ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301527fffffffff00000000000000000000000000000000000000000000000000000000166024820152604401610ccc565b50505060808901516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301525f9284929116906370a0823190602401602060405180830381865afa158015612600573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061262491906142ee565b61262e9190614108565b60808b01516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192505f91859173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c591906142ee565b6126cf9190614108565b9050808210156127a45760808b01516126ff9073ffffffffffffffffffffffffffffffffffffffff168a83611ad2565b60808b01516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152859216906370a0823190602401602060405180830381865afa15801561276f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279391906142ee565b61279d9190614108565b95506127a8565b8195505b84518610156127e3576040517fe3a58cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50507f679a8e79c31ffa245861a334d96f7e721a18c6768899314967d6f0819322eb8589604001518a61012001518b60a001518c6080015187602001518961282a9061480a565b8f61014001516040516128b1979695949392919073ffffffffffffffffffffffffffffffffffffffff978816815295871660208701529386166040860152919094166060840152608083019390935260a08201929092527fffffffffffffffffffffffffffffffff000000000000000000000000000000009190911660c082015260e00190565b60405180910390a150505095945050505050565b905090565b80825d5050565b5f611ce16128dd612e82565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f6129258585612fb8565b9150915061293281612ff7565b509392505050565b5f61299b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131a99092919063ffffffff16565b905080515f14806129bb5750808060200190518101906129bb9190614840565b610b00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ccc565b60035474010000000000000000000000000000000000000000900460ff166109eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610ccc565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f612b4d836131b7565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f5f5f866020015111612b91575f612bae565b612710866020015186612ba491906140b9565b612bae91906140d0565b90508015612c4357612bcf8484612bc55733612bc7565b305b885184612c50565b85516020808801516040805173ffffffffffffffffffffffffffffffffffffffff948516815292830191909152810183905290851660608201527f55be346d3a3628b5060716bacd516632c5a911ce5835123ea18a84ea0ff3ea939060800160405180910390a1612c408186614108565b94505b849150505b949350505050565b6108f373ffffffffffffffffffffffffffffffffffffffff8516848484612d2e565b60c081015160e08201515f9182918015801590612c8e57505f82115b8015612c9957505f86115b612ccf576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80861015612ce857612ce28683836131f7565b91508590505b5f8211612d21576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90925090505b9250929050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526108f39085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611b24565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015612dff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e2391906142ee565b90506108f3847f095ea7b30000000000000000000000000000000000000000000000000000000085612e55868661485b565b60405173ffffffffffffffffffffffffffffffffffffffff90921660248301526044820152606401611b24565b5f3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015612ee757507f000000000000000000000000000000000000000000000000000000000000000046145b15612f1157507f000000000000000000000000000000000000000000000000000000000000000090565b6128c5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f5f8251604103612fec576020830151604084015160608501515f1a612fe0878285856133c4565b94509450505050612d27565b505f90506002612d27565b5f81600481111561300a5761300a61486e565b036130125750565b60018160048111156130265761302661486e565b0361308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ccc565b60028160048111156130a1576130a161486e565b03613108576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610ccc565b600381600481111561311c5761311c61486e565b03610dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610ccc565b6060610cdf84845f856134ac565b5f60ff8216601f811115611ce1576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f036132ce575f84116132c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f46756c6c4d6174683a206d756c4469763a2064656e6f6d696e61746f72206d7560448201527f73742062652067726561746572207468656e207a65726f0000000000000000006064820152608401610ccc565b508290049050610ce2565b80841161335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756c6c4d6174683a206d756c4469763a20726573756c74206772656174657260448201527f207468616e20322a2a32353600000000000000000000000000000000000000006064820152608401610ccc565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156133f957505f905060036134a3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561344a573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661349d575f600192509250506134a3565b91505f90505b94509492505050565b60608247101561353e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ccc565b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516135669190614651565b5f6040518083038185875af1925050503d805f81146135a0576040519150601f19603f3d011682016040523d82523d5f602084013e6135a5565b606091505b50915091506135b6878383876135c1565b979650505050505050565b606083156136565782515f0361364f5773ffffffffffffffffffffffffffffffffffffffff85163b61364f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ccc565b5081612c48565b612c48838381511561366b5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc919061463f565b73ffffffffffffffffffffffffffffffffffffffff81168114610dac575f5ffd5b80356136cb8161369f565b919050565b5f602082840312156136e0575f5ffd5b8135610ce28161369f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516101c0810167ffffffffffffffff8111828210171561373c5761373c6136eb565b60405290565b604051610200810167ffffffffffffffff8111828210171561373c5761373c6136eb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156137ad576137ad6136eb565b604052919050565b5f67ffffffffffffffff8211156137ce576137ce6136eb565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613809575f5ffd5b813561381c613817826137b5565b613766565b818152846020838601011115613830575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6040828403121561385c575f5ffd5b6040805190810167ffffffffffffffff8111828210171561387f5761387f6136eb565b60405290508082356138908161369f565b8152602092830135920191909152919050565b5f608082840312156138b3575f5ffd5b50919050565b5f5f83601f8401126138c9575f5ffd5b50813567ffffffffffffffff8111156138e0575f5ffd5b602083019150836020828501011115612d27575f5ffd5b5f5f5f5f60c0858703121561390a575f5ffd5b843567ffffffffffffffff811115613920575f5ffd5b85016101e08188031215613932575f5ffd5b61393a613718565b613943826136c0565b8152613951602083016136c0565b6020820152613962604083016136c0565b6040820152613973606083016136c0565b60608201526080828101359082015260a0808301359082015261399860c083016136c0565b60c08201526139a960e083016136c0565b60e08201526101008281013590820152610120808301359082015261014082013567ffffffffffffffff8111156139de575f5ffd5b6139ea898285016137fa565b6101408301525061016082013567ffffffffffffffff811115613a0b575f5ffd5b613a17898285016137fa565b610160830152506101808281013590820152613a37886101a0840161384c565b6101a08201529450613a4e905086602087016138a3565b925060a085013567ffffffffffffffff811115613a69575f5ffd5b613a75878288016138b9565b95989497509550505050565b8015158114610dac575f5ffd5b80356136cb81613a81565b5f5f60408385031215613aaa575f5ffd5b8235613ab58161369f565b91506020830135613ac581613a81565b809150509250929050565b5f5f5f60608486031215613ae2575f5ffd5b8335613aed8161369f565b92506020840135613afd8161369f565b929592945050506040919091013590565b5f5f60408385031215613b1f575f5ffd5b8235613b2a8161369f565b946020939093013593505050565b5f5f83601f840112613b48575f5ffd5b50813567ffffffffffffffff811115613b5f575f5ffd5b6020830191508360208260051b8501011115612d27575f5ffd5b5f5f5f60408486031215613b8b575f5ffd5b83359250602084013567ffffffffffffffff811115613ba8575f5ffd5b613bb486828701613b38565b9497909650939450505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613c82577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613c6d858351613bc1565b94506020938401939190910190600101613c33565b50929695505050505050565b5f5f5f5f60408587031215613ca1575f5ffd5b843567ffffffffffffffff811115613cb7575f5ffd5b613cc387828801613b38565b909550935050602085013567ffffffffffffffff811115613ce2575f5ffd5b613a7587828801613b38565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f613d2860e0830189613bc1565b8281036040840152613d3a8189613bc1565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015613d9c578351835260209384019390920191600101613d7e565b50909b9a5050505050505050505050565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681146136cb575f5ffd5b5f60208284031215613dec575f5ffd5b813567ffffffffffffffff811115613e02575f5ffd5b82016102208185031215613e14575f5ffd5b613e1c613742565b613e25826136c0565b8152613e33602083016136c0565b6020820152613e44604083016136c0565b6040820152613e55606083016136c0565b6060820152613e66608083016136c0565b608082015260a0828101359082015260c0808301359082015260e080830135908201526101008083013590820152613ea16101208301613dad565b610120820152613eb46101408301613a8e565b61014082015261016082013567ffffffffffffffff811115613ed4575f5ffd5b613ee0868285016137fa565b61016083015250613ef585610180840161384c565b6101808201526101c082013567ffffffffffffffff811115613f15575f5ffd5b613f21868285016137fa565b6101a0830152506101e082013567ffffffffffffffff811115613f42575f5ffd5b613f4e868285016137fa565b6101c08301525061020091909101356101e08201529392505050565b5f5f60208385031215613f7b575f5ffd5b823567ffffffffffffffff811115613f91575f5ffd5b613f9d85828601613b38565b90969095509350505050565b5f8635613fb58161369f565b73ffffffffffffffffffffffffffffffffffffffff1682526020878101359083015260408088013590830152606080880135908301526140186080830187805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff851660c083015261010060e08301528261010083015282846101208401375f61012084840101526101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417611ce157611ce161408c565b5f82614103577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b81810381811115611ce157611ce161408c565b5f6020828403121561412b575f5ffd5b8151610ce28161369f565b8281526040602082015261416360408201835173ffffffffffffffffffffffffffffffffffffffff169052565b5f602083015161418b606084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604083015173ffffffffffffffffffffffffffffffffffffffff8116608084015250606083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250608083015160c083015260a083015160e083015260c083015161420c61010084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e083015173ffffffffffffffffffffffffffffffffffffffff8116610120840152506101008301516101408301526101208301516101608301526101408301516101e0610180840152614265610220840182613bc1565b90506101608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0848303016101a08501526142a28282613bc1565b9150506101808401516101c08401526101a08401516142e56101e0850182805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b50949350505050565b5f602082840312156142fe575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215614342575f5ffd5b8135610ce281613a81565b8281526040602082015261437a60408201835173ffffffffffffffffffffffffffffffffffffffff169052565b5f60208301516143a2606084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604083015173ffffffffffffffffffffffffffffffffffffffff8116608084015250606083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250608083015173ffffffffffffffffffffffffffffffffffffffff811660c08401525060a083015160e083015260c083015161010083015260e083015161012083015261010083015161014083015261012083015161446a6101608401827fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5061014083015115156101808301526101608301516102206101a0840152614496610260840182613bc1565b610180850151805173ffffffffffffffffffffffffffffffffffffffff166101c0860152602001516101e08501526101a08501518482037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0016102008601529091506145028282613bc1565b9150506101c08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0848303016102208501526145408282613bc1565b9150506101e0840151610240840152809150509392505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261458d575f5ffd5b83018035915067ffffffffffffffff8211156145a7575f5ffd5b602001915036819003821315612d27575f5ffd5b818382375f9101908152919050565b5f602082840312156145da575f5ffd5b815167ffffffffffffffff8111156145f0575f5ffd5b8201601f81018413614600575f5ffd5b805161460e613817826137b5565b818152856020838501011115614622575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f611cde6020830184613bc1565b5f82518060208501845e5f920191825250919050565b600181811c9082168061467b57607f821691505b6020821081036138b3577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8e811682528d811660208301528c16604082015273ffffffffffffffffffffffffffffffffffffffff8b16606082015273ffffffffffffffffffffffffffffffffffffffff8a1660808201528860a08201528760c08201528660e08201528561010082015261473b61012082018615159052565b6101a06101408201525f6147536101a0830186613bc1565b8281036101608401526147668186613bc1565b91505061478c61018083018473ffffffffffffffffffffffffffffffffffffffff169052565b9e9d5050505050505050505050505050565b805160208201517fffffffff00000000000000000000000000000000000000000000000000000000811691906004821015614803577fffffffff00000000000000000000000000000000000000000000000000000000808360040360031b1b82161692505b5050919050565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361483a5761483a61408c565b505f0390565b5f60208284031215614850575f5ffd5b8151610ce281613a81565b80820180821115611ce157611ce161408c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea264697066735822122048f70a77692eca0846fbe39ddb7a3d4bfc64b4cb0db856a023f8527a3669ea9164736f6c634300081c0033000000000000000000000000e3d41d19564922c9952f692c5dd0563030f5f2ef000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000974c46127593e0a30f8aeba15001f7ef5cf2e2f7