@materia-dex/materia-contracts-core
Version:
Core contracts for the Materia protocol
317 lines • 261 kB
JSON
{
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "_defaultMateriaFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_defaultSwapFee",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "token0",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token1",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "pair",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "PairCreated",
"type": "event"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "allPairs",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "allPairsLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "tokenA",
"type": "address"
},
{
"internalType": "address",
"name": "tokenB",
"type": "address"
}
],
"name": "createPair",
"outputs": [
{
"internalType": "address",
"name": "pair",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "defaultMateriaFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "defaultSwapFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "feeTo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "getPair",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "_defaultMateriaFee",
"type": "uint256"
}
],
"name": "setDefaultMateriaFee",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "_defaultSwapFee",
"type": "uint256"
}
],
"name": "setDefaultSwapFee",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_feeTo",
"type": "address"
}
],
"name": "setFeeTo",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "pair",
"type": "address"
},
{
"internalType": "uint256",
"name": "materiaFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "setFees",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"evm": {
"bytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506040516141173803806141178339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600291909155600355614082806100956000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063c9c6539611610066578063c9c65396146101f2578063e6a439051461022d578063f2fde38b14610268578063f46901ed1461029b576100ea565b8063715018a6146101c5578063794366e6146101cd5780638da5cb5b146101ea576100ea565b80631e3dd18b116100c85780631e3dd18b1461017b5780632b730e6614610198578063334dc4f3146101a0578063574f2ba3146101bd576100ea565b8063017e7e58146100ef57806303df73961461012057806311f384721461013a575b600080fd5b6100f76102ce565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101286102ea565b60408051918252519081900360200190f35b6101796004803603606081101561015057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602081013590604001356102f0565b005b6100f76004803603602081101561019157600080fd5b503561043b565b61012861046f565b610179600480360360208110156101b657600080fd5b5035610475565b6101286104ea565b6101796104f0565b610179600480360360208110156101e357600080fd5b50356105cf565b6100f7610644565b6100f76004803603604081101561020857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610660565b6100f76004803603604081101561024357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610b37565b6101796004803603602081101561027e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b6a565b610179600480360360208110156102b157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610cd3565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60005473ffffffffffffffffffffffffffffffffffffffff163314610360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ffa6027913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166334e19907826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156103b357600080fd5b505af11580156103c7573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166352114eed836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b50505050505050565b6005818154811061044857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60025481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ffa6027913960400191505060405180910390fd5b600355565b60055490565b60005473ffffffffffffffffffffffffffffffffffffffff163314610560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ffa6027913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461063f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ffa6027913960400191505060405180910390fd5b600255565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146106d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ffa6027913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4d6174657269613a206964656e746963616c2061646472657373657300000000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106107a95783856107ac565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661083357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174657269613a207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600460209081526040808320858516845290915290205416156108d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4d6174657269613a207061697220616c72656164792065786973747300000000604482015290519081900360640190fd5b6060604051806020016108e690610d8a565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5600254600354604080517feb990c5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015260448201949094526064810192909252519297509087169163eb990c599160848082019260009290919082900301818387803b158015610a2857600080fd5b505af1158015610a3c573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526004602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560058054600181018255958190527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ffa6027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614021602d913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ffa6027913960400191505060405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61326280610d988339019056fe60806040526001600f5534801561001557600080fd5b5060405146908060526132108239604080519182900360520182208282018252600c83526b13585d195c9a5848141bdbdb60a21b6020938401528151808301835260018152603160f81b908401528151808401919091527f5bf44ff08b678ba2e1d520a1281c0c19551e8fe580343db7089f20aed9d6db64818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401908190528351939091019290922060035550600580546001600160a01b031916339081179091559081906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b031916331790556130c48061014c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063715018a61161012a578063ba9a7a56116100bd578063d505accf1161008c578063eb990c5911610071578063eb990c5914610707578063f2fde38b14610750578063fff6cae91461078357610226565b8063d505accf1461066e578063dd62ed3e146106cc57610226565b8063ba9a7a5614610623578063bc25cf771461062b578063c45a01551461065e578063d21220a71461066657610226565b80638da5cb5b116100f95780638da5cb5b146105d257806395d89b41146105da578063a9059cbb146105e2578063ba1b310c1461061b57610226565b8063715018a6146105435780637464fc3d1461054b5780637ecebe001461055357806389afcb441461058657610226565b8063313ce567116101bd57806354cf2aeb1161018c5780635a3d5493116101715780635a3d5493146104d55780636a627842146104dd57806370a082311461051057610226565b806354cf2aeb146104c55780635909c0d5146104cd57610226565b8063313ce5671461046557806334e19907146104835780633644e515146104a057806352114eed146104a857610226565b80630dfe1681116101f95780630dfe1681146103cf57806318160ddd1461040057806323b872dd1461041a57806330adf81f1461045d57610226565b8063022c0d9f1461022b57806306fdde03146102c65780630902f1ac14610343578063095ea7b314610382575b600080fd5b6102c46004803603608081101561024157600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561028557600080fd5b82018360208201111561029757600080fd5b803590602001918460018302840111640100000000831117156102b957600080fd5b50909250905061078b565b005b6102ce610e7d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103085781810151838201526020016102f0565b50505050905090810190601f1680156103355780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61034b610eb6565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103bb6004803603604081101561039857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f0b565b604080519115158252519081900360200190f35b6103d7610f22565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610408610f3e565b60408051918252519081900360200190f35b6103bb6004803603606081101561043057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610f44565b610408611023565b61046d611047565b6040805160ff9092168252519081900360200190f35b6102c46004803603602081101561049957600080fd5b503561104c565b6104086110c1565b6102c4600480360360208110156104be57600080fd5b50356110c7565b61040861113c565b610408611142565b610408611148565b610408600480360360208110156104f357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661114e565b6104086004803603602081101561052657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611508565b6102c461151a565b6104086115f9565b6104086004803603602081101561056957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115ff565b6105b96004803603602081101561059c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611611565b6040805192835260208301919091528051918290030190f35b6103d7611aae565b6102ce611aca565b6103bb600480360360408110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611b03565b610408611b10565b610408611b16565b6102c46004803603602081101561064157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b1c565b6103d7611d12565b6103d7611d2e565b6102c4600480360360e081101561068457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611d4a565b610408600480360360408110156106e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612016565b6102c46004803603608081101561071d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060600135612033565b6102c46004803603602081101561076657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612103565b6102c461226d565b600f546001146107fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f558415158061080f5750600084115b610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061301e6023913960400191505060405180910390fd5b60008061086f610eb6565b5091509150816dffffffffffffffffffffffffffff16871080156108a25750806dffffffffffffffffffffffffffff1686105b61090d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d6174657269613a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b600754600854600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061097257508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6109dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d6174657269613a20494e56414c49445f544f00000000000000000000000000604482015290519081900360640190fd5b8a156109ee576109ee828a8d612453565b89156109ff576109ff818a8c612453565b8615610ae1578873ffffffffffffffffffffffffffffffffffffffff16638b504dfa338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6020811015610b7757600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d6020811015610c1357600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610c3d576000610c53565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610c77576000610c8d565b89856dffffffffffffffffffffffffffff160383035b90506000821180610c9e5750600081115b610cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061306e6022913960400191505060405180910390fd5b6000610d2b610d0d600e548561266090919063ffffffff16565b610d1f876103e863ffffffff61266016565b9063ffffffff6126e616565b90506000610d47610d0d600e548561266090919063ffffffff16565b9050610d7f620f4240610d736dffffffffffffffffffffffffffff8b8116908b1663ffffffff61266016565b9063ffffffff61266016565b610d8f838363ffffffff61266016565b1015610dfc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4d6174657269613a204b00000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610e0a84848888612758565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600f55505050505050505050565b6040518060400160405280600c81526020017f4d61746572696120506f6f6c000000000000000000000000000000000000000081525081565b6009546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610f18338484612a14565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461100e5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610fdc908363ffffffff6126e616565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b611019848484612a83565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60055473ffffffffffffffffffffffffffffffffffffffff1633146110bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b600e55565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314611137576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b600d55565b600e5481565b600a5481565b600b5481565b6000600f546001146111c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f819055806111d1610eb6565b50600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561124b57600080fd5b505afa15801561125f573d6000803e3d6000fd5b505050506040513d602081101561127557600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156112ee57600080fd5b505afa158015611302573d6000803e3d6000fd5b505050506040513d602081101561131857600080fd5b50519050600061133e836dffffffffffffffffffffffffffff871663ffffffff6126e616565b90506000611362836dffffffffffffffffffffffffffff871663ffffffff6126e616565b905060006113708787612b64565b600054909150806113ad576113996103e8610d1f611394878763ffffffff61266016565b612cf4565b98506113a860006103e8612d46565b61140a565b6114076dffffffffffffffffffffffffffff89166113d1868463ffffffff61266016565b816113d857fe5b046dffffffffffffffffffffffffffff89166113fa868563ffffffff61266016565b8161140157fe5b04612df6565b98505b60008911611463576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612fd16026913960400191505060405180910390fd5b61146d8a8a612d46565b61147986868a8a612758565b81156114bb576009546114b7906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff61266016565b600c555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600f5550949695505050505050565b60016020526000908152604090205481565b60055473ffffffffffffffffffffffffffffffffffffffff16331461158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b60055460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5481565b60046020526000908152604090205481565b600080600f5460011461168557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f81905580611695610eb6565b50600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b15801561171757600080fd5b505afa15801561172b573d6000803e3d6000fd5b505050506040513d602081101561174157600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b1580156117b557600080fd5b505afa1580156117c9573d6000803e3d6000fd5b505050506040513d60208110156117df57600080fd5b5051306000908152600160205260408120549192506117fe8888612b64565b60005490915080611815848763ffffffff61266016565b8161181c57fe5b049a5080611830848663ffffffff61266016565b8161183757fe5b04995060008b11801561184a575060008a115b61189f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612fab6026913960400191505060405180910390fd5b6118a93084612e0e565b6118b4878d8d612453565b6118bf868d8c612453565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561192b57600080fd5b505afa15801561193f573d6000803e3d6000fd5b505050506040513d602081101561195557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156119c757600080fd5b505afa1580156119db573d6000803e3d6000fd5b505050506040513d60208110156119f157600080fd5b50519350611a0185858b8b612758565b8115611a4357600954611a3f906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff61266016565b600c555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600f81905550915091565b60055473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600281526020017f4d5000000000000000000000000000000000000000000000000000000000000081525081565b6000610f18338484612a83565b600d5481565b6103e881565b600f54600114611b8d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600754600854600954604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611c699285928792611c64926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b50519063ffffffff6126e616565b612453565b600954604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611d089284928792611c64926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b158015611c2c57600080fd5b50506001600f5550565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611db957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d6174657269613a204558504952454400000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611f1a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611f9557508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61200057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d6174657269613a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61200b898989612a14565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b60055473ffffffffffffffffffffffffffffffffffffffff1633146120a3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b6007805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556008805494909516931692909217909255600d91909155600e55565b60055473ffffffffffffffffffffffffffffffffffffffff163314612173576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166121df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613041602d913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600f546001146122de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905161244c9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561235557600080fd5b505afa158015612369573d6000803e3d6000fd5b505050506040513d602081101561237f57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156123f257600080fd5b505afa158015612406573d6000803e3d6000fd5b505050506040513d602081101561241c57600080fd5b50516009546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612758565b6001600f55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061255957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161251c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146125bb576040519150601f19603f3d011682016040523d82523d6000602084013e6125c0565b606091505b50915091508180156125ee5750805115806125ee57508080602001905160208110156125eb57600080fd5b50515b61265957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d6174657269613a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b600081158061267b5750508082028282828161267857fe5b04145b610f1c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610f1c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061278457506dffffffffffffffffffffffffffff8311155b6127ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d6174657269613a204f564552464c4f57000000000000000000000000000000604482015290519081900360640190fd5b60095463ffffffff428116917c01000000000000000000000000000000000000000000000000000000009004811682039081161580159061283f57506dffffffffffffffffffffffffffff841615155b801561285a57506dffffffffffffffffffffffffffff831615155b1561290a578063ffffffff1661289d8561287386612ed3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612ef716565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff81166128dd8461287387612ed3565b600b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600980547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612ab9908263ffffffff6126e616565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612afb908263ffffffff612f3816565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015612bcf57600080fd5b505afa158015612be3573d6000803e3d6000fd5b505050506040513d6020811015612bf957600080fd5b5051600c5473ffffffffffffffffffffffffffffffffffffffff8216158015945091925090612ce0578015612cdb576000612c506113946dffffffffffffffffffffffffffff88811690881663ffffffff61266016565b90506000612c5d83612cf4565b905080821115612cd8576000612c8b612c7c848463ffffffff6126e616565b6000549063ffffffff61266016565b90506000612cb483612ca8600d548761266090919063ffffffff16565b9063ffffffff612f3816565b90506000818381612cc157fe5b0490508015612cd457612cd48782612d46565b5050505b50505b612cec565b8015612cec576000600c555b505092915050565b60006003821115612d37575080600160028204015b81811015612d3157809150600281828581612d2057fe5b040181612d2957fe5b049050612d09565b50612d41565b8115612d41575060015b919050565b600054612d59908263ffffffff612f3816565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612d91908263ffffffff612f3816565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612e055781612e07565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054612e44908263ffffffff6126e616565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612e7e908263ffffffff6126e616565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612f3057fe5b049392505050565b80820182811015610f1c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe4d6174657269613a20494e53554646494349454e545f4c49515549444954595f4255524e45444d6174657269613a20494e53554646494349454e545f4c49515549444954595f4d494e5445444d6174657269614f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724d6174657269613a20494e53554646494349454e545f4f55545055545f414d4f554e544d6174657269614f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d6174657269613a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a72315820d89178dcfbd84048b6c0365ba6214f159e51a42621662b2fac9d84774b499f1e64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294d6174657269614f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724d6174657269614f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820192589e82e1fa3cd7319825e2d26980f477ab7f123ca1433de0d38e3d4dec56e64736f6c63430005100032",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x4117 CODESIZE SUB DUP1 PUSH2 0x4117 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x2 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x3 SSTORE PUSH2 0x4082 DUP1 PUSH2 0x95 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xC9C65396 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x22D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x29B JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0x794366E6 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1EA JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x1E3DD18B GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x2B730E66 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x334DC4F3 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x1BD JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x3DF7396 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x11F38472 EQ PUSH2 0x13A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x2CE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x128 PUSH2 0x2EA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x179 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x2F0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x43B JUMP JUMPDEST PUSH2 0x128 PUSH2 0x46F JUMP JUMPDEST PUSH2 0x179 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x475 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x4EA JUMP JUMPDEST PUSH2 0x179 PUSH2 0x4F0 JUMP JUMPDEST PUSH2 0x179 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5CF JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x644 JUMP JUMPDEST PUSH2 0xF7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x660 JUMP JUMPDEST PUSH2 0xF7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xB37 JUMP JUMPDEST PUSH2 0x179 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB6A JUMP JUMPDEST PUSH2 0x179 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCD3 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3FFA PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x34E19907 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x52114EED DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x41E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x448 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3FFA PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x560 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3FFA PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x63F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3FFA PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x6D1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3FFA PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x76C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D6174657269613A206964656E746963616C2061646472657373657300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x7A9 JUMPI DUP4 DUP6 PUSH2 0x7AC JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x833 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D6174657269613A207A65726F20616464726573730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x8D4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D6174657269613A207061697220616C72656164792065786973747300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x8E6 SWAP1 PUSH2 0xD8A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP