0 txs
1 call
constructor
constructor(string _name, address _factory)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
FACTORY
viewfunction FACTORY() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAINTAINER_ROLE
viewfunction MAINTAINER_ROLE() view returns (bytes32)
name
viewfunction name() view returns (string)
query
viewfunction query(uint256 _amount, address _tokenIn, address _tokenOut, bool _exactIn) view returns (uint256, address)
referrer
viewfunction referrer() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
addMaintainer
nonpayablefunction addMaintainer(address addedMaintainer)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
recoverERC20
nonpayablefunction recoverERC20(address _tokenAddress, uint256 _tokenAmount)
recoverETH
nonpayablefunction recoverETH(uint256 _amount)
removeMaintainer
nonpayablefunction removeMaintainer(address removedMaintainer)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role)
revokeAllowance
nonpayablefunction revokeAllowance(address _token, address _spender)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setReferrer
nonpayablefunction setReferrer(address _referrer)
swap
nonpayablefunction swap(uint256 _amountIn, uint256 _amountOut, address _fromToken, address _toToken, address _to)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Recovered
event Recovered(address indexed _asset, uint256 amount)
ReferrerSet
event ReferrerSet(address referrer)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
YakAdapterSwap
event YakAdapterSwap(address indexed _tokenFrom, address indexed _tokenTo, uint256 _amountIn, uint256 _amountOut)
errors
AddressZero
error AddressZero()
ETHTransferFailed
error ETHTransferFailed()
InsufficientAmountOut
error InsufficientAmountOut(uint256 amountOut, uint256 requiredAmount)
InsufficientOutputAmount
error InsufficientOutputAmount(uint256 amountOut, uint256 requiredAmount)
InvalidAdapterName
error InvalidAdapterName()
InvalidQuery
error InvalidQuery()
NothingToRecover
error NothingToRecover()
OnlyMaintainer
error OnlyMaintainer()
creation bytecode
0x60a06040523461003b5761001a610014610161565b90610199565b60405161294061052582396080518181816104d801526119c9015261294090f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b90601f01601f191681019081106001600160401b0382111761007457604052565b61003f565b9061008d61008660405190565b9283610053565b565b6001600160401b03811161007457602090601f01601f19160190565b90825f9392825e0152565b909291926100cb6100c68261008f565b610079565b938185528183011161003b5761008d9160208501906100ab565b9080601f8301121561003b5781516100ff926020016100b6565b90565b6001600160a01b031690565b6001600160a01b0381160361003b57565b9050519061008d8261010e565b919060408382031261003b578251906001600160401b03821161003b57602061015a826100ff9487016100e5565b940161011f565b61017f612e658038038061017481610079565b92833981019061012c565b9091565b6101026100ff6100ff9290565b6100ff90610183565b6101a29061039e565b6101ae6101025f610190565b6001600160a01b038216146101c257608052565b639fabe1c160e01b5f908152600490fd5b6100ff6100ff6100ff9290565b634e487b7160e01b5f52602260045260245ffd5b9060016002830492168015610214575b602083101461020f57565b6101e0565b91607f1691610204565b915f1960089290920291821b911b5b9181191691161790565b91906102486100ff610250936101d3565b90835461021e565b9055565b61008d915f91610237565b81811061026a575050565b806102775f600193610254565b0161025f565b9190601f811161028c57505050565b61029c61008d935f5260205f2090565b906020601f8401819004830193106102be575b6020601f90910104019061025f565b90915081906102af565b906102d1815190565b906001600160401b038211610074576102f4826102ee85546101f4565b8561027d565b602090601f831160011461032d5761025092915f9183610322575b50505f19600883021c1916906002021790565b015190505f8061030f565b601f19831691610340855f5260205f2090565b925f5b81811061037c57509160029391856001969410610364575b50505002019055565b01515f196008601f8516021c191690555f808061035b565b91936020600181928787015181550195019201610343565b9061008d916102c8565b6103a66103e2565b80516103b86103b45f6101d3565b9190565b146103c85761008d906001610394565b630b388d8d60e11b5f908152600490fd5b6100ff5f6101d3565b61008d336103f7816103f26103d9565b610419565b7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab955b9061008d91610481565b905b5f5260205260405f2090565b6100ff90610102906001600160a01b031682565b6100ff90610431565b6100ff90610445565b906104259061044e565b9060ff9061022d565b9061047a6100ff61025092151590565b8254610461565b61049261048e8383610503565b1590565b61049a575050565b6104b960016104b4845f6104ae8682610423565b01610457565b61046a565b6104d36104cd6104c7339390565b9361044e565b9161044e565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d6104fe60405190565b5f90a4565b6100ff915f6104ae61051d936105165f90565b5082610423565b5460ff169056fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a71461016957806306fdde0314610164578063248a9ca31461015f5780632dd310001461015a5780632f2ff15d1461015557806336568abe14610150578063409d653d1461014b57806368447c93146101465780636b453c1f146101415780637ae267731461013c5780638980f11f146101375780638bb9c5bf1461013257806391d148541461012d578063a18a7bfc14610128578063a217fddf14610123578063d33355531461011e578063d547741f14610119578063d8baf7cf14610114578063eab90da61461010f578063f2fde38b1461010a5763f87422540361000e57610888565b610870565b610854565b6107f7565b6107de565b6107c6565b6107ab565b610775565b610759565b610741565b610728565b6106ec565b6106b8565b610689565b610620565b610589565b61056b565b6104c3565b61047e565b610430565b6101c3565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361019957565b5f80fd5b905035906101aa8261016e565b565b90602082820312610199576101c09161019d565b90565b34610199576101f06101de6101d93660046101ac565b6108c1565b60405191829182901515815260200190565b0390f35b5f91031261019957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b9060016002830492168015610277575b602083101461027257565b61022a565b91607f1691610267565b80545f93929161029d61029383610257565b8085529360200190565b91600181169081156102ec57506001146102b657505050565b6102c791929394505f5260205f2090565b915f925b8184106102d85750500190565b8054848401526020909301926001016102cb565b92949550505060ff1916825215156020020190565b906101c091610281565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761037857604052565b61030b565b906101aa6103979261038e60405190565b93848092610301565b0383610338565b905f106103ae576101c09061037d565b6101fe565b6101c05f600161039e565b90825f9392825e0152565b6103ea6103f360209361041b936103de815190565b80835293849260200190565b958691016103be565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b0190565b60208082526101c0929101906103c9565b34610199576104403660046101f4565b6101f061044b6103b3565b6040519182918261041f565b80610192565b905035906101aa82610457565b90602082820312610199576101c09161045d565b34610199576101f061049961049436600461046a565b61097c565b6040515b9182918290815260200190565b73ffffffffffffffffffffffffffffffffffffffff1690565b34610199576104d33660046101f4565b6101f07f00000000000000000000000000000000000000000000000000000000000000005b6040519182918273ffffffffffffffffffffffffffffffffffffffff909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116610192565b905035906101aa8261051f565b9190604083820312610199576101c0906020610564828661045d565b940161053b565b346101995761058461057e366004610548565b906109b9565b604051005b346101995761058461059c366004610548565b90610a54565b801515610192565b905035906101aa826105a2565b608081830312610199576105cb828261045d565b926101c06105dc846020850161053b565b9360606105ec826040870161053b565b94016105aa565b9081526040810192916101aa916020905b019073ffffffffffffffffffffffffffffffffffffffff169052565b346101995761063c6106333660046105b7565b92919091610a9d565b906101f061064960405190565b928392836105f3565b6101c0916008021c73ffffffffffffffffffffffffffffffffffffffff1690565b906101c09154610652565b6101c05f6002610673565b34610199576106993660046101f4565b6101f06104f861067e565b90602082820312610199576101c09161053b565b34610199576105846106cb3660046106a4565b610b1b565b9190604083820312610199576101c0906020610564828661053b565b34610199576105846106ff3660046106d0565b90610c01565b9190604083820312610199576101c0906020610721828661053b565b940161045d565b346101995761058461073b366004610705565b90610ca9565b346101995761058461075436600461046a565b610cb3565b34610199576101f06101de61076f366004610548565b90610cdc565b34610199576105846107883660046106a4565b610dde565b6101c06101c06101c09290565b6101c05f61078d565b6101c061079a565b34610199576107bb3660046101f4565b6101f06104996107a3565b34610199576105846107d936600461046a565b610f12565b34610199576105846107f1366004610548565b90610f36565b346101995761058461080a3660046106a4565b610f40565b919060a08382031261019957610825818461045d565b92610833826020830161045d565b926101c0610844846040850161053b565b936080610564826060870161053b565b346101995761058461086736600461080f565b93929092610f7d565b34610199576105846108833660046106a4565b610fd4565b34610199576108983660046101f4565b6101f07f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95610499565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614908115610911575090565b6101c091507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b5f5260205260405f2090565b6101c09081565b6101c0905461096b565b60016109936101c09261098c5f90565b505f61095d565b01610972565b906101aa916109af6109aa8261097c565b610ff1565b906101aa9161101c565b906101aa91610999565b156109ca57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015280608481015b0390fd5b6101aa9190610a82610a65336104aa565b73ffffffffffffffffffffffffffffffffffffffff8416146109c3565b61108e565b6104aa6101c06101c09290565b6101c090610a87565b610aa9939291906110ec565b9190610ab45f61078d565b81148015610af1575b610ac5579190565b7f19e4cb10000000000000000000000000000000000000000000000000000000005f90815260045b035ffd5b50610afe6104aa5f610a94565b73ffffffffffffffffffffffffffffffffffffffff841614610abd565b6101aa907f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab956109b9565b90610b78610b74335b7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95610cdc565b1590565b610b85576101aa91610be4565b7f710bcc40000000000000000000000000000000000000000000000000000000005f908152600490fd5b6104aa6101c06101c09273ffffffffffffffffffffffffffffffffffffffff1690565b6101c090610baf565b6101c090610bd2565b90610bf16101aa92610bdb565b90610bfb5f61078d565b916112b4565b906101aa91610b45565b90610c18610b7433610b4e565b610b85576101aa91610c295f61078d565b8214610c7f57610c7a610c7082610c6b85610c647f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2896610bdb565b33906113cd565b610bdb565b9261049d60405190565b0390a2565b7faba3a548000000000000000000000000000000000000000000000000000000005f908152600490fd5b906101aa91610c0b565b6101aa903361059c565b9061095f90610bdb565b6101c0905b60ff1690565b6101c09054610cc7565b6101c0915f610cf6610cfc93610cef5f90565b508261095d565b01610cbd565b610cd2565b610d0d610b7433610b4e565b610b85576101aa90610d57565b9073ffffffffffffffffffffffffffffffffffffffff905b9181191691161790565b90610d4c6101c0610d5392610bdb565b8254610d1a565b9055565b610d636104aa5f610a94565b73ffffffffffffffffffffffffffffffffffffffff821614610db457610daf816104f87f2f325ca8431c311586e3ac3155ce6a0d40f908b5b0e99308671421d3a7bdad9f936002610d3c565b0390a1565b7f9fabe1c1000000000000000000000000000000000000000000000000000000005f908152600490fd5b6101aa90610d01565b610df3610b7433610b4e565b610b85576101aa90610e84565b906101aa610e0d60405190565b9283610338565b67ffffffffffffffff811161037857602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b90610e61610e5c83610e14565b610e00565b918252565b3d15610e7f57610e753d610e4f565b903d5f602084013e565b606090565b610e8d5f61078d565b8114610c7f57610eb45f80610ea160405190565b5f9085335af1610eaf610e66565b501590565b610ee8577f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28610c7a610c70610c6b5f610a94565b7fb12d13eb000000000000000000000000000000000000000000000000000000005f908152600490fd5b6101aa90610de7565b906101aa91610f2c6109aa8261097c565b906101aa9161108e565b906101aa91610f1b565b6101aa907f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95610f36565b9081526040810192916101aa9160200152565b93610fb37fe2bdbc6b7225eb0a972ac943c485a6cc05f7c6811838bce8903f23200fb744fa93610c6b610fb9938783878b6114ef565b93610bdb565b93610fcf610fc660405190565b92839283610f6a565b0390a3565b6101aa903390610fec610fe561079a565b91826109b9565b610a54565b6101aa903390611805565b9060ff90610d32565b906110156101c0610d5392151590565b8254610ffc565b611029610b748383610cdc565b611031575050565b61104a6001611045845f610cf6868261095d565b611005565b61105e611058610fb3339390565b91610bdb565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d61108960405190565b5f90a4565b6110988282610cdc565b6110a0575050565b6110b35f6110458482610cf6868261095d565b6110c1611058610fb3339390565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b61108960405190565b929093916110f75f90565b945f9473ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff8316141580611156575b61113b575b50505050565b90919293955061114b94506119be565b90915f808080611135565b506111605f61078d565b811415611130565b905051906101aa82610457565b90602082820312610199576101c091611168565b73ffffffffffffffffffffffffffffffffffffffff90911681526040810192916101aa91602090610604565b6040513d5f823e3d90fd5b156111c757565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608490fd5b61126561125f6101c09263ffffffff1690565b60e01b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b73ffffffffffffffffffffffffffffffffffffffff90911681526040810192916101aa9160200152565b90916112bf5f61078d565b8114801561131a575b6101aa93611306600494936112df611315946111c0565b6112ec63095ea7b361124c565b926112f660405190565b968794602086019081520161128a565b60208201810382520383610338565b611f4f565b509061135660208461132b84610bdb565b61133430610bdb565b60405180958194829361134b63dd62ed3e60e01b90565b845260048401611189565b03915afa9384156113c8576113066004946112df6101aa97611315955f91611399575b5061138a6113865f61078d565b9190565b149450509394505093506112c8565b6113bb915060203d6020116113c1575b6113b38183610338565b810190611175565b5f611379565b503d6113a9565b6111b5565b6113156004926113066101aa956112ec63a9059cbb61124c565b369037565b906101aa6114026113fc84610e4f565b93610e14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001602084016113e7565b6101c0906104aa565b6101c0905461142d565b6101aa9461148682989795611469608096611462611493975f60a08901980152565b60208c0152565b73ffffffffffffffffffffffffffffffffffffffff1660408a0152565b87820360608901526103c9565b94019073ffffffffffffffffffffffffffffffffffffffff169052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b919082039182116114ea57565b6114b0565b60018484611502939794979695966119be565b90919085831061174357611518610c6b85610bdb565b906370a082319561152860405190565b956115338860e01b90565b875273ffffffffffffffffffffffffffffffffffffffff85166004880152602087602481875afa9687156113c8575f9761171a575b5061159e9073ffffffffffffffffffffffffffffffffffffffff165b9173ffffffffffffffffffffffffffffffffffffffff1690565b1015611705576115ba610c6b6115b35f61078d565b9592610bdb565b936115cc6115c75f61078d565b6113ec565b946115d76002611436565b92813b15610199575f869361162382966115f060405190565b9a8b97889687957f6e1fdd7f00000000000000000000000000000000000000000000000000000000875260048701611440565b03925af180156113c8576116729560209461164e926116e8575b506040519687948593849360e01b90565b835273ffffffffffffffffffffffffffffffffffffffff1660048301526024820190565b03915afa80156113c85761168d925f916116c9575b506114dd565b818110611698575050565b7fd28d3eb5000000000000000000000000000000000000000000000000000000005f90815291610aed916004610f6a565b6116e2915060203d6020116113c1576113b38183610338565b5f611687565b6116ff905f6116f78183610338565b8101906101f4565b5f61163d565b6115ba610c6b6117145f61078d565b92610bdb565b61159e91975061173b6115849160203d6020116113c1576113b38183610338565b979150611568565b7fd28d3eb5000000000000000000000000000000000000000000000000000000005f908152610aed87856004610f6a565b6101c09061078d565b61041b6117959260209261178f815190565b94859290565b938491016103be565b6117dc6101c093926117d66117d6937f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260170190565b9061177d565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000815260110190565b90611813610b748284610cdc565b61181b575050565b6118656101c0610a509361184d61183d61183761187196611ff7565b92611774565b611847602061078d565b9061213b565b9061185760405190565b93849260208401928361179e565b90810382520382610338565b6040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526004830161041f565b905051906101aa8261051f565b90602082820312610199576101c0916118a3565b6dffffffffffffffffffffffffffff8116610192565b905051906101aa826118c4565b63ffffffff8116610192565b905051906101aa826118e7565b9091606082840312610199576101c061191984846118da565b93604061192982602087016118da565b94016118f3565b61193d6101c06101c09290565b61ffff1690565b61ffff8116610192565b905051906101aa82611944565b90602082820312610199576101c09161194e565b905051906101aa826105a2565b90602082820312610199576101c09161196f565b6101c06101c06101c0926dffffffffffffffffffffffffffff1690565b6101c06101c06101c09261ffff1690565b5f94926119ed610c6b7f0000000000000000000000000000000000000000000000000000000000000000610bdb565b9060206119f960405190565b9283907fe6a439050000000000000000000000000000000000000000000000000000000082528180611a2f868a60048401611189565b03915afa9182156113c8575f92611e38575b508195611a506104aa5f610a94565b73ffffffffffffffffffffffffffffffffffffffff841603611a74575b5050505050565b909192939496505f14611afc575091602091611a95610c6b611abe95610bdb565b90611a9f60405190565b809581948293611ab363f140a35a60e01b90565b8452600484016105f3565b03915afa9081156113c8575f91611add575b50915b5f80808080611a6d565b611af6915060203d6020116113c1576113b38183610338565b5f611ad0565b9250610c6b611b0a91610bdb565b90611b1460405190565b7f0902f1ac00000000000000000000000000000000000000000000000000000000815292606084600481865afa80156113c8575f948591611e03575b506040517f0dfe168100000000000000000000000000000000000000000000000000000000815290602082600481885afa9182156113c8575f92611de2575b506040517fd21220a700000000000000000000000000000000000000000000000000000000815295602087600481895afa9384156113c857611c8c975f95611db1575b50611bde6101f4611930565b925f97611bea60405190565b7f62ecec03000000000000000000000000000000000000000000000000000000008152602081600481855afa5f9181611d90575b50611cd657505b6020611c3060405190565b7f9e548b7f00000000000000000000000000000000000000000000000000000000815291829060049082905afa5f9181611ca5575b50611c925750611c80611c7a611c8692611990565b93611990565b936119ad565b95612415565b91611ad3565b611c86919850611c7a611c809199611990565b611cc891925060203d602011611ccf575b611cc08183610338565b81019061197c565b905f611c65565b503d611cb6565b6040517f2fcd1692000000000000000000000000000000000000000000000000000000008152602081600481865afa5f9181611d5f575b50611d19575050611c25565b9195509073ffffffffffffffffffffffffffffffffffffffff881673ffffffffffffffffffffffffffffffffffffffff851603611d5857505b93611c25565b9050611d52565b611d8291925060203d602011611d89575b611d7a8183610338565b81019061195b565b905f611d0d565b503d611d70565b611daa91925060203d602011611d8957611d7a8183610338565b905f611c1e565b611dd491955060203d602011611ddb575b611dcc8183610338565b8101906118b0565b935f611bd2565b503d611dc2565b611dfc91925060203d602011611ddb57611dcc8183610338565b905f611b8f565b9050611e2891945060603d606011611e31575b611e208183610338565b810190611900565b94919094611b50565b503d611e16565b611e5291925060203d602011611ddb57611dcc8183610338565b905f611a41565b15611e6057565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815280610a50600482016020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b15611eca57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608490fd5b5f91611f5b8392610bdb565b82602083519301915af1611f76611f70610e66565b91611e59565b8051611f846113865f61078d565b11611f8c5750565b611fa8816020611f9d6101aa945190565b81830101910161197c565b611ec3565b6101c06101c06101c09273ffffffffffffffffffffffffffffffffffffffff1690565b610ccc6101c06101c09290565b6101c06014611fd0565b6101c06101c06101c09260ff1690565b61201461200f6101c092612009606090565b50610bd2565b611fad565b61184761201f611fdd565b611fe7565b818102929181159184041417156114ea57565b919082018092116114ea57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9061207a825190565b811015612088570160200190565b612044565b80156114ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6101c0906120cc6113866101c09460ff1690565b901c90565b156120d857565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815280610a50600482016020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b6121646115c76121548461214f600261078d565b612024565b61215e600261078d565b90612037565b9160306121796121735f61078d565b85612071565b537f78000000000000000000000000000000000000000000000000000000000000006121ce6121c560019384935f1a6121ba6121b48661078d565b89612071565b5361214f600261078d565b61215e8361078d565b915b6121f1575b5050906101c06101c0926121eb6113865f61078d565b146120d1565b90916121fc8261078d565b831115612277577f303132333435363738396162636465660000000000000000000000000000000061222e600f61078d565b821690601082101561208857839261224e61226b92612271941a60f81b90565b5f1a61225a8789612071565b536122656004611fd0565b906120b8565b9361208d565b916121d0565b916121d5565b1561228457565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f43616d656c6f744c6962726172793a20494e53554646494349454e545f4f555460448201527f5055545f414d4f554e54000000000000000000000000000000000000000000006064820152608490fd5b1561231057565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f43616d656c6f744c6962726172793a20494e53554646494349454e545f4c495160448201527f55494449545900000000000000000000000000000000000000000000000000006064820152608490fd5b6101c0620186a061078d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b81156123d8570490565b6123a1565b60ff8116610192565b905051906101aa826123dd565b90602082820312610199576101c0916123e6565b604d81116114ea57600a0a90565b94929390966124215f90565b5061243561242e5f61078d565b871161227d565b1561264e57610c6b61244691610bdb565b9563313ce56796602061245860405190565b80926124648b60e01b90565b825260049082905afa9081156113c85761249361248e6124ac936020935f91612637575b50611fe7565b612407565b986124a0610c6b87610bdb565b60405193849260e01b90565b825260049082905afa80156113c8576124cb915f916126085750611fe7565b6124d490612407565b946124e36001878a88876126ef565b918689670de0b6b3a7640000956124f98761078d565b61250291612024565b9061250c916123ce565b966125168661078d565b61251f91612024565b90612529916123ce565b9473ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1614805f149861215e976125b76125d7986125d0986125ca976125c4976101c09f6125f9576125ab926125b0915b878d8a8c156125e757506125a99261259e6125a49261078d565b90612024565b6123ce565b905b6114dd565b9083612785565b92156125df575090612024565b9161078d565b906123ce565b9283612024565b6125ca612395565b905090612024565b91506125a99261259e6125a49261078d565b6125b0906125ab939490612584565b61262a915060203d602011612630575b6126228183610338565b8101906123f3565b5f612488565b503d612618565b61262a9150843d8611612630576126228183610338565b509290936101c0956126796115846126c89773ffffffffffffffffffffffffffffffffffffffff1690565b036126db5761259e906126c26126a9846125ca96975b6126985f61078d565b8111806126d2575b61214f90612309565b936126bc6126b5612395565b8096612024565b966114dd565b926114dd565b61215e600161078d565b508189116126a0565b61259e906126c26126a9846125ca9661268f565b929190936126fa5f90565b5061270b575050906101c091612024565b6101c09361259e6127436125ca946125a46127396125c4966125a4670de0b6b3a76400009a61259e8c61078d565b9461259e8961078d565b61215e61277c61277561276c61276561275c8689612024565b6125ca8c61078d565b9680612024565b6125ca8a61078d565b9280612024565b6125ca8861078d565b61278e5f61078d565b61279860ff61078d565b81101561281257836127aa818461283a565b908480831015612821576127d86127c76127e29461215e936114dd565b61259e670de0b6b3a764000061078d565b6125ca83876128a9565b935b848181111561281857906127f7916114dd565b612804611386600161078d565b11156128125760010161278e565b50505090565b6127f7916114dd565b6127d86127c76125a992612834956114dd565b936127e4565b61215e6101c0926128485f90565b506125ca6125c46128598380612024565b9261214f6128a061288961277c61288361276c8661214f670de0b6b3a76400009b6125ca8d61078d565b8a612024565b9761214f6128978280612024565b6125ca8961078d565b6125ca8661078d565b61215e6101c0926128b75f90565b506125ca6125c46128fc6128f36128dc6128d58861214f600361078d565b9580612024565b9461259e670de0b6b3a7640000966125ca8861078d565b6125ca8561078d565b9461214f6128a0828061202456fea26469706673582212209393320bf6fc449b443fbad1a4fceb578476460f699e72f282c255b5be6c834164736f6c634300081e003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000006eccab422d763ac031210895c81787e87b43a652000000000000000000000000000000000000000000000000000000000000000e43616d656c6f7441646170746572000000000000000000000000000000000000