c02b2918-a233-465c-bb9d-5e61d841524d
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31236 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 95227 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 95228 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 95229 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 95230 | capability.graph | complete | 1 / 3 | 1 week ago |
| 95231 | detector.run | complete | 1 / 3 | 1 week ago |
| 95232 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:516604] OpenAI Codex v0.77.0 (research preview)
[codex:516604] --------
[codex:516604] workdir: /tmp/codex-multi-qxxgzmqb
[codex:516604] model: gpt-5.2-codex
[codex:516604] provider: openai
[codex:516604] approval: never
[codex:516604] sandbox: read-only
[codex:516604] reasoning effort: xhigh
[codex:516604] reasoning summaries: auto
[codex:516604] session id: 019b7d28-9877-7d83-95df-3c51e13b6113
[codex:516604] --------
[codex:516604] user
[codex:516604] You are a profit-focused exploit hunter analyzing EVM bytecode. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:516604]
[codex:516604] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:516604]
[codex:516604] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:516604] - Gas inefficiency, code quality, or best practices
[codex:516604] - Theoretical vulnerabilities without a clear extraction path
[codex:516604] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:516604] - Issues requiring social engineering or off-chain coordination
[codex:516604]
[codex:516604] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:516604] - CALL/DELEGATECALL with controllable destination or calldata
[codex:516604] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:516604] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:516604] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:516604] - External calls before state updates (reentrancy)
[codex:516604] - SELFDESTRUCT with controllable beneficiary
[codex:516604] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:516604]
[codex:516604] For each finding, you MUST explain:
[codex:516604] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:516604] 2. The concrete sequence of transactions to extract value
[codex:516604] 3. Why you believe this is exploitable (not just suspicious)
[codex:516604]
[codex:516604] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:516604] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:516604]
[codex:516604] Output MUST be valid JSON matching the provided schema.
[codex:516604] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:516604] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:516604] mcp startup: no servers
[codex:516604]
[codex:516604] thinking
[codex:516604] **Preparing to read BYTECODE_BUNDLE.txt**
[codex:516604] exec
[codex:516604] /bin/bash -lc ls in /tmp/codex-multi-qxxgzmqb succeeded in 5ms:
[codex:516604] BYTECODE_BUNDLE.txt
[codex:516604] codex-output-schema.json
[codex:516604] exec
[codex:516604] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-qxxgzmqb succeeded in 6ms:
[codex:516604] Runtime bytecode bundle for best-effort auditing.
[codex:516604] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:516604]
[codex:516604] FILE: runtime_bytecode.hex
[codex:516604] 0x6080604052600436106100ab5760003560e01c80635a7747fc116100645780635a7747fc146103a45780637b103999146103ce57806391dde7c3146103e3578063e9bb84c2146103f8578063ea23c38914610431578063f5537ede1461045b576100ec565b80632e8e1993146100f157806335eadfba14610190578063485cc955146101d65780634867ba15146102115780634dc90908146102ff57806359c6a88314610329576100ec565b366100ec576040805133815234602082015281517f85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f86695929181900390910190a1005b600080fd5b3480156100fd57600080fd5b5061017c6004803603604081101561011457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561013e57600080fd5b82018360208201111561015057600080fd5b803590602001918460208302840111600160201b8311171561017157600080fd5b50909250905061049e565b604080519115158252519081900360200190f35b34801561019c57600080fd5b506101ba600480360360208110156101b357600080fd5b5035610592565b604080516001600160a01b039092168252519081900360200190f35b3480156101e257600080fd5b5061017c600480360360408110156101f957600080fd5b506001600160a01b03813581169160200135166105d3565b34801561021d57600080fd5b5061017c600480360360c081101561023457600080fd5b810190602081018135600160201b81111561024e57600080fd5b82018360208201111561026057600080fd5b803590602001918460018302840111600160201b8311171561028157600080fd5b919390926001600160a01b03833581169360208101359091169260408201359260608301359260a081019060800135600160201b8111156102c157600080fd5b8201836020820111156102d357600080fd5b803590602001918460018302840111600160201b831117156102f457600080fd5b5090925090506106d8565b34801561030b57600080fd5b5061017c6004803603602081101561032257600080fd5b5035610923565b34801561033557600080fd5b5061017c6004803603602081101561034c57600080fd5b810190602081018135600160201b81111561036657600080fd5b82018360208201111561037857600080fd5b803590602001918460208302840111600160201b8311171561039957600080fd5b509092509050610982565b3480156103b057600080fd5b506101ba600480360360208110156103c757600080fd5b5035610a61565b3480156103da57600080fd5b506101ba610ae4565b3480156103ef57600080fd5b506101ba610af3565b34801561040457600080fd5b5061017c6004803603604081101561041b57600080fd5b506001600160a01b038135169060200135610b02565b34801561043d57600080fd5b5061017c6004803603602081101561045457600080fd5b5035610b4c565b34801561046757600080fd5b5061017c6004803603606081101561047e57600080fd5b506001600160a01b03813581169160208101359091169060400135610b61565b60003330146104de5760405162461bcd60e51b81526004018080602001828103825260258152602001806117c16025913960400191505060405180910390fd5b60005b82811015610587578383828181106104f557fe5b905060200201356001600160a01b03166001600160a01b0316639cee789f866040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561055357600080fd5b505af1158015610567573d6000803e3d6000fd5b505050506040513d602081101561057d57600080fd5b50506001016104e1565b506001949350505050565b60015460408051602080820185905282518083038201815291830190925280519101206000916105cd9130916001600160a01b031690610bb4565b92915050565b6002546000906001600160a01b03161561061e5760405162461bcd60e51b81526004018080602001828103825260278152602001806117e66027913960400191505060405180910390fd5b6001600160a01b0383166106635760405162461bcd60e51b815260040180806020018281038252602481526020018061179d6024913960400191505060405180910390fd5b6001600160a01b0382166106a85760405162461bcd60e51b81526004018080602001828103825260308152602001806118856030913960400191505060405180910390fd5b50600280546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617815590565b600254604080516304fc37bb60e31b815233600482015290516000926001600160a01b0316916327e1bdd8916024808301926020929190829003018186803b15801561072357600080fd5b505afa158015610737573d6000803e3d6000fd5b505050506040513d602081101561074d57600080fd5b505161078a5760405162461bcd60e51b815260040180806020018281038252602681526020018061183e6026913960400191505060405180910390fd5b60006108078a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528d93508c92508b918b91908b908b9081908401838280828437600092019190915250610c1392505050565b90506001600160a01b038116331480159061089757506002546040805163615fa81560e01b81526001600160a01b0384811660048301529151919092169163615fa815916024808301926020929190829003018186803b15801561086a57600080fd5b505afa15801561087e573d6000803e3d6000fd5b505050506040513d602081101561089457600080fd5b50515b6108d25760405162461bcd60e51b815260040180806020018281038252603181526020018061180d6031913960400191505060405180910390fd5b6109158888888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cdc92505050565b9a9950505050505050505050565b600154604080516020808201859052825180830382018152918301909252805191012060009182916109629130916001600160a01b0390911690610bb4565b60015490915061097b906001600160a01b031682610fe9565b9392505050565b60003330146109c25760405162461bcd60e51b81526004018080602001828103825260258152602001806117c16025913960400191505060405180910390fd5b60005b82811015610a57578383828181106109d957fe5b905060200201356001600160a01b03166001600160a01b0316631d4233b96040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b50506001016109c5565b5060019392505050565b6040805160208082018490528251808303820181529183019092528051910120600154600091908290610a9d906001600160a01b03168361104a565b604080516001600160a01b038316815290519192507f62e5833a6a9c6df6056429f9a3334d883f5b47d7d9cfbfe5cabdab658c707ae6919081900360200190a19392505050565b6002546001600160a01b031690565b6001546001600160a01b031690565b6000333014610b425760405162461bcd60e51b81526004018080602001828103825260258152602001806117c16025913960400191505060405180910390fd5b61097b83836110a2565b60009081526020819052604090205460ff1690565b6000333014610ba15760405162461bcd60e51b81526004018080602001828103825260258152602001806117c16025913960400191505060405180910390fd5b610bac84848461119d565b949350505050565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606083901b601482018190526e5af43d82803e903d91602b57fd5bf360881b6028830152603790912060009190610c09848288611207565b9695505050505050565b600080868686868660405160200180866001600160a01b031660601b8152601401856001600160a01b031660601b815260140184815260200183815260200182805190602001908083835b60208310610c7d5780518252601f199092019160209182019101610c5e565b6001836020036101000a03801982511681845116808217855250505050505090500195505050505050604051602081830303815290604052805190602001209050610cd0610cca8261126b565b896112bc565b98975050505050505050565b60006001600160a01b0386163014610d255760405162461bcd60e51b81526004018080602001828103825260218152602001806118646021913960400191505060405180910390fd5b610d2e836113ad565b5060006060610d3e878786611426565b915091508115610eb9577f8ef33a9072a35d9b41d5c5c744ba88308c0fb19f45973df39146cdf54011675f878787878560405180866001600160a01b031681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610dca578181015183820152602001610db2565b50505050905090810190601f168015610df75780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610e2a578181015183820152602001610e12565b50505050905090810190601f168015610e575780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a18515610eb457604080516001600160a01b03891681526020810188905281517fd9b66890b56321a19d7a216dd918f8c0d4023759afc4088deb9be15aca68ece2929181900390910190a15b610fdb565b7f0dcd8c9c77f28ec16607ef7ef149c8c11b7b818e95009bf9639b8a35bb04d55f878787878560405180866001600160a01b031681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610f3b578181015183820152602001610f23565b50505050905090810190601f168015610f685780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610f9b578181015183820152602001610f83565b50505050905090810190601f168015610fc85780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a15b506001979650505050505050565b6000808360601b905060405169363d3d373d3d3d363d7360b01b815281600a8201526e5af43d82803e903d91602b57fd5bf360881b601e82015260408101602d600082873c600d810151600d83015114815183511416935050505092915050565b6000808360601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b6028820152836037826000f59050803b610bac57600080fd5b60405160009081906060906001600160a01b0386169085908481818185875af1925050503d80600081146110f2576040519150601f19603f3d011682016040523d82523d6000602084013e6110f7565b606091505b50915091508161114e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e736665724574682f457468207472616e73666572204661696c656400604482015290519081900360640190fd5b604080516001600160a01b03871681526020810186905281517fd9b66890b56321a19d7a216dd918f8c0d4023759afc4088deb9be15aca68ece2929181900390910190a1506001949350505050565b60006111b36001600160a01b03851684846114d9565b604080516001600160a01b0380871682528516602082015280820184905290517f3844b7075ed6e7d4b61342769cb2b1b325cba410a62932affaa90aee247dadf59181900360600190a15060019392505050565b604080516001600160f81b031960208083019190915260609390931b6bffffffffffffffffffffffff19166021820152603581019490945260558085019390935280518085039093018352607590930190925280519101206001600160a01b031690565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b600081516041146112cf575060006105cd565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561131557600093505050506105cd565b8060ff16601b1415801561132d57508060ff16601c14155b1561133e57600093505050506105cd565b60018682858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611398573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60008181526020819052604081205460ff1615611406576040805162461bcd60e51b8152602060048201526012602482015271139bdb98d94bd05b1c9958591e48155cd95960721b604482015290519081900360640190fd5b506000908152602081905260409020805460ff1916600190811790915590565b60006060846001600160a01b031684846040518082805190602001908083835b602083106114655780518252601f199092019160209182019101611446565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114c7576040519150601f19603f3d011682016040523d82523d6000602084013e6114cc565b606091505b5090969095509350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261152b908490611530565b505050565b6060611585826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115e19092919063ffffffff16565b80519091501561152b578080602001905160208110156115a457600080fd5b505161152b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806118b5602a913960400191505060405180910390fd5b6060610bac848460008560606115f685611796565b611647576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106116865780518252601f199092019160209182019101611667565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146116e8576040519150601f19603f3d011682016040523d82523d6000602084013e6116ed565b606091505b50915091508115611701579150610bac9050565b8051156117115780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175b578181015183820152602001611743565b50505050905090810190601f1680156117885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe48656e657369734d617374657257616c6c65742f496e76616c69642052656769737472794d756c74695369672f53686f756c642062652063616c6c6564206279204d756c746953696748656e657369734d617374657257616c6c65742f416c726561647920496e697469616c697a65644d756c746953696743616c6c2f53686f756c642075736520646966666572656e742072656769737465726564206b65797348656e657369734d617374657257616c6c65742f4e6f7420417574686f72697a6564204b65794d756c746953696743616c6c2f4e6f7420557361626c65205369676e617475726548656e657369734d617374657257616c6c65742f496e76616c696420557365722057616c6c65742054656d706c6174655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122007a2d2e05d4b1398574d80346823260761f6c4ec13a95233056fde99c0d372fd64736f6c634300060c0033
[codex:516604]
[codex:516604] thinking
[codex:516604] **Planning bytecode analysis approach**
[codex:516604]
[codex:516604] I’m focusing on building a minimal Python disassembler to parse the EVM bytecode offline and identify exploitable call patterns, since I can’t install tools or use network resources. I'll extract function selectors, inspect revert strings for hints, and look for vulnerable CALL or DELEGATECALL instructions with controllable arguments to find concrete profit extraction paths.
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604] # simple disassembler
[codex:516604] opcodes={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] pc=0
[codex:516604] ops=[]
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if op>=0x60 and op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] data=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opcodes.get(op,hex(op)),data.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opcodes.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604] # Print some slices around CALL/DELEGATECALL/CREATE/SELFDESTRUCT
[codex:516604] interesting={0xf1,0xf4,0xf0,0xf5,0xff}
[codex:516604] for i,(pc,op,imm) in enumerate(ops):
[codex:516604] if op in ['CALL','DELEGATECALL','CREATE','CREATE2','SELFDESTRUCT']:
[codex:516604] start=max(0,i-8); end=min(len(ops),i+8)
[codex:516604] print('---- around',op,'pc',pc)
[codex:516604] for j in range(start,end):
[codex:516604] pcj,opj,immj=ops[j]
[codex:516604] if immj:
[codex:516604] print(f'{pcj:04x}: {opj} 0x{immj}')
[codex:516604] else:
[codex:516604] print(f'{pcj:04x}: {opj}')
[codex:516604] print()
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 30ms:
[codex:516604] ---- around CALL pc 1366
[codex:516604] 054b: PUSH2 0x0553
[codex:516604] 054e: JUMPI
[codex:516604] 054f: PUSH1 0x00
[codex:516604] 0551: DUP1
[codex:516604] 0552: REVERT
[codex:516604] 0553: JUMPDEST
[codex:516604] 0554: POP
[codex:516604] 0555: GAS
[codex:516604] 0556: CALL
[codex:516604] 0557: ISZERO
[codex:516604] 0558: DUP1
[codex:516604] 0559: ISZERO
[codex:516604] 055a: PUSH2 0x0567
[codex:516604] 055d: JUMPI
[codex:516604] 055e: RETURNDATASIZE
[codex:516604] 055f: PUSH1 0x00
[codex:516604]
[codex:516604] ---- around CALL pc 2598
[codex:516604] 0a1b: PUSH2 0x0a23
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing smart contract disassembly**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60 <= op <= 0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] # find SSTORE occurrences
[codex:516604] for i,(pc,op,imm) in enumerate(ops):
[codex:516604] if op=='SSTORE':
[codex:516604] print('SSTORE at pc',hex(pc))
[codex:516604] for j in range(max(0,i-8), min(len(ops), i+8)):
[codex:516604] pcj,opj,immj=ops[j]
[codex:516604] if immj:
[codex:516604] print(f'{pcj:04x}: {opj} 0x{immj}')
[codex:516604] else:
[codex:516604] print(f'{pcj:04x}: {opj}')
[codex:516604] print()
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 25ms:
[codex:516604] SSTORE at pc 0x6c8
[codex:516604] 06c0: SUB
[codex:516604] 06c1: NOT
[codex:516604] 06c2: SWAP2
[codex:516604] 06c3: DUP3
[codex:516604] 06c4: AND
[codex:516604] 06c5: OR
[codex:516604] 06c6: SWAP1
[codex:516604] 06c7: SWAP2
[codex:516604] 06c8: SSTORE
[codex:516604] 06c9: PUSH1 0x01
[codex:516604] 06cb: DUP1
[codex:516604] 06cc: SLOAD
[codex:516604] 06cd: SWAP3
[codex:516604] 06ce: SWAP1
[codex:516604] 06cf: SWAP4
[codex:516604] 06d0: AND
[codex:516604]
[codex:516604] SSTORE at pc 0x6d5
[codex:516604] 06cd: SWAP3
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing SSTORE usage and function entries**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] # function entry points from dispatcher
[codex:516604] entries=[0x49e,0x592,0x5d3,0x6d8,0x923,0x982,0xa61,0xae4,0xaf3,0xb02,0xb4c,0xb61]
[codex:516604]
[codex:516604] # create mapping pc->index for quick lookup
[codex:516604] pc_index={pc:i for i,(pc,op,imm) in enumerate(ops)}
[codex:516604]
[codex:516604] def dump_from(entry, count=120):
[codex:516604] i=pc_index.get(entry)
[codex:516604] if i is None:
[codex:516604] print('entry',hex(entry),'not found')
[codex:516604] return
[codex:516604] print('\\n== entry',hex(entry),'==')
[codex:516604] for j in range(i, min(len(ops), i+count)):
[codex:516604] pcj,opj,immj=ops[j]
[codex:516604] if immj:
[codex:516604] print(f'{pcj:04x}: {opj} 0x{immj}')
[codex:516604] else:
[codex:516604] print(f'{pcj:04x}: {opj}')
[codex:516604]
[codex:516604] for e in entries:
[codex:516604] dump_from(e, 80)
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 23ms:
[codex:516604]
[codex:516604] == entry 0x49e ==
[codex:516604] 049e: JUMPDEST
[codex:516604] 049f: PUSH1 0x00
[codex:516604] 04a1: CALLER
[codex:516604] 04a2: ADDRESS
[codex:516604] 04a3: EQ
[codex:516604] 04a4: PUSH2 0x04de
[codex:516604] 04a7: JUMPI
[codex:516604] 04a8: PUSH1 0x40
[codex:516604] 04aa: MLOAD
[codex:516604] 04ab: PUSH3 0x461bcd
[codex:516604] 04af: PUSH1 0xe5
[codex:516604] 04b1: SHL
[codex:516604] 04b2: DUP2
[codex:516604] 04b3: MSTORE
[codex:516604] 04b4: PUSH1 0x04
[codex:516604] 04b6: ADD
[codex:516604] 04b7: DUP1
[codex:516604] 04b8: DUP1
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing function access restrictions**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] # disassemble
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] # dump around pc range
[codex:516604] start=0x5d0; end=0x720
[codex:516604] for pc,op,imm in ops:
[codex:516604] if start <= pc <= end:
[codex:516604] if imm:
[codex:516604] print(f'{pc:04x}: {op} 0x{imm}')
[codex:516604] else:
[codex:516604] print(f'{pc:04x}: {op}')
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 24ms:
[codex:516604] 05d0: POP
[codex:516604] 05d1: POP
[codex:516604] 05d2: JUMP
[codex:516604] 05d3: JUMPDEST
[codex:516604] 05d4: PUSH1 0x02
[codex:516604] 05d6: SLOAD
[codex:516604] 05d7: PUSH1 0x00
[codex:516604] 05d9: SWAP1
[codex:516604] 05da: PUSH1 0x01
[codex:516604] 05dc: PUSH1 0x01
[codex:516604] 05de: PUSH1 0xa0
[codex:516604] 05e0: SHL
[codex:516604] 05e1: SUB
[codex:516604] 05e2: AND
[codex:516604] 05e3: ISZERO
[codex:516604] 05e4: PUSH2 0x061e
[codex:516604] 05e7: JUMPI
[codex:516604] 05e8: PUSH1 0x40
[codex:516604] 05ea: MLOAD
[codex:516604] 05eb: PUSH3 0x461bcd
[codex:516604]
[codex:516604] thinking
[codex:516604] **Extracting revert strings from bytecode**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] import re
[codex:516604] b=open('BYTECODE_BUNDLE.txt').read()
[codex:516604] # extract ascii strings from the tail after 'fe' maybe; but we can regex for readable substrings
[codex:516604] s=re.findall(rb'([ -~]{4,})', bytes.fromhex(b.split('0x')[1].strip().split('\\n')[0]))
[codex:516604] for t in s:
[codex:516604] if b'Genesis' in t or b'MultiSig' in t or b'Safe' in t or b'Address' in t or b'Transfer' in t or b'Invalid' in t:
[codex:516604] print(t.decode('ascii'))
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 24ms:
[codex:516604] TransferEth/Eth transfer Failed
[codex:516604] SafeERC20: low-level call failed
[codex:516604] Address: call to non-contract
[codex:516604] HenesisMasterWallet/Invalid RegistryMultiSig/Should be called by MultiSigHenesisMasterWallet/Already InitializedMultiSigCall/Should use different registered keysHenesisMasterWallet/Not Authorized KeyMultiSigCall/Not Usable SignatureHenesisMasterWallet/Invalid User Wallet TemplateSafeERC20: ERC20 operation did not succeed
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing contract initialization and access checks**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] start=0x720; end=0x920
[codex:516604] for pc,op,imm in ops:
[codex:516604] if start <= pc <= end:
[codex:516604] if imm:
[codex:516604] print(f'{pc:04x}: {op} 0x{imm}')
[codex:516604] else:
[codex:516604] print(f'{pc:04x}: {op}')
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 21ms:
[codex:516604] 0721: DUP1
[codex:516604] 0722: REVERT
[codex:516604] 0723: JUMPDEST
[codex:516604] 0724: POP
[codex:516604] 0725: GAS
[codex:516604] 0726: STATICCALL
[codex:516604] 0727: ISZERO
[codex:516604] 0728: DUP1
[codex:516604] 0729: ISZERO
[codex:516604] 072a: PUSH2 0x0737
[codex:516604] 072d: JUMPI
[codex:516604] 072e: RETURNDATASIZE
[codex:516604] 072f: PUSH1 0x00
[codex:516604] 0731: DUP1
[codex:516604] 0732: RETURNDATACOPY
[codex:516604] 0733: RETURNDATASIZE
[codex:516604] 0734: PUSH1 0x00
[codex:516604] 0736: REVERT
[codex:516604] 0737: JUMPDEST
[codex:516604] 0738: POP
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing complex multi-sig functions**
[codex:516604]
[codex:516604] This function looks like it handles multi-signature transaction execution or user wallet creation, with signature checks and dynamic call data building reminiscent of Gnosis Safe patterns. I’m trying to identify the signature used to confirm legitimacy—0x615fa815 isn’t matching standard known signatures like EIP-1271’s `isValidSignature`. I want to dive deeper into related internal functions around 0xbb4 and 0xc13 to understand how calls are executed and whether any exploit could exist. Let’s inspect those internal functions carefully to clarify the contract’s security.
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] start=0x0bb4; end=0x1200
[codex:516604] for pc,op,imm in ops:
[codex:516604] if start <= pc <= end:
[codex:516604] if imm:
[codex:516604] print(f'{pc:04x}: {op} 0x{imm}')
[codex:516604] else:
[codex:516604] print(f'{pc:04x}: {op}')
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 23ms:
[codex:516604] 0bb4: JUMPDEST
[codex:516604] 0bb5: PUSH1 0x40
[codex:516604] 0bb7: MLOAD
[codex:516604] 0bb8: PUSH20 0x3d602d80600a3d3981f3363d3d373d3d3d363d73
[codex:516604] 0bcd: PUSH1 0x60
[codex:516604] 0bcf: SHL
[codex:516604] 0bd0: DUP2
[codex:516604] 0bd1: MSTORE
[codex:516604] 0bd2: PUSH1 0x60
[codex:516604] 0bd4: DUP4
[codex:516604] 0bd5: SWAP1
[codex:516604] 0bd6: SHL
[codex:516604] 0bd7: PUSH1 0x14
[codex:516604] 0bd9: DUP3
[codex:516604] 0bda: ADD
[codex:516604] 0bdb: DUP2
[codex:516604] 0bdc: SWAP1
[codex:516604] 0bdd: MSTORE
[codex:516604] 0bde: PUSH15 0x5af43d82803e903d91602b57fd5bf3
[codex:516604] 0bee: PUSH1 0x88
[codex:516604]
[codex:516604] thinking
[codex:516604] **Continuing process**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604] # disassemble
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] start=0x1200; end=0x1700
[codex:516604] for pc,op,imm in ops:
[codex:516604] if start <= pc <= end:
[codex:516604] if imm:
[codex:516604] print(f'{pc:04x}: {op} 0x{imm}')
[codex:516604] else:
[codex:516604] print(f'{pc:04x}: {op}')
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 22ms:
[codex:516604] 1201: SWAP4
[codex:516604] 1202: SWAP3
[codex:516604] 1203: POP
[codex:516604] 1204: POP
[codex:516604] 1205: POP
[codex:516604] 1206: JUMP
[codex:516604] 1207: JUMPDEST
[codex:516604] 1208: PUSH1 0x40
[codex:516604] 120a: DUP1
[codex:516604] 120b: MLOAD
[codex:516604] 120c: PUSH1 0x01
[codex:516604] 120e: PUSH1 0x01
[codex:516604] 1210: PUSH1 0xf8
[codex:516604] 1212: SHL
[codex:516604] 1213: SUB
[codex:516604] 1214: NOT
[codex:516604] 1215: PUSH1 0x20
[codex:516604] 1217: DUP1
[codex:516604] 1218: DUP4
[codex:516604] 1219: ADD
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing function dispatch and access control**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] # dump around 0x390-0x470
[codex:516604] start=0x380; end=0x470
[codex:516604] for pc,op,imm in ops:
[codex:516604] if start <= pc <= end:
[codex:516604] if imm:
[codex:516604] print(f'{pc:04x}: {op} 0x{imm}')
[codex:516604] else:
[codex:516604] print(f'{pc:04x}: {op}')
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 21ms:
[codex:516604] 0380: DUP5
[codex:516604] 0381: PUSH1 0x20
[codex:516604] 0383: DUP4
[codex:516604] 0384: MUL
[codex:516604] 0385: DUP5
[codex:516604] 0386: ADD
[codex:516604] 0387: GT
[codex:516604] 0388: PUSH1 0x01
[codex:516604] 038a: PUSH1 0x20
[codex:516604] 038c: SHL
[codex:516604] 038d: DUP4
[codex:516604] 038e: GT
[codex:516604] 038f: OR
[codex:516604] 0390: ISZERO
[codex:516604] 0391: PUSH2 0x0399
[codex:516604] 0394: JUMPI
[codex:516604] 0395: PUSH1 0x00
[codex:516604] 0397: DUP1
[codex:516604] 0398: REVERT
[codex:516604] 0399: JUMPDEST
[codex:516604]
[codex:516604] thinking
[codex:516604] **Scrolling further for entries**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604] # disassemble
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] start=0x470; end=0x520
[codex:516604] for pc,op,imm in ops:
[codex:516604] if start <= pc <= end:
[codex:516604] if imm:
[codex:516604] print(f'{pc:04x}: {op} 0x{imm}')
[codex:516604] else:
[codex:516604] print(f'{pc:04x}: {op}')
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 22ms:
[codex:516604] 0470: SUB
[codex:516604] 0471: PUSH1 0x60
[codex:516604] 0473: DUP2
[codex:516604] 0474: LT
[codex:516604] 0475: ISZERO
[codex:516604] 0476: PUSH2 0x047e
[codex:516604] 0479: JUMPI
[codex:516604] 047a: PUSH1 0x00
[codex:516604] 047c: DUP1
[codex:516604] 047d: REVERT
[codex:516604] 047e: JUMPDEST
[codex:516604] 047f: POP
[codex:516604] 0480: PUSH1 0x01
[codex:516604] 0482: PUSH1 0x01
[codex:516604] 0484: PUSH1 0xa0
[codex:516604] 0486: SHL
[codex:516604] 0487: SUB
[codex:516604] 0488: DUP2
[codex:516604] 0489: CALLDATALOAD
[codex:516604] 048a: DUP2
[codex:516604]
[codex:516604] thinking
[codex:516604] **Examining external function calls and security checks**
[codex:516604]
[codex:516604] I'm analyzing which contract functions are externally accessible, focusing on those that deploy user wallets with CREATE2 and perform multisig execution via registry key checks. The goal is to understand their access control and potential vulnerabilities by dissecting calldata construction, especially around multisig authorization. I'm considering writing a small symbolic stack analysis script to clarify how calls to the registry are structured and verify correctness.
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] # disassemble into list of (pc, op, imm)
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] start=0x6d8; end=0x727
[codex:516604] segment=[o for o in ops if start<=o[0]<=end]
[codex:516604]
[codex:516604] # simple symbolic stack
[codex:516604] stack=[]
[codex:516604]
[codex:516604] def push(x):
[codex:516604] stack.append(x)
[codex:516604]
[codex:516604] def pop():
[codex:516604] return stack.pop() if stack else 'EMPTY'
[codex:516604]
[codex:516604] # operations we care about: PUSH, DUP, SWAP, POP, SLOAD, CALLER, MLOAD, AND, ADD, SUB, SHL
[codex:516604] for pc,op,imm in segment:
[codex:516604] if op.startswith('PUSH'):
[codex:516604] push(f'{op}({imm})')
[codex:516604] elif op.startswith('DUP'):
[codex:516604] n=int(op[3:])
[codex:516604] if n<=len(stack): push(stack[-n])
[codex:516604] else: push('DUP?')
[codex:516604] elif op.startswith('SWAP'):
[codex:516604] n=int(op[4:])
[codex:516604] if n< len(stack):
[codex:516604] stack[-1], stack[-1-n]=stack[-1-n], stack[-1]
[codex:516604] elif op=='POP':
[codex:516604] pop()
[codex:516604] elif op=='SLOAD':
[codex:516604] key=pop(); push(f'SLOAD({key})')
[codex:516604] elif op=='MLOAD':
[codex:516604] addr=pop(); push(f'MLOAD({addr})')
[codex:516604] elif op=='CALLER':
[codex:516604] push('CALLER')
[codex:516604] elif op=='AND':
[codex:516604] b=pop(); a=pop(); push(f'AND({a},{b})')
[codex:516604] elif op=='SUB':
[codex:516604] b=pop(); a=pop(); push(f'SUB({a},{b})')
[codex:516604] elif op=='ADD':
[codex:516604] b=pop(); a=pop(); push(f'ADD({a},{b})')
[codex:516604] elif op=='SHL':
[codex:516604] b=pop(); a=pop(); push(f'SHL({a},{b})')
[codex:516604] elif op=='MSTORE':
[codex:516604] val=pop(); addr=pop();
[codex:516604] elif op=='EXTCODESIZE':
[codex:516604] addr=pop(); push(f'EXTCODESIZE({addr})')
[codex:516604] elif op=='STATICCALL':
[codex:516604] # pop args: gas, to, in_offset, in_size, out_offset, out_size
[codex:516604] out_size=pop(); out_offset=pop(); in_size=pop(); in_offset=pop(); to=pop(); gas=pop();
[codex:516604] push(f'STATICCALL(gas={gas},to={to},in={in_offset}+{in_size},out={out_offset}+{out_size})')
[codex:516604] elif op=='ISZERO':
[codex:516604] a=pop(); push(f'ISZERO({a})')
[codex:516604] elif op=='JUMPI':
[codex:516604] dest=pop(); cond=pop();
[codex:516604] # ignore others
[codex:516604]
[codex:516604] print('Final stack (top last):')
[codex:516604] for i,s in enumerate(stack):
[codex:516604] print(i, s)
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 22ms:
[codex:516604] Final stack (top last):
[codex:516604] 0 PUSH1(00)
[codex:516604] 1 AND(SLOAD(PUSH1(02)),SUB(PUSH1(01),SHL(PUSH1(01),PUSH1(a0))))
[codex:516604] 2 PUSH4(27e1bdd8)
[codex:516604] 3 ADD(PUSH1(24),MLOAD(PUSH1(40)))
[codex:516604] 4 PUSH1(20)
[codex:516604] 5 ISZERO(STATICCALL(gas=MLOAD(PUSH1(40)),to=ADD(PUSH1(24),SUB(MLOAD(PUSH1(40)),MLOAD(PUSH1(40)))),in=MLOAD(PUSH1(40))+AND(SLOAD(PUSH1(02)),SUB(PUSH1(01),SHL(PUSH1(01),PUSH1(a0)))),out=ISZERO(EXTCODESIZE(AND(SLOAD(PUSH1(02)),SUB(PUSH1(01),SHL(PUSH1(01),PUSH1(a0))))))+PUSH1(00)))
[codex:516604]
[codex:516604]
[codex:516604]
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing error strings and access control logic**
[codex:516604] thinking
[codex:516604] **Examining wallet creation and initialization risks**
[codex:516604]
[codex:516604] I’m reviewing how the contract creates user wallets with CREATE2 and noting that clones don’t seem initialized during deployment. Since initialization sets crucial registry and template addresses, if anyone can call initialize on a fresh clone first, they might hijack its control. This raises a potential risk where attackers could front-run legitimate initialization and take control of user wallets before proper setup happens.
[codex:516604] thinking
[codex:516604] **Clarifying wallet initialization and multisig authorization**
[codex:516604]
[codex:516604] I'm sorting out that the master wallet contract sets user wallet template and registry during initialization, which must happen once to prevent takeover risks. The user wallets are clones of a separate template contract, so their initialization differs. The multisig logic requires two distinct registered keys, with special checks allowing the caller to count as one key, and verifies keys against the registry through static calls. This setup seems intentional and consistent, with no obvious bypass in signature or authorization checks based on the bytecode.
[codex:516604] thinking
[codex:516604] **Examining multisig signature verification details**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] # find ORIGIN opcode 0x32 positions
[codex:516604] positions=[i for i,op in enumerate(b) if op==0x32]
[codex:516604] print('ORIGIN positions:', [hex(p) for p in positions])
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 18ms:
[codex:516604] ORIGIN positions: ['0x11eb', '0x128c', '0x1551', '0x18bc', '0x18c3']
[codex:516604]
[codex:516604] thinking
[codex:516604] **Inspecting ORIGIN opcodes**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] opnames={
[codex:516604] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:516604] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:516604] 0x20:'SHA3',
[codex:516604] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:516604] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:516604] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'BEGINSUB',0x5d:'RETURNSUB',0x5e:'JUMPSUB',0x5f:'PUSH0',
[codex:516604] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:516604] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:516604] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:516604] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:516604] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:516604] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xff:'SELFDESTRUCT'
[codex:516604] }
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] ops=[]
[codex:516604] pc=0
[codex:516604] while pc<len(b):
[codex:516604] op=b[pc]
[codex:516604] if 0x60<=op<=0x7f:
[codex:516604] n=op-0x5f
[codex:516604] imm=b[pc+1:pc+1+n]
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),imm.hex()))
[codex:516604] pc+=1+n
[codex:516604] else:
[codex:516604] ops.append((pc,opnames.get(op,hex(op)),''))
[codex:516604] pc+=1
[codex:516604]
[codex:516604] for pos in [0x11eb,0x128c,0x1551,0x18bc,0x18c3]:
[codex:516604] start=pos-20; end=pos+20
[codex:516604] print('\\n-- around',hex(pos))
[codex:516604] for pc,op,imm in ops:
[codex:516604] if start<=pc<=end:
[codex:516604] if imm:
[codex:516604] print(f'{pc:04x}: {op} 0x{imm}')
[codex:516604] else:
[codex:516604] print(f'{pc:04x}: {op}')
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 23ms:
[codex:516604]
[codex:516604] -- around 0x11eb
[codex:516604] 11f5: SWAP2
[codex:516604] 11f6: DUP2
[codex:516604] 11f7: SWAP1
[codex:516604] 11f8: SUB
[codex:516604] 11f9: PUSH1 0x60
[codex:516604] 11fb: ADD
[codex:516604] 11fc: SWAP1
[codex:516604] 11fd: LOG1
[codex:516604] 11fe: POP
[codex:516604] 11ff: PUSH1 0x01
[codex:516604]
[codex:516604] -- around 0x128c
[codex:516604] 1291: PUSH1 0x20
[codex:516604] 1293: DUP1
[codex:516604] 1294: DUP4
[codex:516604] 1295: ADD
[codex:516604] 1296: SWAP2
[codex:516604] 1297: SWAP1
[codex:516604]
[codex:516604] thinking
[codex:516604] **Analyzing bytecode for vulnerabilities**
[codex:516604]
[codex:516604] I'm carefully mapping out key functions and their security checks, especially the multisig execute function and creation processes, to see if any exploitable paths exist; so far, everything looks locked down with no clear attack vector from the bytecode alone.
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] positions=[i for i,op in enumerate(b) if op==0xff]
[codex:516604] print('SELFDESTRUCT positions:', [hex(p) for p in positions])
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 18ms:
[codex:516604] SELFDESTRUCT positions: ['0x9a', '0x51a', '0x51b', '0x51c', '0x51d', '0x9fd', '0x9fe', '0x9ff', '0xa00', '0xb5d', '0x1225', '0x1226', '0x1227', '0x1228', '0x1229', '0x122a', '0x122b', '0x122c', '0x122d', '0x122e', '0x122f', '0x1230', '0x12e4', '0x12e5', '0x12e6', '0x12e7', '0x12e8', '0x12e9', '0x12ea', '0x12eb', '0x12ec', '0x12ed', '0x12ee', '0x12ef', '0x12f0', '0x12f1', '0x12f2', '0x1318', '0x1327', '0x135e', '0x13be', '0x1419', '0x157f', '0x1580', '0x1581', '0x1582']
[codex:516604]
[codex:516604] thinking
[codex:516604] **Verifying absence of selfdestruct instructions**
[codex:516604] exec
[codex:516604] /bin/bash -lc "python - <<'PY'
[codex:516604] bytecode=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:516604] if bytecode.startswith('0x'): bytecode=bytecode[2:]
[codex:516604]
[codex:516604] b=bytes.fromhex(bytecode)
[codex:516604] positions=[i for i,op in enumerate(b) if op==0xf4]
[codex:516604] print('DELEGATECALL positions:', [hex(p) for p in positions][:20])
[codex:516604] PY" in /tmp/codex-multi-qxxgzmqb succeeded in 17ms:
[codex:516604] DELEGATECALL positions: ['0x2ee', '0xbe0', '0x100e', '0x1079']
[codex:516604]
[codex:516604] thinking
[codex:516604] **Verifying call safety and preparing final JSON**
[codex:516604] codex
[codex:516604] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path was identified from the provided runtime bytecode alone.","findings":[]}
[codex:516604] tokens used
[codex:516604] 125,534
[codex:516604] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path was identified from the provided runtime bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-02T05:34:21.650947+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction path was identified from the provided runtime bytecode alone.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction path was identified from the provided runtime bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00ab 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x5a7747fc 00000019: GT 0000001a: PUSH2 0x0064 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0x5a7747fc 00000024: EQ 00000025: PUSH2 0x03a4 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0x7b103999 0000002f: EQ 00000030: PUSH2 0x03ce 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0x91dde7c3 0000003a: EQ 0000003b: PUSH2 0x03e3 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe9bb84c2 00000045: EQ 00000046: PUSH2 0x03f8 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xea23c389 00000050: EQ 00000051: PUSH2 0x0431 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf5537ede 0000005b: EQ 0000005c: PUSH2 0x045b 0000005f: JUMPI 00000060: PUSH2 0x00ec 00000063: JUMP 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0x2e8e1993 0000006b: EQ 0000006c: PUSH2 0x00f1 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0x35eadfba 00000076: EQ 00000077: PUSH2 0x0190 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0x485cc955 00000081: EQ 00000082: PUSH2 0x01d6 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0x4867ba15 0000008c: EQ 0000008d: PUSH2 0x0211 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0x4dc90908 00000097: EQ 00000098: PUSH2 0x02ff 0000009b: JUMPI 0000009c: DUP1 0000009d: PUSH4 0x59c6a883 000000a2: EQ 000000a3: PUSH2 0x0329 000000a6: JUMPI 000000a7: PUSH2 0x00ec 000000aa: JUMP 000000ab: JUMPDEST 000000ac: CALLDATASIZE 000000ad: PUSH2 0x00ec 000000b0: JUMPI 000000b1: PUSH1 0x40 000000b3: DUP1 000000b4: MLOAD 000000b5: CALLER 000000b6: DUP2 000000b7: MSTORE 000000b8: CALLVALUE 000000b9: PUSH1 0x20 000000bb: DUP3 000000bc: ADD 000000bd: MSTORE 000000be: DUP2 000000bf: MLOAD 000000c0: PUSH32 0x85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f86695 000000e1: SWAP3 000000e2: SWAP2 000000e3: DUP2 000000e4: SWAP1 000000e5: SUB 000000e6: SWAP1 000000e7: SWAP2 000000e8: ADD 000000e9: SWAP1 000000ea: LOG1 000000eb: STOP 000000ec: JUMPDEST 000000ed: PUSH1 0x00 000000ef: DUP1 000000f0: REVERT 000000f1: JUMPDEST 000000f2: CALLVALUE 000000f3: DUP1 000000f4: ISZERO 000000f5: PUSH2 0x00fd 000000f8: JUMPI 000000f9: PUSH1 0x00 000000fb: DUP1 000000fc: REVERT 000000fd: JUMPDEST 000000fe: POP 000000ff: PUSH2 0x017c 00000102: PUSH1 0x04 00000104: DUP1 00000105: CALLDATASIZE 00000106: SUB 00000107: PUSH1 0x40 00000109: DUP2 0000010a: LT 0000010b: ISZERO 0000010c: PUSH2 0x0114 0000010f: JUMPI 00000110: PUSH1 0x00 00000112: DUP1 00000113: REVERT 00000114: JUMPDEST 00000115: PUSH1 0x01 00000117: PUSH1 0x01 00000119: PUSH1 0xa0 0000011b: SHL 0000011c: SUB 0000011d: DUP3 0000011e: CALLDATALOAD 0000011f: AND 00000120: SWAP2 00000121: SWAP1 00000122: DUP2 00000123: ADD 00000124: SWAP1 00000125: PUSH1 0x40 00000127: DUP2 00000128: ADD 00000129: PUSH1 0x20 0000012b: DUP3 0000012c: ADD 0000012d: CALLDATALOAD 0000012e: PUSH1 0x01 00000130: PUSH1 0x20 00000132: SHL 00000133: DUP2 00000134: GT 00000135: ISZERO 00000136: PUSH2 0x013e 00000139: JUMPI 0000013a: PUSH1 0x00 0000013c: DUP1 0000013d: REVERT 0000013e: JUMPDEST 0000013f: DUP3 00000140: ADD 00000141: DUP4 00000142: PUSH1 0x20 00000144: DUP3 00000145: ADD 00000146: GT 00000147: ISZERO 00000148: PUSH2 0x0150 0000014b: JUMPI 0000014c: PUSH1 0x00 0000014e: DUP1 0000014f: REVERT 00000150: JUMPDEST 00000151: DUP1 00000152: CALLDATALOAD 00000153: SWAP1 00000154: PUSH1 0x20 00000156: ADD 00000157: SWAP2 00000158: DUP5 00000159: PUSH1 0x20 0000015b: DUP4 0000015c: MUL 0000015d: DUP5 0000015e: ADD 0000015f: GT 00000160: PUSH1 0x01 00000162: PUSH1 0x20 00000164: SHL 00000165: DUP4 00000166: GT 00000167: OR 00000168: ISZERO 00000169: PUSH2 0x0171 0000016c: JUMPI 0000016d: PUSH1 0x00 0000016f: DUP1 00000170: REVERT 00000171: JUMPDEST 00000172: POP 00000173: SWAP1 00000174: SWAP3 00000175: POP 00000176: SWAP1 00000177: POP 00000178: PUSH2 0x049e 0000017b: JUMP 0000017c: JUMPDEST 0000017d: PUSH1 0x40 0000017f: DUP1 00000180: MLOAD 00000181: SWAP2 00000182: ISZERO 00000183: ISZERO 00000184: DUP3 00000185: MSTORE 00000186: MLOAD 00000187: SWAP1 00000188: DUP2 00000189: SWAP1 0000018a: SUB 0000018b: PUSH1 0x20 0000018d: ADD 0000018e: SWAP1 0000018f: RETURN 00000190: JUMPDEST 00000191: CALLVALUE 00000192: DUP1 00000193: ISZERO 00000194: PUSH2 0x019c 00000197: JUMPI 00000198: PUSH1 0x00 0000019a: DUP1 0000019b: REVERT 0000019c: JUMPDEST 0000019d: POP 0000019e: PUSH2 0x01ba 000001a1: PUSH1 0x04 000001a3: DUP1 000001a4: CALLDATASIZE 000001a5: SUB 000001a6: PUSH1 0x20 000001a8: DUP2 000001a9: LT 000001aa: ISZERO 000001ab: PUSH2 0x01b3 000001ae: JUMPI 000001af: PUSH1 0x00 000001b1: DUP1 000001b2: REVERT 000001b3: JUMPDEST 000001b4: POP 000001b5: CALLDATALOAD 000001b6: PUSH2 0x0592 000001b9: JUMP 000001ba: JUMPDEST 000001bb: PUSH1 0x40 000001bd: DUP1 000001be: MLOAD 000001bf: PUSH1 0x01 000001c1: PUSH1 0x01 000001c3: PUSH1 0xa0 000001c5: SHL 000001c6: SUB 000001c7: SWAP1 000001c8: SWAP3 000001c9: AND 000001ca: DUP3 000001cb: MSTORE 000001cc: MLOAD 000001cd: SWAP1 000001ce: DUP2 000001cf: SWAP1 000001d0: SUB 000001d1: PUSH1 0x20 000001d3: ADD 000001d4: SWAP1 000001d5: RETURN 000001d6: JUMPDEST 000001d7: CALLVALUE 000001d8: DUP1 000001d9: ISZERO 000001da: PUSH2 0x01e2 000001dd: JUMPI 000001de: PUSH1 0x00 000001e0: DUP1 000001e1: REVERT 000001e2: JUMPDEST 000001e3: POP 000001e4: PUSH2 0x017c 000001e7: PUSH1 0x04 000001e9: DUP1 000001ea: CALLDATASIZE 000001eb: SUB 000001ec: PUSH1 0x40 000001ee: DUP2 000001ef: LT 000001f0: ISZERO 000001f1: PUSH2 0x01f9 000001f4: JUMPI 000001f5: PUSH1 0x00 000001f7: DUP1 000001f8: REVERT 000001f9: JUMPDEST 000001fa: POP 000001fb: PUSH1 0x01 000001fd: PUSH1 0x01 000001ff: PUSH1 0xa0 00000201: SHL 00000202: SUB 00000203: DUP2 00000204: CALLDATALOAD 00000205: DUP2 00000206: AND 00000207: SWAP2 00000208: PUSH1 0x20 0000020a: ADD 0000020b: CALLDATALOAD 0000020c: AND 0000020d: PUSH2 0x05d3 00000210: JUMP 00000211: JUMPDEST 00000212: CALLVALUE 00000213: DUP1 00000214: ISZERO 00000215: PUSH2 0x021d 00000218: JUMPI 00000219: PUSH1 0x00 0000021b: DUP1 0000021c: REVERT 0000021d: JUMPDEST 0000021e: POP 0000021f: PUSH2 0x017c 00000222: PUSH1 0x04 00000224: DUP1 00000225: CALLDATASIZE 00000226: SUB 00000227: PUSH1 0xc0 00000229: DUP2 0000022a: LT 0000022b: ISZERO 0000022c: PUSH2 0x0234 0000022f: JUMPI 00000230: PUSH1 0x00 00000232: DUP1 00000233: REVERT 00000234: JUMPDEST 00000235: DUP2 00000236: ADD 00000237: SWAP1 00000238: PUSH1 0x20 0000023a: DUP2 0000023b: ADD 0000023c: DUP2 0000023d: CALLDATALOAD 0000023e: PUSH1 0x01 00000240: PUSH1 0x20 00000242: SHL 00000243: DUP2 00000244: GT 00000245: ISZERO 00000246: PUSH2 0x024e 00000249: JUMPI 0000024a: PUSH1 0x00 0000024c: DUP1 0000024d: REVERT 0000024e: JUMPDEST 0000024f: DUP3 00000250: ADD 00000251: DUP4 00000252: PUSH1 0x20 00000254: DUP3 00000255: ADD 00000256: GT 00000257: ISZERO 00000258: PUSH2 0x0260 0000025b: JUMPI 0000025c: PUSH1 0x00 0000025e: DUP1 0000025f: REVERT 00000260: JUMPDEST 00000261: DUP1 00000262: CALLDATALOAD 00000263: SWAP1 00000264: PUSH1 0x20 00000266: ADD 00000267: SWAP2 00000268: DUP5 00000269: PUSH1 0x01 0000026b: DUP4 0000026c: MUL 0000026d: DUP5 0000026e: ADD 0000026f: GT 00000270: PUSH1 0x01 00000272: PUSH1 0x20 00000274: SHL 00000275: DUP4 00000276: GT 00000277: OR 00000278: ISZERO 00000279: PUSH2 0x0281 0000027c: JUMPI 0000027d: PUSH1 0x00 0000027f: DUP1 00000280: REVERT 00000281: JUMPDEST 00000282: SWAP2 00000283: SWAP4 00000284: SWAP1 00000285: SWAP3 00000286: PUSH1 0x01 00000288: PUSH1 0x01 0000028a: PUSH1 0xa0 0000028c: SHL 0000028d: SUB 0000028e: DUP4 0000028f: CALLDATALOAD 00000290: DUP2 00000291: AND 00000292: SWAP4 00000293: PUSH1 0x20 00000295: DUP2 00000296: ADD 00000297: CALLDATALOAD 00000298: SWAP1 00000299: SWAP2 0000029a: AND 0000029b: SWAP3 0000029c: PUSH1 0x40 0000029e: DUP3 0000029f: ADD 000002a0: CALLDATALOAD 000002a1: SWAP3 000002a2: PUSH1 0x60 000002a4: DUP4 000002a5: ADD 000002a6: CALLDATALOAD 000002a7: SWAP3 000002a8: PUSH1 0xa0 000002aa: DUP2 000002ab: ADD 000002ac: SWAP1 000002ad: PUSH1 0x80 000002af: ADD 000002b0: CALLDATALOAD 000002b1: PUSH1 0x01 000002b3: PUSH1 0x20 000002b5: SHL 000002b6: DUP2 000002b7: GT 000002b8: ISZERO 000002b9: PUSH2 0x02c1 000002bc: JUMPI 000002bd: PUSH1 0x00 000002bf: DUP1 000002c0: REVERT 000002c1: JUMPDEST 000002c2: DUP3 000002c3: ADD 000002c4: DUP4 000002c5: PUSH1 0x20 000002c7: DUP3 000002c8: ADD 000002c9: GT 000002ca: ISZERO 000002cb: PUSH2 0x02d3 000002ce: JUMPI 000002cf: PUSH1 0x00 000002d1: DUP1 000002d2: REVERT 000002d3: JUMPDEST 000002d4: DUP1 000002d5: CALLDATALOAD 000002d6: SWAP1 000002d7: PUSH1 0x20 000002d9: ADD 000002da: SWAP2 000002db: DUP5 000002dc: PUSH1 0x01 000002de: DUP4 000002df: MUL 000002e0: DUP5 000002e1: ADD 000002e2: GT 000002e3: PUSH1 0x01 000002e5: PUSH1 0x20 000002e7: SHL 000002e8: DUP4 000002e9: GT 000002ea: OR 000002eb: ISZERO 000002ec: PUSH2 0x02f4 000002ef: JUMPI 000002f0: PUSH1 0x00 000002f2: DUP1 000002f3: REVERT 000002f4: JUMPDEST 000002f5: POP 000002f6: SWAP1 000002f7: SWAP3 000002f8: POP 000002f9: SWAP1 000002fa: POP 000002fb: PUSH2 0x06d8 000002fe: JUMP 000002ff: JUMPDEST 00000300: CALLVALUE 00000301: DUP1 00000302: ISZERO 00000303: PUSH2 0x030b 00000306: JUMPI 00000307: PUSH1 0x00 00000309: DUP1 0000030a: REVERT 0000030b: JUMPDEST 0000030c: POP 0000030d: PUSH2 0x017c 00000310: PUSH1 0x04 00000312: DUP1 00000313: CALLDATASIZE 00000314: SUB 00000315: PUSH1 0x20 00000317: DUP2 00000318: LT 00000319: ISZERO 0000031a: PUSH2 0x0322 0000031d: JUMPI 0000031e: PUSH1 0x00 00000320: DUP1 00000321: REVERT 00000322: JUMPDEST 00000323: POP 00000324: CALLDATALOAD 00000325: PUSH2 0x0923 00000328: JUMP 00000329: JUMPDEST 0000032a: CALLVALUE 0000032b: DUP1 0000032c: ISZERO 0000032d: PUSH2 0x0335 00000330: JUMPI 00000331: PUSH1 0x00 00000333: DUP1 00000334: REVERT 00000335: JUMPDEST 00000336: POP 00000337: PUSH2 0x017c 0000033a: PUSH1 0x04 0000033c: DUP1 0000033d: CALLDATASIZE 0000033e: SUB 0000033f: PUSH1 0x20 00000341: DUP2 00000342: LT 00000343: ISZERO 00000344: PUSH2 0x034c 00000347: JUMPI 00000348: PUSH1 0x00 0000034a: DUP1 0000034b: REVERT 0000034c: JUMPDEST 0000034d: DUP2 0000034e: ADD 0000034f: SWAP1 00000350: PUSH1 0x20 00000352: DUP2 00000353: ADD 00000354: DUP2 00000355: CALLDATALOAD 00000356: PUSH1 0x01 00000358: PUSH1 0x20 0000035a: SHL 0000035b: DUP2 0000035c: GT 0000035d: ISZERO 0000035e: PUSH2 0x0366 00000361: JUMPI 00000362: PUSH1 0x00 00000364: DUP1 00000365: REVERT 00000366: JUMPDEST 00000367: DUP3 00000368: ADD 00000369: DUP4 0000036a: PUSH1 0x20 0000036c: DUP3 0000036d: ADD 0000036e: GT 0000036f: ISZERO 00000370: PUSH2 0x0378 00000373: JUMPI 00000374: PUSH1 0x00 00000376: DUP1 00000377: REVERT 00000378: JUMPDEST 00000379: DUP1 0000037a: CALLDATALOAD 0000037b: SWAP1 0000037c: PUSH1 0x20 0000037e: ADD 0000037f: SWAP2 00000380: DUP5 00000381: PUSH1 0x20 00000383: DUP4 00000384: MUL 00000385: DUP5 00000386: ADD 00000387: GT 00000388: PUSH1 0x01 0000038a: PUSH1 0x20 0000038c: SHL 0000038d: DUP4 0000038e: GT 0000038f: OR 00000390: ISZERO 00000391: PUSH2 0x0399 00000394: JUMPI 00000395: PUSH1 0x00 00000397: DUP1 00000398: REVERT 00000399: JUMPDEST 0000039a: POP 0000039b: SWAP1 0000039c: SWAP3 0000039d: POP 0000039e: SWAP1 0000039f: POP 000003a0: PUSH2 0x0982 000003a3: JUMP 000003a4: JUMPDEST 000003a5: CALLVALUE 000003a6: DUP1 000003a7: ISZERO 000003a8: PUSH2 0x03b0 000003ab: JUMPI 000003ac: PUSH1 0x00 000003ae: DUP1 000003af: REVERT 000003b0: JUMPDEST 000003b1: POP 000003b2: PUSH2 0x01ba 000003b5: PUSH1 0x04 000003b7: DUP1 000003b8: CALLDATASIZE 000003b9: SUB 000003ba: PUSH1 0x20 000003bc: DUP2 000003bd: LT 000003be: ISZERO 000003bf: PUSH2 0x03c7 000003c2: JUMPI 000003c3: PUSH1 0x00 000003c5: DUP1 000003c6: REVERT 000003c7: JUMPDEST 000003c8: POP 000003c9: CALLDATALOAD 000003ca: PUSH2 0x0a61 000003cd: JUMP 000003ce: JUMPDEST 000003cf: CALLVALUE 000003d0: DUP1 000003d1: ISZERO 000003d2: PUSH2 0x03da 000003d5: JUMPI 000003d6: PUSH1 0x00 000003d8: DUP1 000003d9: REVERT 000003da: JUMPDEST 000003db: POP 000003dc: PUSH2 0x01ba 000003df: PUSH2 0x0ae4 000003e2: JUMP 000003e3: JUMPDEST 000003e4: CALLVALUE 000003e5: DUP1 000003e6: ISZERO 000003e7: PUSH2 0x03ef 000003ea: JUMPI 000003eb: PUSH1 0x00 000003ed: DUP1 000003ee: REVERT 000003ef: JUMPDEST 000003f0: POP 000003f1: PUSH2 0x01ba 000003f4: PUSH2 0x0af3 000003f7: JUMP 000003f8: JUMPDEST 000003f9: CALLVALUE 000003fa: DUP1 000003fb: ISZERO 000003fc: PUSH2 0x0404 000003ff: JUMPI 00000400: PUSH1 0x00 00000402: DUP1 00000403: REVERT 00000404: JUMPDEST 00000405: POP 00000406: PUSH2 0x017c 00000409: PUSH1 0x04 0000040b: DUP1 0000040c: CALLDATASIZE 0000040d: SUB 0000040e: PUSH1 0x40 00000410: DUP2 00000411: LT 00000412: ISZERO 00000413: PUSH2 0x041b 00000416: JUMPI 00000417: PUSH1 0x00 00000419: DUP1 0000041a: REVERT 0000041b: JUMPDEST 0000041c: POP 0000041d: PUSH1 0x01 0000041f: PUSH1 0x01 00000421: PUSH1 0xa0 00000423: SHL 00000424: SUB 00000425: DUP2 00000426: CALLDATALOAD 00000427: AND 00000428: SWAP1 00000429: PUSH1 0x20 0000042b: ADD 0000042c: CALLDATALOAD 0000042d: PUSH2 0x0b02 00000430: JUMP 00000431: JUMPDEST 00000432: CALLVALUE 00000433: DUP1 00000434: ISZERO 00000435: PUSH2 0x043d 00000438: JUMPI 00000439: PUSH1 0x00 0000043b: DUP1 0000043c: REVERT 0000043d: JUMPDEST 0000043e: POP 0000043f: PUSH2 0x017c 00000442: PUSH1 0x04 00000444: DUP1 00000445: CALLDATASIZE 00000446: SUB 00000447: PUSH1 0x20 00000449: DUP2 0000044a: LT 0000044b: ISZERO 0000044c: PUSH2 0x0454 0000044f: JUMPI 00000450: PUSH1 0x00 00000452: DUP1 00000453: REVERT 00000454: JUMPDEST 00000455: POP 00000456: CALLDATALOAD 00000457: PUSH2 0x0b4c 0000045a: JUMP 0000045b: JUMPDEST 0000045c: CALLVALUE 0000045d: DUP1 0000045e: ISZERO 0000045f: PUSH2 0x0467 00000462: JUMPI 00000463: PUSH1 0x00 00000465: DUP1 00000466: REVERT 00000467: JUMPDEST 00000468: POP 00000469: PUSH2 0x017c 0000046c: PUSH1 0x04 0000046e: DUP1 0000046f: CALLDATASIZE 00000470: SUB 00000471: PUSH1 0x60 00000473: DUP2 00000474: LT 00000475: ISZERO 00000476: PUSH2 0x047e 00000479: JUMPI 0000047a: PUSH1 0x00 0000047c: DUP1 0000047d: REVERT 0000047e: JUMPDEST 0000047f: POP 00000480: PUSH1 0x01 00000482: PUSH1 0x01 00000484: PUSH1 0xa0 00000486: SHL 00000487: SUB 00000488: DUP2 00000489: CALLDATALOAD 0000048a: DUP2 0000048b: AND 0000048c: SWAP2 0000048d: PUSH1 0x20 0000048f: DUP2 00000490: ADD 00000491: CALLDATALOAD 00000492: SWAP1 00000493: SWAP2 00000494: AND 00000495: SWAP1 00000496: PUSH1 0x40 00000498: ADD 00000499: CALLDATALOAD 0000049a: PUSH2 0x0b61 0000049d: JUMP 0000049e: JUMPDEST 0000049f: PUSH1 0x00 000004a1: CALLER 000004a2: ADDRESS 000004a3: EQ 000004a4: PUSH2 0x04de 000004a7: JUMPI 000004a8: PUSH1 0x40 000004aa: MLOAD 000004ab: PUSH3 0x461bcd 000004af: PUSH1 0xe5 000004b1: SHL 000004b2: DUP2 000004b3: MSTORE 000004b4: PUSH1 0x04 000004b6: ADD 000004b7: DUP1 000004b8: DUP1 000004b9: PUSH1 0x20 000004bb: ADD 000004bc: DUP3 000004bd: DUP2 000004be: SUB 000004bf: DUP3 000004c0: MSTORE 000004c1: PUSH1 0x25 000004c3: DUP2 000004c4: MSTORE 000004c5: PUSH1 0x20 000004c7: ADD 000004c8: DUP1 000004c9: PUSH2 0x17c1 000004cc: PUSH1 0x25 000004ce: SWAP2 000004cf: CODECOPY 000004d0: PUSH1 0x40 000004d2: ADD 000004d3: SWAP2 000004d4: POP 000004d5: POP 000004d6: PUSH1 0x40 000004d8: MLOAD 000004d9: DUP1 000004da: SWAP2 000004db: SUB 000004dc: SWAP1 000004dd: REVERT 000004de: JUMPDEST 000004df: PUSH1 0x00 000004e1: JUMPDEST 000004e2: DUP3 000004e3: DUP2 000004e4: LT 000004e5: ISZERO 000004e6: PUSH2 0x0587 000004e9: JUMPI 000004ea: DUP4 000004eb: DUP4 000004ec: DUP3 000004ed: DUP2 000004ee: DUP2 000004ef: LT 000004f0: PUSH2 0x04f5 000004f3: JUMPI 000004f4: INVALID 000004f5: JUMPDEST 000004f6: SWAP1 000004f7: POP 000004f8: PUSH1 0x20 000004fa: MUL 000004fb: ADD 000004fc: CALLDATALOAD 000004fd: PUSH1 0x01 000004ff: PUSH1 0x01 00000501: PUSH1 0xa0 00000503: SHL 00000504: SUB 00000505: AND 00000506: PUSH1 0x01 00000508: PUSH1 0x01 0000050a: PUSH1 0xa0 0000050c: SHL 0000050d: SUB 0000050e: AND 0000050f: PUSH4 0x9cee789f 00000514: DUP7 00000515: PUSH1 0x40 00000517: MLOAD 00000518: DUP3 00000519: PUSH4 0xffffffff 0000051e: AND 0000051f: PUSH1 0xe0 00000521: SHL 00000522: DUP2 00000523: MSTORE 00000524: PUSH1 0x04 00000526: ADD 00000527: DUP1 00000528: DUP3 00000529: PUSH1 0x01 0000052b: PUSH1 0x01 0000052d: PUSH1 0xa0 0000052f: SHL 00000530: SUB 00000531: AND 00000532: DUP2 00000533: MSTORE 00000534: PUSH1 0x20 00000536: ADD 00000537: SWAP2 00000538: POP 00000539: POP 0000053a: PUSH1 0x20 0000053c: PUSH1 0x40 0000053e: MLOAD 0000053f: DUP1 00000540: DUP4 00000541: SUB 00000542: DUP2 00000543: PUSH1 0x00 00000545: DUP8 00000546: DUP1 00000547: EXTCODESIZE 00000548: ISZERO 00000549: DUP1 0000054a: ISZERO 0000054b: PUSH2 0x0553 0000054e: JUMPI 0000054f: PUSH1 0x00 00000551: DUP1 00000552: REVERT 00000553: JUMPDEST 00000554: POP 00000555: GAS 00000556: CALL 00000557: ISZERO 00000558: DUP1 00000559: ISZERO 0000055a: PUSH2 0x0567 0000055d: JUMPI 0000055e: RETURNDATASIZE 0000055f: PUSH1 0x00 00000561: DUP1 00000562: RETURNDATACOPY 00000563: RETURNDATASIZE 00000564: PUSH1 0x00 00000566: REVERT 00000567: JUMPDEST 00000568: POP 00000569: POP 0000056a: POP 0000056b: POP 0000056c: PUSH1 0x40 0000056e: MLOAD 0000056f: RETURNDATASIZE 00000570: PUSH1 0x20 00000572: DUP2 00000573: LT 00000574: ISZERO 00000575: PUSH2 0x057d 00000578: JUMPI 00000579: PUSH1 0x00 0000057b: DUP1 0000057c: REVERT 0000057d: JUMPDEST 0000057e: POP 0000057f: POP 00000580: PUSH1 0x01 00000582: ADD 00000583: PUSH2 0x04e1 00000586: JUMP 00000587: JUMPDEST 00000588: POP 00000589: PUSH1 0x01 0000058b: SWAP5 0000058c: SWAP4 0000058d: POP 0000058e: POP 0000058f: POP 00000590: POP 00000591: JUMP 00000592: JUMPDEST 00000593: PUSH1 0x01 00000595: SLOAD 00000596: PUSH1 0x40 00000598: DUP1 00000599: MLOAD 0000059a: PUSH1 0x20 0000059c: DUP1 0000059d: DUP3 0000059e: ADD 0000059f: DUP6 000005a0: SWAP1 000005a1: MSTORE 000005a2: DUP3 000005a3: MLOAD 000005a4: DUP1 000005a5: DUP4 000005a6: SUB 000005a7: DUP3 000005a8: ADD 000005a9: DUP2 000005aa: MSTORE 000005ab: SWAP2 000005ac: DUP4 000005ad: ADD 000005ae: SWAP1 000005af: SWAP3 000005b0: MSTORE 000005b1: DUP1 000005b2: MLOAD 000005b3: SWAP2 000005b4: ADD 000005b5: KECCAK256 000005b6: PUSH1 0x00 000005b8: SWAP2 000005b9: PUSH2 0x05cd 000005bc: SWAP2 000005bd: ADDRESS 000005be: SWAP2 000005bf: PUSH1 0x01 000005c1: PUSH1 0x01 000005c3: PUSH1 0xa0 000005c5: SHL 000005c6: SUB 000005c7: AND 000005c8: SWAP1 000005c9: PUSH2 0x0bb4 000005cc: JUMP 000005cd: JUMPDEST 000005ce: SWAP3 000005cf: SWAP2 000005d0: POP 000005d1: POP 000005d2: JUMP 000005d3: JUMPDEST 000005d4: PUSH1 0x02 000005d6: SLOAD 000005d7: PUSH1 0x00 000005d9: SWAP1 000005da: PUSH1 0x01 000005dc: PUSH1 0x01 000005de: PUSH1 0xa0 000005e0: SHL 000005e1: SUB 000005e2: AND 000005e3: ISZERO 000005e4: PUSH2 0x061e 000005e7: JUMPI 000005e8: PUSH1 0x40 000005ea: MLOAD 000005eb: PUSH3 0x461bcd 000005ef: PUSH1 0xe5 000005f1: SHL 000005f2: DUP2 000005f3: MSTORE 000005f4: PUSH1 0x04 000005f6: ADD 000005f7: DUP1 000005f8: DUP1 000005f9: PUSH1 0x20 000005fb: ADD 000005fc: DUP3 000005fd: DUP2 000005fe: SUB 000005ff: DUP3 00000600: MSTORE 00000601: PUSH1 0x27 00000603: DUP2 00000604: MSTORE 00000605: PUSH1 0x20 00000607: ADD 00000608: DUP1 00000609: PUSH2 0x17e6 0000060c: PUSH1 0x27 0000060e: SWAP2 0000060f: CODECOPY 00000610: PUSH1 0x40 00000612: ADD 00000613: SWAP2 00000614: POP 00000615: POP 00000616: PUSH1 0x40 00000618: MLOAD 00000619: DUP1 0000061a: SWAP2 0000061b: SUB 0000061c: SWAP1 0000061d: REVERT 0000061e: JUMPDEST 0000061f: PUSH1 0x01 00000621: PUSH1 0x01 00000623: PUSH1 0xa0 00000625: SHL 00000626: SUB 00000627: DUP4 00000628: AND 00000629: PUSH2 0x0663 0000062c: JUMPI 0000062d: PUSH1 0x40 0000062f: MLOAD 00000630: PUSH3 0x461bcd 00000634: PUSH1 0xe5 00000636: SHL 00000637: DUP2 00000638: MSTORE 00000639: PUSH1 0x04 0000063b: ADD 0000063c: DUP1 0000063d: DUP1 0000063e: PUSH1 0x20 00000640: ADD 00000641: DUP3 00000642: DUP2 00000643: SUB 00000644: DUP3 00000645: MSTORE 00000646: PUSH1 0x24 00000648: DUP2 00000649: MSTORE 0000064a: PUSH1 0x20 0000064c: ADD 0000064d: DUP1 0000064e: PUSH2 0x179d 00000651: PUSH1 0x24 00000653: SWAP2 00000654: CODECOPY 00000655: PUSH1 0x40 00000657: ADD 00000658: SWAP2 00000659: POP 0000065a: POP 0000065b: PUSH1 0x40 0000065d: MLOAD 0000065e: DUP1 0000065f: SWAP2 00000660: SUB 00000661: SWAP1 00000662: REVERT 00000663: JUMPDEST 00000664: PUSH1 0x01 00000666: PUSH1 0x01 00000668: PUSH1 0xa0 0000066a: SHL 0000066b: SUB 0000066c: DUP3 0000066d: AND 0000066e: PUSH2 0x06a8 00000671: JUMPI 00000672: PUSH1 0x40 00000674: MLOAD 00000675: PUSH3 0x461bcd 00000679: PUSH1 0xe5 0000067b: SHL 0000067c: DUP2 0000067d: MSTORE 0000067e: PUSH1 0x04 00000680: ADD 00000681: DUP1 00000682: DUP1 00000683: PUSH1 0x20 00000685: ADD 00000686: DUP3 00000687: DUP2 00000688: SUB 00000689: DUP3 0000068a: MSTORE 0000068b: PUSH1 0x30 0000068d: DUP2 0000068e: MSTORE 0000068f: PUSH1 0x20 00000691: ADD 00000692: DUP1 00000693: PUSH2 0x1885 00000696: PUSH1 0x30 00000698: SWAP2 00000699: CODECOPY 0000069a: PUSH1 0x40 0000069c: ADD 0000069d: SWAP2 0000069e: POP 0000069f: POP 000006a0: PUSH1 0x40 000006a2: MLOAD 000006a3: DUP1 000006a4: SWAP2 000006a5: SUB 000006a6: SWAP1 000006a7: REVERT 000006a8: JUMPDEST 000006a9: POP 000006aa: PUSH1 0x02 000006ac: DUP1 000006ad: SLOAD 000006ae: PUSH1 0x01 000006b0: PUSH1 0x01 000006b2: PUSH1 0xa0 000006b4: SHL 000006b5: SUB 000006b6: SWAP4 000006b7: DUP5 000006b8: AND 000006b9: PUSH1 0x01 000006bb: PUSH1 0x01 000006bd: PUSH1 0xa0 000006bf: SHL 000006c0: SUB 000006c1: NOT 000006c2: SWAP2 000006c3: DUP3 000006c4: AND 000006c5: OR 000006c6: SWAP1 000006c7: SWAP2 000006c8: SSTORE 000006c9: PUSH1 0x01 000006cb: DUP1 000006cc: SLOAD 000006cd: SWAP3 000006ce: SWAP1 000006cf: SWAP4 000006d0: AND 000006d1: SWAP2 000006d2: AND 000006d3: OR 000006d4: DUP2 000006d5: SSTORE 000006d6: SWAP1 000006d7: JUMP 000006d8: JUMPDEST 000006d9: PUSH1 0x02 000006db: SLOAD 000006dc: PUSH1 0x40 000006de: DUP1 000006df: MLOAD 000006e0: PUSH4 0x04fc37bb 000006e5: PUSH1 0xe3 000006e7: SHL 000006e8: DUP2 000006e9: MSTORE 000006ea: CALLER 000006eb: PUSH1 0x04 000006ed: DUP3 000006ee: ADD 000006ef: MSTORE 000006f0: SWAP1 000006f1: MLOAD 000006f2: PUSH1 0x00 000006f4: SWAP3 000006f5: PUSH1 0x01 000006f7: PUSH1 0x01 000006f9: PUSH1 0xa0 000006fb: SHL 000006fc: SUB 000006fd: AND 000006fe: SWAP2 000006ff: PUSH4 0x27e1bdd8 00000704: SWAP2 00000705: PUSH1 0x24 00000707: DUP1 00000708: DUP4 00000709: ADD 0000070a: SWAP3 0000070b: PUSH1 0x20 0000070d: SWAP3 0000070e: SWAP2 0000070f: SWAP1 00000710: DUP3 00000711: SWAP1 00000712: SUB 00000713: ADD 00000714: DUP2 00000715: DUP7 00000716: DUP1 00000717: EXTCODESIZE 00000718: ISZERO 00000719: DUP1 0000071a: ISZERO 0000071b: PUSH2 0x0723 0000071e: JUMPI 0000071f: PUSH1 0x00 00000721: DUP1 00000722: REVERT 00000723: JUMPDEST 00000724: POP 00000725: GAS 00000726: STATICCALL 00000727: ISZERO 00000728: DUP1 00000729: ISZERO 0000072a: PUSH2 0x0737 0000072d: JUMPI 0000072e: RETURNDATASIZE 0000072f: PUSH1 0x00 00000731: DUP1 00000732: RETURNDATACOPY 00000733: RETURNDATASIZE 00000734: PUSH1 0x00 00000736: REVERT 00000737: JUMPDEST 00000738: POP 00000739: POP 0000073a: POP 0000073b: POP 0000073c: PUSH1 0x40 0000073e: MLOAD 0000073f: RETURNDATASIZE 00000740: PUSH1 0x20 00000742: DUP2 00000743: LT 00000744: ISZERO 00000745: PUSH2 0x074d 00000748: JUMPI 00000749: PUSH1 0x00 0000074b: DUP1 0000074c: REVERT 0000074d: JUMPDEST 0000074e: POP 0000074f: MLOAD 00000750: PUSH2 0x078a 00000753: JUMPI 00000754: PUSH1 0x40 00000756: MLOAD 00000757: PUSH3 0x461bcd 0000075b: PUSH1 0xe5 0000075d: SHL 0000075e: DUP2 0000075f: MSTORE 00000760: PUSH1 0x04 00000762: ADD 00000763: DUP1 00000764: DUP1 00000765: PUSH1 0x20 00000767: ADD 00000768: DUP3 00000769: DUP2 0000076a: SUB 0000076b: DUP3 0000076c: MSTORE 0000076d: PUSH1 0x26 0000076f: DUP2 00000770: MSTORE 00000771: PUSH1 0x20 00000773: ADD 00000774: DUP1 00000775: PUSH2 0x183e 00000778: PUSH1 0x26 0000077a: SWAP2 0000077b: CODECOPY 0000077c: PUSH1 0x40 0000077e: ADD 0000077f: SWAP2 00000780: POP 00000781: POP 00000782: PUSH1 0x40 00000784: MLOAD 00000785: DUP1 00000786: SWAP2 00000787: SUB 00000788: SWAP1 00000789: REVERT 0000078a: JUMPDEST 0000078b: PUSH1 0x00 0000078d: PUSH2 0x0807 00000790: DUP11 00000791: DUP11 00000792: DUP1 00000793: DUP1 00000794: PUSH1 0x1f 00000796: ADD 00000797: PUSH1 0x20 00000799: DUP1 0000079a: SWAP2 0000079b: DIV 0000079c: MUL 0000079d: PUSH1 0x20 0000079f: ADD 000007a0: PUSH1 0x40 000007a2: MLOAD 000007a3: SWAP1 000007a4: DUP2 000007a5: ADD 000007a6: PUSH1 0x40 000007a8: MSTORE 000007a9: DUP1 000007aa: SWAP4 000007ab: SWAP3 000007ac: SWAP2 000007ad: SWAP1 000007ae: DUP2 000007af: DUP2 000007b0: MSTORE 000007b1: PUSH1 0x20 000007b3: ADD 000007b4: DUP4 000007b5: DUP4 000007b6: DUP1 000007b7: DUP3 000007b8: DUP5 000007b9: CALLDATACOPY 000007ba: PUSH1 0x00 000007bc: SWAP3 000007bd: ADD 000007be: SWAP2 000007bf: SWAP1 000007c0: SWAP2 000007c1: MSTORE 000007c2: POP 000007c3: POP 000007c4: PUSH1 0x40 000007c6: DUP1 000007c7: MLOAD 000007c8: PUSH1 0x20 000007ca: PUSH1 0x1f 000007cc: DUP11 000007cd: ADD 000007ce: DUP2 000007cf: SWAP1 000007d0: DIV 000007d1: DUP2 000007d2: MUL 000007d3: DUP3 000007d4: ADD 000007d5: DUP2 000007d6: ADD 000007d7: SWAP1 000007d8: SWAP3 000007d9: MSTORE 000007da: DUP9 000007db: DUP2 000007dc: MSTORE 000007dd: DUP14 000007de: SWAP4 000007df: POP 000007e0: DUP13 000007e1: SWAP3 000007e2: POP 000007e3: DUP12 000007e4: SWAP2 000007e5: DUP12 000007e6: SWAP2 000007e7: SWAP1 000007e8: DUP12 000007e9: SWAP1 000007ea: DUP12 000007eb: SWAP1 000007ec: DUP2 000007ed: SWAP1 000007ee: DUP5 000007ef: ADD 000007f0: DUP4 000007f1: DUP3 000007f2: DUP1 000007f3: DUP3 000007f4: DUP5 000007f5: CALLDATACOPY 000007f6: PUSH1 0x00 000007f8: SWAP3 000007f9: ADD 000007fa: SWAP2 000007fb: SWAP1 000007fc: SWAP2 000007fd: MSTORE 000007fe: POP 000007ff: PUSH2 0x0c13 00000802: SWAP3 00000803: POP 00000804: POP 00000805: POP 00000806: JUMP 00000807: JUMPDEST 00000808: SWAP1 00000809: POP 0000080a: PUSH1 0x01 0000080c: PUSH1 0x01 0000080e: PUSH1 0xa0 00000810: SHL 00000811: SUB 00000812: DUP2 00000813: AND 00000814: CALLER 00000815: EQ 00000816: DUP1 00000817: ISZERO 00000818: SWAP1 00000819: PUSH2 0x0897 0000081c: JUMPI 0000081d: POP 0000081e: PUSH1 0x02 00000820: SLOAD 00000821: PUSH1 0x40 00000823: DUP1 00000824: MLOAD 00000825: PUSH4 0x615fa815 0000082a: PUSH1 0xe0 0000082c: SHL 0000082d: DUP2 0000082e: MSTORE 0000082f: PUSH1 0x01 00000831: PUSH1 0x01 00000833: PUSH1 0xa0 00000835: SHL 00000836: SUB 00000837: DUP5 00000838: DUP2 00000839: AND 0000083a: PUSH1 0x04 0000083c: DUP4 0000083d: ADD 0000083e: MSTORE 0000083f: SWAP2 00000840: MLOAD 00000841: SWAP2 00000842: SWAP1 00000843: SWAP3 00000844: AND 00000845: SWAP2 00000846: PUSH4 0x615fa815 0000084b: SWAP2 0000084c: PUSH1 0x24 0000084e: DUP1 0000084f: DUP4 00000850: ADD 00000851: SWAP3 00000852: PUSH1 0x20 00000854: SWAP3 00000855: SWAP2 00000856: SWAP1 00000857: DUP3 00000858: SWAP1 00000859: SUB 0000085a: ADD 0000085b: DUP2 0000085c: DUP7 0000085d: DUP1 0000085e: EXTCODESIZE 0000085f: ISZERO 00000860: DUP1 00000861: ISZERO 00000862: PUSH2 0x086a 00000865: JUMPI 00000866: PUSH1 0x00 00000868: DUP1 00000869: REVERT 0000086a: JUMPDEST 0000086b: POP 0000086c: GAS 0000086d: STATICCALL 0000086e: ISZERO 0000086f: DUP1 00000870: ISZERO 00000871: PUSH2 0x087e 00000874: JUMPI 00000875: RETURNDATASIZE 00000876: PUSH1 0x00 00000878: DUP1 00000879: RETURNDATACOPY 0000087a: RETURNDATASIZE 0000087b: PUSH1 0x00 0000087d: REVERT 0000087e: JUMPDEST 0000087f: POP 00000880: POP 00000881: POP 00000882: POP 00000883: PUSH1 0x40 00000885: MLOAD 00000886: RETURNDATASIZE 00000887: PUSH1 0x20 00000889: DUP2 0000088a: LT 0000088b: ISZERO 0000088c: PUSH2 0x0894 0000088f: JUMPI 00000890: PUSH1 0x00 00000892: DUP1 00000893: REVERT 00000894: JUMPDEST 00000895: POP 00000896: MLOAD 00000897: JUMPDEST 00000898: PUSH2 0x08d2 0000089b: JUMPI 0000089c: PUSH1 0x40 0000089e: MLOAD 0000089f: PUSH3 0x461bcd 000008a3: PUSH1 0xe5 000008a5: SHL 000008a6: DUP2 000008a7: MSTORE 000008a8: PUSH1 0x04 000008aa: ADD 000008ab: DUP1 000008ac: DUP1 000008ad: PUSH1 0x20 000008af: ADD 000008b0: DUP3 000008b1: DUP2 000008b2: SUB 000008b3: DUP3 000008b4: MSTORE 000008b5: PUSH1 0x31 000008b7: DUP2 000008b8: MSTORE 000008b9: PUSH1 0x20 000008bb: ADD 000008bc: DUP1 000008bd: PUSH2 0x180d 000008c0: PUSH1 0x31 000008c2: SWAP2 000008c3: CODECOPY 000008c4: PUSH1 0x40 000008c6: ADD 000008c7: SWAP2 000008c8: POP 000008c9: POP 000008ca: PUSH1 0x40 000008cc: MLOAD 000008cd: DUP1 000008ce: SWAP2 000008cf: SUB 000008d0: SWAP1 000008d1: REVERT 000008d2: JUMPDEST 000008d3: PUSH2 0x0915 000008d6: DUP9 000008d7: DUP9 000008d8: DUP9 000008d9: DUP9 000008da: DUP9 000008db: DUP9 000008dc: DUP1 000008dd: DUP1 000008de: PUSH1 0x1f 000008e0: ADD 000008e1: PUSH1 0x20 000008e3: DUP1 000008e4: SWAP2 000008e5: DIV 000008e6: MUL 000008e7: PUSH1 0x20 000008e9: ADD 000008ea: PUSH1 0x40 000008ec: MLOAD 000008ed: SWAP1 000008ee: DUP2 000008ef: ADD 000008f0: PUSH1 0x40 000008f2: MSTORE 000008f3: DUP1 000008f4: SWAP4 000008f5: SWAP3 000008f6: SWAP2 000008f7: SWAP1 000008f8: DUP2 000008f9: DUP2 000008fa: MSTORE 000008fb: PUSH1 0x20 000008fd: ADD 000008fe: DUP4 000008ff: DUP4 00000900: DUP1 00000901: DUP3 00000902: DUP5 00000903: CALLDATACOPY 00000904: PUSH1 0x00 00000906: SWAP3 00000907: ADD 00000908: SWAP2 00000909: SWAP1 0000090a: SWAP2 0000090b: MSTORE 0000090c: POP 0000090d: PUSH2 0x0cdc 00000910: SWAP3 00000911: POP 00000912: POP 00000913: POP 00000914: JUMP 00000915: JUMPDEST 00000916: SWAP11 00000917: SWAP10 00000918: POP 00000919: POP 0000091a: POP 0000091b: POP 0000091c: POP 0000091d: POP 0000091e: POP 0000091f: POP 00000920: POP 00000921: POP 00000922: JUMP 00000923: JUMPDEST 00000924: PUSH1 0x01 00000926: SLOAD 00000927: PUSH1 0x40 00000929: DUP1 0000092a: MLOAD 0000092b: PUSH1 0x20 0000092d: DUP1 0000092e: DUP3 0000092f: ADD 00000930: DUP6 00000931: SWAP1 00000932: MSTORE 00000933: DUP3 00000934: MLOAD 00000935: DUP1 00000936: DUP4 00000937: SUB 00000938: DUP3 00000939: ADD 0000093a: DUP2 0000093b: MSTORE 0000093c: SWAP2 0000093d: DUP4 0000093e: ADD 0000093f: SWAP1 00000940: SWAP3 00000941: MSTORE 00000942: DUP1 00000943: MLOAD 00000944: SWAP2 00000945: ADD 00000946: KECCAK256 00000947: PUSH1 0x00 00000949: SWAP2 0000094a: DUP3 0000094b: SWAP2 0000094c: PUSH2 0x0962 0000094f: SWAP2 00000950: ADDRESS 00000951: SWAP2 00000952: PUSH1 0x01 00000954: PUSH1 0x01 00000956: PUSH1 0xa0 00000958: SHL 00000959: SUB 0000095a: SWAP1 0000095b: SWAP2 0000095c: AND 0000095d: SWAP1 0000095e: PUSH2 0x0bb4 00000961: JUMP 00000962: JUMPDEST 00000963: PUSH1 0x01 00000965: SLOAD 00000966: SWAP1 00000967: SWAP2 00000968: POP 00000969: PUSH2 0x097b 0000096c: SWAP1 0000096d: PUSH1 0x01 0000096f: PUSH1 0x01 00000971: PUSH1 0xa0 00000973: SHL 00000974: SUB 00000975: AND 00000976: DUP3 00000977: PUSH2 0x0fe9 0000097a: JUMP 0000097b: JUMPDEST 0000097c: SWAP4 0000097d: SWAP3 0000097e: POP 0000097f: POP 00000980: POP 00000981: JUMP 00000982: JUMPDEST 00000983: PUSH1 0x00 00000985: CALLER 00000986: ADDRESS 00000987: EQ 00000988: PUSH2 0x09c2 0000098b: JUMPI 0000098c: PUSH1 0x40 0000098e: MLOAD 0000098f: PUSH3 0x461bcd 00000993: PUSH1 0xe5 00000995: SHL 00000996: DUP2 00000997: MSTORE 00000998: PUSH1 0x04 0000099a: ADD 0000099b: DUP1 0000099c: DUP1 0000099d: PUSH1 0x20 0000099f: ADD 000009a0: DUP3 000009a1: DUP2 000009a2: SUB 000009a3: DUP3 000009a4: MSTORE 000009a5: PUSH1 0x25 000009a7: DUP2 000009a8: MSTORE 000009a9: PUSH1 0x20 000009ab: ADD 000009ac: DUP1 000009ad: PUSH2 0x17c1 000009b0: PUSH1 0x25 000009b2: SWAP2 000009b3: CODECOPY 000009b4: PUSH1 0x40 000009b6: ADD 000009b7: SWAP2 000009b8: POP 000009b9: POP 000009ba: PUSH1 0x40 000009bc: MLOAD 000009bd: DUP1 000009be: SWAP2 000009bf: SUB 000009c0: SWAP1 000009c1: REVERT 000009c2: JUMPDEST 000009c3: PUSH1 0x00 000009c5: JUMPDEST 000009c6: DUP3 000009c7: DUP2 000009c8: LT 000009c9: ISZERO 000009ca: PUSH2 0x0a57 000009cd: JUMPI 000009ce: DUP4 000009cf: DUP4 000009d0: DUP3 000009d1: DUP2 000009d2: DUP2 000009d3: LT 000009d4: PUSH2 0x09d9 000009d7: JUMPI 000009d8: INVALID 000009d9: JUMPDEST 000009da: SWAP1 000009db: POP 000009dc: PUSH1 0x20 000009de: MUL 000009df: ADD 000009e0: CALLDATALOAD 000009e1: PUSH1 0x01 000009e3: PUSH1 0x01 000009e5: PUSH1 0xa0 000009e7: SHL 000009e8: SUB 000009e9: AND 000009ea: PUSH1 0x01 000009ec: PUSH1 0x01 000009ee: PUSH1 0xa0 000009f0: SHL 000009f1: SUB 000009f2: AND 000009f3: PUSH4 0x1d4233b9 000009f8: PUSH1 0x40 000009fa: MLOAD 000009fb: DUP2 000009fc: PUSH4 0xffffffff 00000a01: AND 00000a02: PUSH1 0xe0 00000a04: SHL 00000a05: DUP2 00000a06: MSTORE 00000a07: PUSH1 0x04 00000a09: ADD 00000a0a: PUSH1 0x20 00000a0c: PUSH1 0x40 00000a0e: MLOAD 00000a0f: DUP1 00000a10: DUP4 00000a11: SUB 00000a12: DUP2 00000a13: PUSH1 0x00 00000a15: DUP8 00000a16: DUP1 00000a17: EXTCODESIZE 00000a18: ISZERO 00000a19: DUP1 00000a1a: ISZERO 00000a1b: PUSH2 0x0a23 00000a1e: JUMPI 00000a1f: PUSH1 0x00 00000a21: DUP1 00000a22: REVERT 00000a23: JUMPDEST 00000a24: POP 00000a25: GAS 00000a26: CALL 00000a27: ISZERO 00000a28: DUP1 00000a29: ISZERO 00000a2a: PUSH2 0x0a37 00000a2d: JUMPI 00000a2e: RETURNDATASIZE 00000a2f: PUSH1 0x00 00000a31: DUP1 00000a32: RETURNDATACOPY 00000a33: RETURNDATASIZE 00000a34: PUSH1 0x00 00000a36: REVERT 00000a37: JUMPDEST 00000a38: POP 00000a39: POP 00000a3a: POP 00000a3b: POP 00000a3c: PUSH1 0x40 00000a3e: MLOAD 00000a3f: RETURNDATASIZE 00000a40: PUSH1 0x20 00000a42: DUP2 00000a43: LT 00000a44: ISZERO 00000a45: PUSH2 0x0a4d 00000a48: JUMPI 00000a49: PUSH1 0x00 00000a4b: DUP1 00000a4c: REVERT 00000a4d: JUMPDEST 00000a4e: POP 00000a4f: POP 00000a50: PUSH1 0x01 00000a52: ADD 00000a53: PUSH2 0x09c5 00000a56: JUMP 00000a57: JUMPDEST 00000a58: POP 00000a59: PUSH1 0x01 00000a5b: SWAP4 00000a5c: SWAP3 00000a5d: POP 00000a5e: POP 00000a5f: POP 00000a60: JUMP 00000a61: JUMPDEST 00000a62: PUSH1 0x40 00000a64: DUP1 00000a65: MLOAD 00000a66: PUSH1 0x20 00000a68: DUP1 00000a69: DUP3 00000a6a: ADD 00000a6b: DUP5 00000a6c: SWAP1 00000a6d: MSTORE 00000a6e: DUP3 00000a6f: MLOAD 00000a70: DUP1 00000a71: DUP4 00000a72: SUB 00000a73: DUP3 00000a74: ADD 00000a75: DUP2 00000a76: MSTORE 00000a77: SWAP2 00000a78: DUP4 00000a79: ADD 00000a7a: SWAP1 00000a7b: SWAP3 00000a7c: MSTORE 00000a7d: DUP1 00000a7e: MLOAD 00000a7f: SWAP2 00000a80: ADD 00000a81: KECCAK256 00000a82: PUSH1 0x01 00000a84: SLOAD 00000a85: PUSH1 0x00 00000a87: SWAP2 00000a88: SWAP1 00000a89: DUP3 00000a8a: SWAP1 00000a8b: PUSH2 0x0a9d 00000a8e: SWAP1 00000a8f: PUSH1 0x01 00000a91: PUSH1 0x01 00000a93: PUSH1 0xa0 00000a95: SHL 00000a96: SUB 00000a97: AND 00000a98: DUP4 00000a99: PUSH2 0x104a 00000a9c: JUMP 00000a9d: JUMPDEST 00000a9e: PUSH1 0x40 00000aa0: DUP1 00000aa1: MLOAD 00000aa2: PUSH1 0x01 00000aa4: PUSH1 0x01 00000aa6: PUSH1 0xa0 00000aa8: SHL 00000aa9: SUB 00000aaa: DUP4 00000aab: AND 00000aac: DUP2 00000aad: MSTORE 00000aae: SWAP1 00000aaf: MLOAD 00000ab0: SWAP2 00000ab1: SWAP3 00000ab2: POP 00000ab3: PUSH32 0x62e5833a6a9c6df6056429f9a3334d883f5b47d7d9cfbfe5cabdab658c707ae6 00000ad4: SWAP2 00000ad5: SWAP1 00000ad6: DUP2 00000ad7: SWAP1 00000ad8: SUB 00000ad9: PUSH1 0x20 00000adb: ADD 00000adc: SWAP1 00000add: LOG1 00000ade: SWAP4 00000adf: SWAP3 00000ae0: POP 00000ae1: POP 00000ae2: POP 00000ae3: JUMP 00000ae4: JUMPDEST 00000ae5: PUSH1 0x02 00000ae7: SLOAD 00000ae8: PUSH1 0x01 00000aea: PUSH1 0x01 00000aec: PUSH1 0xa0 00000aee: SHL 00000aef: SUB 00000af0: AND 00000af1: SWAP1 00000af2: JUMP 00000af3: JUMPDEST 00000af4: PUSH1 0x01 00000af6: SLOAD 00000af7: PUSH1 0x01 00000af9: PUSH1 0x01 00000afb: PUSH1 0xa0 00000afd: SHL 00000afe: SUB 00000aff: AND 00000b00: SWAP1 00000b01: JUMP 00000b02: JUMPDEST 00000b03: PUSH1 0x00 00000b05: CALLER 00000b06: ADDRESS 00000b07: EQ 00000b08: PUSH2 0x0b42 00000b0b: JUMPI 00000b0c: PUSH1 0x40 00000b0e: MLOAD 00000b0f: PUSH3 0x461bcd 00000b13: PUSH1 0xe5 00000b15: SHL 00000b16: DUP2 00000b17: MSTORE 00000b18: PUSH1 0x04 00000b1a: ADD 00000b1b: DUP1 00000b1c: DUP1 00000b1d: PUSH1 0x20 00000b1f: ADD 00000b20: DUP3 00000b21: DUP2 00000b22: SUB 00000b23: DUP3 00000b24: MSTORE 00000b25: PUSH1 0x25 00000b27: DUP2 00000b28: MSTORE 00000b29: PUSH1 0x20 00000b2b: ADD 00000b2c: DUP1 00000b2d: PUSH2 0x17c1 00000b30: PUSH1 0x25 00000b32: SWAP2 00000b33: CODECOPY 00000b34: PUSH1 0x40 00000b36: ADD 00000b37: SWAP2 00000b38: POP 00000b39: POP 00000b3a: PUSH1 0x40 00000b3c: MLOAD 00000b3d: DUP1 00000b3e: SWAP2 00000b3f: SUB 00000b40: SWAP1 00000b41: REVERT 00000b42: JUMPDEST 00000b43: PUSH2 0x097b 00000b46: DUP4 00000b47: DUP4 00000b48: PUSH2 0x10a2 00000b4b: JUMP 00000b4c: JUMPDEST 00000b4d: PUSH1 0x00 00000b4f: SWAP1 00000b50: DUP2 00000b51: MSTORE 00000b52: PUSH1 0x20 00000b54: DUP2 00000b55: SWAP1 00000b56: MSTORE 00000b57: PUSH1 0x40 00000b59: SWAP1 00000b5a: KECCAK256 00000b5b: SLOAD 00000b5c: PUSH1 0xff 00000b5e: AND 00000b5f: SWAP1 00000b60: JUMP 00000b61: JUMPDEST 00000b62: PUSH1 0x00 00000b64: CALLER 00000b65: ADDRESS 00000b66: EQ 00000b67: PUSH2 0x0ba1 00000b6a: JUMPI 00000b6b: PUSH1 0x40 00000b6d: MLOAD 00000b6e: PUSH3 0x461bcd 00000b72: PUSH1 0xe5 00000b74: SHL 00000b75: DUP2 00000b76: MSTORE 00000b77: PUSH1 0x04 00000b79: ADD 00000b7a: DUP1 00000b7b: DUP1 00000b7c: PUSH1 0x20 00000b7e: ADD 00000b7f: DUP3 00000b80: DUP2 00000b81: SUB 00000b82: DUP3 00000b83: MSTORE 00000b84: PUSH1 0x25 00000b86: DUP2 00000b87: MSTORE 00000b88: PUSH1 0x20 00000b8a: ADD 00000b8b: DUP1 00000b8c: PUSH2 0x17c1 00000b8f: PUSH1 0x25 00000b91: SWAP2 00000b92: CODECOPY 00000b93: PUSH1 0x40 00000b95: ADD 00000b96: SWAP2 00000b97: POP 00000b98: POP 00000b99: PUSH1 0x40 00000b9b: MLOAD 00000b9c: DUP1 00000b9d: SWAP2 00000b9e: SUB 00000b9f: SWAP1 00000ba0: REVERT 00000ba1: JUMPDEST 00000ba2: PUSH2 0x0bac 00000ba5: DUP5 00000ba6: DUP5 00000ba7: DUP5 00000ba8: PUSH2 0x119d 00000bab: JUMP 00000bac: JUMPDEST 00000bad: SWAP5 00000bae: SWAP4 00000baf: POP 00000bb0: POP 00000bb1: POP 00000bb2: POP 00000bb3: JUMP 00000bb4: JUMPDEST 00000bb5: PUSH1 0x40 00000bb7: MLOAD 00000bb8: PUSH20 0x3d602d80600a3d3981f3363d3d373d3d3d363d73 00000bcd: PUSH1 0x60 00000bcf: SHL 00000bd0: DUP2 00000bd1: MSTORE 00000bd2: PUSH1 0x60 00000bd4: DUP4 00000bd5: SWAP1 00000bd6: SHL 00000bd7: PUSH1 0x14 00000bd9: DUP3 00000bda: ADD 00000bdb: DUP2 00000bdc: SWAP1 00000bdd: MSTORE 00000bde: PUSH15 0x5af43d82803e903d91602b57fd5bf3 00000bee: PUSH1 0x88 00000bf0: SHL 00000bf1: PUSH1 0x28 00000bf3: DUP4 00000bf4: ADD 00000bf5: MSTORE 00000bf6: PUSH1 0x37 00000bf8: SWAP1 00000bf9: SWAP2 00000bfa: KECCAK256 00000bfb: PUSH1 0x00 00000bfd: SWAP2 00000bfe: SWAP1 00000bff: PUSH2 0x0c09 00000c02: DUP5 00000c03: DUP3 00000c04: DUP9 00000c05: PUSH2 0x1207 00000c08: JUMP 00000c09: JUMPDEST 00000c0a: SWAP7 00000c0b: SWAP6 00000c0c: POP 00000c0d: POP 00000c0e: POP 00000c0f: POP 00000c10: POP 00000c11: POP 00000c12: JUMP 00000c13: JUMPDEST 00000c14: PUSH1 0x00 00000c16: DUP1 00000c17: DUP7 00000c18: DUP7 00000c19: DUP7 00000c1a: DUP7 00000c1b: DUP7 00000c1c: PUSH1 0x40 00000c1e: MLOAD 00000c1f: PUSH1 0x20 00000c21: ADD 00000c22: DUP1 00000c23: DUP7 00000c24: PUSH1 0x01 00000c26: PUSH1 0x01 00000c28: PUSH1 0xa0 00000c2a: SHL 00000c2b: SUB 00000c2c: AND 00000c2d: PUSH1 0x60 00000c2f: SHL 00000c30: DUP2 00000c31: MSTORE 00000c32: PUSH1 0x14 00000c34: ADD 00000c35: DUP6 00000c36: PUSH1 0x01 00000c38: PUSH1 0x01 00000c3a: PUSH1 0xa0 00000c3c: SHL 00000c3d: SUB 00000c3e: AND 00000c3f: PUSH1 0x60 00000c41: SHL 00000c42: DUP2 00000c43: MSTORE 00000c44: PUSH1 0x14 00000c46: ADD 00000c47: DUP5 00000c48: DUP2 00000c49: MSTORE 00000c4a: PUSH1 0x20 00000c4c: ADD 00000c4d: DUP4 00000c4e: DUP2 00000c4f: MSTORE 00000c50: PUSH1 0x20 00000c52: ADD 00000c53: DUP3 00000c54: DUP1 00000c55: MLOAD 00000c56: SWAP1 00000c57: PUSH1 0x20 00000c59: ADD 00000c5a: SWAP1 00000c5b: DUP1 00000c5c: DUP4 00000c5d: DUP4 00000c5e: JUMPDEST 00000c5f: PUSH1 0x20 00000c61: DUP4 00000c62: LT 00000c63: PUSH2 0x0c7d 00000c66: JUMPI 00000c67: DUP1 00000c68: MLOAD 00000c69: DUP3 00000c6a: MSTORE 00000c6b: PUSH1 0x1f 00000c6d: NOT 00000c6e: SWAP1 00000c6f: SWAP3 00000c70: ADD 00000c71: SWAP2 00000c72: PUSH1 0x20 00000c74: SWAP2 00000c75: DUP3 00000c76: ADD 00000c77: SWAP2 00000c78: ADD 00000c79: PUSH2 0x0c5e 00000c7c: JUMP 00000c7d: JUMPDEST 00000c7e: PUSH1 0x01 00000c80: DUP4 00000c81: PUSH1 0x20 00000c83: SUB 00000c84: PUSH2 0x0100 00000c87: EXP 00000c88: SUB 00000c89: DUP1 00000c8a: NOT 00000c8b: DUP3 00000c8c: MLOAD 00000c8d: AND 00000c8e: DUP2 00000c8f: DUP5 00000c90: MLOAD 00000c91: AND 00000c92: DUP1 00000c93: DUP3 00000c94: OR 00000c95: DUP6 00000c96: MSTORE 00000c97: POP 00000c98: POP 00000c99: POP 00000c9a: POP 00000c9b: POP 00000c9c: POP 00000c9d: SWAP1 00000c9e: POP 00000c9f: ADD 00000ca0: SWAP6 00000ca1: POP 00000ca2: POP 00000ca3: POP 00000ca4: POP 00000ca5: POP 00000ca6: POP 00000ca7: PUSH1 0x40 00000ca9: MLOAD 00000caa: PUSH1 0x20 00000cac: DUP2 00000cad: DUP4 00000cae: SUB 00000caf: SUB 00000cb0: DUP2 00000cb1: MSTORE 00000cb2: SWAP1 00000cb3: PUSH1 0x40 00000cb5: MSTORE 00000cb6: DUP1 00000cb7: MLOAD 00000cb8: SWAP1 00000cb9: PUSH1 0x20 00000cbb: ADD 00000cbc: KECCAK256 00000cbd: SWAP1 00000cbe: POP 00000cbf: PUSH2 0x0cd0 00000cc2: PUSH2 0x0cca 00000cc5: DUP3 00000cc6: PUSH2 0x126b 00000cc9: JUMP 00000cca: JUMPDEST 00000ccb: DUP10 00000ccc: PUSH2 0x12bc 00000ccf: JUMP 00000cd0: JUMPDEST 00000cd1: SWAP9 00000cd2: SWAP8 00000cd3: POP 00000cd4: POP 00000cd5: POP 00000cd6: POP 00000cd7: POP 00000cd8: POP 00000cd9: POP 00000cda: POP 00000cdb: JUMP 00000cdc: JUMPDEST 00000cdd: PUSH1 0x00 00000cdf: PUSH1 0x01 00000ce1: PUSH1 0x01 00000ce3: PUSH1 0xa0 00000ce5: SHL 00000ce6: SUB 00000ce7: DUP7 00000ce8: AND 00000ce9: ADDRESS 00000cea: EQ 00000ceb: PUSH2 0x0d25 00000cee: JUMPI 00000cef: PUSH1 0x40 00000cf1: MLOAD 00000cf2: PUSH3 0x461bcd 00000cf6: PUSH1 0xe5 00000cf8: SHL 00000cf9: DUP2 00000cfa: MSTORE 00000cfb: PUSH1 0x04 00000cfd: ADD 00000cfe: DUP1 00000cff: DUP1 00000d00: PUSH1 0x20 00000d02: ADD 00000d03: DUP3 00000d04: DUP2 00000d05: SUB 00000d06: DUP3 00000d07: MSTORE 00000d08: PUSH1 0x21 00000d0a: DUP2 00000d0b: MSTORE 00000d0c: PUSH1 0x20 00000d0e: ADD 00000d0f: DUP1 00000d10: PUSH2 0x1864 00000d13: PUSH1 0x21 00000d15: SWAP2 00000d16: CODECOPY 00000d17: PUSH1 0x40 00000d19: ADD 00000d1a: SWAP2 00000d1b: POP 00000d1c: POP 00000d1d: PUSH1 0x40 00000d1f: MLOAD 00000d20: DUP1 00000d21: SWAP2 00000d22: SUB 00000d23: SWAP1 00000d24: REVERT 00000d25: JUMPDEST 00000d26: PUSH2 0x0d2e 00000d29: DUP4 00000d2a: PUSH2 0x13ad 00000d2d: JUMP 00000d2e: JUMPDEST 00000d2f: POP 00000d30: PUSH1 0x00 00000d32: PUSH1 0x60 00000d34: PUSH2 0x0d3e 00000d37: DUP8 00000d38: DUP8 00000d39: DUP7 00000d3a: PUSH2 0x1426 00000d3d: JUMP 00000d3e: JUMPDEST 00000d3f: SWAP2 00000d40: POP 00000d41: SWAP2 00000d42: POP 00000d43: DUP2 00000d44: ISZERO 00000d45: PUSH2 0x0eb9 00000d48: JUMPI 00000d49: PUSH32 0x8ef33a9072a35d9b41d5c5c744ba88308c0fb19f45973df39146cdf54011675f 00000d6a: DUP8 00000d6b: DUP8 00000d6c: DUP8 00000d6d: DUP8 00000d6e: DUP6 00000d6f: PUSH1 0x40 00000d71: MLOAD 00000d72: DUP1 00000d73: DUP7 00000d74: PUSH1 0x01 00000d76: PUSH1 0x01 00000d78: PUSH1 0xa0 00000d7a: SHL 00000d7b: SUB 00000d7c: AND 00000d7d: DUP2 00000d7e: MSTORE 00000d7f: PUSH1 0x20 00000d81: ADD 00000d82: DUP6 00000d83: DUP2 00000d84: MSTORE 00000d85: PUSH1 0x20 00000d87: ADD 00000d88: DUP5 00000d89: DUP2 00000d8a: MSTORE 00000d8b: PUSH1 0x20 00000d8d: ADD 00000d8e: DUP1 00000d8f: PUSH1 0x20 00000d91: ADD 00000d92: DUP1 00000d93: PUSH1 0x20 00000d95: ADD 00000d96: DUP4 00000d97: DUP2 00000d98: SUB 00000d99: DUP4 00000d9a: MSTORE 00000d9b: DUP6 00000d9c: DUP2 00000d9d: DUP2 00000d9e: MLOAD 00000d9f: DUP2 00000da0: MSTORE 00000da1: PUSH1 0x20 00000da3: ADD 00000da4: SWAP2 00000da5: POP 00000da6: DUP1 00000da7: MLOAD 00000da8: SWAP1 00000da9: PUSH1 0x20 00000dab: ADD 00000dac: SWAP1 00000dad: DUP1 00000dae: DUP4 00000daf: DUP4 00000db0: PUSH1 0x00 00000db2: JUMPDEST 00000db3: DUP4 00000db4: DUP2 00000db5: LT 00000db6: ISZERO 00000db7: PUSH2 0x0dca 00000dba: JUMPI 00000dbb: DUP2 00000dbc: DUP2 00000dbd: ADD 00000dbe: MLOAD 00000dbf: DUP4 00000dc0: DUP3 00000dc1: ADD 00000dc2: MSTORE 00000dc3: PUSH1 0x20 00000dc5: ADD 00000dc6: PUSH2 0x0db2 00000dc9: JUMP 00000dca: JUMPDEST 00000dcb: POP 00000dcc: POP 00000dcd: POP 00000dce: POP 00000dcf: SWAP1 00000dd0: POP 00000dd1: SWAP1 00000dd2: DUP2 00000dd3: ADD 00000dd4: SWAP1 00000dd5: PUSH1 0x1f 00000dd7: AND 00000dd8: DUP1 00000dd9: ISZERO 00000dda: PUSH2 0x0df7 00000ddd: JUMPI 00000dde: DUP1 00000ddf: DUP3 00000de0: SUB 00000de1: DUP1 00000de2: MLOAD 00000de3: PUSH1 0x01 00000de5: DUP4 00000de6: PUSH1 0x20 00000de8: SUB 00000de9: PUSH2 0x0100 00000dec: EXP 00000ded: SUB 00000dee: NOT 00000def: AND 00000df0: DUP2 00000df1: MSTORE 00000df2: PUSH1 0x20 00000df4: ADD 00000df5: SWAP2 00000df6: POP 00000df7: JUMPDEST 00000df8: POP 00000df9: DUP4 00000dfa: DUP2 00000dfb: SUB 00000dfc: DUP3 00000dfd: MSTORE 00000dfe: DUP5 00000dff: MLOAD 00000e00: DUP2 00000e01: MSTORE 00000e02: DUP5 00000e03: MLOAD 00000e04: PUSH1 0x20 00000e06: SWAP2 00000e07: DUP3 00000e08: ADD 00000e09: SWAP2 00000e0a: DUP7 00000e0b: ADD 00000e0c: SWAP1 00000e0d: DUP1 00000e0e: DUP4 00000e0f: DUP4 00000e10: PUSH1 0x00 00000e12: JUMPDEST 00000e13: DUP4 00000e14: DUP2 00000e15: LT 00000e16: ISZERO 00000e17: PUSH2 0x0e2a 00000e1a: JUMPI 00000e1b: DUP2 00000e1c: DUP2 00000e1d: ADD 00000e1e: MLOAD 00000e1f: DUP4 00000e20: DUP3 00000e21: ADD 00000e22: MSTORE 00000e23: PUSH1 0x20 00000e25: ADD 00000e26: PUSH2 0x0e12 00000e29: JUMP 00000e2a: JUMPDEST 00000e2b: POP 00000e2c: POP 00000e2d: POP 00000e2e: POP 00000e2f: SWAP1 00000e30: POP 00000e31: SWAP1 00000e32: DUP2 00000e33: ADD 00000e34: SWAP1 00000e35: PUSH1 0x1f 00000e37: AND 00000e38: DUP1 00000e39: ISZERO 00000e3a: PUSH2 0x0e57 00000e3d: JUMPI 00000e3e: DUP1 00000e3f: DUP3 00000e40: SUB 00000e41: DUP1 00000e42: MLOAD 00000e43: PUSH1 0x01 00000e45: DUP4 00000e46: PUSH1 0x20 00000e48: SUB 00000e49: PUSH2 0x0100 00000e4c: EXP 00000e4d: SUB 00000e4e: NOT 00000e4f: AND 00000e50: DUP2 00000e51: MSTORE 00000e52: PUSH1 0x20 00000e54: ADD 00000e55: SWAP2 00000e56: POP 00000e57: JUMPDEST 00000e58: POP 00000e59: SWAP8 00000e5a: POP 00000e5b: POP 00000e5c: POP 00000e5d: POP 00000e5e: POP 00000e5f: POP 00000e60: POP 00000e61: POP 00000e62: PUSH1 0x40 00000e64: MLOAD 00000e65: DUP1 00000e66: SWAP2 00000e67: SUB 00000e68: SWAP1 00000e69: LOG1 00000e6a: DUP6 00000e6b: ISZERO 00000e6c: PUSH2 0x0eb4 00000e6f: JUMPI 00000e70: PUSH1 0x40 00000e72: DUP1 00000e73: MLOAD 00000e74: PUSH1 0x01 00000e76: PUSH1 0x01 00000e78: PUSH1 0xa0 00000e7a: SHL 00000e7b: SUB 00000e7c: DUP10 00000e7d: AND 00000e7e: DUP2 00000e7f: MSTORE 00000e80: PUSH1 0x20 00000e82: DUP2 00000e83: ADD 00000e84: DUP9 00000e85: SWAP1 00000e86: MSTORE 00000e87: DUP2 00000e88: MLOAD 00000e89: PUSH32 0xd9b66890b56321a19d7a216dd918f8c0d4023759afc4088deb9be15aca68ece2 00000eaa: SWAP3 00000eab: SWAP2 00000eac: DUP2 00000ead: SWAP1 00000eae: SUB 00000eaf: SWAP1 00000eb0: SWAP2 00000eb1: ADD 00000eb2: SWAP1 00000eb3: LOG1 00000eb4: JUMPDEST 00000eb5: PUSH2 0x0fdb 00000eb8: JUMP 00000eb9: JUMPDEST 00000eba: PUSH32 0x0dcd8c9c77f28ec16607ef7ef149c8c11b7b818e95009bf9639b8a35bb04d55f 00000edb: DUP8 00000edc: DUP8 00000edd: DUP8 00000ede: DUP8 00000edf: DUP6 00000ee0: PUSH1 0x40 00000ee2: MLOAD 00000ee3: DUP1 00000ee4: DUP7 00000ee5: PUSH1 0x01 00000ee7: PUSH1 0x01 00000ee9: PUSH1 0xa0 00000eeb: SHL 00000eec: SUB 00000eed: AND 00000eee: DUP2 00000eef: MSTORE 00000ef0: PUSH1 0x20 00000ef2: ADD 00000ef3: DUP6 00000ef4: DUP2 00000ef5: MSTORE 00000ef6: PUSH1 0x20 00000ef8: ADD 00000ef9: DUP5 00000efa: DUP2 00000efb: MSTORE 00000efc: PUSH1 0x20 00000efe: ADD 00000eff: DUP1 00000f00: PUSH1 0x20 00000f02: ADD 00000f03: DUP1 00000f04: PUSH1 0x20 00000f06: ADD 00000f07: DUP4 00000f08: DUP2 00000f09: SUB 00000f0a: DUP4 00000f0b: MSTORE 00000f0c: DUP6 00000f0d: DUP2 00000f0e: DUP2 00000f0f: MLOAD 00000f10: DUP2 00000f11: MSTORE 00000f12: PUSH1 0x20 00000f14: ADD 00000f15: SWAP2 00000f16: POP 00000f17: DUP1 00000f18: MLOAD 00000f19: SWAP1 00000f1a: PUSH1 0x20 00000f1c: ADD 00000f1d: SWAP1 00000f1e: DUP1 00000f1f: DUP4 00000f20: DUP4 00000f21: PUSH1 0x00 00000f23: JUMPDEST 00000f24: DUP4 00000f25: DUP2 00000f26: LT 00000f27: ISZERO 00000f28: PUSH2 0x0f3b 00000f2b: JUMPI 00000f2c: DUP2 00000f2d: DUP2 00000f2e: ADD 00000f2f: MLOAD 00000f30: DUP4 00000f31: DUP3 00000f32: ADD 00000f33: MSTORE 00000f34: PUSH1 0x20 00000f36: ADD 00000f37: PUSH2 0x0f23 00000f3a: JUMP 00000f3b: JUMPDEST 00000f3c: POP 00000f3d: POP 00000f3e: POP 00000f3f: POP 00000f40: SWAP1 00000f41: POP 00000f42: SWAP1 00000f43: DUP2 00000f44: ADD 00000f45: SWAP1 00000f46: PUSH1 0x1f 00000f48: AND 00000f49: DUP1 00000f4a: ISZERO 00000f4b: PUSH2 0x0f68 00000f4e: JUMPI 00000f4f: DUP1 00000f50: DUP3 00000f51: SUB 00000f52: DUP1 00000f53: MLOAD 00000f54: PUSH1 0x01 00000f56: DUP4 00000f57: PUSH1 0x20 00000f59: SUB 00000f5a: PUSH2 0x0100 00000f5d: EXP 00000f5e: SUB 00000f5f: NOT 00000f60: AND 00000f61: DUP2 00000f62: MSTORE 00000f63: PUSH1 0x20 00000f65: ADD 00000f66: SWAP2 00000f67: POP 00000f68: JUMPDEST 00000f69: POP 00000f6a: DUP4 00000f6b: DUP2 00000f6c: SUB 00000f6d: DUP3 00000f6e: MSTORE 00000f6f: DUP5 00000f70: MLOAD 00000f71: DUP2 00000f72: MSTORE 00000f73: DUP5 00000f74: MLOAD 00000f75: PUSH1 0x20 00000f77: SWAP2 00000f78: DUP3 00000f79: ADD 00000f7a: SWAP2 00000f7b: DUP7 00000f7c: ADD 00000f7d: SWAP1 00000f7e: DUP1 00000f7f: DUP4 00000f80: DUP4 00000f81: PUSH1 0x00 00000f83: JUMPDEST 00000f84: DUP4 00000f85: DUP2 00000f86: LT 00000f87: ISZERO 00000f88: PUSH2 0x0f9b 00000f8b: JUMPI 00000f8c: DUP2 00000f8d: DUP2 00000f8e: ADD 00000f8f: MLOAD 00000f90: DUP4 00000f91: DUP3 00000f92: ADD 00000f93: MSTORE 00000f94: PUSH1 0x20 00000f96: ADD 00000f97: PUSH2 0x0f83 00000f9a: JUMP 00000f9b: JUMPDEST 00000f9c: POP 00000f9d: POP 00000f9e: POP 00000f9f: POP 00000fa0: SWAP1 00000fa1: POP 00000fa2: SWAP1 00000fa3: DUP2 00000fa4: ADD 00000fa5: SWAP1 00000fa6: PUSH1 0x1f 00000fa8: AND 00000fa9: DUP1 00000faa: ISZERO 00000fab: PUSH2 0x0fc8 00000fae: JUMPI 00000faf: DUP1 00000fb0: DUP3 00000fb1: SUB 00000fb2: DUP1 00000fb3: MLOAD 00000fb4: PUSH1 0x01 00000fb6: DUP4 00000fb7: PUSH1 0x20 00000fb9: SUB 00000fba: PUSH2 0x0100 00000fbd: EXP 00000fbe: SUB 00000fbf: NOT 00000fc0: AND 00000fc1: DUP2 00000fc2: MSTORE 00000fc3: PUSH1 0x20 00000fc5: ADD 00000fc6: SWAP2 00000fc7: POP 00000fc8: JUMPDEST 00000fc9: POP 00000fca: SWAP8 00000fcb: POP 00000fcc: POP 00000fcd: POP 00000fce: POP 00000fcf: POP 00000fd0: POP 00000fd1: POP 00000fd2: POP 00000fd3: PUSH1 0x40 00000fd5: MLOAD 00000fd6: DUP1 00000fd7: SWAP2 00000fd8: SUB 00000fd9: SWAP1 00000fda: LOG1 00000fdb: JUMPDEST 00000fdc: POP 00000fdd: PUSH1 0x01 00000fdf: SWAP8 00000fe0: SWAP7 00000fe1: POP 00000fe2: POP 00000fe3: POP 00000fe4: POP 00000fe5: POP 00000fe6: POP 00000fe7: POP 00000fe8: JUMP 00000fe9: JUMPDEST 00000fea: PUSH1 0x00 00000fec: DUP1 00000fed: DUP4 00000fee: PUSH1 0x60 00000ff0: SHL 00000ff1: SWAP1 00000ff2: POP 00000ff3: PUSH1 0x40 00000ff5: MLOAD 00000ff6: PUSH10 0x363d3d373d3d3d363d73 00001001: PUSH1 0xb0 00001003: SHL 00001004: DUP2 00001005: MSTORE 00001006: DUP2 00001007: PUSH1 0x0a 00001009: DUP3 0000100a: ADD 0000100b: MSTORE 0000100c: PUSH15 0x5af43d82803e903d91602b57fd5bf3 0000101c: PUSH1 0x88 0000101e: SHL 0000101f: PUSH1 0x1e 00001021: DUP3 00001022: ADD 00001023: MSTORE 00001024: PUSH1 0x40 00001026: DUP2 00001027: ADD 00001028: PUSH1 0x2d 0000102a: PUSH1 0x00 0000102c: DUP3 0000102d: DUP8 0000102e: EXTCODECOPY 0000102f: PUSH1 0x0d 00001031: DUP2 00001032: ADD 00001033: MLOAD 00001034: PUSH1 0x0d 00001036: DUP4 00001037: ADD 00001038: MLOAD 00001039: EQ 0000103a: DUP2 0000103b: MLOAD 0000103c: DUP4 0000103d: MLOAD 0000103e: EQ 0000103f: AND 00001040: SWAP4 00001041: POP 00001042: POP 00001043: POP 00001044: POP 00001045: SWAP3 00001046: SWAP2 00001047: POP 00001048: POP 00001049: JUMP 0000104a: JUMPDEST 0000104b: PUSH1 0x00 0000104d: DUP1 0000104e: DUP4 0000104f: PUSH1 0x60 00001051: SHL 00001052: SWAP1 00001053: POP 00001054: PUSH1 0x40 00001056: MLOAD 00001057: PUSH20 0x3d602d80600a3d3981f3363d3d373d3d3d363d73 0000106c: PUSH1 0x60 0000106e: SHL 0000106f: DUP2 00001070: MSTORE 00001071: DUP2 00001072: PUSH1 0x14 00001074: DUP3 00001075: ADD 00001076: MSTORE 00001077: PUSH15 0x5af43d82803e903d91602b57fd5bf3 00001087: PUSH1 0x88 00001089: SHL 0000108a: PUSH1 0x28 0000108c: DUP3 0000108d: ADD 0000108e: MSTORE 0000108f: DUP4 00001090: PUSH1 0x37 00001092: DUP3 00001093: PUSH1 0x00 00001095: CREATE2 00001096: SWAP1 00001097: POP 00001098: DUP1 00001099: EXTCODESIZE 0000109a: PUSH2 0x0bac 0000109d: JUMPI 0000109e: PUSH1 0x00 000010a0: DUP1 000010a1: REVERT 000010a2: JUMPDEST 000010a3: PUSH1 0x40 000010a5: MLOAD 000010a6: PUSH1 0x00 000010a8: SWAP1 000010a9: DUP2 000010aa: SWAP1 000010ab: PUSH1 0x60 000010ad: SWAP1 000010ae: PUSH1 0x01 000010b0: PUSH1 0x01 000010b2: PUSH1 0xa0 000010b4: SHL 000010b5: SUB 000010b6: DUP7 000010b7: AND 000010b8: SWAP1 000010b9: DUP6 000010ba: SWAP1 000010bb: DUP5 000010bc: DUP2 000010bd: DUP2 000010be: DUP2 000010bf: DUP6 000010c0: DUP8 000010c1: GAS 000010c2: CALL 000010c3: SWAP3 000010c4: POP 000010c5: POP 000010c6: POP 000010c7: RETURNDATASIZE 000010c8: DUP1 000010c9: PUSH1 0x00 000010cb: DUP2 000010cc: EQ 000010cd: PUSH2 0x10f2 000010d0: JUMPI 000010d1: PUSH1 0x40 000010d3: MLOAD 000010d4: SWAP2 000010d5: POP 000010d6: PUSH1 0x1f 000010d8: NOT 000010d9: PUSH1 0x3f 000010db: RETURNDATASIZE 000010dc: ADD 000010dd: AND 000010de: DUP3 000010df: ADD 000010e0: PUSH1 0x40 000010e2: MSTORE 000010e3: RETURNDATASIZE 000010e4: DUP3 000010e5: MSTORE 000010e6: RETURNDATASIZE 000010e7: PUSH1 0x00 000010e9: PUSH1 0x20 000010eb: DUP5 000010ec: ADD 000010ed: RETURNDATACOPY 000010ee: PUSH2 0x10f7 000010f1: JUMP 000010f2: JUMPDEST 000010f3: PUSH1 0x60 000010f5: SWAP2 000010f6: POP 000010f7: JUMPDEST 000010f8: POP 000010f9: SWAP2 000010fa: POP 000010fb: SWAP2 000010fc: POP 000010fd: DUP2 000010fe: PUSH2 0x114e 00001101: JUMPI 00001102: PUSH1 0x40 00001104: DUP1 00001105: MLOAD 00001106: PUSH3 0x461bcd 0000110a: PUSH1 0xe5 0000110c: SHL 0000110d: DUP2 0000110e: MSTORE 0000110f: PUSH1 0x20 00001111: PUSH1 0x04 00001113: DUP3 00001114: ADD 00001115: MSTORE 00001116: PUSH1 0x1f 00001118: PUSH1 0x24 0000111a: DUP3 0000111b: ADD 0000111c: MSTORE 0000111d: PUSH32 0x5472616e736665724574682f457468207472616e73666572204661696c656400 0000113e: PUSH1 0x44 00001140: DUP3 00001141: ADD 00001142: MSTORE 00001143: SWAP1 00001144: MLOAD 00001145: SWAP1 00001146: DUP2 00001147: SWAP1 00001148: SUB 00001149: PUSH1 0x64 0000114b: ADD 0000114c: SWAP1 0000114d: REVERT 0000114e: JUMPDEST 0000114f: PUSH1 0x40 00001151: DUP1 00001152: MLOAD 00001153: PUSH1 0x01 00001155: PUSH1 0x01 00001157: PUSH1 0xa0 00001159: SHL 0000115a: SUB 0000115b: DUP8 0000115c: AND 0000115d: DUP2 0000115e: MSTORE 0000115f: PUSH1 0x20 00001161: DUP2 00001162: ADD 00001163: DUP7 00001164: SWAP1 00001165: MSTORE 00001166: DUP2 00001167: MLOAD 00001168: PUSH32 0xd9b66890b56321a19d7a216dd918f8c0d4023759afc4088deb9be15aca68ece2 00001189: SWAP3 0000118a: SWAP2 0000118b: DUP2 0000118c: SWAP1 0000118d: SUB 0000118e: SWAP1 0000118f: SWAP2 00001190: ADD 00001191: SWAP1 00001192: LOG1 00001193: POP 00001194: PUSH1 0x01 00001196: SWAP5 00001197: SWAP4 00001198: POP 00001199: POP 0000119a: POP 0000119b: POP 0000119c: JUMP 0000119d: JUMPDEST 0000119e: PUSH1 0x00 000011a0: PUSH2 0x11b3 000011a3: PUSH1 0x01 000011a5: PUSH1 0x01 000011a7: PUSH1 0xa0 000011a9: SHL 000011aa: SUB 000011ab: DUP6 000011ac: AND 000011ad: DUP5 000011ae: DUP5 000011af: PUSH2 0x14d9 000011b2: JUMP 000011b3: JUMPDEST 000011b4: PUSH1 0x40 000011b6: DUP1 000011b7: MLOAD 000011b8: PUSH1 0x01 000011ba: PUSH1 0x01 000011bc: PUSH1 0xa0 000011be: SHL 000011bf: SUB 000011c0: DUP1 000011c1: DUP8 000011c2: AND 000011c3: DUP3 000011c4: MSTORE 000011c5: DUP6 000011c6: AND 000011c7: PUSH1 0x20 000011c9: DUP3 000011ca: ADD 000011cb: MSTORE 000011cc: DUP1 000011cd: DUP3 000011ce: ADD 000011cf: DUP5 000011d0: SWAP1 000011d1: MSTORE 000011d2: SWAP1 000011d3: MLOAD 000011d4: PUSH32 0x3844b7075ed6e7d4b61342769cb2b1b325cba410a62932affaa90aee247dadf5 000011f5: SWAP2 000011f6: DUP2 000011f7: SWAP1 000011f8: SUB 000011f9: PUSH1 0x60 000011fb: ADD 000011fc: SWAP1 000011fd: LOG1 000011fe: POP 000011ff: PUSH1 0x01 00001201: SWAP4 00001202: SWAP3 00001203: POP 00001204: POP 00001205: POP 00001206: JUMP 00001207: JUMPDEST 00001208: PUSH1 0x40 0000120a: DUP1 0000120b: MLOAD 0000120c: PUSH1 0x01 0000120e: PUSH1 0x01 00001210: PUSH1 0xf8 00001212: SHL 00001213: SUB 00001214: NOT 00001215: PUSH1 0x20 00001217: DUP1 00001218: DUP4 00001219: ADD 0000121a: SWAP2 0000121b: SWAP1 0000121c: SWAP2 0000121d: MSTORE 0000121e: PUSH1 0x60 00001220: SWAP4 00001221: SWAP1 00001222: SWAP4 00001223: SHL 00001224: PUSH12 0xffffffffffffffffffffffff 00001231: NOT 00001232: AND 00001233: PUSH1 0x21 00001235: DUP3 00001236: ADD 00001237: MSTORE 00001238: PUSH1 0x35 0000123a: DUP2 0000123b: ADD 0000123c: SWAP5 0000123d: SWAP1 0000123e: SWAP5 0000123f: MSTORE 00001240: PUSH1 0x55 00001242: DUP1 00001243: DUP6 00001244: ADD 00001245: SWAP4 00001246: SWAP1 00001247: SWAP4 00001248: MSTORE 00001249: DUP1 0000124a: MLOAD 0000124b: DUP1 0000124c: DUP6 0000124d: SUB 0000124e: SWAP1 0000124f: SWAP4 00001250: ADD 00001251: DUP4 00001252: MSTORE 00001253: PUSH1 0x75 00001255: SWAP1 00001256: SWAP4 00001257: ADD 00001258: SWAP1 00001259: SWAP3 0000125a: MSTORE 0000125b: DUP1 0000125c: MLOAD 0000125d: SWAP2 0000125e: ADD 0000125f: KECCAK256 00001260: PUSH1 0x01 00001262: PUSH1 0x01 00001264: PUSH1 0xa0 00001266: SHL 00001267: SUB 00001268: AND 00001269: SWAP1 0000126a: JUMP 0000126b: JUMPDEST 0000126c: PUSH1 0x40 0000126e: DUP1 0000126f: MLOAD 00001270: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 00001291: PUSH1 0x20 00001293: DUP1 00001294: DUP4 00001295: ADD 00001296: SWAP2 00001297: SWAP1 00001298: SWAP2 00001299: MSTORE 0000129a: PUSH1 0x3c 0000129c: DUP1 0000129d: DUP4 0000129e: ADD 0000129f: SWAP5 000012a0: SWAP1 000012a1: SWAP5 000012a2: MSTORE 000012a3: DUP3 000012a4: MLOAD 000012a5: DUP1 000012a6: DUP4 000012a7: SUB 000012a8: SWAP1 000012a9: SWAP5 000012aa: ADD 000012ab: DUP5 000012ac: MSTORE 000012ad: PUSH1 0x5c 000012af: SWAP1 000012b0: SWAP2 000012b1: ADD 000012b2: SWAP1 000012b3: SWAP2 000012b4: MSTORE 000012b5: DUP2 000012b6: MLOAD 000012b7: SWAP2 000012b8: ADD 000012b9: KECCAK256 000012ba: SWAP1 000012bb: JUMP 000012bc: JUMPDEST 000012bd: PUSH1 0x00 000012bf: DUP2 000012c0: MLOAD 000012c1: PUSH1 0x41 000012c3: EQ 000012c4: PUSH2 0x12cf 000012c7: JUMPI 000012c8: POP 000012c9: PUSH1 0x00 000012cb: PUSH2 0x05cd 000012ce: JUMP 000012cf: JUMPDEST 000012d0: PUSH1 0x20 000012d2: DUP3 000012d3: ADD 000012d4: MLOAD 000012d5: PUSH1 0x40 000012d7: DUP4 000012d8: ADD 000012d9: MLOAD 000012da: PUSH1 0x60 000012dc: DUP5 000012dd: ADD 000012de: MLOAD 000012df: PUSH1 0x00 000012e1: BYTE 000012e2: PUSH32 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 00001303: DUP3 00001304: GT 00001305: ISZERO 00001306: PUSH2 0x1315 00001309: JUMPI 0000130a: PUSH1 0x00 0000130c: SWAP4 0000130d: POP 0000130e: POP 0000130f: POP 00001310: POP 00001311: PUSH2 0x05cd 00001314: JUMP 00001315: JUMPDEST 00001316: DUP1 00001317: PUSH1 0xff 00001319: AND 0000131a: PUSH1 0x1b 0000131c: EQ 0000131d: ISZERO 0000131e: DUP1 0000131f: ISZERO 00001320: PUSH2 0x132d 00001323: JUMPI 00001324: POP 00001325: DUP1 00001326: PUSH1 0xff 00001328: AND 00001329: PUSH1 0x1c 0000132b: EQ 0000132c: ISZERO 0000132d: JUMPDEST 0000132e: ISZERO 0000132f: PUSH2 0x133e 00001332: JUMPI 00001333: PUSH1 0x00 00001335: SWAP4 00001336: POP 00001337: POP 00001338: POP 00001339: POP 0000133a: PUSH2 0x05cd 0000133d: JUMP 0000133e: JUMPDEST 0000133f: PUSH1 0x01 00001341: DUP7 00001342: DUP3 00001343: DUP6 00001344: DUP6 00001345: PUSH1 0x40 00001347: MLOAD 00001348: PUSH1 0x00 0000134a: DUP2 0000134b: MSTORE 0000134c: PUSH1 0x20 0000134e: ADD 0000134f: PUSH1 0x40 00001351: MSTORE 00001352: PUSH1 0x40 00001354: MLOAD 00001355: DUP1 00001356: DUP6 00001357: DUP2 00001358: MSTORE 00001359: PUSH1 0x20 0000135b: ADD 0000135c: DUP5 0000135d: PUSH1 0xff 0000135f: AND 00001360: DUP2 00001361: MSTORE 00001362: PUSH1 0x20 00001364: ADD 00001365: DUP4 00001366: DUP2 00001367: MSTORE 00001368: PUSH1 0x20 0000136a: ADD 0000136b: DUP3 0000136c: DUP2 0000136d: MSTORE 0000136e: PUSH1 0x20 00001370: ADD 00001371: SWAP5 00001372: POP 00001373: POP 00001374: POP 00001375: POP 00001376: POP 00001377: PUSH1 0x20 00001379: PUSH1 0x40 0000137b: MLOAD 0000137c: PUSH1 0x20 0000137e: DUP2 0000137f: SUB 00001380: SWAP1 00001381: DUP1 00001382: DUP5 00001383: SUB 00001384: SWAP1 00001385: DUP6 00001386: GAS 00001387: STATICCALL 00001388: ISZERO 00001389: DUP1 0000138a: ISZERO 0000138b: PUSH2 0x1398 0000138e: JUMPI 0000138f: RETURNDATASIZE 00001390: PUSH1 0x00 00001392: DUP1 00001393: RETURNDATACOPY 00001394: RETURNDATASIZE 00001395: PUSH1 0x00 00001397: REVERT 00001398: JUMPDEST 00001399: POP 0000139a: POP 0000139b: PUSH1 0x40 0000139d: MLOAD 0000139e: PUSH1 0x1f 000013a0: NOT 000013a1: ADD 000013a2: MLOAD 000013a3: SWAP8 000013a4: SWAP7 000013a5: POP 000013a6: POP 000013a7: POP 000013a8: POP 000013a9: POP 000013aa: POP 000013ab: POP 000013ac: JUMP 000013ad: JUMPDEST 000013ae: PUSH1 0x00 000013b0: DUP2 000013b1: DUP2 000013b2: MSTORE 000013b3: PUSH1 0x20 000013b5: DUP2 000013b6: SWAP1 000013b7: MSTORE 000013b8: PUSH1 0x40 000013ba: DUP2 000013bb: KECCAK256 000013bc: SLOAD 000013bd: PUSH1 0xff 000013bf: AND 000013c0: ISZERO 000013c1: PUSH2 0x1406 000013c4: JUMPI 000013c5: PUSH1 0x40 000013c7: DUP1 000013c8: MLOAD 000013c9: PUSH3 0x461bcd 000013cd: PUSH1 0xe5 000013cf: SHL 000013d0: DUP2 000013d1: MSTORE 000013d2: PUSH1 0x20 000013d4: PUSH1 0x04 000013d6: DUP3 000013d7: ADD 000013d8: MSTORE 000013d9: PUSH1 0x12 000013db: PUSH1 0x24 000013dd: DUP3 000013de: ADD 000013df: MSTORE 000013e0: PUSH18 0x139bdb98d94bd05b1c9958591e48155cd959 000013f3: PUSH1 0x72 000013f5: SHL 000013f6: PUSH1 0x44 000013f8: DUP3 000013f9: ADD 000013fa: MSTORE 000013fb: SWAP1 000013fc: MLOAD 000013fd: SWAP1 000013fe: DUP2 000013ff: SWAP1 00001400: SUB 00001401: PUSH1 0x64 00001403: ADD 00001404: SWAP1 00001405: REVERT 00001406: JUMPDEST 00001407: POP 00001408: PUSH1 0x00 0000140a: SWAP1 0000140b: DUP2 0000140c: MSTORE 0000140d: PUSH1 0x20 0000140f: DUP2 00001410: SWAP1 00001411: MSTORE 00001412: PUSH1 0x40 00001414: SWAP1 00001415: KECCAK256 00001416: DUP1 00001417: SLOAD 00001418: PUSH1 0xff 0000141a: NOT 0000141b: AND 0000141c: PUSH1 0x01 0000141e: SWAP1 0000141f: DUP2 00001420: OR 00001421: SWAP1 00001422: SWAP2 00001423: SSTORE 00001424: SWAP1 00001425: JUMP 00001426: JUMPDEST 00001427: PUSH1 0x00 00001429: PUSH1 0x60 0000142b: DUP5 0000142c: PUSH1 0x01 0000142e: PUSH1 0x01 00001430: PUSH1 0xa0 00001432: SHL 00001433: SUB 00001434: AND 00001435: DUP5 00001436: DUP5 00001437: PUSH1 0x40 00001439: MLOAD 0000143a: DUP1 0000143b: DUP3 0000143c: DUP1 0000143d: MLOAD 0000143e: SWAP1 0000143f: PUSH1 0x20 00001441: ADD 00001442: SWAP1 00001443: DUP1 00001444: DUP4 00001445: DUP4 00001446: JUMPDEST 00001447: PUSH1 0x20 00001449: DUP4 0000144a: LT 0000144b: PUSH2 0x1465 0000144e: JUMPI 0000144f: DUP1 00001450: MLOAD 00001451: DUP3 00001452: MSTORE 00001453: PUSH1 0x1f 00001455: NOT 00001456: SWAP1 00001457: SWAP3 00001458: ADD 00001459: SWAP2 0000145a: PUSH1 0x20 0000145c: SWAP2 0000145d: DUP3 0000145e: ADD 0000145f: SWAP2 00001460: ADD 00001461: PUSH2 0x1446 00001464: JUMP 00001465: JUMPDEST 00001466: PUSH1 0x01 00001468: DUP4 00001469: PUSH1 0x20 0000146b: SUB 0000146c: PUSH2 0x0100 0000146f: EXP 00001470: SUB 00001471: DUP1 00001472: NOT 00001473: DUP3 00001474: MLOAD 00001475: AND 00001476: DUP2 00001477: DUP5 00001478: MLOAD 00001479: AND 0000147a: DUP1 0000147b: DUP3 0000147c: OR 0000147d: DUP6 0000147e: MSTORE 0000147f: POP 00001480: POP 00001481: POP 00001482: POP 00001483: POP 00001484: POP 00001485: SWAP1 00001486: POP 00001487: ADD 00001488: SWAP2 00001489: POP 0000148a: POP 0000148b: PUSH1 0x00 0000148d: PUSH1 0x40 0000148f: MLOAD 00001490: DUP1 00001491: DUP4 00001492: SUB 00001493: DUP2 00001494: DUP6 00001495: DUP8 00001496: GAS 00001497: CALL 00001498: SWAP3 00001499: POP 0000149a: POP 0000149b: POP 0000149c: RETURNDATASIZE 0000149d: DUP1 0000149e: PUSH1 0x00 000014a0: DUP2 000014a1: EQ 000014a2: PUSH2 0x14c7 000014a5: JUMPI 000014a6: PUSH1 0x40 000014a8: MLOAD 000014a9: SWAP2 000014aa: POP 000014ab: PUSH1 0x1f 000014ad: NOT 000014ae: PUSH1 0x3f 000014b0: RETURNDATASIZE 000014b1: ADD 000014b2: AND 000014b3: DUP3 000014b4: ADD 000014b5: PUSH1 0x40 000014b7: MSTORE 000014b8: RETURNDATASIZE 000014b9: DUP3 000014ba: MSTORE 000014bb: RETURNDATASIZE 000014bc: PUSH1 0x00 000014be: PUSH1 0x20 000014c0: DUP5 000014c1: ADD 000014c2: RETURNDATACOPY 000014c3: PUSH2 0x14cc 000014c6: JUMP 000014c7: JUMPDEST 000014c8: PUSH1 0x60 000014ca: SWAP2 000014cb: POP 000014cc: JUMPDEST 000014cd: POP 000014ce: SWAP1 000014cf: SWAP7 000014d0: SWAP1 000014d1: SWAP6 000014d2: POP 000014d3: SWAP4 000014d4: POP 000014d5: POP 000014d6: POP 000014d7: POP 000014d8: JUMP 000014d9: JUMPDEST 000014da: PUSH1 0x40 000014dc: DUP1 000014dd: MLOAD 000014de: PUSH1 0x01 000014e0: PUSH1 0x01 000014e2: PUSH1 0xa0 000014e4: SHL 000014e5: SUB 000014e6: DUP5 000014e7: AND 000014e8: PUSH1 0x24 000014ea: DUP3 000014eb: ADD 000014ec: MSTORE 000014ed: PUSH1 0x44 000014ef: DUP1 000014f0: DUP3 000014f1: ADD 000014f2: DUP5 000014f3: SWAP1 000014f4: MSTORE 000014f5: DUP3 000014f6: MLOAD 000014f7: DUP1 000014f8: DUP4 000014f9: SUB 000014fa: SWAP1 000014fb: SWAP2 000014fc: ADD 000014fd: DUP2 000014fe: MSTORE 000014ff: PUSH1 0x64 00001501: SWAP1 00001502: SWAP2 00001503: ADD 00001504: SWAP1 00001505: SWAP2 00001506: MSTORE 00001507: PUSH1 0x20 00001509: DUP2 0000150a: ADD 0000150b: DUP1 0000150c: MLOAD 0000150d: PUSH1 0x01 0000150f: PUSH1 0x01 00001511: PUSH1 0xe0 00001513: SHL 00001514: SUB 00001515: AND 00001516: PUSH4 0xa9059cbb 0000151b: PUSH1 0xe0 0000151d: SHL 0000151e: OR 0000151f: SWAP1 00001520: MSTORE 00001521: PUSH2 0x152b 00001524: SWAP1 00001525: DUP5 00001526: SWAP1 00001527: PUSH2 0x1530 0000152a: JUMP 0000152b: JUMPDEST 0000152c: POP 0000152d: POP 0000152e: POP 0000152f: JUMP 00001530: JUMPDEST 00001531: PUSH1 0x60 00001533: PUSH2 0x1585 00001536: DUP3 00001537: PUSH1 0x40 00001539: MLOAD 0000153a: DUP1 0000153b: PUSH1 0x40 0000153d: ADD 0000153e: PUSH1 0x40 00001540: MSTORE 00001541: DUP1 00001542: PUSH1 0x20 00001544: DUP2 00001545: MSTORE 00001546: PUSH1 0x20 00001548: ADD 00001549: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 0000156a: DUP2 0000156b: MSTORE 0000156c: POP 0000156d: DUP6 0000156e: PUSH1 0x01 00001570: PUSH1 0x01 00001572: PUSH1 0xa0 00001574: SHL 00001575: SUB 00001576: AND 00001577: PUSH2 0x15e1 0000157a: SWAP1 0000157b: SWAP3 0000157c: SWAP2 0000157d: SWAP1 0000157e: PUSH4 0xffffffff 00001583: AND 00001584: JUMP 00001585: JUMPDEST 00001586: DUP1 00001587: MLOAD 00001588: SWAP1 00001589: SWAP2 0000158a: POP 0000158b: ISZERO 0000158c: PUSH2 0x152b 0000158f: JUMPI 00001590: DUP1 00001591: DUP1 00001592: PUSH1 0x20 00001594: ADD 00001595: SWAP1 00001596: MLOAD 00001597: PUSH1 0x20 00001599: DUP2 0000159a: LT 0000159b: ISZERO 0000159c: PUSH2 0x15a4 0000159f: JUMPI 000015a0: PUSH1 0x00 000015a2: DUP1 000015a3: REVERT 000015a4: JUMPDEST 000015a5: POP 000015a6: MLOAD 000015a7: PUSH2 0x152b 000015aa: JUMPI 000015ab: PUSH1 0x40 000015ad: MLOAD 000015ae: PUSH3 0x461bcd 000015b2: PUSH1 0xe5 000015b4: SHL 000015b5: DUP2 000015b6: MSTORE 000015b7: PUSH1 0x04 000015b9: ADD 000015ba: DUP1 000015bb: DUP1 000015bc: PUSH1 0x20 000015be: ADD 000015bf: DUP3 000015c0: DUP2 000015c1: SUB 000015c2: DUP3 000015c3: MSTORE 000015c4: PUSH1 0x2a 000015c6: DUP2 000015c7: MSTORE 000015c8: PUSH1 0x20 000015ca: ADD 000015cb: DUP1 000015cc: PUSH2 0x18b5 000015cf: PUSH1 0x2a 000015d1: SWAP2 000015d2: CODECOPY 000015d3: PUSH1 0x40 000015d5: ADD 000015d6: SWAP2 000015d7: POP 000015d8: POP 000015d9: PUSH1 0x40 000015db: MLOAD 000015dc: DUP1 000015dd: SWAP2 000015de: SUB 000015df: SWAP1 000015e0: REVERT 000015e1: JUMPDEST 000015e2: PUSH1 0x60 000015e4: PUSH2 0x0bac 000015e7: DUP5 000015e8: DUP5 000015e9: PUSH1 0x00 000015eb: DUP6 000015ec: PUSH1 0x60 000015ee: PUSH2 0x15f6 000015f1: DUP6 000015f2: PUSH2 0x1796 000015f5: JUMP 000015f6: JUMPDEST 000015f7: PUSH2 0x1647 000015fa: JUMPI 000015fb: PUSH1 0x40 000015fd: DUP1 000015fe: MLOAD 000015ff: PUSH3 0x461bcd 00001603: PUSH1 0xe5 00001605: SHL 00001606: DUP2 00001607: MSTORE 00001608: PUSH1 0x20 0000160a: PUSH1 0x04 0000160c: DUP3 0000160d: ADD 0000160e: MSTORE 0000160f: PUSH1 0x1d 00001611: PUSH1 0x24 00001613: DUP3 00001614: ADD 00001615: MSTORE 00001616: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00001637: PUSH1 0x44 00001639: DUP3 0000163a: ADD 0000163b: MSTORE 0000163c: SWAP1 0000163d: MLOAD 0000163e: SWAP1 0000163f: DUP2 00001640: SWAP1 00001641: SUB 00001642: PUSH1 0x64 00001644: ADD 00001645: SWAP1 00001646: REVERT 00001647: JUMPDEST 00001648: PUSH1 0x00 0000164a: PUSH1 0x60 0000164c: DUP7 0000164d: PUSH1 0x01 0000164f: PUSH1 0x01 00001651: PUSH1 0xa0 00001653: SHL 00001654: SUB 00001655: AND 00001656: DUP6 00001657: DUP8 00001658: PUSH1 0x40 0000165a: MLOAD 0000165b: DUP1 0000165c: DUP3 0000165d: DUP1 0000165e: MLOAD 0000165f: SWAP1 00001660: PUSH1 0x20 00001662: ADD 00001663: SWAP1 00001664: DUP1 00001665: DUP4 00001666: DUP4 00001667: JUMPDEST 00001668: PUSH1 0x20 0000166a: DUP4 0000166b: LT 0000166c: PUSH2 0x1686 0000166f: JUMPI 00001670: DUP1 00001671: MLOAD 00001672: DUP3 00001673: MSTORE 00001674: PUSH1 0x1f 00001676: NOT 00001677: SWAP1 00001678: SWAP3 00001679: ADD 0000167a: SWAP2 0000167b: PUSH1 0x20 0000167d: SWAP2 0000167e: DUP3 0000167f: ADD 00001680: SWAP2 00001681: ADD 00001682: PUSH2 0x1667 00001685: JUMP 00001686: JUMPDEST 00001687: PUSH1 0x01 00001689: DUP4 0000168a: PUSH1 0x20 0000168c: SUB 0000168d: PUSH2 0x0100 00001690: EXP 00001691: SUB 00001692: DUP1 00001693: NOT 00001694: DUP3 00001695: MLOAD 00001696: AND 00001697: DUP2 00001698: DUP5 00001699: MLOAD 0000169a: AND 0000169b: DUP1 0000169c: DUP3 0000169d: OR 0000169e: DUP6 0000169f: MSTORE 000016a0: POP 000016a1: POP 000016a2: POP 000016a3: POP 000016a4: POP 000016a5: POP 000016a6: SWAP1 000016a7: POP 000016a8: ADD 000016a9: SWAP2 000016aa: POP 000016ab: POP 000016ac: PUSH1 0x00 000016ae: PUSH1 0x40 000016b0: MLOAD 000016b1: DUP1 000016b2: DUP4 000016b3: SUB 000016b4: DUP2 000016b5: DUP6 000016b6: DUP8 000016b7: GAS 000016b8: CALL 000016b9: SWAP3 000016ba: POP 000016bb: POP 000016bc: POP 000016bd: RETURNDATASIZE 000016be: DUP1 000016bf: PUSH1 0x00 000016c1: DUP2 000016c2: EQ 000016c3: PUSH2 0x16e8 000016c6: JUMPI 000016c7: PUSH1 0x40 000016c9: MLOAD 000016ca: SWAP2 000016cb: POP 000016cc: PUSH1 0x1f 000016ce: NOT 000016cf: PUSH1 0x3f 000016d1: RETURNDATASIZE 000016d2: ADD 000016d3: AND 000016d4: DUP3 000016d5: ADD 000016d6: PUSH1 0x40 000016d8: MSTORE 000016d9: RETURNDATASIZE 000016da: DUP3 000016db: MSTORE 000016dc: RETURNDATASIZE 000016dd: PUSH1 0x00 000016df: PUSH1 0x20 000016e1: DUP5 000016e2: ADD 000016e3: RETURNDATACOPY 000016e4: PUSH2 0x16ed 000016e7: JUMP 000016e8: JUMPDEST 000016e9: PUSH1 0x60 000016eb: SWAP2 000016ec: POP 000016ed: JUMPDEST 000016ee: POP 000016ef: SWAP2 000016f0: POP 000016f1: SWAP2 000016f2: POP 000016f3: DUP2 000016f4: ISZERO 000016f5: PUSH2 0x1701 000016f8: JUMPI 000016f9: SWAP2 000016fa: POP 000016fb: PUSH2 0x0bac 000016fe: SWAP1 000016ff: POP 00001700: JUMP 00001701: JUMPDEST 00001702: DUP1 00001703: MLOAD 00001704: ISZERO 00001705: PUSH2 0x1711 00001708: JUMPI 00001709: DUP1 0000170a: MLOAD 0000170b: DUP1 0000170c: DUP3 0000170d: PUSH1 0x20 0000170f: ADD 00001710: REVERT 00001711: JUMPDEST 00001712: DUP4 00001713: PUSH1 0x40 00001715: MLOAD 00001716: PUSH3 0x461bcd 0000171a: PUSH1 0xe5 0000171c: SHL 0000171d: DUP2 0000171e: MSTORE 0000171f: PUSH1 0x04 00001721: ADD 00001722: DUP1 00001723: DUP1 00001724: PUSH1 0x20 00001726: ADD 00001727: DUP3 00001728: DUP2 00001729: SUB 0000172a: DUP3 0000172b: MSTORE 0000172c: DUP4 0000172d: DUP2 0000172e: DUP2 0000172f: MLOAD 00001730: DUP2 00001731: MSTORE 00001732: PUSH1 0x20 00001734: ADD 00001735: SWAP2 00001736: POP 00001737: DUP1 00001738: MLOAD 00001739: SWAP1 0000173a: PUSH1 0x20 0000173c: ADD 0000173d: SWAP1 0000173e: DUP1 0000173f: DUP4 00001740: DUP4 00001741: PUSH1 0x00 00001743: JUMPDEST 00001744: DUP4 00001745: DUP2 00001746: LT 00001747: ISZERO 00001748: PUSH2 0x175b 0000174b: JUMPI 0000174c: DUP2 0000174d: DUP2 0000174e: ADD 0000174f: MLOAD 00001750: DUP4 00001751: DUP3 00001752: ADD 00001753: MSTORE 00001754: PUSH1 0x20 00001756: ADD 00001757: PUSH2 0x1743 0000175a: JUMP 0000175b: JUMPDEST 0000175c: POP 0000175d: POP 0000175e: POP 0000175f: POP 00001760: SWAP1 00001761: POP 00001762: SWAP1 00001763: DUP2 00001764: ADD 00001765: SWAP1 00001766: PUSH1 0x1f 00001768: AND 00001769: DUP1 0000176a: ISZERO 0000176b: PUSH2 0x1788 0000176e: JUMPI 0000176f: DUP1 00001770: DUP3 00001771: SUB 00001772: DUP1 00001773: MLOAD 00001774: PUSH1 0x01 00001776: DUP4 00001777: PUSH1 0x20 00001779: SUB 0000177a: PUSH2 0x0100 0000177d: EXP 0000177e: SUB 0000177f: NOT 00001780: AND 00001781: DUP2 00001782: MSTORE 00001783: PUSH1 0x20 00001785: ADD 00001786: SWAP2 00001787: POP 00001788: JUMPDEST 00001789: POP 0000178a: SWAP3 0000178b: POP 0000178c: POP 0000178d: POP 0000178e: PUSH1 0x40 00001790: MLOAD 00001791: DUP1 00001792: SWAP2 00001793: SUB 00001794: SWAP1 00001795: REVERT 00001796: JUMPDEST 00001797: EXTCODESIZE 00001798: ISZERO 00001799: ISZERO 0000179a: SWAP1 0000179b: JUMP 0000179c: INVALID 0000179d: BASEFEE 0000179e: PUSH6 0x6e657369734d 000017a5: PUSH2 0x7374 000017a8: PUSH6 0x7257616c6c65 000017af: PUSH21 0x2f496e76616c69642052656769737472794d756c74 000017c5: PUSH10 0x5369672f53686f756c64 000017d0: KECCAK256 000017d1: PUSH3 0x652063 000017d5: PUSH2 0x6c6c 000017d8: PUSH6 0x64206279204d 000017df: PUSH22 0x6c746953696748656e657369734d617374657257616c 000017f6: PUSH13 0x65742f416c726561647920496e 00001804: PUSH10 0x7469616c697a65644d75 0000180f: PUSH13 0x746953696743616c6c2f53686f 0000181d: PUSH22 0x6c642075736520646966666572656e74207265676973 00001834: PUSH21 0x65726564206b65797348656e657369734d61737465 0000184a: PUSH19 0x57616c6c65742f4e6f7420417574686f72697a 0000185e: PUSH6 0x64204b65794d 00001865: PUSH22 0x6c746953696743616c6c2f4e6f7420557361626c6520 0000187c: MSTORE8 0000187d: PUSH10 0x676e617475726548656e 00001888: PUSH6 0x7369734d6173 0000188f: PUSH21 0x657257616c6c65742f496e76616c69642055736572 000018a5: KECCAK256 000018a6: JUMPI 000018a7: PUSH2 0x6c6c 000018aa: PUSH6 0x742054656d70 000018b1: PUSH13 0x6174655361666545524332303a 000018bf: KECCAK256 000018c0: GASLIMIT 000018c1: MSTORE 000018c2: NUMBER 000018c3: ORIGIN 000018c4: ADDRESS 000018c5: KECCAK256 000018c6: PUSH16 0x7065726174696f6e20646964206e6f74 000018d7: KECCAK256 000018d8: PUSH20 0x756363656564a264697066735822122007a2d2e0 000018ed: TSTORE 000018ee: UNKNOWN(0x4B) 000018ef: SGT 000018f0: SWAP9 000018f1: JUMPI 000018f2: UNKNOWN(0x4D) 000018f3: DUP1 000018f4: CALLVALUE 000018f5: PUSH9 0x23260761f6c4ec13a9 000018ff: MSTORE 00001900: CALLER 00001901: SDIV 00001902: PUSH16 0xde99c0d372fd64736f6c634300060c00 00001913: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x5a7747fc",
"selector": "0x5a7747fc",
"calldata_variants": [
"0x5a7747fc",
"0x5a7747fc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7b103999",
"selector": "0x7b103999",
"calldata_variants": [
"0x7b103999",
"0x7b1039990000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91dde7c3",
"selector": "0x91dde7c3",
"calldata_variants": [
"0x91dde7c3",
"0x91dde7c30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9bb84c2",
"selector": "0xe9bb84c2",
"calldata_variants": [
"0xe9bb84c2",
"0xe9bb84c20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xea23c389",
"selector": "0xea23c389",
"calldata_variants": [
"0xea23c389",
"0xea23c3890000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf5537ede",
"selector": "0xf5537ede",
"calldata_variants": [
"0xf5537ede",
"0xf5537ede0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e8e1993",
"selector": "0x2e8e1993",
"calldata_variants": [
"0x2e8e1993",
"0x2e8e19930000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x35eadfba",
"selector": "0x35eadfba",
"calldata_variants": [
"0x35eadfba",
"0x35eadfba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 1187,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2439,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2823,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2918,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 6339,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xb0577327a5959747f511bd918a5c412eb7700e2305596b0fc1a343710cd47788
call_targets:
0xaeaa035f548ca6033b422ded97fdf943974b61e2
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xb0577327a5959747f511bd918a5c412eb7700e2305596b0fc1a343710cd47788",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xaeaa035f548ca6033b422ded97fdf943974b61e2"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x5a7747fc",
"selector": "0x5a7747fc",
"calldata_variants": [
"0x5a7747fc",
"0x5a7747fc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7b103999",
"selector": "0x7b103999",
"calldata_variants": [
"0x7b103999",
"0x7b1039990000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91dde7c3",
"selector": "0x91dde7c3",
"calldata_variants": [
"0x91dde7c3",
"0x91dde7c30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9bb84c2",
"selector": "0xe9bb84c2",
"calldata_variants": [
"0xe9bb84c2",
"0xe9bb84c20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xea23c389",
"selector": "0xea23c389",
"calldata_variants": [
"0xea23c389",
"0xea23c3890000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf5537ede",
"selector": "0xf5537ede",
"calldata_variants": [
"0xf5537ede",
"0xf5537ede0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e8e1993",
"selector": "0x2e8e1993",
"calldata_variants": [
"0x2e8e1993",
"0x2e8e19930000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x35eadfba",
"selector": "0x35eadfba",
"calldata_variants": [
"0x35eadfba",
"0x35eadfba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1366,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2598,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4290,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 5,
"guards_detected": [
{
"pc": 1187,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2439,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2823,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2918,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 6339,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 5
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xb0577327a5959747f511bd918a5c412eb7700e2305596b0fc1a343710cd47788
call_targets:
0xaeaa035f548ca6033b422ded97fdf943974b61e2
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xb0577327a5959747f511bd918a5c412eb7700e2305596b0fc1a343710cd47788",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xaeaa035f548ca6033b422ded97fdf943974b61e2"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x5a7747fc",
"selector": "0x5a7747fc",
"calldata_variants": [
"0x5a7747fc",
"0x5a7747fc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7b103999",
"selector": "0x7b103999",
"calldata_variants": [
"0x7b103999",
"0x7b1039990000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91dde7c3",
"selector": "0x91dde7c3",
"calldata_variants": [
"0x91dde7c3",
"0x91dde7c30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9bb84c2",
"selector": "0xe9bb84c2",
"calldata_variants": [
"0xe9bb84c2",
"0xe9bb84c20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xea23c389",
"selector": "0xea23c389",
"calldata_variants": [
"0xea23c389",
"0xea23c3890000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf5537ede",
"selector": "0xf5537ede",
"calldata_variants": [
"0xf5537ede",
"0xf5537ede0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e8e1993",
"selector": "0x2e8e1993",
"calldata_variants": [
"0x2e8e1993",
"0x2e8e19930000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x35eadfba",
"selector": "0x35eadfba",
"calldata_variants": [
"0x35eadfba",
"0x35eadfba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1366,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2598,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4290,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 5,
"guards_detected": [
{
"pc": 1187,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2439,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2823,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 2918,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 6339,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | CREATE/CREATE2 reachable | 45 | no | no |
viewtrace_id: 0xb55ccb82cb33c1606877a7f8b6cb7409226d2ed35a0f34cf716a298e1b99be2c
validation_json{
"sink": "CREATE",
"errors": 0,
"status": "unknown",
"attempts": 24,
"trace_id": "0xb55ccb82cb33c1606877a7f8b6cb7409226d2ed35a0f34cf716a298e1b99be2c",
"confirmed": false,
"trace_mode": "structLogs",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x5a7747fc",
"selector": "0x5a7747fc",
"calldata_variants": [
"0x5a7747fc",
"0x5a7747fc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7b103999",
"selector": "0x7b103999",
"calldata_variants": [
"0x7b103999",
"0x7b1039990000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91dde7c3",
"selector": "0x91dde7c3",
"calldata_variants": [
"0x91dde7c3",
"0x91dde7c30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9bb84c2",
"selector": "0xe9bb84c2",
"calldata_variants": [
"0xe9bb84c2",
"0xe9bb84c20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xea23c389",
"selector": "0xea23c389",
"calldata_variants": [
"0xea23c389",
"0xea23c3890000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf5537ede",
"selector": "0xf5537ede",
"calldata_variants": [
"0xf5537ede",
"0xf5537ede0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e8e1993",
"selector": "0x2e8e1993",
"calldata_variants": [
"0x2e8e1993",
"0x2e8e19930000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x35eadfba",
"selector": "0x35eadfba",
"calldata_variants": [
"0x35eadfba",
"0x35eadfba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"create_count": 0,
"create2_count": 1
}
|
| low | other | cast | Contract creation opcode present | 60 | no | — |
viewevidence_json{
"notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
"create_count": 0,
"create2_count": 1
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 7
}
|