@pollum-io/universal-router
Version:
Smart contracts for Universal Router
503 lines • 86.4 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "UniversalRouter",
"sourceName": "contracts/UniversalRouter.sol",
"abi": [
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "permit2",
"type": "address"
},
{
"internalType": "address",
"name": "weth9",
"type": "address"
},
{
"internalType": "address",
"name": "seaportV1_5",
"type": "address"
},
{
"internalType": "address",
"name": "seaportV1_4",
"type": "address"
},
{
"internalType": "address",
"name": "openseaConduit",
"type": "address"
},
{
"internalType": "address",
"name": "nftxZap",
"type": "address"
},
{
"internalType": "address",
"name": "x2y2",
"type": "address"
},
{
"internalType": "address",
"name": "foundation",
"type": "address"
},
{
"internalType": "address",
"name": "sudoswap",
"type": "address"
},
{
"internalType": "address",
"name": "elementMarket",
"type": "address"
},
{
"internalType": "address",
"name": "nft20Zap",
"type": "address"
},
{
"internalType": "address",
"name": "cryptopunks",
"type": "address"
},
{
"internalType": "address",
"name": "looksRareV2",
"type": "address"
},
{
"internalType": "address",
"name": "routerRewardsDistributor",
"type": "address"
},
{
"internalType": "address",
"name": "looksRareRewardsDistributor",
"type": "address"
},
{
"internalType": "address",
"name": "looksRareToken",
"type": "address"
},
{
"internalType": "address",
"name": "v1Factory",
"type": "address"
},
{
"internalType": "address",
"name": "v3Factory",
"type": "address"
},
{
"internalType": "bytes32",
"name": "pairInitCodeHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "poolInitCodeHash",
"type": "bytes32"
}
],
"internalType": "struct RouterParameters",
"name": "params",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "BalanceTooLow",
"type": "error"
},
{
"inputs": [],
"name": "BuyPunkFailed",
"type": "error"
},
{
"inputs": [],
"name": "ContractLocked",
"type": "error"
},
{
"inputs": [],
"name": "ETHNotAccepted",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "commandIndex",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "message",
"type": "bytes"
}
],
"name": "ExecutionFailed",
"type": "error"
},
{
"inputs": [],
"name": "FromAddressIsNotOwner",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientETH",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientToken",
"type": "error"
},
{
"inputs": [],
"name": "InvalidBips",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "commandType",
"type": "uint256"
}
],
"name": "InvalidCommandType",
"type": "error"
},
{
"inputs": [],
"name": "InvalidOwnerERC1155",
"type": "error"
},
{
"inputs": [],
"name": "InvalidOwnerERC721",
"type": "error"
},
{
"inputs": [],
"name": "InvalidPath",
"type": "error"
},
{
"inputs": [],
"name": "InvalidReserves",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSpender",
"type": "error"
},
{
"inputs": [],
"name": "LengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "SliceOutOfBounds",
"type": "error"
},
{
"inputs": [],
"name": "TransactionDeadlinePassed",
"type": "error"
},
{
"inputs": [],
"name": "UnableToClaim",
"type": "error"
},
{
"inputs": [],
"name": "UnsafeCast",
"type": "error"
},
{
"inputs": [],
"name": "V1InvalidPath",
"type": "error"
},
{
"inputs": [],
"name": "V1TooLittleReceived",
"type": "error"
},
{
"inputs": [],
"name": "V1TooMuchRequested",
"type": "error"
},
{
"inputs": [],
"name": "V3InvalidAmountOut",
"type": "error"
},
{
"inputs": [],
"name": "V3InvalidCaller",
"type": "error"
},
{
"inputs": [],
"name": "V3InvalidSwap",
"type": "error"
},
{
"inputs": [],
"name": "V3TooLittleReceived",
"type": "error"
},
{
"inputs": [],
"name": "V3TooMuchRequested",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "RewardsSent",
"type": "event"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "looksRareClaim",
"type": "bytes"
}
],
"name": "collectRewards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "commands",
"type": "bytes"
},
{
"internalType": "bytes[]",
"name": "inputs",
"type": "bytes[]"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "commands",
"type": "bytes"
},
{
"internalType": "bytes[]",
"name": "inputs",
"type": "bytes[]"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "amount0Delta",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1Delta",
"type": "int256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "pegasysV3SwapCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x34620003ed576001600160401b0362004bdf38819003610300601f8201601f191681019084821190821017620003d7576102809282916040526103003912620003ed57604051610280810191821181831017620003d757610260916040526200006a610300620003f2565b8082526200007a610320620003f2565b60208301526200008c610340620003f2565b60408301526200009e610360620003f2565b6060830152620000b0610380620003f2565b6080830152620000c26103a0620003f2565b60a0830152620000d46103c0620003f2565b60c0830152620000e66103e0620003f2565b60e0830152620000f8610400620003f2565b6101008301526200010b610420620003f2565b6101208301526200011e610440620003f2565b61014083015262000131610460620003f2565b61016083015262000144610480620003f2565b610180830152620001576104a0620003f2565b6101a08301526200016a6104c0620003f2565b6101c08301526200017d6104e0620003f2565b6101e083015262000190610500620003f2565b610200830152620001a3610520620003f2565b610220838101918252610540516102408086019182526103008701518787019081526001600160a01b0395861660a09081526020880151871660809081526040808a0151891660c090815260608b01518a1660e0908152928b01518a16610100908152938b01518a16610120908152908b01518a16610140908152928b01518a16610160908152938b01518a16610180908152908b01518a166101a0908152928b01518a166101c0908152938b01518a166101e0908152908b01518a16610200908152908b01518a16909752918901518816909352918701518616909752919094015183166102805292516102a05251166102c05290516102e052600019600055600180546001600160a01b03191681179055516147d762000408823960805181818161244901526125d0015260a05181818161166301528181611763015281816122c2015281816127e80152613d1e015260c05181612b06015260e051816134bc0152610100518161369c01526101205181612bba0152610140518181816130640152613166015261016051816132740152610180518181816130b701526137c601526101a0518161345301526101c0518161310e01526101e05181612bf801526102005181612b630152610220518161067b0152610240518161061f01526102605181610703015261028051818181611c4401528181612054015261421201526102a051818181611c230152818161203301526141f101526102c051816145cc01526102e051816145aa01526147d790f35b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620003ed5756fe60a0604081815260049182361015610022575b505050361561002057600080fd5b005b600090813560e01c90816301ffc9a714610aaf57508063150b7a0214610a2257806324856bc3146109595780633593564c1461081c578063709a1cc2146105b8578063a8070710146101d6578063bc197c81146101125763f23a6e6103610012573461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f576100ba610b9d565b506100c3610bc5565b506084359067ffffffffffffffff821161010f57506020926100e791369101610c09565b5050517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b80fd5b503461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5761014a610b9d565b50610153610bc5565b5067ffffffffffffffff906044358281116101d2576101759036908601610c37565b50506064358281116101d25761018e9036908601610c37565b505060843591821161010f57506020926101aa91369101610c09565b5050517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b5080fd5b5091346105b45760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b4578035906024356044359167ffffffffffffffff928381116105b05761022f9036908301610c09565b919092878613948515806105a6575b61057e57838501888682031261057a57853591821161057a57610262918601613a03565b5060208401359373ffffffffffffffffffffffffffffffffffffffff9384861680960361057a576102929161448d565b929093602b8510610552578335968760601c9760178601968735958660601c936102c78c8662ffffff809760481c1691614515565b863391160361052a57156105205750828a105b156102f65750505050505050506102f393503391613df5565b80f35b909192939598506042819a95979a10156000146104d757806017116104d3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901937f80000000000000000000000000000000000000000000000000000000000000008110156104d357610369906144e8565b97602b85106104ab57926103f78b8261039f8f98959661044997602e859f9e9d9c9a013560601c908282109c60481c1691614515565b1698881561048d576103c66401000276a49d5b83519687946020860152606085019161386a565b908c830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361392d565b8851998a98899788967f128acb0800000000000000000000000000000000000000000000000000000000885233908801526024870152604486015216606484015260a0608484015260a4830190610c68565b03925af180156104815761045c57505080f35b813d831161047a575b61046f818361392d565b8101031261010f5780f35b503d610465565b505051903d90823e3d90fd5b6103c673fffd8963efd1fc6a506488495d951d5263988d259d6103b2565b858b517f3b99b53d000000000000000000000000000000000000000000000000000000008152fd5b8b80fd5b5050955050945095809591505484116104f857506102f39394503391613df5565b8590517f739dbe52000000000000000000000000000000000000000000000000000000008152fd5b9a508983106102da565b868e517f32b13d91000000000000000000000000000000000000000000000000000000008152fd5b5087517f3b99b53d000000000000000000000000000000000000000000000000000000008152fd5b8980fd5b8288517f316cf0eb000000000000000000000000000000000000000000000000000000008152fd5b508882131561023e565b8680fd5b8280fd5b509190346105b457602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126108185783833567ffffffffffffffff81116101d25761060c829136908701610c09565b90818551928392833781018381520390827f00000000000000000000000000000000000000000000000000000000000000005af16106486139a8565b50156107f05780517f70a082310000000000000000000000000000000000000000000000000000000081523084820152907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168383602481845afa9283156107e65786936107b1575b5081517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169581019586526020860184905294849186918290899082906040015b03925af19384156107a7577f1e8f03f716bc104bf7d728131967a0c771e85ab54d09c1e2d6ed9e0bc4e2a16c9461077a575b5051908152a180f35b61079990843d86116107a0575b610791818361392d565b810190613bc0565b5038610771565b503d610787565b81513d87823e3d90fd5b9092508381813d83116107df575b6107c9818361392d565b810103126107db57519161073f6106c6565b8580fd5b503d6107bf565b82513d88823e3d90fd5b9050517f7d529919000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b50919060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b45767ffffffffffffffff8235818111610955576108689036908501610c09565b916024359081116107db576108809036908601610c37565b929091604435421161092d5733301461091e576001958654958773ffffffffffffffffffffffffffffffffffffffff8816036108f857505091859493916108ef937fffffffffffffffffffffffff00000000000000000000000000000000000000009586339116178755610cc6565b81541617905580f35b517f6f5ffb7e000000000000000000000000000000000000000000000000000000008152fd5b90919293506102f39450610cc6565b8585517f5bf6f916000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b509190807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b45767ffffffffffffffff8235818111610955576109a49036908501610c09565b916024359081116107db576109bc9036908601610c37565b92909133301461091e576001958654958773ffffffffffffffffffffffffffffffffffffffff8816036108f857505091859493916108ef937fffffffffffffffffffffffff00000000000000000000000000000000000000009586339116178755610cc6565b503461010f5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f57610a5a610b9d565b50610a63610bc5565b506064359067ffffffffffffffff821161010f5750602092610a8791369101610c09565b5050517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b905083346105b45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b457357fffffffff0000000000000000000000000000000000000000000000000000000081168091036105b457602092507f4e2312e0000000000000000000000000000000000000000000000000000000008114908115610b73575b8115610b49575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610b42565b7f150b7a020000000000000000000000000000000000000000000000000000000081149150610b3b565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610bc057565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610bc057565b359073ffffffffffffffffffffffffffffffffffffffff82168203610bc057565b9181601f84011215610bc05782359167ffffffffffffffff8311610bc05760208381860195010111610bc057565b9181601f84011215610bc05782359167ffffffffffffffff8311610bc0576020808501948460051b010111610bc057565b919082519283825260005b848110610cb25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b602081830181015184830182015201610c73565b919290926080528281036138405791906000905b828210610ce75750505050565b8382959394951015611e575760059282841b60805101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe19182608051360301821215610bc0578160805101359767ffffffffffffffff8911610bc0576020836080510101988036038a13610bc057606097603f90818989013560f81c166001976020821060001461347c5750601080821015612abf5750600880821015611b8957508061120357505050610d9c908a6144cb565b92909860a0856080510101356000146111f957610dd373ffffffffffffffffffffffffffffffffffffffff600154169b5b35613b87565b9960408660805101013585829d927f80000000000000000000000000000000000000000000000000000000000000008314611141575b50959c95505b7f8000000000000000000000000000000000000000000000000000000000000000811015610bc0576042861061113a5730915b86602b11610bc0578d91601783013560601c9083359462ffffff8660601c96610e8773ffffffffffffffffffffffffffffffffffffffff92839260481c16868a614515565b16908488101561111e57806401000276a4965b602b60405199604060208c01528160608c015260808b0137600060ab8a015216604088015260a0875260c087019587871067ffffffffffffffff8811176110ef576040948288958688527f128acb080000000000000000000000000000000000000000000000000000000087521660c48a0152868a1060e48a01526101048901521661012487015260a06101448701528160007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4088610f5d610164820182610c68565b0301925af19283156110e35760009283946110a1575b5050610f87931060001461109a57506144e8565b9a60428510610fc857309085601711610bc05760177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe991019501949b610e0f565b50985098606091969597949392509160805101013511611070575b1580611043575b610ffc57506001019291929092610cda565b9061103f60409283519384937f2c4029e9000000000000000000000000000000000000000000000000000000008552600485015260248401526044830190610c68565b0390fd5b507f8000000000000000000000000000000000000000000000000000000000000000828501351615610fea565b60046040517f39d35496000000000000000000000000000000000000000000000000000000008152fd5b90506144e8565b91929093506040843d6040116110db575b816110bf6040938661392d565b8101031261010f57505160e092909201519190610f8738610f73565b3d91506110b2565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8073fffd8963efd1fc6a506488495d951d5263988d2596610e9a565b8b91610e42565b6014919250106111cf576020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301523560601c5afa9081156110e35760009161119d575b503880610e09565b906020823d6020116111c7575b816111b76020938361392d565b8101031261010f57505138611195565b3d91506111aa565b60046040517f3b99b53d000000000000000000000000000000000000000000000000000000008152fd5b610dd3309b610dcd565b6001819d9493969d9b9897959a999b146000146114c757505081611229929394506144cb565b9060a0846080510101356000146114bd5761125d73ffffffffffffffffffffffffffffffffffffffff600154169335613b87565b916060856080510101356000557f80000000000000000000000000000000000000000000000000000000000000006040866080510101351015610bc0576112ab6040866080510101356144e8565b602b83106111cf57813592601783013560601c9586928560601c96879660481c62ffffff166112db908689614515565b73ffffffffffffffffffffffffffffffffffffffff16938786106000149673ffffffffffffffffffffffffffffffffffffffff80956000956113766113ca9560409c6114a2576401000276a4935b856113448f51986040948a956020870152606086019161386a565b91168e830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810186528561392d565b8a519b8c9a8b998a987f128acb08000000000000000000000000000000000000000000000000000000008a52166004890152106024870152604486015216606484015260a0608484015260a4830190610c68565b03925af19182156110e3576000918293611464575b50604093101561145457506113f3906144e8565b915b6080510101350361142a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000555b610fe3565b60046040517fd4e0248e000000000000000000000000000000000000000000000000000000008152fd5b61145e91506144e8565b916113f5565b9250906040833d60401161149a575b816114806040938361392d565b8101031261010f57508151602090920151919060406113df565b3d9150611473565b73fffd8963efd1fc6a506488495d951d5263988d2593611329565b61125d3093610dcd565b6002810361151157505050611425925073ffffffffffffffffffffffffffffffffffffffff6001541661150a604060608560805101013594608051010135613b87565b9135613d03565b9193916003810361188357505060805181018084019390604090850312610bc057823567ffffffffffffffff8111610bc05782608051010192606084860312610bc057604051946060860186811067ffffffffffffffff8211176110ef57604052602085013567ffffffffffffffff8111610bc057850160208201809882011215610bc0576020810135906115a5826139d8565b926115b3604051948561392d565b8284526040602085019360071b830101918a8311610bc057604001925b82841061181e575050505085526115e960408501610be8565b956020860196875260606040870195013585526040846080510101359067ffffffffffffffff8211610bc057602061162a9261163096608051010101613a03565b506144ae565b909173ffffffffffffffffffffffffffffffffffffffff600154169473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610bc05794929391906040519586947f2a2d80d100000000000000000000000000000000000000000000000000000000865260048601526060602486015260c48501935193606060648701528451809152602060e487019501906000905b8082106117a557505050946117499285949273ffffffffffffffffffffffffffffffffffffffff600098511660848701525160a48601527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85840301604486015261386a565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156110e357611796575b50610fe3565b61179f906138a9565b38611790565b9197965091929394602060806001928a5173ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff848201511684830152606065ffffffffffff918260408201511660408501520151166060820152019801920188969795949392916116e3565b608060208584030112610bc057602060809160405161183c816138bd565b61184587610be8565b8152611852838801610be8565b83820152611862604088016139f0565b6040820152611873606088016139f0565b60608201528152019301926115d0565b600495509193508482036119f25750509091604060606118a98286608051010135613b87565b608051909501013573ffffffffffffffffffffffffffffffffffffffff9081169335168061191f5750479283106118f9575050806118e9575b5050610fe3565b6118f291614681565b38806118e2565b517f6a12f104000000000000000000000000000000000000000000000000000000008152fd5b9391908051937f70a082310000000000000000000000000000000000000000000000000000000085523083860152602085602481895afa9485156119e7576000956119b3575b50841061198d5750508161197c575b505050610fe3565b611985926146ef565b388080611974565b517f675cae38000000000000000000000000000000000000000000000000000000008152fd5b90946020823d6020116119df575b816119ce6020938361392d565b8101031261010f5750519338611965565b3d91506119c1565b82513d6000823e3d90fd5b8103611a1f57506114259250611a18604060608460805101013593608051010135613b87565b9035613bd8565b90919060068103611b59575060805101606081013590604090611a4490820135613b87565b9282158015611b4e575b611b26573573ffffffffffffffffffffffffffffffffffffffff169384611a8a5750506114259250611a836127109147613cb7565b0490614681565b8151907f70a082310000000000000000000000000000000000000000000000000000000082523090820152602081602481885afa918215611b1c5750600091611ae8575b50611ae161142594939261271092613cb7565b04916146ef565b906020823d602011611b14575b81611b026020938361392d565b8101031261010f575051611ae1611ace565b3d9150611af5565b513d6000823e3d90fd5b8482517fdeaa01e6000000000000000000000000000000000000000000000000000000008152fd5b506127108311611a4e565b83602491604051917fd76a1e9e000000000000000000000000000000000000000000000000000000008352820152fd5b819d969d9b989794959a999b93929314600014611e9057505050604091611bb8838360805101013591856144cb565b92909460a082608051010135600014611e8657611bee73ffffffffffffffffffffffffffffffffffffffff600154169135613b87565b908615611e5757611bfe85613dc7565b8760011015611e5757611c20611c6891611c1a60208901613dc7565b90613f67565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613e5f565b938481611e3d575b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860193868511611e0e57611cc494611cc973ffffffffffffffffffffffffffffffffffffffff9687928a85613db7565b613dc7565b16948651947f70a082310000000000000000000000000000000000000000000000000000000091828752841693600499858b89015260249460208987818d5afa988915611e0357600099611dce575b509160209695949391611d2a93613fe0565b8751968793849283528a8301525afa928315611dc357600093611d8e575b50906060611d5c9260805101013592613de8565b10611d68575050610fe3565b517ff0361fea000000000000000000000000000000000000000000000000000000008152fd5b90926020823d602011611dbb575b81611da96020938361392d565b8101031261010f575051916060611d48565b3d9150611d9c565b84513d6000823e3d90fd5b90986020823d602011611dfb575b81611de96020938361392d565b8101031261010f575051976020611d18565b3d9150611ddc565b8b513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b611e4f92611e4a88613dc7565b613df5565b388084611c70565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b611bee3091610dcd565b919492939160098103612271575050611ea990826144cb565b608051840160a001351561226757611eda73ffffffffffffffffffffffffffffffffffffffff600154169335613b87565b92611ee4836139d8565b95611ef2604051978861392d565b83875283901b820160208701368211610bc05783905b82821061224f575050506000946002875110612225576040816080510101359680517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111611e0e5790815b611fb257505060805101606001358611611f88578215611e57576114259585611f8392611e4a85613dc7565b613fe0565b60046040517fb1d3c70c000000000000000000000000000000000000000000000000000000008152fd5b90977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89019750888811611e0e5773ffffffffffffffffffffffffffffffffffffffff6120026120789984613da3565b511661202e73ffffffffffffffffffffffffffffffffffffffff6120268c86613da3565b511682613f67565b819a917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613e5f565b90604051907f0902f1ac00000000000000000000000000000000000000000000000000000000825260608260048173ffffffffffffffffffffffffffffffffffffffff87165afa9a8b156110e357600092839c6121dc575b5073ffffffffffffffffffffffffffffffffffffffff16036121c2576dffffffffffffffffffffffffffff8091169916905b98801580156121ba575b612190578261211a91613cb7565b916103e892838102938185041490151715611e0e5761213891613de8565b6103e590818102918183041490151715611e0e5761215591613cca565b60018101809111611e0e57978015611e0e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019081611f57565b60046040517f7b9c8916000000000000000000000000000000000000000000000000000000008152fd5b50811561210c565b6dffffffffffffffffffffffffffff998a16991690612102565b612215919c5073ffffffffffffffffffffffffffffffffffffffff935060603d811161221e575b61220d818361392d565b810190613faa565b509b90926120d0565b503d612203565b60046040517f20db8267000000000000000000000000000000000000000000000000000000008152fd5b6020809161225c84610be8565b815201910190611f08565b611eda3093610dcd565b92945091600a81036123d75750608051830160e081013581019460208087013594509092916122a4919087030184614480565b116111cf5773ffffffffffffffffffffffffffffffffffffffff93847f00000000000000000000000000000000000000000000000000000000000000001692856001541691843b15610bc05760409587875198899687967f2b67b570000000000000000000000000000000000000000000000000000000008852600488015261232c90610be8565b166024860152808883608051010161234390610be8565b16604486015265ffffffffffff808360805101606001612362906139f0565b1660648701528260805101608001612379906139f0565b166084860152816080510160a00161239090610be8565b1660a48501526080510160c0013560c484015261010060e48401526123bc91610104840191870161386a565b03815a6000948591f1908115611b1c57506117965750610fe3565b600b81036125a1575050506123f6604080926080510101359235613b87565b91807f80000000000000000000000000000000000000000000000000000000000000008103612571575050475b8061243057505050610fe3565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016803b15610bc0578351927fd0e30db0000000000000000000000000000000000000000000000000000000008452600493600081868187875af1801561256657612557575b5030908616036124bf575b5050611974565b61251e9460006020948651978895869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115611b1c5750612538575b808080806124b8565b6125509060203d6020116107a057610791818361392d565b503861252f565b612560906138a9565b386124ad565b86513d6000823e3d90fd5b47101561242357600482517f6a12f104000000000000000000000000000000000000000000000000000000008152fd5b600c810361273157505050906125b79035613b87565b9073ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001660408051937f70a08231000000000000000000000000000000000000000000000000000000008552600430818701526024916020878481885afa968715611dc3576000976126fd575b506080510183013586106126d65785612659575b50505050505050610fe3565b833b15610bc057600091869183855196879485937f2e1a7d4d0000000000000000000000000000000000000000000000000000000085528401525af1908115611b1c57506126c7575b5030908316036126b7575b808080808061264d565b6126c091614681565b38806126ad565b6126d0906138a9565b386126a2565b82517f6a12f104000000000000000000000000000000000000000000000000000000008152fd5b90966020823d602011612729575b816127186020938361392d565b8101031261010f5750519583612639565b3d915061270b565b600d810361298c575082608051010191602083019360208260805101850312610bc0573567ffffffffffffffff8111610bc057849160805101019182011215610bc057602081013590612783826139d8565b936040936127938551968761392d565b838652602086019285849560071b820101928311610bc0578501925b82841061292a575050505073ffffffffffffffffffffffffffffffffffffffff90816001541684519060005b8281106128be57505050817f00000000000000000000000000000000000000000000000000000000000000001691823b15610bc05783517f0d58b1db000000000000000000000000000000000000000000000000000000008152602060048201529451602486018190528592604484019290916000915b81831061287a57505050509181600081819503925af1908115611b1c57506117965750610fe3565b91938395506080602091846060600195975182815116845282868201511686850152828d820151168d85015201511660608201520195019301909187949392612852565b81856128ca838a613da3565b51511603612901577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e0e576001016127db565b600486517fe7002877000000000000000000000000000000000000000000000000000000008152fd5b608060208584030112610bc05760206080918751612947816138bd565b61295087610be8565b815261295d838801610be8565b8382015261296c898801610be8565b8982015261297c60608801610be8565b60608201528152019301926127af565b9294505050600e8103612a8e57506040918251907f70a0823100000000000000000000000000000000000000000000000000000000825260208260248173ffffffffffffffffffffffffffffffffffffffff806004983516888301528886608051010135165afa918215611dc357600092612a59575b5060805101606001351180159290612a1b575050610fe3565b517fa3281672000000000000000000000000000000000000000000000000000000006020820152908152909150612a51816138f5565b9038806118e2565b90916020823d602011612a86575b81612a746020938361392d565b8101031261010f575051906060612a02565b3d9150612a67565b602490604051907fd76a1e9e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9150915060189b95939897999692949b80831060001461304e57508103612b35575050506000925090612af38392826144ae565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b90610fe3565b60118103612b8c575050506000925090612b508392826144ae565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b60128103612be3575050506000925090612ba78392826144ae565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b919392509060138103612d49575050909150357f0000000000000000000000000000000000000000000000000000000000000000916040600080825160208101907f8264fe98000000000000000000000000000000000000000000000000000000008252602487818301528152612c5981613911565b5190606086608051010135885af192612c706139a8565b948415612d0f578273ffffffffffffffffffffffffffffffffffffffff612c9e921694608051010135613b87565b90833b15610bc05782517f8b72a2ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820152916000908390604490829084905af1908115611b1c57506117965750610fe3565b505091925050517fae9bdf0000000000000000000000000000000000000000000000000000000000602082015260048152612b2f816138f5565b60158103612e5a57505090604091828051917f6352211e0000000000000000000000000000000000000000000000000000000083526020836024816004976060816080510101358983015273ffffffffffffffffffffffffffffffffffffffff968791608051010135165afa928315612e4f57600093612e10575b5081903516911614918215612dda575050610fe3565b517f7dbe7e89000000000000000000000000000000000000000000000000000000006020820152908152909150612a51816138f5565b6020939193813d602011612e47575b81612e2c6020938361392d565b810103126101d2575190828216820361010f57509181612dc4565b3d9150612e1f565b85513d6000823e3d90fd5b60168103612f815750506040918251907efdd58e00000000000000000000000000000000000000000000000000000000825260208280612ecc60049660608660805101013590358884016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b038173ffffffffffffffffffffffffffffffffffffffff8886608051010135165afa918215611dc357600092612f4c575b5060809081510101351191821592612f16575050610fe3565b517f483a6929000000000000000000000000000000000000000000000000000000006020820152908152909150612a51816138f5565b90916020823d602011612f79575b81612f676020938361392d565b8101031261010f575051906080612efd565b3d9150612f5a565b909290601714612f92575050610fe3565b60409073ffffffffffffffffffffffffffffffffffffffff612fba8383608051010135613b87565b93351692833b15610bc05782517f42842e0e00000000000000000000000000000000000000000000000000000000815260805130600483015273ffffffffffffffffffffffffffffffffffffffff909216602482015291016060013560448201529160009083908183816064810103925af1908115611b1c575061303f575b806118e2565b613048906138a9565b38613039565b939693821415905061308957505050612b2f92507f000000000000000000000000000000000000000000000000000000000000000091613a4a565b601981036130e05750505060009250906130a48392826144ae565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b601a81036131375750505060009250906130fb8392826144ae565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b601b810361325e57505050600061314f8192846144ae565b9390604094818651928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af19182916131926139a8565b926131a0575b505090610fe3565b73ffffffffffffffffffffffffffffffffffffffff6080838151010135166131cf606084608051010135613b87565b908251906131dc826138d9565b60008252803b15610bc05761323894600080948651978895869485937ff242432a00000000000000000000000000000000000000000000000000000000855260a060c08360805101013592608051010135903060048701613b42565b03925af1908115611b1c575061324f575b80613198565b613258906138a9565b38613249565b91949091601c810361329957505050612b2f92507f000000000000000000000000000000000000000000000000000000000000000091613a4a565b9193929091601d81036134225750506060816080510101359060409173ffffffffffffffffffffffffffffffffffffffff6132da8484608051010135613b87565b9435168351947efdd58e0000000000000000000000000000000000000000000000000000000086526004936020878061333987308a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0381865afa968715612566576000976133ed575b50608090815101013586106133c5578451613367816138d9565b60008152823b15610bc0576000946133af86928851998a97889687957ff242432a00000000000000000000000000000000000000000000000000000000875230908701613b42565b03925af1908115611b1c57506117965750610fe3565b8385517f675cae38000000000000000000000000000000000000000000000000000000008152fd5b90966020823d60201161341a575b816134086020938361392d565b8101031261010f57505195608061334d565b3d91506133fb565b929450925050601e8103612a8e5750816134406000939284936144ae565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b9499989a92506020819d9792969d989498146000146134e557505050505050806134a960009384936144ae565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b60219080820361365c5750505050909161350a613502868661448d565b9690956144ae565b929061354c60409788519760208901997f24856bc3000000000000000000000000000000000000000000000000000000008b5260248a0152606489019161386a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc878203016044880152818152602082818301951b82010195856000915b8483106135de57505050505050505091816135d0600094938594037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261392d565b519082305af1612b2f6139a8565b90919293949596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085820301885288358284360301811215610bc0578301906020823592019167ffffffffffffffff8111610bc0578036038313610bc05761364c60209283928b9561386a565b9a0198019695949301919061358a565b9297509350935060228195929514600014612a8e5750359060408093608051010135906000906002831015613814575050808491156000146137bf5750507f0000000000000000000000000000000000000000000000000000000000000000915b6000908051927f095ea7b300000000000000000000000000000000000000000000000000000000845273ffffffffffffffffffffffffffffffffffffffff600495168585015260206024937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858701526044809682855af19081601f3d1188600051141615166137b2575b50156137575750505050610fe3565b91600e7f415050524f56455f4641494c45440000000000000000000000000000000000009260206064969551957f08c379a0000000000000000000000000000000000000000000000000000000008752860152840152820152fd5b3b153d1715905038613748565b036137eb577f0000000000000000000000000000000000000000000000000000000000000000916136bd565b600482517f5461585f000000000000000000000000000000000000000000000000000000008152fd5b602492507f4e487b71000000000000000000000000000000000000000000000000000000008252600452fd5b60046040517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b67ffffffffffffffff81116110ef57604052565b6080810190811067ffffffffffffffff8211176110ef57604052565b6020810190811067ffffffffffffffff8211176110ef57604052565b6040810190811067ffffffffffffffff8211176110ef57604052565b6060810190811067ffffffffffffffff8211176110ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110ef57604052565b67ffffffffffffffff81116110ef57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d156139d3573d906139b98261396e565b916139c7604051938461392d565b82523d6000602084013e565b606090565b67ffffffffffffffff81116110ef5760051b60200190565b359065ffffffffffff82168203610bc057565b81601f82011215610bc057803590613a1a8261396e565b92613a28604051948561392d565b82845260208383010111610bc057816000926020809301838601378301015290565b919290613a5790836144ae565b90938460405195869384378201906000958693838580955203918635905af192613a7f6139a8565b9284613a89575050565b73ffffffffffffffffffffffffffffffffffffffff606082013516613ab16040830135613b87565b91813b15610818576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff93909316602484015260800135604483015290919081908390606490829084905af1908115613b365750613b2b5750565b613b34906138a9565b565b604051903d90823e3d90fd5b9192613b8495949160a09473ffffffffffffffffffffffffffffffffffffffff8092168552166020840152604083015260608201528160808201520190610c68565b90565b73ffffffffffffffffffffffffffffffffffffffff9080821660018103613bb15750506001541690565b909150600203613b8457503090565b90816020910312610bc057518015158103610bc05790565b9092919073ffffffffffffffffffffffffffffffffffffffff1680613c025750613b349192614681565b7f80000000000000000000000000000000000000000000000000000000000000008214613c35575b92613b3492936146ef565b9050604051927f70a08231000000000000000000000000000000000000000000000000000000008452306004850152602084602481855afa9384156110e357600094613c84575b509290613c2a565b6020813d8211613caf575b81613c9c6020938361392d565b8101031261095557519350613b34613c7c565b3d9150613c8f565b81810292918115918404141715611e0e57565b8115613cd4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b919273ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001693843b15610bc05760009484869281608496816040519b8c9a8b997f36c78516000000000000000000000000000000000000000000000000000000008b521660048a01521660248801521660448601521660648401525af180156110e357613b2b5750565b8051821015611e575760209160051b010190565b9190811015611e575760051b0190565b3573ffffffffffffffffffffffffffffffffffffffff81168103610bc05790565b91908203918211611e0e57565b92919073ffffffffffffffffffffffffffffffffffffffff8082163003613e21575050613b3492613bd8565b8084959411613e3557613b34941692613d03565b60046040517fc4bd89a9000000000000000000000000000000000000000000000000000000008152fd5b9173ffffffffffffffffffffffffffffffffffffffff93613f60916040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b16603482015260288152613ec281613911565b519020613f34604051938492602084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261392d565b5190201690565b73ffffffffffffffffffffffffffffffffffffffff8281169082161015613f8b5791565b9091565b51906dffffffffffffffffffffffffffff82168203610bc057565b90816060910312610bc057613fbe81613f8f565b916040613fcd60208401613f8f565b92015163ffffffff81168103610bc05790565b9260028210614456578115611e5757613ff884613dc7565b9160019481861015611e575791614016602094611c1a868601613dc7565b50926000935b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401851061404f575050505050505050565b61405d611cc4868685613db7565b9261406e611cc48a88018786613db7565b936040908151957f0902f1ac00000000000000000000000000000000000000000000000000000000875273ffffffffffffffffffffffffffffffffffffffff80941694606092600493808a86818b5afa998a1561256657908d9594939291600091829c614430575b50508780916dffffffffffffffffffffffffffff8091169c16921692168214998a60001461442a575b8651958680947f70a082310000000000000000000000000000000000000000000000000000000082528b8883015260249889915afa92831561441f578e6000946143ee575b5050808303918115938480156143e6575b6143be57826103e58086029586041491141715614391576141769083613cb7565b926103e88083029283041417156143645761419b929161419591614480565b90613cca565b971561435c57600097905b898b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe82018110156143505791611c1a611cc46141ec9360026142369c9601908d613db7565b8198917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613e5f565b965b988551918d83019367ffffffffffffffff948481108682111761432357885260008452813b15610bc05760008a936142b682968b519c8d97889687957f022c0d9f0000000000000000000000000000000000000000000000000000000087528d8701528d860152166044840152608060648401526084830190610c68565b03925af18015611dc357908d9695949392916142db575b50505050509401939161401c565b9091929380959650116142f757505052879038808080806142cd565b6041907f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b876041887f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b5050508b956000614238565b6000906141a6565b856011867f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b866011877f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b8689517f7b9c8916000000000000000000000000000000000000000000000000000000008152fd5b508115614155565b8181959293953d8311614418575b614406818361392d565b8101031261010f57505191388e614144565b503d6143fc565b87513d6000823e3d90fd5b906140ff565b899c50899250908161444d92903d1061221e5761220d818361392d565b509b90916140d6565b60046040517f61bbd2ab000000000000000000000000000000000000000000000000000000008152fd5b91908201809211611e0e57565b9182358301916144a7602084359581860195030185614480565b116111cf57565b9160208301358301916144a7602084359581860195030185614480565b9160608301358301916144a7602084359581860195030185614480565b7f80000000000000000000000000000000000000000000000000000000000000008114611e0e5760000390565b73ffffffffffffffffffffffffffffffffffffffff9283831684831611614679575b62ffffff90846040519481602087019516855216604085015216606083015260608252608082019082821067ffffffffffffffff8311176110ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80613f609183604052845190209361464c60a08201957f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000088917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6081018452018261392d565b909190614537565b600080809381935af11561469157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152fd5b91604460209260009273ffffffffffffffffffffffffffffffffffffffff604051927fa9059cbb000000000000000000000000000000000000000000000000000000008452166004830152602482015282855af19081601f3d116001600051141615166147bd575b501561475f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152fd5b3b153d171590503861475756fea164736f6c6343000811000a",
"deployedBytecode": "0x60a0604081815260049182361015610022575b505050361561002057600080fd5b005b600090813560e01c90816301ffc9a714610aaf57508063150b7a0214610a2257806324856bc3146109595780633593564c1461081c578063709a1cc2146105b8578063a8070710146101d6578063bc197c81146101125763f23a6e6103610012573461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f576100ba610b9d565b506100c3610bc5565b50608435906