@daofi/uniswap-v2-core
Version:
🎛 Core contracts for the UniswapV2 protocol
224 lines • 268 kB
JSON
{
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_feeToSetter",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"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"
},
{
"internalType": "address",
"name": "baseToken",
"type": "address"
},
{
"internalType": "address",
"name": "pairOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "m",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "n",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "createPair",
"outputs": [
{
"internalType": "address",
"name": "pair",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "feeTo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "feeToSetter",
"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": false,
"inputs": [
{
"internalType": "address",
"name": "_feeTo",
"type": "address"
}
],
"name": "setFeeTo",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_feeToSetter",
"type": "address"
}
],
"name": "setFeeToSetter",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"evm": {
"bytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506040516143e83803806143e883398101604081905261002f91610065565b600180546001600160a01b0319166001600160a01b03929092169190911790556100b3565b805161005f8161009c565b92915050565b60006020828403121561007757600080fd5b60006100838484610054565b949350505050565b60006001600160a01b03821661005f565b6100a58161008b565b81146100b057600080fd5b50565b614326806100c26000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c8063574f2ba31162000063578063574f2ba314620000f3578063a2e74af6146200010c578063e6a439051462000125578063f46901ed146200013c5762000094565b8063017e7e581462000099578063094b741514620000bb5780631e3dd18b14620000c5578063419f5ef514620000dc575b600080fd5b620000a362000153565b604051620000b291906200094e565b60405180910390f35b620000a36200016f565b620000a3620000d6366004620007e6565b6200018b565b620000a3620000ed3660046200073b565b620001c0565b620000fd62000536565b604051620000b2919062000a42565b620001236200011d366004620006d3565b6200053c565b005b620000a362000136366004620006fc565b620005d7565b620001236200014d366004620006d3565b6200060a565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b600381815481106200019957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60008673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141562000234576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b90620009fa565b60405180910390fd5b6000808873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16106200027357888a62000276565b89895b909250905073ffffffffffffffffffffffffffffffffffffffff8216620002cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b9062000a30565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600260209081526040808320858516845290915290205416156200033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b9062000a1e565b6060604051806020016200034e90620006a5565b6020820181038252601f19601f820116604052509050600083836040516020016200037b92919062000924565b604051602081830303815290604052805190602001209050808251602084016000f56040517fe77fc7a400000000000000000000000000000000000000000000000000000000815290955073ffffffffffffffffffffffffffffffffffffffff86169063e77fc7a4906200040090879087908f908f908f908f908f906004016200095e565b600060405180830381600087803b1580156200041b57600080fd5b505af115801562000430573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff00000000000000000000000000000000000000009889168117909155938352818520868652909252808420805487168417905560038054600181018255948190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9094018054909616909217909455905490517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9916200051f918a9190620009d4565b60405180910390a350505050979650505050505050565b60035490565b60015473ffffffffffffffffffffffffffffffffffffffff16331462000590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b9062000a0c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1633146200065e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b9062000a0c565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61382d8062000ab783390190565b8035620006c08162000a91565b92915050565b8035620006c08162000aab565b600060208284031215620006e657600080fd5b6000620006f48484620006b3565b949350505050565b600080604083850312156200071057600080fd5b60006200071e8585620006b3565b92505060206200073185828601620006b3565b9150509250929050565b600080600080600080600060e0888a0312156200075757600080fd5b6000620007658a8a620006b3565b9750506020620007788a828b01620006b3565b96505060406200078b8a828b01620006b3565b95505060606200079e8a828b01620006b3565b9450506080620007b18a828b01620006c6565b93505060a0620007c48a828b01620006c6565b92505060c0620007d78a828b01620006c6565b91505092959891949750929550565b600060208284031215620007f957600080fd5b6000620006f48484620006c6565b620008128162000a5b565b82525050565b62000812620008278262000a5b565b62000a7d565b60006200083c601e8362000a52565b7f556e697377617056323a204944454e544943414c5f4144445245535345530000815260200192915050565b60006200087760148362000a52565b7f556e697377617056323a20464f5242494444454e000000000000000000000000815260200192915050565b6000620008b260168362000a52565b7f556e697377617056323a20504149525f45584953545300000000000000000000815260200192915050565b6000620008ed60178362000a52565b7f556e697377617056323a205a45524f5f41444452455353000000000000000000815260200192915050565b620008128162000a7a565b600062000932828562000818565b60148201915062000944828462000818565b5060140192915050565b60208101620006c0828462000807565b60e081016200096e828a62000807565b6200097d602083018962000807565b6200098c604083018862000807565b6200099b606083018762000807565b620009aa608083018662000919565b620009b960a083018562000919565b620009c860c083018462000919565b98975050505050505050565b60408101620009e4828562000807565b620009f3602083018462000919565b9392505050565b60208082528101620006c0816200082d565b60208082528101620006c08162000868565b60208082528101620006c081620008a3565b60208082528101620006c081620008de565b60208101620006c0828462000919565b90815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8216620006c0565b90565b6000620006c0826000620006c08260601b90565b62000a9c8162000a5b565b811462000aa857600080fd5b50565b62000a9c8162000a7a56fe608060405260016011553480156200001657600080fd5b50604051469062000027906200019a565b604080519182900382208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401529051620000b8927fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738917fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6918691309101620001ad565b60408051601f1981840301815291905280516020909101206003908155600580546001600160a01b03191633179055670de0b6b3a7640000600a556001600b55600c555062000224565b6200010d8162000208565b82525050565b6200010d8162000215565b60006200012d60528362000203565b7f454950373132446f6d61696e28737472696e67206e616d652c737472696e672081527f76657273696f6e2c75696e7432353620636861696e49642c6164647265737320602082015271766572696679696e67436f6e74726163742960701b604082015260520192915050565b6000620001a7826200011e565b92915050565b60a08101620001bd828862000113565b620001cc602083018762000113565b620001db604083018662000113565b620001ea606083018562000113565b620001f9608083018462000102565b9695505050505050565b919050565b6000620001a78262000218565b90565b6001600160a01b031690565b6135f980620002346000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c806370a0823111610160578063c45a0155116100d8578063d505accf1161008c578063ddca3f4311610071578063ddca3f4314610491578063e77fc7a414610499578063fff6cae9146104ac57610277565b8063d505accf1461046b578063dd62ed3e1461047e57610277565b8063c5700a02116100bd578063c5700a0214610446578063ce51fc5a1461045b578063d21220a71461046357610277565b8063c45a015514610436578063c55dae631461043e57610277565b806389afcb441161012f578063a9059cbb11610114578063a9059cbb14610408578063ba9a7a561461041b578063bc25cf771461042357610277565b806389afcb44146103df57806395d89b411461040057610277565b806370a08231146103a95780637464fc3d146103bc5780637ecebe00146103c4578063808413fa146103d757610277565b80632ec2fe3d116101f35780635909c0d5116101c25780635a2ee019116101a75780635a2ee019146103865780635a3d54931461038e5780636a6278421461039657610277565b80635909c0d51461036b5780635a0ce6761461037357610277565b80632ec2fe3d1461033e57806330adf81f14610346578063313ce5671461034e5780633644e5151461036357610277565b80630dfe16811161024a57806323b872dd1161022f57806323b872dd146103105780632dd2a921146103235780632e52d6061461033657610277565b80630dfe1681146102e657806318160ddd146102fb57610277565b8063022c0d9f1461027c57806306fdde03146102915780630902f1ac146102af578063095ea7b3146102c6575b600080fd5b61028f61028a366004612aa1565b6104b4565b005b610299610a69565b6040516102a691906132f8565b60405180910390f35b6102b7610aa2565b6040516102a693929190613454565b6102d96102d4366004612a35565b610af7565b6040516102a69190613272565b6102ee610b0e565b6040516102a691906131c5565b610303610b2a565b6040516102a69190613280565b6102d961031e36600461297d565b610b30565b61028f610331366004612863565b610c10565b610303610ca8565b6102ee610cae565b610303610cca565b610356610cee565b6040516102a691906134a6565b610303610cf3565b610303610cf9565b61028f610381366004612b1f565b610cff565b610303610d5e565b610303610d64565b6103036103a4366004612863565b610d6a565b6103036103b7366004612863565b6110f9565b61030361110b565b6103036103d2366004612863565b611111565b610299611123565b6103f26103ed366004612863565b611172565b6040516102a692919061347c565b6102996115d9565b6102d9610416366004612a35565b611612565b61030361161f565b61028f610431366004612863565b611625565b6102ee6117b4565b6102ee6117d0565b61044e6117ec565b6040516102a69190613498565b610303611818565b6102ee611824565b61028f6104793660046129ca565b611840565b61030361048c3660046128a7565b611a35565b610303611a52565b61028f6104a73660046128e1565b611a58565b61028f611bed565b6011546001146104f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b60405180910390fd5b60006011558415158061050c5750600084115b610542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613319565b60008061054d610aa2565b5091509150816dffffffffffffffffffffffffffff16871080156105805750806dffffffffffffffffffffffffffff1686105b6105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613399565b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061061b57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613359565b8a1561066257610662828a8d611db1565b891561067357610673818a8c611db1565b8615610706576040517f10d1e85c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16906310d1e85c906106d39033908f908f908e908e906004016131d3565b600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b505050505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906370a08231906107589030906004016131c5565b60206040518083038186803b15801561077057600080fd5b505afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a89190810190612a83565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290945073ffffffffffffffffffffffffffffffffffffffff8216906370a08231906107fd9030906004016131c5565b60206040518083038186803b15801561081557600080fd5b505afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061084d9190810190612a83565b92505050600089856dffffffffffffffffffffffffffff16038311610873576000610889565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff160383116108ad5760006108c3565b89856dffffffffffffffffffffffffffff160383035b905060008211806108d45750600081115b61090a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613339565b6000610942610924600c5485611f6890919063ffffffff16565b610936876103e863ffffffff611f6816565b9063ffffffff611fb916565b9050600061095e610924600c5485611f6890919063ffffffff16565b9050610996620f424061098a6dffffffffffffffffffffffffffff8b8116908b1663ffffffff611f6816565b9063ffffffff611f6816565b6109a6838363ffffffff611f6816565b10156109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133c9565b50506109ec84848888611ff6565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284848f8f604051610a4f949392919061348a565b60405180910390a350506001601155505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b600d546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610b0433848461227a565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610bfa5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610bc8908363ffffffff611fb916565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610c058484846122ef565b5060015b9392505050565b60095473ffffffffffffffffffffffffffffffffffffffff163314610c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133f9565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600b5481565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b600e5481565b60095473ffffffffffffffffffffffffffffffffffffffff163314610d50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133f9565b600a92909255600b55600c55565b600a5481565b600f5481565b6000601154600114610da8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b6000601181905580610db8610aa2565b506006546040517f70a0823100000000000000000000000000000000000000000000000000000000815292945090925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190610e189030906004016131c5565b60206040518083038186803b158015610e3057600080fd5b505afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e689190810190612a83565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190610ec49030906004016131c5565b60206040518083038186803b158015610edc57600080fd5b505afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f149190810190612a83565b90506000610f38836dffffffffffffffffffffffffffff871663ffffffff611fb916565b90506000610f5c836dffffffffffffffffffffffffffff871663ffffffff611fb916565b90506000610f6a87876123c6565b60005490915080610fa757610f936103e8610936610f8e878763ffffffff611f6816565b61255e565b9850610fa260006103e86125b0565b611004565b6110016dffffffffffffffffffffffffffff8916610fcb868463ffffffff611f6816565b81610fd257fe5b046dffffffffffffffffffffffffffff8916610ff4868563ffffffff611f6816565b81610ffb57fe5b04612663565b98505b6000891161103e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133e9565b6110488a8a6125b0565b61105486868a8a611ff6565b811561109657600d54611092906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff611f6816565b6010555b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f85856040516110de92919061347c565b60405180910390a25050600160115550949695505050505050565b60016020526000908152604090205481565b60105481565b60046020526000908152604090205481565b600854600a54600b54600c5460405160609461115e9473ffffffffffffffffffffffffffffffffffffffff9091169390929091602001613234565b604051602081830303815290604052905090565b6000806011546001146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b60006011819055806111c1610aa2565b506006546007546040517f70a0823100000000000000000000000000000000000000000000000000000000815293955091935073ffffffffffffffffffffffffffffffffffffffff9081169291169060009083906370a08231906112299030906004016131c5565b60206040518083038186803b15801561124157600080fd5b505afa158015611255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112799190810190612a83565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112b691906131c5565b60206040518083038186803b1580156112ce57600080fd5b505afa1580156112e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113069190810190612a83565b3060009081526001602052604081205491925061132388886123c6565b6000549091508061133a848763ffffffff611f6816565b8161134157fe5b049a5080611355848663ffffffff611f6816565b8161135c57fe5b04995060008b11801561136f575060008a115b6113a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133d9565b6113af3084612679565b6113ba878d8d611db1565b6113c5868d8c611db1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816906370a08231906114179030906004016131c5565b60206040518083038186803b15801561142f57600080fd5b505afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114679190810190612a83565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290955073ffffffffffffffffffffffffffffffffffffffff8716906370a08231906114bc9030906004016131c5565b60206040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061150c9190810190612a83565b935061151a85858b8b611ff6565b811561155c57600d54611558906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff611f6816565b6010555b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d6040516115bb92919061347c565b60405180910390a35050505050505050506001601181905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610b043384846122ef565b6103e881565b601154600114611661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b6000601155600654600754600d546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416939092169161173c9184918691611737916dffffffffffffffffffffffffffff9091169084906370a08231906116e79030906004016131c5565b60206040518083038186803b1580156116ff57600080fd5b505afa158015611713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109369190810190612a83565b611db1565b6117aa8184611737600d600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116e791906131c5565b5050600160115550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b600d547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1681565b670de0b6b3a764000081565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561187a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133a9565b60035473ffffffffffffffffffffffffffffffffffffffff8816600090815260046020908152604080832080546001810190915590519293926118e8927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d910161328e565b6040516020818303038152906040528051906020012060405160200161190f929190613194565b60405160208183030381529060405280519060200120905060006001828686866040516000815260200160405260405161194c94939291906132dd565b6020604051602081039080840390855afa15801561196e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906119e957508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613379565b611a2a89898961227a565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c5481565b60055473ffffffffffffffffffffffffffffffffffffffff163314611aa9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133f9565b81600114611ae3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613419565b6001831015611b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613369565b60018110158015611b305750600a8111155b611b66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613329565b6006805473ffffffffffffffffffffffffffffffffffffffff9889167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556007805497891697821697909717909655600880549588169587169590951790945560098054939096169290941691909117909355600a92909255600b55600c55565b601154600114611c29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b60006011556006546040517f70a08231000000000000000000000000000000000000000000000000000000008152611daa9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611c869030906004016131c5565b60206040518083038186803b158015611c9e57600080fd5b505afa158015611cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cd69190810190612a83565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190611d2c9030906004016131c5565b60206040518083038186803b158015611d4457600080fd5b505afa158015611d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d7c9190810190612a83565b600d546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416611ff6565b6001601155565b604080518082018252601981527f7472616e7366657228616464726573732c75696e7432353629000000000000006020909101525160009060609073ffffffffffffffffffffffffffffffffffffffff8616907fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b90611e369087908790602401613219565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611ebf9190613188565b6000604051808303816000865af19150503d8060008114611efc576040519150601f19603f3d011682016040523d82523d6000602084013e611f01565b606091505b5091509150818015611f2b575080511580611f2b575080806020019051611f2b9190810190612a65565b611f61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613429565b5050505050565b6000811580611f8357505080820282828281611f8057fe5b04145b610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613349565b80820382811115610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613309565b6dffffffffffffffffffffffffffff841180159061202257506dffffffffffffffffffffffffffff8311155b612058576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613409565b600d5463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906120a857506dffffffffffffffffffffffffffff841615155b80156120c357506dffffffffffffffffffffffffffff831615155b15612173578063ffffffff16612106856120dc86612736565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff61275a16565b600e80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612146846120dc87612736565b600f80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600d80547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff87160217928390556040517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad19361226a93818116939091041690613439565b60405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906122e2908590613280565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612325908263ffffffff611fb916565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612367908263ffffffff61279b16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122e2908590613280565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561243157600080fd5b505afa158015612445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124699190810190612889565b60105473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061254a5780156125455760006124be610f8e6dffffffffffffffffffffffffffff88811690881663ffffffff611f6816565b905060006124cb8361255e565b9050808211156125425760006124f96124ea848463ffffffff611fb916565b6000549063ffffffff611f6816565b9050600061251e8361251286600563ffffffff611f6816565b9063ffffffff61279b16565b9050600081838161252b57fe5b049050801561253e5761253e87826125b0565b5050505b50505b612556565b80156125565760006010555b505092915050565b600060038211156125a1575080600160028204015b8181101561259b5780915060028182858161258a57fe5b04018161259357fe5b049050612573565b506125ab565b81156125ab575060015b919050565b6000546125c3908263ffffffff61279b16565b600090815573ffffffffffffffffffffffffffffffffffffffff83168152600160205260409020546125fb908263ffffffff61279b16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612657908590613280565b60405180910390a35050565b60008183106126725781610c09565b5090919050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546126af908263ffffffff611fb916565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546126e9908263ffffffff611fb916565b600090815560405173ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612657908590613280565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff84168161279357fe5b049392505050565b80820182811015610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613389565b8035610b0881613584565b8051610b0881613584565b8051610b088161359b565b8035610b08816135a4565b60008083601f84011261281657600080fd5b50813567ffffffffffffffff81111561282e57600080fd5b60208301915083600182028301111561284657600080fd5b9250929050565b8051610b08816135a4565b8035610b08816135ad565b60006020828403121561287557600080fd5b600061288184846127d8565b949350505050565b60006020828403121561289b57600080fd5b600061288184846127e3565b600080604083850312156128ba57600080fd5b60006128c685856127d8565b92505060206128d7858286016127d8565b9150509250929050565b600080600080600080600060e0888a0312156128fc57600080fd5b60006129088a8a6127d8565b97505060206129198a828b016127d8565b965050604061292a8a828b016127d8565b955050606061293b8a828b016127d8565b945050608061294c8a828b016127f9565b93505060a061295d8a828b016127f9565b92505060c061296e8a828b016127f9565b91505092959891949750929550565b60008060006060848603121561299257600080fd5b600061299e86866127d8565b93505060206129af868287016127d8565b92505060406129c0868287016127f9565b9150509250925092565b600080600080600080600060e0888a0312156129e557600080fd5b60006129f18a8a6127d8565b9750506020612a028a828b016127d8565b9650506040612a138a828b016127f9565b9550506060612a248a828b016127f9565b945050608061294c8a828b01612858565b60008060408385031215612a4857600080fd5b6000612a5485856127d8565b92505060206128d7858286016127f9565b600060208284031215612a7757600080fd5b600061288184846127ee565b600060208284031215612a9557600080fd5b6000612881848461284d565b600080600080600060808688031215612ab957600080fd5b6000612ac588886127f9565b9550506020612ad6888289016127f9565b9450506040612ae7888289016127d8565b935050606086013567ffffffffffffffff811115612b0457600080fd5b612b1088828901612804565b92509250509295509295909350565b600080600060608486031215612b3457600080fd5b6000612b4086866127f9565b93505060206129af868287016127f9565b612b5a8161350f565b82525050565b612b5a816134c1565b612b5a816134cc565b612b5a816134d1565b612b5a612b87826134d1565b6134d1565b6000612b9883856134b8565b9350612ba5838584613520565b612bae8361355c565b9093019392505050565b6000612bc3826134b4565b612bcd81856134b8565b9350612bdd81856020860161352c565b612bae8161355c565b6000612bf1826134b4565b612bfb81856125ab565b9350612c0b81856020860161352c565b9290920192915050565b6000612c226015836134b8565b7f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000815260200192915050565b6000612c5b6025836134b8565b7f556e697377617056323a20494e53554646494349454e545f4f55545055545f4181527f4d4f554e54000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612cba6025836134b8565b7f556e697377617056323a20666565206d757374206265203e3d203120616e642081527f3c3d203130000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612d196024836134b8565b7f556e697377617056323a20494e53554646494349454e545f494e5055545f414d81527f4f554e5400000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612d786014836134b8565b7f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000815260200192915050565b6000612db16015836134b8565b7f556e697377617056323a20494e56414c49445f544f0000000000000000000000815260200192915050565b6000612dea601d836134b8565b7f556e697377617056323a20736c6f7065206d757374206265203e3d2031000000815260200192915050565b6000612e23601c836134b8565b7f556e697377617056323a20494e56414c49445f5349474e415455524500000000815260200192915050565b6000612e5c6002836125ab565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b6000612e956014836134b8565b7f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000815260200192915050565b6000612ece6021836134b8565b7f556e697377617056323a20494e53554646494349454e545f4c4951554944495481527f5900000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612f2d6012836134b8565b7f556e697377617056323a20455850495245440000000000000000000000000000815260200192915050565b6000612f666011836134b8565b7f556e697377617056323a204c4f434b4544000000000000000000000000000000815260200192915050565b6000612f9f600c836134b8565b7f556e697377617056323a204b0000000000000000000000000000000000000000815260200192915050565b6000612fd86028836134b8565b7f556e697377617056323a20494e53554646494349454e545f4c4951554944495481527f595f4255524e4544000000000000000000000000000000000000000000000000602082015260400192915050565b60006130376028836134b8565b7f556e697377617056323a20494e53554646494349454e545f4c4951554944495481527f595f4d494e544544000000000000000000000000000000000000000000000000602082015260400192915050565b60006130966014836134b8565b7f556e697377617056323a20464f5242494444454e000000000000000000000000815260200192915050565b60006130cf6013836134b8565b7f556e697377617056323a204f564552464c4f5700000000000000000000000000815260200192915050565b60006131086020836134b8565b7f556e697377617056323a206578706f6e656e74206d757374206265203d3d2031815260200192915050565b6000613141601a836134b8565b7f556e697377617056323a205452414e534645525f4641494c4544000000000000815260200192915050565b612b5a816134d4565b612b5a81613500565b612b5a81613509565b6000610c098284612be6565b600061319f82612e4f565b91506131ab8285612b7b565b6020820191506131bb8284612b7b565b5060200192915050565b60208101610b088284612b60565b608081016131e18288612b51565b6131ee6020830187612b72565b6131fb6040830186612b72565b818103606083015261320e818486612b8c565b979650505050505050565b604081016132278285612b60565b610c096020830184612b72565b608081016132428287612b60565b61324f6020830186612b72565b61325c6040830185612b72565b6132696060830184612b72565b95945050505050565b60208101610b088284612b69565b60208101610b088284612b72565b60c0810161329c8289612b72565b6132a96020830188612b60565b6132b66040830187612b60565b6132c36060830186612b72565b6132d06080830185612b72565b61320e60a0830184612b72565b608081016132eb8287612b72565b61324f602083018661317f565b60208082528101610c098184612bb8565b60208082528101610b0881612c15565b60208082528101610b0881612c4e565b60208082528101610b0881612cad565b60208082528101610b0881612d0c565b60208082528101610b0881612d6b565b60208082528101610b0881612da4565b60208082528101610b0881612ddd565b60208082528101610b0881612e16565b60208082528101610b0881612e88565b60208082528101610b0881612ec1565b60208082528101610b0881612f20565b60208082528101610b0881612f59565b60208082528101610b0881612f92565b60208082528101610b0881612fcb565b60208082528101610b088161302a565b60208082528101610b0881613089565b60208082528101610b08816130c2565b60208082528101610b08816130fb565b60208082528101610b0881613134565b60408101613447828561316d565b610c09602083018461316d565b60608101613462828661316d565b61346f602083018561316d565b6128816040830184613176565b604081016132278285612b72565b608081016132428287612b72565b60208101610b088284613176565b60208101610b08828461317f565b5190565b90815260200190565b6000610b08826134e7565b151590565b90565b6dffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6000610b08826000610b08826134c1565b82818337506000910152565b60005b8381101561354757818101518382015260200161352f565b83811115613556576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b61358d816134c1565b811461359857600080fd5b50565b61358d816134cc565b61358d816134d1565b61358d8161350956fea365627a7a723158200a93a5da13bb9ac7561d6ab259f0c416e79d014e32fdabce8bdbee93f91c25056c6578706572696d656e74616cf564736f6c63430005100040a365627a7a72315820502c9577166641960b83695f91af12cedf7aefc968c56efa6b650706c7e2c15c6c6578706572696d656e74616cf564736f6c63430005100040",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x43E8 CODESIZE SUB DUP1 PUSH2 0x43E8 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x65 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xB3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5F DUP2 PUSH2 0x9C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x83 DUP5 DUP5 PUSH2 0x54 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5F JUMP JUMPDEST PUSH2 0xA5 DUP2 PUSH2 0x8B JUMP JUMPDEST DUP2 EQ PUSH2 0xB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x4326 DUP1 PUSH2 0xC2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH3 0x94 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x574F2BA3 GT PUSH3 0x63 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH3 0xF3 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH3 0x10C JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH3 0x125 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH3 0x13C JUMPI PUSH3 0x94 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH3 0x99 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH3 0xBB JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH3 0xC5 JUMPI DUP1 PUSH4 0x419F5EF5 EQ PUSH3 0xDC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xA3 PUSH3 0x153 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xB2 SWAP2 SWAP1 PUSH3 0x94E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0xA3 PUSH3 0x16F JUMP JUMPDEST PUSH3 0xA3 PUSH3 0xD6 CALLDATASIZE PUSH1 0x4 PUSH3 0x7E6 JUMP JUMPDEST PUSH3 0x18B JUMP JUMPDEST PUSH3 0xA3 PUSH3 0xED CALLDATASIZE PUSH1 0x4 PUSH3 0x73B JUMP JUMPDEST PUSH3 0x1C0 JUMP JUMPDEST PUSH3 0xFD PUSH3 0x536 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xB2 SWAP2 SWAP1 PUSH3 0xA42 JUMP JUMPDEST PUSH3 0x123 PUSH3 0x11D CALLDATASIZE PUSH1 0x4 PUSH3 0x6D3 JUMP JUMPDEST PUSH3 0x53C JUMP JUMPDEST STOP JUMPDEST PUSH3 0xA3 PUSH3 0x136 CALLDATASIZE PUSH1 0x4 PUSH3 0x6FC JUMP JUMPDEST PUSH3 0x5D7 JUMP JUMPDEST PUSH3 0x123 PUSH3 0x14D CALLDATASIZE PUSH1 0x4 PUSH3 0x6D3 JUMP JUMPDEST PUSH3 0x60A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH3 0x199 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH3 0x234 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x22B SWAP1 PUSH3 0x9FA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH3 0x273 JUMPI DUP9 DUP11 PUSH3 0x276 JUMP JUMPDEST DUP10 DUP10 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH3 0x2CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x22B SWAP1 PUSH3 0xA30 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH3 0x33A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x22B SWAP1 PUSH3 0xA1E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH3 0x34E SWAP1 PUSH3 0x6A5 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x37B SWAP3 SWAP2 SWAP1 PUSH3 0x924 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 MLOAD PUSH32 0xE77FC7A400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP6 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH4 0xE77FC7A4 SWAP1 PUSH3 0x400 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP16 SWAP1 DUP16 SWAP1 DUP16 SWAP1 DUP16 SWAP1 DUP16 SWAP1 PUSH1 0x4 ADD PUSH3 0x95E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x430 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE SWAP1 SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND DUP5 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP5 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP5 ADD DUP1 SLOAD SWAP1 SWAP7 AND SWAP1 SWAP3 OR SWAP1 SWAP5 SSTORE SWAP1 SLOAD SWAP1 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP2 PUSH3 0x51F SWAP2 DUP11 SWAP2 SWAP1 PUSH3 0x9D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH3 0x590 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x22B SWAP1 PUSH3 0xA0C JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH3 0x65E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x22B SWAP1 PUSH3 0xA0C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x382D DUP1 PUSH3 0xAB7 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH3 0x6C0 DUP2 PUSH3 0xA91 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH3 0x6C0 DUP2 PUSH3 0xAAB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x6E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x6F4 DUP5 DUP5 PUSH3 0x6B3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x71E DUP6 DUP6 PUSH3 0x6B3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH3 0x731 DUP6 DUP3 DUP7 ADD PUSH3 0x6B3 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH3 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x765 DUP11 DUP11 PUSH3 0x6B3 JUMP JUMPDEST SWAP8 POP POP PUSH1 0x20 PUSH3 0x778 DUP11 DUP3 DUP12 ADD PUSH3 0x6B3 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x40 PUSH3 0x78B DUP11 DUP3 DUP12 ADD PUSH3 0x6B3 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x60 PUSH3 0x79E DUP11 DUP3 DUP12 ADD PUSH3 0x6B3 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x80 PUSH3 0x7B1 DUP11 DUP3 DUP12 ADD PUSH3 0x6C6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xA0 PUSH3 0x7C4 DUP11 DUP3 DUP12 ADD PUSH3 0x6C6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xC0 PUSH3 0x7D7 DUP11 DUP3 DUP12 ADD PUSH3 0x6C6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x6F4 DUP5 DUP5 PUSH3 0x6C6 JUMP JUMPDEST PUSH3 0x812 DUP2 PUSH3 0xA5B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x812 PUSH3 0x827 DUP3 PUSH3 0xA5B JUMP JUMPDEST PUSH3 0xA7D JUMP JUMPDEST PUSH1 0x0 PUSH3 0x83C PUSH1 0x1E DUP4 PUSH3 0xA52 JUMP JUMPDEST PUSH32 0x556E697377617056323A204944454E544943414C5F4144445245535345530000 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x877 PUSH1 0x14 DUP4 PUSH3 0xA52 JUMP JUMPDEST PUSH32 0x556E697377617056323A20464F5242494444454E000000000000000000000000 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x8B2 PUSH1 0x16 DUP4 PUSH3 0xA52 JUMP JUMPDEST PUSH32 0x556E697377617056323A20504149525F45584953545300000000000000000000 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x8ED PUSH1 0x17 DUP4 PUSH3 0xA52 JUMP JUMPDEST PUSH32 0x556E697377617056323A205A45524F5F41444452455353000000000000000000 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH3 0x812 DUP2 PUSH3 0xA7A JUMP JUMPDEST PUSH1 0x0 PUSH3 0x932 DUP3 DUP6 PUSH3 0x818 JUMP JUMPDEST PUSH1 0x14 DUP3 ADD SWAP2 POP PUSH3 0x944 DUP3 DUP5 PUSH3 0x818 JUMP JUMPDEST POP PUSH1 0x14 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH3 0x6C0 DUP3 DUP5 PUSH3 0x807 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD PUSH3 0x96E DUP3 DUP11 PUSH3 0x807 JUMP JUMPDEST PUSH3 0x97D PUSH1 0x20 DUP4 ADD DUP10 PUSH3 0x807 JUMP JUMPDEST PUSH3 0x98C PUSH1 0x40 DUP4 ADD DUP9 PUSH3 0x807 JUMP JUMPDEST PUSH3 0x99B PUSH1 0x60 DUP4 ADD DU