TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

0a66c94d-92f0-4077-a8e2-57edfc5c4fef

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 3, 2026 2:26 AM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Bytecode only
Review Backing
Not yet
Best current signal
Authorization based on tx.origin
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31429 report.consolidate complete 1 / 1 3 months ago
77200 artifact.fetch complete 1 / 3 1 week ago
77201 tool.cast_disasm complete 1 / 3 1 week ago
77202 analysis.bundle complete 1 / 3 1 week ago
77203 capability.graph complete 1 / 3 1 week ago
77204 detector.run complete 1 / 3 1 week ago
77205 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no
Implementation:
Verified Source: no

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.
View stderr
[codex:445933] OpenAI Codex v0.77.0 (research preview)
[codex:445933] --------
[codex:445933] workdir: /tmp/codex-multi-1icckdfk
[codex:445933] model: gpt-5.2-codex
[codex:445933] provider: openai
[codex:445933] approval: never
[codex:445933] sandbox: read-only
[codex:445933] reasoning effort: xhigh
[codex:445933] reasoning summaries: auto
[codex:445933] session id: 019b81a3-d410-7970-927f-fb113c927050
[codex:445933] --------
[codex:445933] user
[codex:445933] 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:445933] 
[codex:445933] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:445933] 
[codex:445933] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:445933] - Gas inefficiency, code quality, or best practices
[codex:445933] - Theoretical vulnerabilities without a clear extraction path
[codex:445933] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:445933] - Issues requiring social engineering or off-chain coordination
[codex:445933] 
[codex:445933] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:445933] - CALL/DELEGATECALL with controllable destination or calldata
[codex:445933] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:445933] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:445933] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:445933] - External calls before state updates (reentrancy)
[codex:445933] - SELFDESTRUCT with controllable beneficiary
[codex:445933] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:445933] 
[codex:445933] For each finding, you MUST explain:
[codex:445933] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:445933] 2. The concrete sequence of transactions to extract value
[codex:445933] 3. Why you believe this is exploitable (not just suspicious)
[codex:445933] 
[codex:445933] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:445933] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:445933] 
[codex:445933] Output MUST be valid JSON matching the provided schema.
[codex:445933] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:445933] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:445933] mcp startup: no servers
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Reading file content**
[codex:445933] exec
[codex:445933] /bin/bash -lc ls in /tmp/codex-multi-1icckdfk succeeded in 5ms:
[codex:445933] BYTECODE_BUNDLE.txt
[codex:445933] codex-output-schema.json
[codex:445933] exec
[codex:445933] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1icckdfk succeeded in 5ms:
[codex:445933] Runtime bytecode bundle for best-effort auditing.
[codex:445933] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:445933] 
[codex:445933] FILE: runtime_bytecode.hex
[codex:445933] 0x6080604052600436106100f35760003560e01c8063a51a828c1161008a578063de1b048611610059578063de1b0486146106f6578063ebeaa0a714610729578063f4f3b20014610764578063f99cc2a414610797576100f3565b8063a51a828c1461038c578063a8001d6f146104c0578063b412cf20146104fb578063c7927b74146106b3576100f3565b80637a9262a2116100c65780637a9262a2146102a25780639470b0bd146102e7578063a1db978214610320578063a39a45b714610359576100f3565b80632e1a7d4d146101325780633ccfd60b1461015c5780634b81539e1461017157806359c37cc914610271575b36156101305760405162461bcd60e51b81526004018080602001828103825260328152602001806114566032913960400191505060405180910390fd5b005b34801561013e57600080fd5b506101306004803603602081101561015557600080fd5b50356108cb565b34801561016857600080fd5b506101306108d8565b34801561017d57600080fd5b506102216004803603602081101561019457600080fd5b8101906020810181356401000000008111156101af57600080fd5b8201836020820111156101c157600080fd5b803590602001918460208302840111640100000000831117156101e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108f4945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561025d578181015183820152602001610245565b505050509050019250505060405180910390f35b34801561027d57600080fd5b50610286610961565b604080516001600160a01b039092168252519081900360200190f35b3480156102ae57600080fd5b506102d5600480360360208110156102c557600080fd5b50356001600160a01b0316610970565b60408051918252519081900360200190f35b3480156102f357600080fd5b506101306004803603604081101561030a57600080fd5b506001600160a01b038135169060200135610982565b34801561032c57600080fd5b506101306004803603604081101561034357600080fd5b506001600160a01b038135169060200135610990565b34801561036557600080fd5b506101306004803603602081101561037c57600080fd5b50356001600160a01b031661099b565b34801561039857600080fd5b50610221600480360360408110156103af57600080fd5b8101906020810181356401000000008111156103ca57600080fd5b8201836020820111156103dc57600080fd5b803590602001918460208302840111640100000000831117156103fe57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561044e57600080fd5b82018360208201111561046057600080fd5b8035906020019184602083028401116401000000008311171561048257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a63945050505050565b3480156104cc57600080fd5b50610130600480360360408110156104e357600080fd5b506001600160a01b0381358116916020013516610b49565b34801561050757600080fd5b506101306004803603606081101561051e57600080fd5b81019060208101813564010000000081111561053957600080fd5b82018360208201111561054b57600080fd5b8035906020019184602083028401116401000000008311171561056d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105bd57600080fd5b8201836020820111156105cf57600080fd5b803590602001918460208302840111640100000000831117156105f157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561064157600080fd5b82018360208201111561065357600080fd5b8035906020019184602083028401116401000000008311171561067557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b7c945050505050565b3480156106bf57600080fd5b50610130600480360360608110156106d657600080fd5b506001600160a01b03813581169160208101359091169060400135610d23565b34801561070257600080fd5b506101306004803603602081101561071957600080fd5b50356001600160a01b0316610d33565b34801561073557600080fd5b506102d56004803603604081101561074c57600080fd5b506001600160a01b0381358116916020013516610d57565b34801561077057600080fd5b506101306004803603602081101561078757600080fd5b50356001600160a01b0316610d74565b3480156107a357600080fd5b50610130600480360360408110156107ba57600080fd5b8101906020810181356401000000008111156107d557600080fd5b8201836020820111156107e757600080fd5b8035906020019184602083028401116401000000008311171561080957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561085957600080fd5b82018360208201111561086b57600080fd5b8035906020019184602083028401116401000000008311171561088d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610da5945050505050565b6108d53382610ecf565b50565b336000818152602081905260409020546108f29190610ecf565b565b60608060005b835181101561095a5760008085838151811061091257fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061094757fe5b60209081029190910101526001016108fa565b5092915050565b6002546001600160a01b031681565b60006020819052908152604090205481565b61098c8282610ecf565b5050565b61098c338383611093565b6002546001600160a01b031633146109e45760405162461bcd60e51b81526004018080602001828103825260318152602001806113a96031913960400191505060405180910390fd5b6001600160a01b038116610a295760405162461bcd60e51b815260040180806020018281038252602a815260200180611543602a913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60608251825114610aa55760405162461bcd60e51b81526004018080602001828103825260428152602001806115016042913960600191505060405180910390fd5b606060005b8351811015610b415760016000868381518110610ac357fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610af957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610b2e57fe5b6020908102919091010152600101610aaa565b509392505050565b6001600160a01b0380831660009081526001602090815260408083209385168352929052205461098c9082908490611093565b6002546001600160a01b03163314610bc55760405162461bcd60e51b81526004018080602001828103825260318152602001806113a96031913960400191505060405180910390fd5b6000825111610c055760405162461bcd60e51b815260040180806020018281038252602a8152602001806114d7602a913960400191505060405180910390fd5b8251825114610c455760405162461bcd60e51b81526004018080602001828103825260428152602001806115016042913960600191505060405180910390fd5b8051835114610c855760405162461bcd60e51b815260040180806020018281038252603f815260200180611300603f913960400191505060405180910390fd5b60005b8251811015610d1d57818181518110610c9d57fe5b602002602001015160016000868481518110610cb557fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858481518110610ceb57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091019055600101610c88565b50505050565b610d2e828483611093565b505050565b6001600160a01b0381166000908152602081905260409020546108d5908290610ecf565b600160209081526000928352604080842090915290825290205481565b6001600160a01b0381166000908152600160209081526040808320338085529252909120546108d591908390611093565b6002546001600160a01b03163314610dee5760405162461bcd60e51b81526004018080602001828103825260318152602001806113a96031913960400191505060405180910390fd5b6000825111610e2e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806114d7602a913960400191505060405180910390fd5b8051825114610e6e5760405162461bcd60e51b815260040180806020018281038252603b81526020018061136e603b913960400191505060405180910390fd5b60005b8251811015610d2e57818181518110610e8657fe5b6020026020010151600080858481518110610e9d57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091019055600101610e71565b6001600160a01b038216610f145760405162461bcd60e51b81526004018080602001828103825260288152602001806114af6028913960400191505060405180910390fd5b60008111610f535760405162461bcd60e51b815260040180806020018281038252602f81526020018061133f602f913960400191505060405180910390fd5b6001600160a01b03821660009081526020819052604090205480821115610fab5760405162461bcd60e51b81526004018080602001828103825260328152602001806113da6032913960400191505060405180910390fd5b6001600160a01b038316600081815260208190526040808220805486900390555190919084908381818185875af1925050503d8060008114611009576040519150601f19603f3d011682016040523d82523d6000602084013e61100e565b606091505b505090508061104e5760405162461bcd60e51b815260040180806020018281038252602181526020018061140c6021913960400191505060405180910390fd5b6040805184815290516001600160a01b038616917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250505050565b6001600160a01b0383166110d85760405162461bcd60e51b81526004018080602001828103825260288152602001806114af6028913960400191505060405180910390fd5b6001600160a01b03821661111d5760405162461bcd60e51b815260040180806020018281038252602981526020018061142d6029913960400191505060405180910390fd5b6000811161115c5760405162461bcd60e51b815260040180806020018281038252602f81526020018061133f602f913960400191505060405180910390fd5b6001600160a01b03808316600090815260016020908152604080832093871683529290522054808211156111c15760405162461bcd60e51b81526004018080602001828103825260328152602001806113da6032913960400191505060405180910390fd5b6001600160a01b038085166000818152602081815260408083208054889003905580517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101949094526024840187905251879492939285169263a9059cbb92604480830193919282900301818787803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b50519050806112ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806114886027913960400191505060405180910390fd5b856001600160a01b0316856001600160a01b03167fd2708b75549f9f4a149b80f5b152801c0e97e2419aa19930ad9cb1bb4cf4f91d866040518082815260200191505060405180910390a350505050505056fe50756c6c576974686472617761626c653a204552433230416464726573736573206d7573742062652073616d65206c656e67746820617320616d6f756e747350756c6c576974686472617761626c653a20616d6f756e74206d7573742062652067726561746572207468616e203050756c6c576974686472617761626c653a20726563697069656e7473206d7573742062652073616d65206c656e67746820617320616d6f756e747350756c6c576974686472617761626c653a204f6e6c7920747275737465644f776e65722063616e2063616c6c207468697350756c6c576974686472617761626c653a20616d6f756e74206d757374206265206c657373207468616e2062616c616e636550756c6c576974686472617761626c653a205472616e73666572206661696c656450756c6c576974686472617761626c653a2063616e6e6f74206265206e756c6c20636f6e74726163744465706f7369743a2066616c6c6261636b2066756e6374696f6e20646f6573206e6f742074616b6520617267756d656e747350756c6c576974686472617761626c653a204552433230207472616e73666572206661696c656450756c6c576974686472617761626c653a2063616e6e6f74206265206e756c6c206164647265737350756c6c576974686472617761626c653a20726563697069656e7473206d75737420626520676976656e50756c6c576974686472617761626c653a20726563697069656e7473206d7573742062652073616d65206c656e67746820617320455243323041646472657373657350756c6c576974686472617761626c653a206e65774f776e65722063616e6e6f7420626520656d707479a265627a7a72315820cd7508489875a45e7dd8f2fd73b1a0985a153279f68904083875d9061855db6664736f6c634300050c0032
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Decoding contract bytecode and functions**
[codex:445933] 
[codex:445933] I’m analyzing this PullWithdrawable-like contract by parsing bytecode selectors and functions to identify any exploitable withdraw paths. Since tools are limited, I plan to write a simple Python disassembler script to decode opcodes and map function selectors to their code, helping me understand any risks around owner or withdraw permissions.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] import binascii, textwrap
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip()
[codex:445933] # line starts with 0x...
[codex:445933] hexstr=hexstr.split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] # opcode table
[codex:445933] opnames={i: 'OP'+hex(i) for i in range(256)}
[codex:445933] # basic
[codex:445933] names={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',
[codex:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 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',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:445933] 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:445933] 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:445933] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] opnames.update(names)
[codex:445933] 
[codex:445933] # print with offsets near interesting opcodes
[codex:445933] # We'll disassemble and maybe focus on SSTORE, CALL, DELEGATECALL, SELFDESTRUCT
[codex:445933] 
[codex:445933] code_len=len(code)
[codex:445933] 
[codex:445933] def disasm(start=0, end=None):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i < (end if end is not None else code_len):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60 <= op <= 0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n]
[codex:445933]             out.append((i,name,data.hex()))
[codex:445933]             i+=1+n
[codex:445933]         else:
[codex:445933]             out.append((i,name,''))
[codex:445933]             i+=1
[codex:445933]     return out
[codex:445933] 
[codex:445933] # find offsets of CALL, DELEGATECALL, SELFDESTRUCT, SSTORE
[codex:445933] interesting=[0xf1,0xf4,0xff,0x55]
[codex:445933] for op in interesting:
[codex:445933]     name=opnames[op]
[codex:445933]     offs=[i for i,b in enumerate(code) if b==op]
[codex:445933]     print(name, len(offs))
[codex:445933]     print(offs[:50])
[codex:445933] 
[codex:445933] # print around each CALL
[codex:445933] print('\\nCALL sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0xf1]:
[codex:445933]     print('---',off)
[codex:445933]     for o,n,d in disasm(off-20, off+20):
[codex:445933]         if o==off: print('> %04x'%o, n,d)
[codex:445933]         else: print('  %04x'%o, n,d)
[codex:445933] 
[codex:445933] # SSTORE sites
[codex:445933] print('\\nSSTORE sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0x55]:
[codex:445933]     print('---',off)
[codex:445933]     for o,n,d in disasm(off-10, off+10):
[codex:445933]         if o==off: print('> %04x'%o, n,d)
[codex:445933]         else: print('  %04x'%o, n,d)
[codex:445933] 
[codex:445933] # DELEGATECALL sites
[codex:445933] print('\\nDELEGATECALL sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0xf4]:
[codex:445933]     print('---',off)
[codex:445933]     for o,n,d in disasm(off-10, off+10):
[codex:445933]         if o==off: print('> %04x'%o, n,d)
[codex:445933]         else: print('  %04x'%o, n,d)
[codex:445933] 
[codex:445933] # SELFDESTRUCT
[codex:445933] print('\\nSELFDESTRUCT sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0xff]:
[codex:445933]     print('---',off)
[codex:445933]     for o,n,d in disasm(off-10, off+10):
[codex:445933]         if o==off: print('> %04x'%o, n,d)
[codex:445933]         else: print('  %04x'%o, n,d)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 47ms:
[codex:445933] CALL 3
[codex:445933] [1515, 4057, 4677]
[codex:445933] DELEGATECALL 3
[codex:445933] [65, 537, 4831]
[codex:445933] SELFDESTRUCT 12
[codex:445933] [2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618]
[codex:445933] SSTORE 7
[codex:445933] [335, 2657, 3349, 3783, 4043, 4578, 5523]
[codex:445933] 
[codex:445933] CALL sites:
[codex:445933] --- 1515
[codex:445933]   05d7 DUP5 
[codex:445933]   05d8 PUSH1 20
[codex:445933]   05da DUP4 
[codex:445933]   05db MUL 
[codex:445933]   05dc DUP5 
[codex:445933]   05dd ADD 
[codex:445933]   05de GT 
[codex:445933]   05df PUSH5 0100000000
[codex:445933]   05e5 DUP4 
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Clarifying CALL and DELEGATECALL locations**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] import binascii
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] # disasm first 200 bytes
[codex:445933] opnames={i: 'OP'+hex(i) for i in range(256)}
[codex:445933] # map
[codex:445933] names={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',
[codex:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 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',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:445933] 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:445933] 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:445933] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] opnames.update(names)
[codex:445933] 
[codex:445933] i=0
[codex:445933] while i<200:
[codex:445933]     op=code[i]
[codex:445933]     name=opnames.get(op,hex(op))
[codex:445933]     if 0x60<=op<=0x7f:
[codex:445933]         n=op-0x5f
[codex:445933]         data=code[i+1:i+1+n]
[codex:445933]         print(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933]         i+=1+n
[codex:445933]     else:
[codex:445933]         print(f\"{i:04x} {name}\")
[codex:445933]         i+=1
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 18ms:
[codex:445933] 0000 PUSH1 0x80
[codex:445933] 0002 PUSH1 0x40
[codex:445933] 0004 MSTORE
[codex:445933] 0005 PUSH1 0x04
[codex:445933] 0007 CALLDATASIZE
[codex:445933] 0008 LT
[codex:445933] 0009 PUSH2 0x00f3
[codex:445933] 000c JUMPI
[codex:445933] 000d PUSH1 0x00
[codex:445933] 000f CALLDATALOAD
[codex:445933] 0010 PUSH1 0xe0
[codex:445933] 0012 SHR
[codex:445933] 0013 DUP1
[codex:445933] 0014 PUSH4 0xa51a828c
[codex:445933] 0019 GT
[codex:445933] 001a PUSH2 0x008a
[codex:445933] 001d JUMPI
[codex:445933] 001e DUP1
[codex:445933] 001f PUSH4 0xde1b0486
[codex:445933] 0024 GT
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Clarifying opcode detection method**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] # define opcodes map lengths
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={}
[codex:445933] names={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',
[codex:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] opnames.update(names)
[codex:445933] 
[codex:445933] # scan instructions
[codex:445933] instr=[]
[codex:445933] i=0
[codex:445933] while i < len(code):
[codex:445933]     op=code[i]
[codex:445933]     instr.append((i,op))
[codex:445933]     i += oplen[op]
[codex:445933] 
[codex:445933] # find offsets for opcodes of interest
[codex:445933] for op in [0xf1,0xf4,0xff,0x55]:
[codex:445933]     offs=[i for i,o in instr if o==op]
[codex:445933]     print(opnames[op], offs)
[codex:445933] 
[codex:445933] # show around each CALL and DELEGATECALL
[codex:445933] 
[codex:445933] def disasm(start, end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i < end and i < len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n]
[codex:445933]             out.append((i,name,data.hex()))
[codex:445933]         else:
[codex:445933]             out.append((i,name,''))
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] print('\\nCALL sites:')
[codex:445933] for off in [i for i,o in instr if o==0xf1]:
[codex:445933]     print('---',off)
[codex:445933]     for o,n,d in disasm(off-20, off+20):
[codex:445933]         mark='>' if o==off else ' '
[codex:445933]         print(f\"{mark} {o:04x} {n} {d}\")
[codex:445933] 
[codex:445933] print('\\nDELEGATECALL sites:')
[codex:445933] for off in [i for i,o in instr if o==0xf4]:
[codex:445933]     print('---',off)
[codex:445933]     for o,n,d in disasm(off-20, off+20):
[codex:445933]         mark='>' if o==off else ' '
[codex:445933]         print(f\"{mark} {o:04x} {n} {d}\")
[codex:445933] 
[codex:445933] print('\\nSELFDESTRUCT sites:')
[codex:445933] for off in [i for i,o in instr if o==0xff]:
[codex:445933]     print('---',off)
[codex:445933]     for o,n,d in disasm(off-10, off+10):
[codex:445933]         mark='>' if o==off else ' '
[codex:445933]         print(f\"{mark} {o:04x} {n} {d}\")
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 20ms:
[codex:445933] CALL [4057, 4677]
[codex:445933] DELEGATECALL []
[codex:445933] SELFDESTRUCT []
[codex:445933] SSTORE [2657, 3349, 3783, 4043, 4578, 5523]
[codex:445933] 
[codex:445933] CALL sites:
[codex:445933] --- 4057
[codex:445933]   0fc5 0x80 
[codex:445933]   0fc6 SLOAD 
[codex:445933]   0fc7 0x86 
[codex:445933]   0fc8 0x90 
[codex:445933]   0fc9 SUB 
[codex:445933]   0fca 0x90 
[codex:445933]   0fcb SSTORE 
[codex:445933]   0fcc MLOAD 
[codex:445933]   0fcd 0x90 
[codex:445933]   0fce 0x91 
[codex:445933]   0fcf 0x90 
[codex:445933]   0fd0 0x84 
[codex:445933]   0fd1 0x90 
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Examining CALL instructions and owner storage**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start, end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n]
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] # print around 0x0f80-0x1060
[codex:445933] for line in disasm(0x0f80, 0x1060):
[codex:445933]     print(line)
[codex:445933] print('----')
[codex:445933] for line in disasm(0x11b0, 0x12c0):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0f80 MSTORE
[codex:445933] 0f81 0x60 0x04
[codex:445933] 0f83 ADD
[codex:445933] 0f84 0x80
[codex:445933] 0f85 0x80
[codex:445933] 0f86 0x60 0x20
[codex:445933] 0f88 ADD
[codex:445933] 0f89 0x82
[codex:445933] 0f8a 0x81
[codex:445933] 0f8b SUB
[codex:445933] 0f8c 0x82
[codex:445933] 0f8d MSTORE
[codex:445933] 0f8e 0x60 0x32
[codex:445933] 0f90 0x81
[codex:445933] 0f91 MSTORE
[codex:445933] 0f92 0x60 0x20
[codex:445933] 0f94 ADD
[codex:445933] 0f95 0x80
[codex:445933] 0f96 0x61 0x13da
[codex:445933] 0f99 0x60 0x32
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing withdrawal function logic**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start, end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n]
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0xe80, 0xf30):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0e80 LT
[codex:445933] 0e81 0x61 0x0e86
[codex:445933] 0e84 JUMPI
[codex:445933] 0e85 INVALID
[codex:445933] 0e86 JUMPDEST
[codex:445933] 0e87 0x60 0x20
[codex:445933] 0e89 MUL
[codex:445933] 0e8a 0x60 0x20
[codex:445933] 0e8c ADD
[codex:445933] 0e8d ADD
[codex:445933] 0e8e MLOAD
[codex:445933] 0e8f 0x60 0x00
[codex:445933] 0e91 0x80
[codex:445933] 0e92 0x85
[codex:445933] 0e93 0x84
[codex:445933] 0e94 0x81
[codex:445933] 0e95 MLOAD
[codex:445933] 0e96 0x81
[codex:445933] 0e97 LT
[codex:445933] 0e98 0x61 0x0e9d
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Continuing to review preconditions**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n]
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0xf14, 0xfb0):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 21ms:
[codex:445933] 0f14 JUMPDEST
[codex:445933] 0f15 0x60 0x00
[codex:445933] 0f17 0x81
[codex:445933] 0f18 GT
[codex:445933] 0f19 0x61 0x0f53
[codex:445933] 0f1c JUMPI
[codex:445933] 0f1d 0x60 0x40
[codex:445933] 0f1f MLOAD
[codex:445933] 0f20 0x62 0x461bcd
[codex:445933] 0f24 0x60 0xe5
[codex:445933] 0f26 SHL
[codex:445933] 0f27 0x81
[codex:445933] 0f28 MSTORE
[codex:445933] 0f29 0x60 0x04
[codex:445933] 0f2b ADD
[codex:445933] 0f2c 0x80
[codex:445933] 0f2d 0x80
[codex:445933] 0f2e 0x60 0x20
[codex:445933] 0f30 ADD
[codex:445933] 0f31 0x82
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing withdrawal validation logic**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] # Build list of instructions with offsets
[codex:445933] instr=[]
[codex:445933] i=0
[codex:445933] while i<len(code):
[codex:445933]     op=code[i]
[codex:445933]     instr.append((i,op))
[codex:445933]     i += oplen[op]
[codex:445933] 
[codex:445933] # map offset to index
[codex:445933] idx_map={off:idx for idx,(off,op) in enumerate(instr)}
[codex:445933] 
[codex:445933] # find CALLER opcodes and print context
[codex:445933] for off,op in instr:
[codex:445933]     if op==0x33:  # CALLER
[codex:445933]         idx=idx_map[off]
[codex:445933]         start=max(0, idx-8)
[codex:445933]         end=min(len(instr), idx+12)
[codex:445933]         print('CALLER at', hex(off))
[codex:445933]         for j in range(start,end):
[codex:445933]             o,op2=instr[j]
[codex:445933]             name=opnames.get(op2, hex(op2))
[codex:445933]             # show push data
[codex:445933]             if 0x60<=op2<=0x7f:
[codex:445933]                 n=op2-0x5f
[codex:445933]                 data=code[o+1:o+1+n].hex()
[codex:445933]                 print(f\"  {o:04x} {name} 0x{data}\")
[codex:445933]             else:
[codex:445933]                 print(f\"  {o:04x} {name}\")
[codex:445933]         print('---')
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 21ms:
[codex:445933] CALLER at 0x8cf
[codex:445933]   08c5 POP
[codex:445933]   08c6 POP
[codex:445933]   08c7 POP
[codex:445933]   08c8 POP
[codex:445933]   08c9 POP
[codex:445933]   08ca JUMP
[codex:445933]   08cb JUMPDEST
[codex:445933]   08cc 0x61 0x08d5
[codex:445933]   08cf CALLER
[codex:445933]   08d0 0x82
[codex:445933]   08d1 0x61 0x0ecf
[codex:445933]   08d4 JUMP
[codex:445933]   08d5 JUMPDEST
[codex:445933]   08d6 POP
[codex:445933]   08d7 JUMP
[codex:445933]   08d8 JUMPDEST
[codex:445933]   08d9 CALLER
[codex:445933]   08da 0x60 0x00
[codex:445933]   08dc 0x81
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing function selectors and entries**
[codex:445933] 
[codex:445933] I'm mapping function selectors to their code entry points and planning to disassemble each function's initial bytes to understand parameter decoding and calls, aiming to identify any access control issues in withdraw-related functions by spotting internal calls and argument usage. This will help clarify if withdrawals allow unauthorized fund access or if protections are in place.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] # entry points
[codex:445933] entries=[0x132,0x15c,0x171,0x271,0x2a2,0x2e7,0x320,0x359,0x38c,0x4c0,0x4fb,0x6b3,0x6f6,0x729,0x764,0x797]
[codex:445933] 
[codex:445933] # function to disasm first 80 bytes from entry
[codex:445933] 
[codex:445933] def disasm(start, count_bytes=80):
[codex:445933]     i=start
[codex:445933]     end=start+count_bytes
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for entry in entries:
[codex:445933]     print(f\"\\nEntry 0x{entry:04x}\")
[codex:445933]     for line in disasm(entry, 100):
[codex:445933]         print(' ',line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 23ms:
[codex:445933] 
[codex:445933] Entry 0x0132
[codex:445933]   0132 JUMPDEST
[codex:445933]   0133 CALLVALUE
[codex:445933]   0134 0x80
[codex:445933]   0135 ISZERO
[codex:445933]   0136 0x61 0x013e
[codex:445933]   0139 JUMPI
[codex:445933]   013a 0x60 0x00
[codex:445933]   013c 0x80
[codex:445933]   013d REVERT
[codex:445933]   013e JUMPDEST
[codex:445933]   013f POP
[codex:445933]   0140 0x61 0x0130
[codex:445933]   0143 0x60 0x04
[codex:445933]   0145 0x80
[codex:445933]   0146 CALLDATASIZE
[codex:445933]   0147 SUB
[codex:445933]   0148 0x60 0x20
[codex:445933]   014a 0x81
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing revert messages and function selectors**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x0940,0x09c0):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 17ms:
[codex:445933] 0940 0x81
[codex:445933] 0941 LT
[codex:445933] 0942 0x61 0x0947
[codex:445933] 0945 JUMPI
[codex:445933] 0946 INVALID
[codex:445933] 0947 JUMPDEST
[codex:445933] 0948 0x60 0x20
[codex:445933] 094a 0x90
[codex:445933] 094b 0x81
[codex:445933] 094c MUL
[codex:445933] 094d 0x91
[codex:445933] 094e 0x90
[codex:445933] 094f 0x91
[codex:445933] 0950 ADD
[codex:445933] 0951 ADD
[codex:445933] 0952 MSTORE
[codex:445933] 0953 0x60 0x01
[codex:445933] 0955 ADD
[codex:445933] 0956 0x61 0x08fa
[codex:445933] 0959 JUMP
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Mapping internal function behaviors**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x08b0,0x0900):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 20ms:
[codex:445933] 08b0 MUL
[codex:445933] 08b1 0x80
[codex:445933] 08b2 0x82
[codex:445933] 08b3 0x84
[codex:445933] 08b4 CALLDATACOPY
[codex:445933] 08b5 0x60 0x00
[codex:445933] 08b7 0x92
[codex:445933] 08b8 ADD
[codex:445933] 08b9 0x91
[codex:445933] 08ba 0x90
[codex:445933] 08bb 0x91
[codex:445933] 08bc MSTORE
[codex:445933] 08bd POP
[codex:445933] 08be 0x92
[codex:445933] 08bf 0x95
[codex:445933] 08c0 POP
[codex:445933] 08c1 0x61 0x0da5
[codex:445933] 08c4 0x94
[codex:445933] 08c5 POP
[codex:445933] 08c6 POP
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing withdrawal functions and ownership checks**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x09b0,0x0a90):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 17ms:
[codex:445933] 09b0 MLOAD
[codex:445933] 09b1 0x62 0x461bcd
[codex:445933] 09b5 0x60 0xe5
[codex:445933] 09b7 SHL
[codex:445933] 09b8 0x81
[codex:445933] 09b9 MSTORE
[codex:445933] 09ba 0x60 0x04
[codex:445933] 09bc ADD
[codex:445933] 09bd 0x80
[codex:445933] 09be 0x80
[codex:445933] 09bf 0x60 0x20
[codex:445933] 09c1 ADD
[codex:445933] 09c2 0x82
[codex:445933] 09c3 0x81
[codex:445933] 09c4 SUB
[codex:445933] 09c5 0x82
[codex:445933] 09c6 MSTORE
[codex:445933] 09c7 0x60 0x31
[codex:445933] 09c9 0x81
[codex:445933] 09ca MSTORE
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing balance update functions for vulnerabilities**
[codex:445933] 
[codex:445933] I’m looking closely at the SSTORE instructions that modify balances to see if any function can let an attacker inflate their balance without sending funds, which could let them drain the contract. I mapped the storage writes to code locations and noted some add-to-balance actions inside loops, possibly owner-restricted deposits. I want to verify those protections and any payable checks to assess risk thoroughly.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x0c40,0x0d40):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0c40 0x80
[codex:445933] 0c41 0x91
[codex:445933] 0c42 SUB
[codex:445933] 0c43 0x90
[codex:445933] 0c44 REVERT
[codex:445933] 0c45 JUMPDEST
[codex:445933] 0c46 0x80
[codex:445933] 0c47 MLOAD
[codex:445933] 0c48 0x83
[codex:445933] 0c49 MLOAD
[codex:445933] 0c4a EQ
[codex:445933] 0c4b 0x61 0x0c85
[codex:445933] 0c4e JUMPI
[codex:445933] 0c4f 0x60 0x40
[codex:445933] 0c51 MLOAD
[codex:445933] 0c52 0x62 0x461bcd
[codex:445933] 0c56 0x60 0xe5
[codex:445933] 0c58 SHL
[codex:445933] 0c59 0x81
[codex:445933] 0c5a MSTORE
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing internal withdrawal functions and access controls**
[codex:445933] 
[codex:445933] I'm tracing internal functions linked to external selectors to understand who can call withdrawal routines and with what arguments, especially focusing on functions around 0x0982 and 0x0ecf that handle ETH withdrawals without obvious ownership checks. I plan to inspect related functions for ERC20 withdrawals next.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x1030,0x11f0):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 18ms:
[codex:445933] 1030 MSTORE
[codex:445933] 1031 0x60 0x21
[codex:445933] 1033 0x81
[codex:445933] 1034 MSTORE
[codex:445933] 1035 0x60 0x20
[codex:445933] 1037 ADD
[codex:445933] 1038 0x80
[codex:445933] 1039 0x61 0x140c
[codex:445933] 103c 0x60 0x21
[codex:445933] 103e 0x91
[codex:445933] 103f CODECOPY
[codex:445933] 1040 0x60 0x40
[codex:445933] 1042 ADD
[codex:445933] 1043 0x91
[codex:445933] 1044 POP
[codex:445933] 1045 POP
[codex:445933] 1046 0x60 0x40
[codex:445933] 1048 MLOAD
[codex:445933] 1049 0x80
[codex:445933] 104a 0x91
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Continuing to review function 0x1093**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x11e0,0x12f0):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 18ms:
[codex:445933] 11e0 SUB
[codex:445933] 11e1 0x90
[codex:445933] 11e2 SSTORE
[codex:445933] 11e3 0x80
[codex:445933] 11e4 MLOAD
[codex:445933] 11e5 0x7f 0xa9059cbb00000000000000000000000000000000000000000000000000000000
[codex:445933] 1206 0x81
[codex:445933] 1207 MSTORE
[codex:445933] 1208 0x60 0x04
[codex:445933] 120a 0x81
[codex:445933] 120b ADD
[codex:445933] 120c 0x94
[codex:445933] 120d 0x90
[codex:445933] 120e 0x94
[codex:445933] 120f MSTORE
[codex:445933] 1210 0x60 0x24
[codex:445933] 1212 0x84
[codex:445933] 1213 ADD
[codex:445933] 1214 0x87
[codex:445933] 1215 0x90
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing ERC20 withdrawal function**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x0b00,0x0c20):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 17ms:
[codex:445933] 0b00 ADD
[codex:445933] 0b01 MLOAD
[codex:445933] 0b02 0x60 0x01
[codex:445933] 0b04 0x60 0x01
[codex:445933] 0b06 0x60 0xa0
[codex:445933] 0b08 SHL
[codex:445933] 0b09 SUB
[codex:445933] 0b0a AND
[codex:445933] 0b0b 0x60 0x01
[codex:445933] 0b0d 0x60 0x01
[codex:445933] 0b0f 0x60 0xa0
[codex:445933] 0b11 SHL
[codex:445933] 0b12 SUB
[codex:445933] 0b13 AND
[codex:445933] 0b14 0x81
[codex:445933] 0b15 MSTORE
[codex:445933] 0b16 0x60 0x20
[codex:445933] 0b18 ADD
[codex:445933] 0b19 0x90
[codex:445933] 0b1a 0x81
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing ERC20 withdrawal functions**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] 
[codex:445933] def disasm(start,end):
[codex:445933]     i=start
[codex:445933]     out=[]
[codex:445933]     while i<end and i<len(code):
[codex:445933]         op=code[i]
[codex:445933]         name=opnames.get(op, hex(op))
[codex:445933]         if 0x60<=op<=0x7f:
[codex:445933]             n=op-0x5f
[codex:445933]             data=code[i+1:i+1+n].hex()
[codex:445933]             out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933]         else:
[codex:445933]             out.append(f\"{i:04x} {name}\")
[codex:445933]         i += oplen[op]
[codex:445933]     return out
[codex:445933] 
[codex:445933] for line in disasm(0x0d30,0x0e20):
[codex:445933]     print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0d30 POP
[codex:445933] 0d31 POP
[codex:445933] 0d32 JUMP
[codex:445933] 0d33 JUMPDEST
[codex:445933] 0d34 0x60 0x01
[codex:445933] 0d36 0x60 0x01
[codex:445933] 0d38 0x60 0xa0
[codex:445933] 0d3a SHL
[codex:445933] 0d3b SUB
[codex:445933] 0d3c 0x81
[codex:445933] 0d3d AND
[codex:445933] 0d3e 0x60 0x00
[codex:445933] 0d40 0x90
[codex:445933] 0d41 0x81
[codex:445933] 0d42 MSTORE
[codex:445933] 0d43 0x60 0x20
[codex:445933] 0d45 0x81
[codex:445933] 0d46 0x90
[codex:445933] 0d47 MSTORE
[codex:445933] 0d48 0x60 0x40
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing Withdraw and Owner Checks**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] # build instructions with opcodes and data
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] 
[codex:445933] # disasm from 0xecf to 0xfd9
[codex:445933] start=0xecf
[codex:445933] end=0xfda
[codex:445933] 
[codex:445933] i=start
[codex:445933] while i<end:
[codex:445933]     op=code[i]
[codex:445933]     name=opnames.get(op, hex(op))
[codex:445933]     if 0x60<=op<=0x7f:
[codex:445933]         n=op-0x5f
[codex:445933]         data=code[i+1:i+1+n].hex()
[codex:445933]         print(f\"{i:04x} {name} 0x{data}\")
[codex:445933]     else:
[codex:445933]         print(f\"{i:04x} {name}\")
[codex:445933]     i += oplen[op]
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 20ms:
[codex:445933] 0ecf JUMPDEST
[codex:445933] 0ed0 0x60 0x01
[codex:445933] 0ed2 0x60 0x01
[codex:445933] 0ed4 0x60 0xa0
[codex:445933] 0ed6 SHL
[codex:445933] 0ed7 SUB
[codex:445933] 0ed8 0x82
[codex:445933] 0ed9 AND
[codex:445933] 0eda 0x61 0x0f14
[codex:445933] 0edd JUMPI
[codex:445933] 0ede 0x60 0x40
[codex:445933] 0ee0 MLOAD
[codex:445933] 0ee1 0x62 0x461bcd
[codex:445933] 0ee5 0x60 0xe5
[codex:445933] 0ee7 SHL
[codex:445933] 0ee8 0x81
[codex:445933] 0ee9 MSTORE
[codex:445933] 0eea 0x60 0x04
[codex:445933] 0eec ADD
[codex:445933] 0eed 0x80
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Analyzing stack usage for DUP/SWAP opcodes**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] 
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933]     oplen[op]=1+(op-0x5f)
[codex:445933] 
[codex:445933] # decode instructions from start to end
[codex:445933] start=0xecf
[codex:445933] end=0xf74
[codex:445933] 
[codex:445933] instr=[]
[codex:445933] i=start
[codex:445933] while i<end:
[codex:445933]     op=code[i]
[codex:445933]     data=None
[codex:445933]     if 0x60<=op<=0x7f:
[codex:445933]         n=op-0x5f
[codex:445933]         data=code[i+1:i+1+n]
[codex:445933]     instr.append((i,op,data))
[codex:445933]     i += oplen[op]
[codex:445933] 
[codex:445933] # simple symbolic stack
[codex:445933] stack=['R','A','P']  # top first: R=return, A=amount, P=payee
[codex:445933] 
[codex:445933] # helper for display
[codex:445933] def st():
[codex:445933]     return '['+', '.join(stack)+']'
[codex:445933] 
[codex:445933] # function to pop
[codex:445933] 
[codex:445933] def pop(n=1):
[codex:445933]     res=[]
[codex:445933]     for _ in range(n):
[codex:445933]         if stack:
[codex:445933]             res.append(stack.pop(0))
[codex:445933]         else:
[codex:445933]             res.append('empty')
[codex:445933]     return res if n>1 else res[0]
[codex:445933] 
[codex:445933] # function to push
[codex:445933] 
[codex:445933] def push(x):
[codex:445933]     stack.insert(0,x)
[codex:445933] 
[codex:445933] # execute
[codex:445933] for (off,op,data) in instr:
[codex:445933]     # handle only basic ops, ignore control flow
[codex:445933]     if 0x60<=op<=0x7f:
[codex:445933]         push('0x'+data.hex())
[codex:445933]     elif op==0x5b: # JUMPDEST
[codex:445933]         pass
[codex:445933]     elif 0x80<=op<=0x8f: # DUP
[codex:445933]         idx=op-0x80
[codex:445933]         if idx < len(stack):
[codex:445933]             push(stack[idx])
[codex:445933]         else:
[codex:445933]             push('dup?')
[codex:445933]     elif 0x90<=op<=0x9f: # SWAP
[codex:445933]         idx=op-0x90+1
[codex:445933]         if idx < len(stack):
[codex:445933]             stack[0], stack[idx] = stack[idx], stack[0]
[codex:445933]         else:
[codex:445933]             pass
[codex:445933]     elif op in (0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,
[codex:445933]                 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x20):
[codex:445933]         # binary or unary ops; handle for stack positions
[codex:445933]         if op in (0x15,0x19): # ISZERO, NOT
[codex:445933]             a=pop()
[codex:445933]             push(f\"{['ISZERO','NOT'][op==0x19]}({a})\")
[codex:445933]         else:
[codex:445933]             b=pop(); a=pop()
[codex:445933]             name={0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x10:'LT',0x11:'GT',0x14:'EQ',0x16:'AND',0x17:'OR',0x20:'SHA3',0x1b:'SHL'}.get(op,f'op{op:x}')
[codex:445933]             push(f\"{name}({a},{b})\")
[codex:445933]     elif op==0x54: # SLOAD
[codex:445933]         a=pop()
[codex:445933]         push(f\"SLOAD({a})\")
[codex:445933]     elif op==0x52: # MSTORE
[codex:445933]         b=pop(); a=pop()
[codex:445933]         # ignore memory
[codex:445933]     elif op==0x51: # MLOAD
[codex:445933]         a=pop();
[codex:445933]         push(f\"MLOAD({a})\")
[codex:445933]     elif op==0x56: # JUMP
[codex:445933]         # stop
[codex:445933]         break
[codex:445933]     elif op==0x57: # JUMPI
[codex:445933]         # conditional, ignore
[codex:445933]         cond=pop(); dest=pop()
[codex:445933]         # do nothing
[codex:445933]     elif op==0x5a: # GAS
[codex:445933]         push('GAS')
[codex:445933]     elif op==0xf1: # CALL
[codex:445933]         pass
[codex:445933]     elif op==0x50: # POP
[codex:445933]         pop()
[codex:445933]     else:
[codex:445933]         # unknown, pop? no
[codex:445933]         pass
[codex:445933]     if off in (0xf6c,0xf6d,0xf6e,0xf6f,0xf70,0xf71):
[codex:445933]         print(hex(off), st())
[codex:445933] 
[codex:445933] print('stack at 0xf6c', st())
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0xf6c [SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf6d [SLOAD(SHA3(0x40,0x00)), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf6e [MLOAD(0x40), SLOAD(SHA3(0x40,0x00)), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf6f [GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40)), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf70 [ISZERO(GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40))), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf71 [0x0fab, ISZERO(GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40))), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] stack at 0xf6c [0x0fab, ISZERO(GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40))), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 
[codex:445933] thinking
[codex:445933] **Evaluating symbolic execution limitations and final verdict**
[codex:445933] 
[codex:445933] I'm reviewing the symbolic execution flaws around memory and stack modeling, realizing the naive approach isn't reliable. After carefully checking the bytecode logic for unsafe calls or fallback exploits, I conclude there are no concrete, exploitable vulnerabilities. I'll prepare a valid JSON output reporting no findings, per the user's strict schema and instructions.
[codex:445933] codex
[codex:445933] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.","findings":[]}
[codex:445933] tokens used
[codex:445933] 139,444
[codex:445933] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-03T02:26:32.295937+00:00",
        "returncode": 0
    },
    "summary": "Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.",
    "raw_final": {
        "summary": "Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
2
EXT*/BALANCE
1
Total opcodes
3618
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x00f3
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0xa51a828c
00000019: GT
0000001a: PUSH2 0x008a
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xde1b0486
00000024: GT
00000025: PUSH2 0x0059
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xde1b0486
0000002f: EQ
00000030: PUSH2 0x06f6
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xebeaa0a7
0000003a: EQ
0000003b: PUSH2 0x0729
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xf4f3b200
00000045: EQ
00000046: PUSH2 0x0764
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf99cc2a4
00000050: EQ
00000051: PUSH2 0x0797
00000054: JUMPI
00000055: PUSH2 0x00f3
00000058: JUMP
00000059: JUMPDEST
0000005a: DUP1
0000005b: PUSH4 0xa51a828c
00000060: EQ
00000061: PUSH2 0x038c
00000064: JUMPI
00000065: DUP1
00000066: PUSH4 0xa8001d6f
0000006b: EQ
0000006c: PUSH2 0x04c0
0000006f: JUMPI
00000070: DUP1
00000071: PUSH4 0xb412cf20
00000076: EQ
00000077: PUSH2 0x04fb
0000007a: JUMPI
0000007b: DUP1
0000007c: PUSH4 0xc7927b74
00000081: EQ
00000082: PUSH2 0x06b3
00000085: JUMPI
00000086: PUSH2 0x00f3
00000089: JUMP
0000008a: JUMPDEST
0000008b: DUP1
0000008c: PUSH4 0x7a9262a2
00000091: GT
00000092: PUSH2 0x00c6
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0x7a9262a2
0000009c: EQ
0000009d: PUSH2 0x02a2
000000a0: JUMPI
000000a1: DUP1
000000a2: PUSH4 0x9470b0bd
000000a7: EQ
000000a8: PUSH2 0x02e7
000000ab: JUMPI
000000ac: DUP1
000000ad: PUSH4 0xa1db9782
000000b2: EQ
000000b3: PUSH2 0x0320
000000b6: JUMPI
000000b7: DUP1
000000b8: PUSH4 0xa39a45b7
000000bd: EQ
000000be: PUSH2 0x0359
000000c1: JUMPI
000000c2: PUSH2 0x00f3
000000c5: JUMP
000000c6: JUMPDEST
000000c7: DUP1
000000c8: PUSH4 0x2e1a7d4d
000000cd: EQ
000000ce: PUSH2 0x0132
000000d1: JUMPI
000000d2: DUP1
000000d3: PUSH4 0x3ccfd60b
000000d8: EQ
000000d9: PUSH2 0x015c
000000dc: JUMPI
000000dd: DUP1
000000de: PUSH4 0x4b81539e
000000e3: EQ
000000e4: PUSH2 0x0171
000000e7: JUMPI
000000e8: DUP1
000000e9: PUSH4 0x59c37cc9
000000ee: EQ
000000ef: PUSH2 0x0271
000000f2: JUMPI
000000f3: JUMPDEST
000000f4: CALLDATASIZE
000000f5: ISZERO
000000f6: PUSH2 0x0130
000000f9: JUMPI
000000fa: PUSH1 0x40
000000fc: MLOAD
000000fd: PUSH3 0x461bcd
00000101: PUSH1 0xe5
00000103: SHL
00000104: DUP2
00000105: MSTORE
00000106: PUSH1 0x04
00000108: ADD
00000109: DUP1
0000010a: DUP1
0000010b: PUSH1 0x20
0000010d: ADD
0000010e: DUP3
0000010f: DUP2
00000110: SUB
00000111: DUP3
00000112: MSTORE
00000113: PUSH1 0x32
00000115: DUP2
00000116: MSTORE
00000117: PUSH1 0x20
00000119: ADD
0000011a: DUP1
0000011b: PUSH2 0x1456
0000011e: PUSH1 0x32
00000120: SWAP2
00000121: CODECOPY
00000122: PUSH1 0x40
00000124: ADD
00000125: SWAP2
00000126: POP
00000127: POP
00000128: PUSH1 0x40
0000012a: MLOAD
0000012b: DUP1
0000012c: SWAP2
0000012d: SUB
0000012e: SWAP1
0000012f: REVERT
00000130: JUMPDEST
00000131: STOP
00000132: JUMPDEST
00000133: CALLVALUE
00000134: DUP1
00000135: ISZERO
00000136: PUSH2 0x013e
00000139: JUMPI
0000013a: PUSH1 0x00
0000013c: DUP1
0000013d: REVERT
0000013e: JUMPDEST
0000013f: POP
00000140: PUSH2 0x0130
00000143: PUSH1 0x04
00000145: DUP1
00000146: CALLDATASIZE
00000147: SUB
00000148: PUSH1 0x20
0000014a: DUP2
0000014b: LT
0000014c: ISZERO
0000014d: PUSH2 0x0155
00000150: JUMPI
00000151: PUSH1 0x00
00000153: DUP1
00000154: REVERT
00000155: JUMPDEST
00000156: POP
00000157: CALLDATALOAD
00000158: PUSH2 0x08cb
0000015b: JUMP
0000015c: JUMPDEST
0000015d: CALLVALUE
0000015e: DUP1
0000015f: ISZERO
00000160: PUSH2 0x0168
00000163: JUMPI
00000164: PUSH1 0x00
00000166: DUP1
00000167: REVERT
00000168: JUMPDEST
00000169: POP
0000016a: PUSH2 0x0130
0000016d: PUSH2 0x08d8
00000170: JUMP
00000171: JUMPDEST
00000172: CALLVALUE
00000173: DUP1
00000174: ISZERO
00000175: PUSH2 0x017d
00000178: JUMPI
00000179: PUSH1 0x00
0000017b: DUP1
0000017c: REVERT
0000017d: JUMPDEST
0000017e: POP
0000017f: PUSH2 0x0221
00000182: PUSH1 0x04
00000184: DUP1
00000185: CALLDATASIZE
00000186: SUB
00000187: PUSH1 0x20
00000189: DUP2
0000018a: LT
0000018b: ISZERO
0000018c: PUSH2 0x0194
0000018f: JUMPI
00000190: PUSH1 0x00
00000192: DUP1
00000193: REVERT
00000194: JUMPDEST
00000195: DUP2
00000196: ADD
00000197: SWAP1
00000198: PUSH1 0x20
0000019a: DUP2
0000019b: ADD
0000019c: DUP2
0000019d: CALLDATALOAD
0000019e: PUSH5 0x0100000000
000001a4: DUP2
000001a5: GT
000001a6: ISZERO
000001a7: PUSH2 0x01af
000001aa: JUMPI
000001ab: PUSH1 0x00
000001ad: DUP1
000001ae: REVERT
000001af: JUMPDEST
000001b0: DUP3
000001b1: ADD
000001b2: DUP4
000001b3: PUSH1 0x20
000001b5: DUP3
000001b6: ADD
000001b7: GT
000001b8: ISZERO
000001b9: PUSH2 0x01c1
000001bc: JUMPI
000001bd: PUSH1 0x00
000001bf: DUP1
000001c0: REVERT
000001c1: JUMPDEST
000001c2: DUP1
000001c3: CALLDATALOAD
000001c4: SWAP1
000001c5: PUSH1 0x20
000001c7: ADD
000001c8: SWAP2
000001c9: DUP5
000001ca: PUSH1 0x20
000001cc: DUP4
000001cd: MUL
000001ce: DUP5
000001cf: ADD
000001d0: GT
000001d1: PUSH5 0x0100000000
000001d7: DUP4
000001d8: GT
000001d9: OR
000001da: ISZERO
000001db: PUSH2 0x01e3
000001de: JUMPI
000001df: PUSH1 0x00
000001e1: DUP1
000001e2: REVERT
000001e3: JUMPDEST
000001e4: SWAP2
000001e5: SWAP1
000001e6: DUP1
000001e7: DUP1
000001e8: PUSH1 0x20
000001ea: MUL
000001eb: PUSH1 0x20
000001ed: ADD
000001ee: PUSH1 0x40
000001f0: MLOAD
000001f1: SWAP1
000001f2: DUP2
000001f3: ADD
000001f4: PUSH1 0x40
000001f6: MSTORE
000001f7: DUP1
000001f8: SWAP4
000001f9: SWAP3
000001fa: SWAP2
000001fb: SWAP1
000001fc: DUP2
000001fd: DUP2
000001fe: MSTORE
000001ff: PUSH1 0x20
00000201: ADD
00000202: DUP4
00000203: DUP4
00000204: PUSH1 0x20
00000206: MUL
00000207: DUP1
00000208: DUP3
00000209: DUP5
0000020a: CALLDATACOPY
0000020b: PUSH1 0x00
0000020d: SWAP3
0000020e: ADD
0000020f: SWAP2
00000210: SWAP1
00000211: SWAP2
00000212: MSTORE
00000213: POP
00000214: SWAP3
00000215: SWAP6
00000216: POP
00000217: PUSH2 0x08f4
0000021a: SWAP5
0000021b: POP
0000021c: POP
0000021d: POP
0000021e: POP
0000021f: POP
00000220: JUMP
00000221: JUMPDEST
00000222: PUSH1 0x40
00000224: DUP1
00000225: MLOAD
00000226: PUSH1 0x20
00000228: DUP1
00000229: DUP3
0000022a: MSTORE
0000022b: DUP4
0000022c: MLOAD
0000022d: DUP2
0000022e: DUP4
0000022f: ADD
00000230: MSTORE
00000231: DUP4
00000232: MLOAD
00000233: SWAP2
00000234: SWAP3
00000235: DUP4
00000236: SWAP3
00000237: SWAP1
00000238: DUP4
00000239: ADD
0000023a: SWAP2
0000023b: DUP6
0000023c: DUP2
0000023d: ADD
0000023e: SWAP2
0000023f: MUL
00000240: DUP1
00000241: DUP4
00000242: DUP4
00000243: PUSH1 0x00
00000245: JUMPDEST
00000246: DUP4
00000247: DUP2
00000248: LT
00000249: ISZERO
0000024a: PUSH2 0x025d
0000024d: JUMPI
0000024e: DUP2
0000024f: DUP2
00000250: ADD
00000251: MLOAD
00000252: DUP4
00000253: DUP3
00000254: ADD
00000255: MSTORE
00000256: PUSH1 0x20
00000258: ADD
00000259: PUSH2 0x0245
0000025c: JUMP
0000025d: JUMPDEST
0000025e: POP
0000025f: POP
00000260: POP
00000261: POP
00000262: SWAP1
00000263: POP
00000264: ADD
00000265: SWAP3
00000266: POP
00000267: POP
00000268: POP
00000269: PUSH1 0x40
0000026b: MLOAD
0000026c: DUP1
0000026d: SWAP2
0000026e: SUB
0000026f: SWAP1
00000270: RETURN
00000271: JUMPDEST
00000272: CALLVALUE
00000273: DUP1
00000274: ISZERO
00000275: PUSH2 0x027d
00000278: JUMPI
00000279: PUSH1 0x00
0000027b: DUP1
0000027c: REVERT
0000027d: JUMPDEST
0000027e: POP
0000027f: PUSH2 0x0286
00000282: PUSH2 0x0961
00000285: JUMP
00000286: JUMPDEST
00000287: PUSH1 0x40
00000289: DUP1
0000028a: MLOAD
0000028b: PUSH1 0x01
0000028d: PUSH1 0x01
0000028f: PUSH1 0xa0
00000291: SHL
00000292: SUB
00000293: SWAP1
00000294: SWAP3
00000295: AND
00000296: DUP3
00000297: MSTORE
00000298: MLOAD
00000299: SWAP1
0000029a: DUP2
0000029b: SWAP1
0000029c: SUB
0000029d: PUSH1 0x20
0000029f: ADD
000002a0: SWAP1
000002a1: RETURN
000002a2: JUMPDEST
000002a3: CALLVALUE
000002a4: DUP1
000002a5: ISZERO
000002a6: PUSH2 0x02ae
000002a9: JUMPI
000002aa: PUSH1 0x00
000002ac: DUP1
000002ad: REVERT
000002ae: JUMPDEST
000002af: POP
000002b0: PUSH2 0x02d5
000002b3: PUSH1 0x04
000002b5: DUP1
000002b6: CALLDATASIZE
000002b7: SUB
000002b8: PUSH1 0x20
000002ba: DUP2
000002bb: LT
000002bc: ISZERO
000002bd: PUSH2 0x02c5
000002c0: JUMPI
000002c1: PUSH1 0x00
000002c3: DUP1
000002c4: REVERT
000002c5: JUMPDEST
000002c6: POP
000002c7: CALLDATALOAD
000002c8: PUSH1 0x01
000002ca: PUSH1 0x01
000002cc: PUSH1 0xa0
000002ce: SHL
000002cf: SUB
000002d0: AND
000002d1: PUSH2 0x0970
000002d4: JUMP
000002d5: JUMPDEST
000002d6: PUSH1 0x40
000002d8: DUP1
000002d9: MLOAD
000002da: SWAP2
000002db: DUP3
000002dc: MSTORE
000002dd: MLOAD
000002de: SWAP1
000002df: DUP2
000002e0: SWAP1
000002e1: SUB
000002e2: PUSH1 0x20
000002e4: ADD
000002e5: SWAP1
000002e6: RETURN
000002e7: JUMPDEST
000002e8: CALLVALUE
000002e9: DUP1
000002ea: ISZERO
000002eb: PUSH2 0x02f3
000002ee: JUMPI
000002ef: PUSH1 0x00
000002f1: DUP1
000002f2: REVERT
000002f3: JUMPDEST
000002f4: POP
000002f5: PUSH2 0x0130
000002f8: PUSH1 0x04
000002fa: DUP1
000002fb: CALLDATASIZE
000002fc: SUB
000002fd: PUSH1 0x40
000002ff: DUP2
00000300: LT
00000301: ISZERO
00000302: PUSH2 0x030a
00000305: JUMPI
00000306: PUSH1 0x00
00000308: DUP1
00000309: REVERT
0000030a: JUMPDEST
0000030b: POP
0000030c: PUSH1 0x01
0000030e: PUSH1 0x01
00000310: PUSH1 0xa0
00000312: SHL
00000313: SUB
00000314: DUP2
00000315: CALLDATALOAD
00000316: AND
00000317: SWAP1
00000318: PUSH1 0x20
0000031a: ADD
0000031b: CALLDATALOAD
0000031c: PUSH2 0x0982
0000031f: JUMP
00000320: JUMPDEST
00000321: CALLVALUE
00000322: DUP1
00000323: ISZERO
00000324: PUSH2 0x032c
00000327: JUMPI
00000328: PUSH1 0x00
0000032a: DUP1
0000032b: REVERT
0000032c: JUMPDEST
0000032d: POP
0000032e: PUSH2 0x0130
00000331: PUSH1 0x04
00000333: DUP1
00000334: CALLDATASIZE
00000335: SUB
00000336: PUSH1 0x40
00000338: DUP2
00000339: LT
0000033a: ISZERO
0000033b: PUSH2 0x0343
0000033e: JUMPI
0000033f: PUSH1 0x00
00000341: DUP1
00000342: REVERT
00000343: JUMPDEST
00000344: POP
00000345: PUSH1 0x01
00000347: PUSH1 0x01
00000349: PUSH1 0xa0
0000034b: SHL
0000034c: SUB
0000034d: DUP2
0000034e: CALLDATALOAD
0000034f: AND
00000350: SWAP1
00000351: PUSH1 0x20
00000353: ADD
00000354: CALLDATALOAD
00000355: PUSH2 0x0990
00000358: JUMP
00000359: JUMPDEST
0000035a: CALLVALUE
0000035b: DUP1
0000035c: ISZERO
0000035d: PUSH2 0x0365
00000360: JUMPI
00000361: PUSH1 0x00
00000363: DUP1
00000364: REVERT
00000365: JUMPDEST
00000366: POP
00000367: PUSH2 0x0130
0000036a: PUSH1 0x04
0000036c: DUP1
0000036d: CALLDATASIZE
0000036e: SUB
0000036f: PUSH1 0x20
00000371: DUP2
00000372: LT
00000373: ISZERO
00000374: PUSH2 0x037c
00000377: JUMPI
00000378: PUSH1 0x00
0000037a: DUP1
0000037b: REVERT
0000037c: JUMPDEST
0000037d: POP
0000037e: CALLDATALOAD
0000037f: PUSH1 0x01
00000381: PUSH1 0x01
00000383: PUSH1 0xa0
00000385: SHL
00000386: SUB
00000387: AND
00000388: PUSH2 0x099b
0000038b: JUMP
0000038c: JUMPDEST
0000038d: CALLVALUE
0000038e: DUP1
0000038f: ISZERO
00000390: PUSH2 0x0398
00000393: JUMPI
00000394: PUSH1 0x00
00000396: DUP1
00000397: REVERT
00000398: JUMPDEST
00000399: POP
0000039a: PUSH2 0x0221
0000039d: PUSH1 0x04
0000039f: DUP1
000003a0: CALLDATASIZE
000003a1: SUB
000003a2: PUSH1 0x40
000003a4: DUP2
000003a5: LT
000003a6: ISZERO
000003a7: PUSH2 0x03af
000003aa: JUMPI
000003ab: PUSH1 0x00
000003ad: DUP1
000003ae: REVERT
000003af: JUMPDEST
000003b0: DUP2
000003b1: ADD
000003b2: SWAP1
000003b3: PUSH1 0x20
000003b5: DUP2
000003b6: ADD
000003b7: DUP2
000003b8: CALLDATALOAD
000003b9: PUSH5 0x0100000000
000003bf: DUP2
000003c0: GT
000003c1: ISZERO
000003c2: PUSH2 0x03ca
000003c5: JUMPI
000003c6: PUSH1 0x00
000003c8: DUP1
000003c9: REVERT
000003ca: JUMPDEST
000003cb: DUP3
000003cc: ADD
000003cd: DUP4
000003ce: PUSH1 0x20
000003d0: DUP3
000003d1: ADD
000003d2: GT
000003d3: ISZERO
000003d4: PUSH2 0x03dc
000003d7: JUMPI
000003d8: PUSH1 0x00
000003da: DUP1
000003db: REVERT
000003dc: JUMPDEST
000003dd: DUP1
000003de: CALLDATALOAD
000003df: SWAP1
000003e0: PUSH1 0x20
000003e2: ADD
000003e3: SWAP2
000003e4: DUP5
000003e5: PUSH1 0x20
000003e7: DUP4
000003e8: MUL
000003e9: DUP5
000003ea: ADD
000003eb: GT
000003ec: PUSH5 0x0100000000
000003f2: DUP4
000003f3: GT
000003f4: OR
000003f5: ISZERO
000003f6: PUSH2 0x03fe
000003f9: JUMPI
000003fa: PUSH1 0x00
000003fc: DUP1
000003fd: REVERT
000003fe: JUMPDEST
000003ff: SWAP2
00000400: SWAP1
00000401: DUP1
00000402: DUP1
00000403: PUSH1 0x20
00000405: MUL
00000406: PUSH1 0x20
00000408: ADD
00000409: PUSH1 0x40
0000040b: MLOAD
0000040c: SWAP1
0000040d: DUP2
0000040e: ADD
0000040f: PUSH1 0x40
00000411: MSTORE
00000412: DUP1
00000413: SWAP4
00000414: SWAP3
00000415: SWAP2
00000416: SWAP1
00000417: DUP2
00000418: DUP2
00000419: MSTORE
0000041a: PUSH1 0x20
0000041c: ADD
0000041d: DUP4
0000041e: DUP4
0000041f: PUSH1 0x20
00000421: MUL
00000422: DUP1
00000423: DUP3
00000424: DUP5
00000425: CALLDATACOPY
00000426: PUSH1 0x00
00000428: SWAP3
00000429: ADD
0000042a: SWAP2
0000042b: SWAP1
0000042c: SWAP2
0000042d: MSTORE
0000042e: POP
0000042f: SWAP3
00000430: SWAP6
00000431: SWAP5
00000432: SWAP4
00000433: PUSH1 0x20
00000435: DUP2
00000436: ADD
00000437: SWAP4
00000438: POP
00000439: CALLDATALOAD
0000043a: SWAP2
0000043b: POP
0000043c: POP
0000043d: PUSH5 0x0100000000
00000443: DUP2
00000444: GT
00000445: ISZERO
00000446: PUSH2 0x044e
00000449: JUMPI
0000044a: PUSH1 0x00
0000044c: DUP1
0000044d: REVERT
0000044e: JUMPDEST
0000044f: DUP3
00000450: ADD
00000451: DUP4
00000452: PUSH1 0x20
00000454: DUP3
00000455: ADD
00000456: GT
00000457: ISZERO
00000458: PUSH2 0x0460
0000045b: JUMPI
0000045c: PUSH1 0x00
0000045e: DUP1
0000045f: REVERT
00000460: JUMPDEST
00000461: DUP1
00000462: CALLDATALOAD
00000463: SWAP1
00000464: PUSH1 0x20
00000466: ADD
00000467: SWAP2
00000468: DUP5
00000469: PUSH1 0x20
0000046b: DUP4
0000046c: MUL
0000046d: DUP5
0000046e: ADD
0000046f: GT
00000470: PUSH5 0x0100000000
00000476: DUP4
00000477: GT
00000478: OR
00000479: ISZERO
0000047a: PUSH2 0x0482
0000047d: JUMPI
0000047e: PUSH1 0x00
00000480: DUP1
00000481: REVERT
00000482: JUMPDEST
00000483: SWAP2
00000484: SWAP1
00000485: DUP1
00000486: DUP1
00000487: PUSH1 0x20
00000489: MUL
0000048a: PUSH1 0x20
0000048c: ADD
0000048d: PUSH1 0x40
0000048f: MLOAD
00000490: SWAP1
00000491: DUP2
00000492: ADD
00000493: PUSH1 0x40
00000495: MSTORE
00000496: DUP1
00000497: SWAP4
00000498: SWAP3
00000499: SWAP2
0000049a: SWAP1
0000049b: DUP2
0000049c: DUP2
0000049d: MSTORE
0000049e: PUSH1 0x20
000004a0: ADD
000004a1: DUP4
000004a2: DUP4
000004a3: PUSH1 0x20
000004a5: MUL
000004a6: DUP1
000004a7: DUP3
000004a8: DUP5
000004a9: CALLDATACOPY
000004aa: PUSH1 0x00
000004ac: SWAP3
000004ad: ADD
000004ae: SWAP2
000004af: SWAP1
000004b0: SWAP2
000004b1: MSTORE
000004b2: POP
000004b3: SWAP3
000004b4: SWAP6
000004b5: POP
000004b6: PUSH2 0x0a63
000004b9: SWAP5
000004ba: POP
000004bb: POP
000004bc: POP
000004bd: POP
000004be: POP
000004bf: JUMP
000004c0: JUMPDEST
000004c1: CALLVALUE
000004c2: DUP1
000004c3: ISZERO
000004c4: PUSH2 0x04cc
000004c7: JUMPI
000004c8: PUSH1 0x00
000004ca: DUP1
000004cb: REVERT
000004cc: JUMPDEST
000004cd: POP
000004ce: PUSH2 0x0130
000004d1: PUSH1 0x04
000004d3: DUP1
000004d4: CALLDATASIZE
000004d5: SUB
000004d6: PUSH1 0x40
000004d8: DUP2
000004d9: LT
000004da: ISZERO
000004db: PUSH2 0x04e3
000004de: JUMPI
000004df: PUSH1 0x00
000004e1: DUP1
000004e2: REVERT
000004e3: JUMPDEST
000004e4: POP
000004e5: PUSH1 0x01
000004e7: PUSH1 0x01
000004e9: PUSH1 0xa0
000004eb: SHL
000004ec: SUB
000004ed: DUP2
000004ee: CALLDATALOAD
000004ef: DUP2
000004f0: AND
000004f1: SWAP2
000004f2: PUSH1 0x20
000004f4: ADD
000004f5: CALLDATALOAD
000004f6: AND
000004f7: PUSH2 0x0b49
000004fa: JUMP
000004fb: JUMPDEST
000004fc: CALLVALUE
000004fd: DUP1
000004fe: ISZERO
000004ff: PUSH2 0x0507
00000502: JUMPI
00000503: PUSH1 0x00
00000505: DUP1
00000506: REVERT
00000507: JUMPDEST
00000508: POP
00000509: PUSH2 0x0130
0000050c: PUSH1 0x04
0000050e: DUP1
0000050f: CALLDATASIZE
00000510: SUB
00000511: PUSH1 0x60
00000513: DUP2
00000514: LT
00000515: ISZERO
00000516: PUSH2 0x051e
00000519: JUMPI
0000051a: PUSH1 0x00
0000051c: DUP1
0000051d: REVERT
0000051e: JUMPDEST
0000051f: DUP2
00000520: ADD
00000521: SWAP1
00000522: PUSH1 0x20
00000524: DUP2
00000525: ADD
00000526: DUP2
00000527: CALLDATALOAD
00000528: PUSH5 0x0100000000
0000052e: DUP2
0000052f: GT
00000530: ISZERO
00000531: PUSH2 0x0539
00000534: JUMPI
00000535: PUSH1 0x00
00000537: DUP1
00000538: REVERT
00000539: JUMPDEST
0000053a: DUP3
0000053b: ADD
0000053c: DUP4
0000053d: PUSH1 0x20
0000053f: DUP3
00000540: ADD
00000541: GT
00000542: ISZERO
00000543: PUSH2 0x054b
00000546: JUMPI
00000547: PUSH1 0x00
00000549: DUP1
0000054a: REVERT
0000054b: JUMPDEST
0000054c: DUP1
0000054d: CALLDATALOAD
0000054e: SWAP1
0000054f: PUSH1 0x20
00000551: ADD
00000552: SWAP2
00000553: DUP5
00000554: PUSH1 0x20
00000556: DUP4
00000557: MUL
00000558: DUP5
00000559: ADD
0000055a: GT
0000055b: PUSH5 0x0100000000
00000561: DUP4
00000562: GT
00000563: OR
00000564: ISZERO
00000565: PUSH2 0x056d
00000568: JUMPI
00000569: PUSH1 0x00
0000056b: DUP1
0000056c: REVERT
0000056d: JUMPDEST
0000056e: SWAP2
0000056f: SWAP1
00000570: DUP1
00000571: DUP1
00000572: PUSH1 0x20
00000574: MUL
00000575: PUSH1 0x20
00000577: ADD
00000578: PUSH1 0x40
0000057a: MLOAD
0000057b: SWAP1
0000057c: DUP2
0000057d: ADD
0000057e: PUSH1 0x40
00000580: MSTORE
00000581: DUP1
00000582: SWAP4
00000583: SWAP3
00000584: SWAP2
00000585: SWAP1
00000586: DUP2
00000587: DUP2
00000588: MSTORE
00000589: PUSH1 0x20
0000058b: ADD
0000058c: DUP4
0000058d: DUP4
0000058e: PUSH1 0x20
00000590: MUL
00000591: DUP1
00000592: DUP3
00000593: DUP5
00000594: CALLDATACOPY
00000595: PUSH1 0x00
00000597: SWAP3
00000598: ADD
00000599: SWAP2
0000059a: SWAP1
0000059b: SWAP2
0000059c: MSTORE
0000059d: POP
0000059e: SWAP3
0000059f: SWAP6
000005a0: SWAP5
000005a1: SWAP4
000005a2: PUSH1 0x20
000005a4: DUP2
000005a5: ADD
000005a6: SWAP4
000005a7: POP
000005a8: CALLDATALOAD
000005a9: SWAP2
000005aa: POP
000005ab: POP
000005ac: PUSH5 0x0100000000
000005b2: DUP2
000005b3: GT
000005b4: ISZERO
000005b5: PUSH2 0x05bd
000005b8: JUMPI
000005b9: PUSH1 0x00
000005bb: DUP1
000005bc: REVERT
000005bd: JUMPDEST
000005be: DUP3
000005bf: ADD
000005c0: DUP4
000005c1: PUSH1 0x20
000005c3: DUP3
000005c4: ADD
000005c5: GT
000005c6: ISZERO
000005c7: PUSH2 0x05cf
000005ca: JUMPI
000005cb: PUSH1 0x00
000005cd: DUP1
000005ce: REVERT
000005cf: JUMPDEST
000005d0: DUP1
000005d1: CALLDATALOAD
000005d2: SWAP1
000005d3: PUSH1 0x20
000005d5: ADD
000005d6: SWAP2
000005d7: DUP5
000005d8: PUSH1 0x20
000005da: DUP4
000005db: MUL
000005dc: DUP5
000005dd: ADD
000005de: GT
000005df: PUSH5 0x0100000000
000005e5: DUP4
000005e6: GT
000005e7: OR
000005e8: ISZERO
000005e9: PUSH2 0x05f1
000005ec: JUMPI
000005ed: PUSH1 0x00
000005ef: DUP1
000005f0: REVERT
000005f1: JUMPDEST
000005f2: SWAP2
000005f3: SWAP1
000005f4: DUP1
000005f5: DUP1
000005f6: PUSH1 0x20
000005f8: MUL
000005f9: PUSH1 0x20
000005fb: ADD
000005fc: PUSH1 0x40
000005fe: MLOAD
000005ff: SWAP1
00000600: DUP2
00000601: ADD
00000602: PUSH1 0x40
00000604: MSTORE
00000605: DUP1
00000606: SWAP4
00000607: SWAP3
00000608: SWAP2
00000609: SWAP1
0000060a: DUP2
0000060b: DUP2
0000060c: MSTORE
0000060d: PUSH1 0x20
0000060f: ADD
00000610: DUP4
00000611: DUP4
00000612: PUSH1 0x20
00000614: MUL
00000615: DUP1
00000616: DUP3
00000617: DUP5
00000618: CALLDATACOPY
00000619: PUSH1 0x00
0000061b: SWAP3
0000061c: ADD
0000061d: SWAP2
0000061e: SWAP1
0000061f: SWAP2
00000620: MSTORE
00000621: POP
00000622: SWAP3
00000623: SWAP6
00000624: SWAP5
00000625: SWAP4
00000626: PUSH1 0x20
00000628: DUP2
00000629: ADD
0000062a: SWAP4
0000062b: POP
0000062c: CALLDATALOAD
0000062d: SWAP2
0000062e: POP
0000062f: POP
00000630: PUSH5 0x0100000000
00000636: DUP2
00000637: GT
00000638: ISZERO
00000639: PUSH2 0x0641
0000063c: JUMPI
0000063d: PUSH1 0x00
0000063f: DUP1
00000640: REVERT
00000641: JUMPDEST
00000642: DUP3
00000643: ADD
00000644: DUP4
00000645: PUSH1 0x20
00000647: DUP3
00000648: ADD
00000649: GT
0000064a: ISZERO
0000064b: PUSH2 0x0653
0000064e: JUMPI
0000064f: PUSH1 0x00
00000651: DUP1
00000652: REVERT
00000653: JUMPDEST
00000654: DUP1
00000655: CALLDATALOAD
00000656: SWAP1
00000657: PUSH1 0x20
00000659: ADD
0000065a: SWAP2
0000065b: DUP5
0000065c: PUSH1 0x20
0000065e: DUP4
0000065f: MUL
00000660: DUP5
00000661: ADD
00000662: GT
00000663: PUSH5 0x0100000000
00000669: DUP4
0000066a: GT
0000066b: OR
0000066c: ISZERO
0000066d: PUSH2 0x0675
00000670: JUMPI
00000671: PUSH1 0x00
00000673: DUP1
00000674: REVERT
00000675: JUMPDEST
00000676: SWAP2
00000677: SWAP1
00000678: DUP1
00000679: DUP1
0000067a: PUSH1 0x20
0000067c: MUL
0000067d: PUSH1 0x20
0000067f: ADD
00000680: PUSH1 0x40
00000682: MLOAD
00000683: SWAP1
00000684: DUP2
00000685: ADD
00000686: PUSH1 0x40
00000688: MSTORE
00000689: DUP1
0000068a: SWAP4
0000068b: SWAP3
0000068c: SWAP2
0000068d: SWAP1
0000068e: DUP2
0000068f: DUP2
00000690: MSTORE
00000691: PUSH1 0x20
00000693: ADD
00000694: DUP4
00000695: DUP4
00000696: PUSH1 0x20
00000698: MUL
00000699: DUP1
0000069a: DUP3
0000069b: DUP5
0000069c: CALLDATACOPY
0000069d: PUSH1 0x00
0000069f: SWAP3
000006a0: ADD
000006a1: SWAP2
000006a2: SWAP1
000006a3: SWAP2
000006a4: MSTORE
000006a5: POP
000006a6: SWAP3
000006a7: SWAP6
000006a8: POP
000006a9: PUSH2 0x0b7c
000006ac: SWAP5
000006ad: POP
000006ae: POP
000006af: POP
000006b0: POP
000006b1: POP
000006b2: JUMP
000006b3: JUMPDEST
000006b4: CALLVALUE
000006b5: DUP1
000006b6: ISZERO
000006b7: PUSH2 0x06bf
000006ba: JUMPI
000006bb: PUSH1 0x00
000006bd: DUP1
000006be: REVERT
000006bf: JUMPDEST
000006c0: POP
000006c1: PUSH2 0x0130
000006c4: PUSH1 0x04
000006c6: DUP1
000006c7: CALLDATASIZE
000006c8: SUB
000006c9: PUSH1 0x60
000006cb: DUP2
000006cc: LT
000006cd: ISZERO
000006ce: PUSH2 0x06d6
000006d1: JUMPI
000006d2: PUSH1 0x00
000006d4: DUP1
000006d5: REVERT
000006d6: JUMPDEST
000006d7: POP
000006d8: PUSH1 0x01
000006da: PUSH1 0x01
000006dc: PUSH1 0xa0
000006de: SHL
000006df: SUB
000006e0: DUP2
000006e1: CALLDATALOAD
000006e2: DUP2
000006e3: AND
000006e4: SWAP2
000006e5: PUSH1 0x20
000006e7: DUP2
000006e8: ADD
000006e9: CALLDATALOAD
000006ea: SWAP1
000006eb: SWAP2
000006ec: AND
000006ed: SWAP1
000006ee: PUSH1 0x40
000006f0: ADD
000006f1: CALLDATALOAD
000006f2: PUSH2 0x0d23
000006f5: JUMP
000006f6: JUMPDEST
000006f7: CALLVALUE
000006f8: DUP1
000006f9: ISZERO
000006fa: PUSH2 0x0702
000006fd: JUMPI
000006fe: PUSH1 0x00
00000700: DUP1
00000701: REVERT
00000702: JUMPDEST
00000703: POP
00000704: PUSH2 0x0130
00000707: PUSH1 0x04
00000709: DUP1
0000070a: CALLDATASIZE
0000070b: SUB
0000070c: PUSH1 0x20
0000070e: DUP2
0000070f: LT
00000710: ISZERO
00000711: PUSH2 0x0719
00000714: JUMPI
00000715: PUSH1 0x00
00000717: DUP1
00000718: REVERT
00000719: JUMPDEST
0000071a: POP
0000071b: CALLDATALOAD
0000071c: PUSH1 0x01
0000071e: PUSH1 0x01
00000720: PUSH1 0xa0
00000722: SHL
00000723: SUB
00000724: AND
00000725: PUSH2 0x0d33
00000728: JUMP
00000729: JUMPDEST
0000072a: CALLVALUE
0000072b: DUP1
0000072c: ISZERO
0000072d: PUSH2 0x0735
00000730: JUMPI
00000731: PUSH1 0x00
00000733: DUP1
00000734: REVERT
00000735: JUMPDEST
00000736: POP
00000737: PUSH2 0x02d5
0000073a: PUSH1 0x04
0000073c: DUP1
0000073d: CALLDATASIZE
0000073e: SUB
0000073f: PUSH1 0x40
00000741: DUP2
00000742: LT
00000743: ISZERO
00000744: PUSH2 0x074c
00000747: JUMPI
00000748: PUSH1 0x00
0000074a: DUP1
0000074b: REVERT
0000074c: JUMPDEST
0000074d: POP
0000074e: PUSH1 0x01
00000750: PUSH1 0x01
00000752: PUSH1 0xa0
00000754: SHL
00000755: SUB
00000756: DUP2
00000757: CALLDATALOAD
00000758: DUP2
00000759: AND
0000075a: SWAP2
0000075b: PUSH1 0x20
0000075d: ADD
0000075e: CALLDATALOAD
0000075f: AND
00000760: PUSH2 0x0d57
00000763: JUMP
00000764: JUMPDEST
00000765: CALLVALUE
00000766: DUP1
00000767: ISZERO
00000768: PUSH2 0x0770
0000076b: JUMPI
0000076c: PUSH1 0x00
0000076e: DUP1
0000076f: REVERT
00000770: JUMPDEST
00000771: POP
00000772: PUSH2 0x0130
00000775: PUSH1 0x04
00000777: DUP1
00000778: CALLDATASIZE
00000779: SUB
0000077a: PUSH1 0x20
0000077c: DUP2
0000077d: LT
0000077e: ISZERO
0000077f: PUSH2 0x0787
00000782: JUMPI
00000783: PUSH1 0x00
00000785: DUP1
00000786: REVERT
00000787: JUMPDEST
00000788: POP
00000789: CALLDATALOAD
0000078a: PUSH1 0x01
0000078c: PUSH1 0x01
0000078e: PUSH1 0xa0
00000790: SHL
00000791: SUB
00000792: AND
00000793: PUSH2 0x0d74
00000796: JUMP
00000797: JUMPDEST
00000798: CALLVALUE
00000799: DUP1
0000079a: ISZERO
0000079b: PUSH2 0x07a3
0000079e: JUMPI
0000079f: PUSH1 0x00
000007a1: DUP1
000007a2: REVERT
000007a3: JUMPDEST
000007a4: POP
000007a5: PUSH2 0x0130
000007a8: PUSH1 0x04
000007aa: DUP1
000007ab: CALLDATASIZE
000007ac: SUB
000007ad: PUSH1 0x40
000007af: DUP2
000007b0: LT
000007b1: ISZERO
000007b2: PUSH2 0x07ba
000007b5: JUMPI
000007b6: PUSH1 0x00
000007b8: DUP1
000007b9: REVERT
000007ba: JUMPDEST
000007bb: DUP2
000007bc: ADD
000007bd: SWAP1
000007be: PUSH1 0x20
000007c0: DUP2
000007c1: ADD
000007c2: DUP2
000007c3: CALLDATALOAD
000007c4: PUSH5 0x0100000000
000007ca: DUP2
000007cb: GT
000007cc: ISZERO
000007cd: PUSH2 0x07d5
000007d0: JUMPI
000007d1: PUSH1 0x00
000007d3: DUP1
000007d4: REVERT
000007d5: JUMPDEST
000007d6: DUP3
000007d7: ADD
000007d8: DUP4
000007d9: PUSH1 0x20
000007db: DUP3
000007dc: ADD
000007dd: GT
000007de: ISZERO
000007df: PUSH2 0x07e7
000007e2: JUMPI
000007e3: PUSH1 0x00
000007e5: DUP1
000007e6: REVERT
000007e7: JUMPDEST
000007e8: DUP1
000007e9: CALLDATALOAD
000007ea: SWAP1
000007eb: PUSH1 0x20
000007ed: ADD
000007ee: SWAP2
000007ef: DUP5
000007f0: PUSH1 0x20
000007f2: DUP4
000007f3: MUL
000007f4: DUP5
000007f5: ADD
000007f6: GT
000007f7: PUSH5 0x0100000000
000007fd: DUP4
000007fe: GT
000007ff: OR
00000800: ISZERO
00000801: PUSH2 0x0809
00000804: JUMPI
00000805: PUSH1 0x00
00000807: DUP1
00000808: REVERT
00000809: JUMPDEST
0000080a: SWAP2
0000080b: SWAP1
0000080c: DUP1
0000080d: DUP1
0000080e: PUSH1 0x20
00000810: MUL
00000811: PUSH1 0x20
00000813: ADD
00000814: PUSH1 0x40
00000816: MLOAD
00000817: SWAP1
00000818: DUP2
00000819: ADD
0000081a: PUSH1 0x40
0000081c: MSTORE
0000081d: DUP1
0000081e: SWAP4
0000081f: SWAP3
00000820: SWAP2
00000821: SWAP1
00000822: DUP2
00000823: DUP2
00000824: MSTORE
00000825: PUSH1 0x20
00000827: ADD
00000828: DUP4
00000829: DUP4
0000082a: PUSH1 0x20
0000082c: MUL
0000082d: DUP1
0000082e: DUP3
0000082f: DUP5
00000830: CALLDATACOPY
00000831: PUSH1 0x00
00000833: SWAP3
00000834: ADD
00000835: SWAP2
00000836: SWAP1
00000837: SWAP2
00000838: MSTORE
00000839: POP
0000083a: SWAP3
0000083b: SWAP6
0000083c: SWAP5
0000083d: SWAP4
0000083e: PUSH1 0x20
00000840: DUP2
00000841: ADD
00000842: SWAP4
00000843: POP
00000844: CALLDATALOAD
00000845: SWAP2
00000846: POP
00000847: POP
00000848: PUSH5 0x0100000000
0000084e: DUP2
0000084f: GT
00000850: ISZERO
00000851: PUSH2 0x0859
00000854: JUMPI
00000855: PUSH1 0x00
00000857: DUP1
00000858: REVERT
00000859: JUMPDEST
0000085a: DUP3
0000085b: ADD
0000085c: DUP4
0000085d: PUSH1 0x20
0000085f: DUP3
00000860: ADD
00000861: GT
00000862: ISZERO
00000863: PUSH2 0x086b
00000866: JUMPI
00000867: PUSH1 0x00
00000869: DUP1
0000086a: REVERT
0000086b: JUMPDEST
0000086c: DUP1
0000086d: CALLDATALOAD
0000086e: SWAP1
0000086f: PUSH1 0x20
00000871: ADD
00000872: SWAP2
00000873: DUP5
00000874: PUSH1 0x20
00000876: DUP4
00000877: MUL
00000878: DUP5
00000879: ADD
0000087a: GT
0000087b: PUSH5 0x0100000000
00000881: DUP4
00000882: GT
00000883: OR
00000884: ISZERO
00000885: PUSH2 0x088d
00000888: JUMPI
00000889: PUSH1 0x00
0000088b: DUP1
0000088c: REVERT
0000088d: JUMPDEST
0000088e: SWAP2
0000088f: SWAP1
00000890: DUP1
00000891: DUP1
00000892: PUSH1 0x20
00000894: MUL
00000895: PUSH1 0x20
00000897: ADD
00000898: PUSH1 0x40
0000089a: MLOAD
0000089b: SWAP1
0000089c: DUP2
0000089d: ADD
0000089e: PUSH1 0x40
000008a0: MSTORE
000008a1: DUP1
000008a2: SWAP4
000008a3: SWAP3
000008a4: SWAP2
000008a5: SWAP1
000008a6: DUP2
000008a7: DUP2
000008a8: MSTORE
000008a9: PUSH1 0x20
000008ab: ADD
000008ac: DUP4
000008ad: DUP4
000008ae: PUSH1 0x20
000008b0: MUL
000008b1: DUP1
000008b2: DUP3
000008b3: DUP5
000008b4: CALLDATACOPY
000008b5: PUSH1 0x00
000008b7: SWAP3
000008b8: ADD
000008b9: SWAP2
000008ba: SWAP1
000008bb: SWAP2
000008bc: MSTORE
000008bd: POP
000008be: SWAP3
000008bf: SWAP6
000008c0: POP
000008c1: PUSH2 0x0da5
000008c4: SWAP5
000008c5: POP
000008c6: POP
000008c7: POP
000008c8: POP
000008c9: POP
000008ca: JUMP
000008cb: JUMPDEST
000008cc: PUSH2 0x08d5
000008cf: CALLER
000008d0: DUP3
000008d1: PUSH2 0x0ecf
000008d4: JUMP
000008d5: JUMPDEST
000008d6: POP
000008d7: JUMP
000008d8: JUMPDEST
000008d9: CALLER
000008da: PUSH1 0x00
000008dc: DUP2
000008dd: DUP2
000008de: MSTORE
000008df: PUSH1 0x20
000008e1: DUP2
000008e2: SWAP1
000008e3: MSTORE
000008e4: PUSH1 0x40
000008e6: SWAP1
000008e7: KECCAK256
000008e8: SLOAD
000008e9: PUSH2 0x08f2
000008ec: SWAP2
000008ed: SWAP1
000008ee: PUSH2 0x0ecf
000008f1: JUMP
000008f2: JUMPDEST
000008f3: JUMP
000008f4: JUMPDEST
000008f5: PUSH1 0x60
000008f7: DUP1
000008f8: PUSH1 0x00
000008fa: JUMPDEST
000008fb: DUP4
000008fc: MLOAD
000008fd: DUP2
000008fe: LT
000008ff: ISZERO
00000900: PUSH2 0x095a
00000903: JUMPI
00000904: PUSH1 0x00
00000906: DUP1
00000907: DUP6
00000908: DUP4
00000909: DUP2
0000090a: MLOAD
0000090b: DUP2
0000090c: LT
0000090d: PUSH2 0x0912
00000910: JUMPI
00000911: INVALID
00000912: JUMPDEST
00000913: PUSH1 0x20
00000915: MUL
00000916: PUSH1 0x20
00000918: ADD
00000919: ADD
0000091a: MLOAD
0000091b: PUSH1 0x01
0000091d: PUSH1 0x01
0000091f: PUSH1 0xa0
00000921: SHL
00000922: SUB
00000923: AND
00000924: PUSH1 0x01
00000926: PUSH1 0x01
00000928: PUSH1 0xa0
0000092a: SHL
0000092b: SUB
0000092c: AND
0000092d: DUP2
0000092e: MSTORE
0000092f: PUSH1 0x20
00000931: ADD
00000932: SWAP1
00000933: DUP2
00000934: MSTORE
00000935: PUSH1 0x20
00000937: ADD
00000938: PUSH1 0x00
0000093a: KECCAK256
0000093b: SLOAD
0000093c: DUP3
0000093d: DUP3
0000093e: DUP2
0000093f: MLOAD
00000940: DUP2
00000941: LT
00000942: PUSH2 0x0947
00000945: JUMPI
00000946: INVALID
00000947: JUMPDEST
00000948: PUSH1 0x20
0000094a: SWAP1
0000094b: DUP2
0000094c: MUL
0000094d: SWAP2
0000094e: SWAP1
0000094f: SWAP2
00000950: ADD
00000951: ADD
00000952: MSTORE
00000953: PUSH1 0x01
00000955: ADD
00000956: PUSH2 0x08fa
00000959: JUMP
0000095a: JUMPDEST
0000095b: POP
0000095c: SWAP3
0000095d: SWAP2
0000095e: POP
0000095f: POP
00000960: JUMP
00000961: JUMPDEST
00000962: PUSH1 0x02
00000964: SLOAD
00000965: PUSH1 0x01
00000967: PUSH1 0x01
00000969: PUSH1 0xa0
0000096b: SHL
0000096c: SUB
0000096d: AND
0000096e: DUP2
0000096f: JUMP
00000970: JUMPDEST
00000971: PUSH1 0x00
00000973: PUSH1 0x20
00000975: DUP2
00000976: SWAP1
00000977: MSTORE
00000978: SWAP1
00000979: DUP2
0000097a: MSTORE
0000097b: PUSH1 0x40
0000097d: SWAP1
0000097e: KECCAK256
0000097f: SLOAD
00000980: DUP2
00000981: JUMP
00000982: JUMPDEST
00000983: PUSH2 0x098c
00000986: DUP3
00000987: DUP3
00000988: PUSH2 0x0ecf
0000098b: JUMP
0000098c: JUMPDEST
0000098d: POP
0000098e: POP
0000098f: JUMP
00000990: JUMPDEST
00000991: PUSH2 0x098c
00000994: CALLER
00000995: DUP4
00000996: DUP4
00000997: PUSH2 0x1093
0000099a: JUMP
0000099b: JUMPDEST
0000099c: PUSH1 0x02
0000099e: SLOAD
0000099f: PUSH1 0x01
000009a1: PUSH1 0x01
000009a3: PUSH1 0xa0
000009a5: SHL
000009a6: SUB
000009a7: AND
000009a8: CALLER
000009a9: EQ
000009aa: PUSH2 0x09e4
000009ad: JUMPI
000009ae: PUSH1 0x40
000009b0: MLOAD
000009b1: PUSH3 0x461bcd
000009b5: PUSH1 0xe5
000009b7: SHL
000009b8: DUP2
000009b9: MSTORE
000009ba: PUSH1 0x04
000009bc: ADD
000009bd: DUP1
000009be: DUP1
000009bf: PUSH1 0x20
000009c1: ADD
000009c2: DUP3
000009c3: DUP2
000009c4: SUB
000009c5: DUP3
000009c6: MSTORE
000009c7: PUSH1 0x31
000009c9: DUP2
000009ca: MSTORE
000009cb: PUSH1 0x20
000009cd: ADD
000009ce: DUP1
000009cf: PUSH2 0x13a9
000009d2: PUSH1 0x31
000009d4: SWAP2
000009d5: CODECOPY
000009d6: PUSH1 0x40
000009d8: ADD
000009d9: SWAP2
000009da: POP
000009db: POP
000009dc: PUSH1 0x40
000009de: MLOAD
000009df: DUP1
000009e0: SWAP2
000009e1: SUB
000009e2: SWAP1
000009e3: REVERT
000009e4: JUMPDEST
000009e5: PUSH1 0x01
000009e7: PUSH1 0x01
000009e9: PUSH1 0xa0
000009eb: SHL
000009ec: SUB
000009ed: DUP2
000009ee: AND
000009ef: PUSH2 0x0a29
000009f2: JUMPI
000009f3: PUSH1 0x40
000009f5: MLOAD
000009f6: PUSH3 0x461bcd
000009fa: PUSH1 0xe5
000009fc: SHL
000009fd: DUP2
000009fe: MSTORE
000009ff: PUSH1 0x04
00000a01: ADD
00000a02: DUP1
00000a03: DUP1
00000a04: PUSH1 0x20
00000a06: ADD
00000a07: DUP3
00000a08: DUP2
00000a09: SUB
00000a0a: DUP3
00000a0b: MSTORE
00000a0c: PUSH1 0x2a
00000a0e: DUP2
00000a0f: MSTORE
00000a10: PUSH1 0x20
00000a12: ADD
00000a13: DUP1
00000a14: PUSH2 0x1543
00000a17: PUSH1 0x2a
00000a19: SWAP2
00000a1a: CODECOPY
00000a1b: PUSH1 0x40
00000a1d: ADD
00000a1e: SWAP2
00000a1f: POP
00000a20: POP
00000a21: PUSH1 0x40
00000a23: MLOAD
00000a24: DUP1
00000a25: SWAP2
00000a26: SUB
00000a27: SWAP1
00000a28: REVERT
00000a29: JUMPDEST
00000a2a: PUSH1 0x02
00000a2c: DUP1
00000a2d: SLOAD
00000a2e: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000a4f: AND
00000a50: PUSH1 0x01
00000a52: PUSH1 0x01
00000a54: PUSH1 0xa0
00000a56: SHL
00000a57: SUB
00000a58: SWAP3
00000a59: SWAP1
00000a5a: SWAP3
00000a5b: AND
00000a5c: SWAP2
00000a5d: SWAP1
00000a5e: SWAP2
00000a5f: OR
00000a60: SWAP1
00000a61: SSTORE
00000a62: JUMP
00000a63: JUMPDEST
00000a64: PUSH1 0x60
00000a66: DUP3
00000a67: MLOAD
00000a68: DUP3
00000a69: MLOAD
00000a6a: EQ
00000a6b: PUSH2 0x0aa5
00000a6e: JUMPI
00000a6f: PUSH1 0x40
00000a71: MLOAD
00000a72: PUSH3 0x461bcd
00000a76: PUSH1 0xe5
00000a78: SHL
00000a79: DUP2
00000a7a: MSTORE
00000a7b: PUSH1 0x04
00000a7d: ADD
00000a7e: DUP1
00000a7f: DUP1
00000a80: PUSH1 0x20
00000a82: ADD
00000a83: DUP3
00000a84: DUP2
00000a85: SUB
00000a86: DUP3
00000a87: MSTORE
00000a88: PUSH1 0x42
00000a8a: DUP2
00000a8b: MSTORE
00000a8c: PUSH1 0x20
00000a8e: ADD
00000a8f: DUP1
00000a90: PUSH2 0x1501
00000a93: PUSH1 0x42
00000a95: SWAP2
00000a96: CODECOPY
00000a97: PUSH1 0x60
00000a99: ADD
00000a9a: SWAP2
00000a9b: POP
00000a9c: POP
00000a9d: PUSH1 0x40
00000a9f: MLOAD
00000aa0: DUP1
00000aa1: SWAP2
00000aa2: SUB
00000aa3: SWAP1
00000aa4: REVERT
00000aa5: JUMPDEST
00000aa6: PUSH1 0x60
00000aa8: PUSH1 0x00
00000aaa: JUMPDEST
00000aab: DUP4
00000aac: MLOAD
00000aad: DUP2
00000aae: LT
00000aaf: ISZERO
00000ab0: PUSH2 0x0b41
00000ab3: JUMPI
00000ab4: PUSH1 0x01
00000ab6: PUSH1 0x00
00000ab8: DUP7
00000ab9: DUP4
00000aba: DUP2
00000abb: MLOAD
00000abc: DUP2
00000abd: LT
00000abe: PUSH2 0x0ac3
00000ac1: JUMPI
00000ac2: INVALID
00000ac3: JUMPDEST
00000ac4: PUSH1 0x20
00000ac6: MUL
00000ac7: PUSH1 0x20
00000ac9: ADD
00000aca: ADD
00000acb: MLOAD
00000acc: PUSH1 0x01
00000ace: PUSH1 0x01
00000ad0: PUSH1 0xa0
00000ad2: SHL
00000ad3: SUB
00000ad4: AND
00000ad5: PUSH1 0x01
00000ad7: PUSH1 0x01
00000ad9: PUSH1 0xa0
00000adb: SHL
00000adc: SUB
00000add: AND
00000ade: DUP2
00000adf: MSTORE
00000ae0: PUSH1 0x20
00000ae2: ADD
00000ae3: SWAP1
00000ae4: DUP2
00000ae5: MSTORE
00000ae6: PUSH1 0x20
00000ae8: ADD
00000ae9: PUSH1 0x00
00000aeb: KECCAK256
00000aec: PUSH1 0x00
00000aee: DUP6
00000aef: DUP4
00000af0: DUP2
00000af1: MLOAD
00000af2: DUP2
00000af3: LT
00000af4: PUSH2 0x0af9
00000af7: JUMPI
00000af8: INVALID
00000af9: JUMPDEST
00000afa: PUSH1 0x20
00000afc: MUL
00000afd: PUSH1 0x20
00000aff: ADD
00000b00: ADD
00000b01: MLOAD
00000b02: PUSH1 0x01
00000b04: PUSH1 0x01
00000b06: PUSH1 0xa0
00000b08: SHL
00000b09: SUB
00000b0a: AND
00000b0b: PUSH1 0x01
00000b0d: PUSH1 0x01
00000b0f: PUSH1 0xa0
00000b11: SHL
00000b12: SUB
00000b13: AND
00000b14: DUP2
00000b15: MSTORE
00000b16: PUSH1 0x20
00000b18: ADD
00000b19: SWAP1
00000b1a: DUP2
00000b1b: MSTORE
00000b1c: PUSH1 0x20
00000b1e: ADD
00000b1f: PUSH1 0x00
00000b21: KECCAK256
00000b22: SLOAD
00000b23: DUP3
00000b24: DUP3
00000b25: DUP2
00000b26: MLOAD
00000b27: DUP2
00000b28: LT
00000b29: PUSH2 0x0b2e
00000b2c: JUMPI
00000b2d: INVALID
00000b2e: JUMPDEST
00000b2f: PUSH1 0x20
00000b31: SWAP1
00000b32: DUP2
00000b33: MUL
00000b34: SWAP2
00000b35: SWAP1
00000b36: SWAP2
00000b37: ADD
00000b38: ADD
00000b39: MSTORE
00000b3a: PUSH1 0x01
00000b3c: ADD
00000b3d: PUSH2 0x0aaa
00000b40: JUMP
00000b41: JUMPDEST
00000b42: POP
00000b43: SWAP4
00000b44: SWAP3
00000b45: POP
00000b46: POP
00000b47: POP
00000b48: JUMP
00000b49: JUMPDEST
00000b4a: PUSH1 0x01
00000b4c: PUSH1 0x01
00000b4e: PUSH1 0xa0
00000b50: SHL
00000b51: SUB
00000b52: DUP1
00000b53: DUP4
00000b54: AND
00000b55: PUSH1 0x00
00000b57: SWAP1
00000b58: DUP2
00000b59: MSTORE
00000b5a: PUSH1 0x01
00000b5c: PUSH1 0x20
00000b5e: SWAP1
00000b5f: DUP2
00000b60: MSTORE
00000b61: PUSH1 0x40
00000b63: DUP1
00000b64: DUP4
00000b65: KECCAK256
00000b66: SWAP4
00000b67: DUP6
00000b68: AND
00000b69: DUP4
00000b6a: MSTORE
00000b6b: SWAP3
00000b6c: SWAP1
00000b6d: MSTORE
00000b6e: KECCAK256
00000b6f: SLOAD
00000b70: PUSH2 0x098c
00000b73: SWAP1
00000b74: DUP3
00000b75: SWAP1
00000b76: DUP5
00000b77: SWAP1
00000b78: PUSH2 0x1093
00000b7b: JUMP
00000b7c: JUMPDEST
00000b7d: PUSH1 0x02
00000b7f: SLOAD
00000b80: PUSH1 0x01
00000b82: PUSH1 0x01
00000b84: PUSH1 0xa0
00000b86: SHL
00000b87: SUB
00000b88: AND
00000b89: CALLER
00000b8a: EQ
00000b8b: PUSH2 0x0bc5
00000b8e: JUMPI
00000b8f: PUSH1 0x40
00000b91: MLOAD
00000b92: PUSH3 0x461bcd
00000b96: PUSH1 0xe5
00000b98: SHL
00000b99: DUP2
00000b9a: MSTORE
00000b9b: PUSH1 0x04
00000b9d: ADD
00000b9e: DUP1
00000b9f: DUP1
00000ba0: PUSH1 0x20
00000ba2: ADD
00000ba3: DUP3
00000ba4: DUP2
00000ba5: SUB
00000ba6: DUP3
00000ba7: MSTORE
00000ba8: PUSH1 0x31
00000baa: DUP2
00000bab: MSTORE
00000bac: PUSH1 0x20
00000bae: ADD
00000baf: DUP1
00000bb0: PUSH2 0x13a9
00000bb3: PUSH1 0x31
00000bb5: SWAP2
00000bb6: CODECOPY
00000bb7: PUSH1 0x40
00000bb9: ADD
00000bba: SWAP2
00000bbb: POP
00000bbc: POP
00000bbd: PUSH1 0x40
00000bbf: MLOAD
00000bc0: DUP1
00000bc1: SWAP2
00000bc2: SUB
00000bc3: SWAP1
00000bc4: REVERT
00000bc5: JUMPDEST
00000bc6: PUSH1 0x00
00000bc8: DUP3
00000bc9: MLOAD
00000bca: GT
00000bcb: PUSH2 0x0c05
00000bce: JUMPI
00000bcf: PUSH1 0x40
00000bd1: MLOAD
00000bd2: PUSH3 0x461bcd
00000bd6: PUSH1 0xe5
00000bd8: SHL
00000bd9: DUP2
00000bda: MSTORE
00000bdb: PUSH1 0x04
00000bdd: ADD
00000bde: DUP1
00000bdf: DUP1
00000be0: PUSH1 0x20
00000be2: ADD
00000be3: DUP3
00000be4: DUP2
00000be5: SUB
00000be6: DUP3
00000be7: MSTORE
00000be8: PUSH1 0x2a
00000bea: DUP2
00000beb: MSTORE
00000bec: PUSH1 0x20
00000bee: ADD
00000bef: DUP1
00000bf0: PUSH2 0x14d7
00000bf3: PUSH1 0x2a
00000bf5: SWAP2
00000bf6: CODECOPY
00000bf7: PUSH1 0x40
00000bf9: ADD
00000bfa: SWAP2
00000bfb: POP
00000bfc: POP
00000bfd: PUSH1 0x40
00000bff: MLOAD
00000c00: DUP1
00000c01: SWAP2
00000c02: SUB
00000c03: SWAP1
00000c04: REVERT
00000c05: JUMPDEST
00000c06: DUP3
00000c07: MLOAD
00000c08: DUP3
00000c09: MLOAD
00000c0a: EQ
00000c0b: PUSH2 0x0c45
00000c0e: JUMPI
00000c0f: PUSH1 0x40
00000c11: MLOAD
00000c12: PUSH3 0x461bcd
00000c16: PUSH1 0xe5
00000c18: SHL
00000c19: DUP2
00000c1a: MSTORE
00000c1b: PUSH1 0x04
00000c1d: ADD
00000c1e: DUP1
00000c1f: DUP1
00000c20: PUSH1 0x20
00000c22: ADD
00000c23: DUP3
00000c24: DUP2
00000c25: SUB
00000c26: DUP3
00000c27: MSTORE
00000c28: PUSH1 0x42
00000c2a: DUP2
00000c2b: MSTORE
00000c2c: PUSH1 0x20
00000c2e: ADD
00000c2f: DUP1
00000c30: PUSH2 0x1501
00000c33: PUSH1 0x42
00000c35: SWAP2
00000c36: CODECOPY
00000c37: PUSH1 0x60
00000c39: ADD
00000c3a: SWAP2
00000c3b: POP
00000c3c: POP
00000c3d: PUSH1 0x40
00000c3f: MLOAD
00000c40: DUP1
00000c41: SWAP2
00000c42: SUB
00000c43: SWAP1
00000c44: REVERT
00000c45: JUMPDEST
00000c46: DUP1
00000c47: MLOAD
00000c48: DUP4
00000c49: MLOAD
00000c4a: EQ
00000c4b: PUSH2 0x0c85
00000c4e: JUMPI
00000c4f: PUSH1 0x40
00000c51: MLOAD
00000c52: PUSH3 0x461bcd
00000c56: PUSH1 0xe5
00000c58: SHL
00000c59: DUP2
00000c5a: MSTORE
00000c5b: PUSH1 0x04
00000c5d: ADD
00000c5e: DUP1
00000c5f: DUP1
00000c60: PUSH1 0x20
00000c62: ADD
00000c63: DUP3
00000c64: DUP2
00000c65: SUB
00000c66: DUP3
00000c67: MSTORE
00000c68: PUSH1 0x3f
00000c6a: DUP2
00000c6b: MSTORE
00000c6c: PUSH1 0x20
00000c6e: ADD
00000c6f: DUP1
00000c70: PUSH2 0x1300
00000c73: PUSH1 0x3f
00000c75: SWAP2
00000c76: CODECOPY
00000c77: PUSH1 0x40
00000c79: ADD
00000c7a: SWAP2
00000c7b: POP
00000c7c: POP
00000c7d: PUSH1 0x40
00000c7f: MLOAD
00000c80: DUP1
00000c81: SWAP2
00000c82: SUB
00000c83: SWAP1
00000c84: REVERT
00000c85: JUMPDEST
00000c86: PUSH1 0x00
00000c88: JUMPDEST
00000c89: DUP3
00000c8a: MLOAD
00000c8b: DUP2
00000c8c: LT
00000c8d: ISZERO
00000c8e: PUSH2 0x0d1d
00000c91: JUMPI
00000c92: DUP2
00000c93: DUP2
00000c94: DUP2
00000c95: MLOAD
00000c96: DUP2
00000c97: LT
00000c98: PUSH2 0x0c9d
00000c9b: JUMPI
00000c9c: INVALID
00000c9d: JUMPDEST
00000c9e: PUSH1 0x20
00000ca0: MUL
00000ca1: PUSH1 0x20
00000ca3: ADD
00000ca4: ADD
00000ca5: MLOAD
00000ca6: PUSH1 0x01
00000ca8: PUSH1 0x00
00000caa: DUP7
00000cab: DUP5
00000cac: DUP2
00000cad: MLOAD
00000cae: DUP2
00000caf: LT
00000cb0: PUSH2 0x0cb5
00000cb3: JUMPI
00000cb4: INVALID
00000cb5: JUMPDEST
00000cb6: PUSH1 0x20
00000cb8: MUL
00000cb9: PUSH1 0x20
00000cbb: ADD
00000cbc: ADD
00000cbd: MLOAD
00000cbe: PUSH1 0x01
00000cc0: PUSH1 0x01
00000cc2: PUSH1 0xa0
00000cc4: SHL
00000cc5: SUB
00000cc6: AND
00000cc7: PUSH1 0x01
00000cc9: PUSH1 0x01
00000ccb: PUSH1 0xa0
00000ccd: SHL
00000cce: SUB
00000ccf: AND
00000cd0: DUP2
00000cd1: MSTORE
00000cd2: PUSH1 0x20
00000cd4: ADD
00000cd5: SWAP1
00000cd6: DUP2
00000cd7: MSTORE
00000cd8: PUSH1 0x20
00000cda: ADD
00000cdb: PUSH1 0x00
00000cdd: KECCAK256
00000cde: PUSH1 0x00
00000ce0: DUP6
00000ce1: DUP5
00000ce2: DUP2
00000ce3: MLOAD
00000ce4: DUP2
00000ce5: LT
00000ce6: PUSH2 0x0ceb
00000ce9: JUMPI
00000cea: INVALID
00000ceb: JUMPDEST
00000cec: PUSH1 0x20
00000cee: SWAP1
00000cef: DUP2
00000cf0: MUL
00000cf1: SWAP2
00000cf2: SWAP1
00000cf3: SWAP2
00000cf4: ADD
00000cf5: DUP2
00000cf6: ADD
00000cf7: MLOAD
00000cf8: PUSH1 0x01
00000cfa: PUSH1 0x01
00000cfc: PUSH1 0xa0
00000cfe: SHL
00000cff: SUB
00000d00: AND
00000d01: DUP3
00000d02: MSTORE
00000d03: DUP2
00000d04: ADD
00000d05: SWAP2
00000d06: SWAP1
00000d07: SWAP2
00000d08: MSTORE
00000d09: PUSH1 0x40
00000d0b: ADD
00000d0c: PUSH1 0x00
00000d0e: KECCAK256
00000d0f: DUP1
00000d10: SLOAD
00000d11: SWAP1
00000d12: SWAP2
00000d13: ADD
00000d14: SWAP1
00000d15: SSTORE
00000d16: PUSH1 0x01
00000d18: ADD
00000d19: PUSH2 0x0c88
00000d1c: JUMP
00000d1d: JUMPDEST
00000d1e: POP
00000d1f: POP
00000d20: POP
00000d21: POP
00000d22: JUMP
00000d23: JUMPDEST
00000d24: PUSH2 0x0d2e
00000d27: DUP3
00000d28: DUP5
00000d29: DUP4
00000d2a: PUSH2 0x1093
00000d2d: JUMP
00000d2e: JUMPDEST
00000d2f: POP
00000d30: POP
00000d31: POP
00000d32: JUMP
00000d33: JUMPDEST
00000d34: PUSH1 0x01
00000d36: PUSH1 0x01
00000d38: PUSH1 0xa0
00000d3a: SHL
00000d3b: SUB
00000d3c: DUP2
00000d3d: AND
00000d3e: PUSH1 0x00
00000d40: SWAP1
00000d41: DUP2
00000d42: MSTORE
00000d43: PUSH1 0x20
00000d45: DUP2
00000d46: SWAP1
00000d47: MSTORE
00000d48: PUSH1 0x40
00000d4a: SWAP1
00000d4b: KECCAK256
00000d4c: SLOAD
00000d4d: PUSH2 0x08d5
00000d50: SWAP1
00000d51: DUP3
00000d52: SWAP1
00000d53: PUSH2 0x0ecf
00000d56: JUMP
00000d57: JUMPDEST
00000d58: PUSH1 0x01
00000d5a: PUSH1 0x20
00000d5c: SWAP1
00000d5d: DUP2
00000d5e: MSTORE
00000d5f: PUSH1 0x00
00000d61: SWAP3
00000d62: DUP4
00000d63: MSTORE
00000d64: PUSH1 0x40
00000d66: DUP1
00000d67: DUP5
00000d68: KECCAK256
00000d69: SWAP1
00000d6a: SWAP2
00000d6b: MSTORE
00000d6c: SWAP1
00000d6d: DUP3
00000d6e: MSTORE
00000d6f: SWAP1
00000d70: KECCAK256
00000d71: SLOAD
00000d72: DUP2
00000d73: JUMP
00000d74: JUMPDEST
00000d75: PUSH1 0x01
00000d77: PUSH1 0x01
00000d79: PUSH1 0xa0
00000d7b: SHL
00000d7c: SUB
00000d7d: DUP2
00000d7e: AND
00000d7f: PUSH1 0x00
00000d81: SWAP1
00000d82: DUP2
00000d83: MSTORE
00000d84: PUSH1 0x01
00000d86: PUSH1 0x20
00000d88: SWAP1
00000d89: DUP2
00000d8a: MSTORE
00000d8b: PUSH1 0x40
00000d8d: DUP1
00000d8e: DUP4
00000d8f: KECCAK256
00000d90: CALLER
00000d91: DUP1
00000d92: DUP6
00000d93: MSTORE
00000d94: SWAP3
00000d95: MSTORE
00000d96: SWAP1
00000d97: SWAP2
00000d98: KECCAK256
00000d99: SLOAD
00000d9a: PUSH2 0x08d5
00000d9d: SWAP2
00000d9e: SWAP1
00000d9f: DUP4
00000da0: SWAP1
00000da1: PUSH2 0x1093
00000da4: JUMP
00000da5: JUMPDEST
00000da6: PUSH1 0x02
00000da8: SLOAD
00000da9: PUSH1 0x01
00000dab: PUSH1 0x01
00000dad: PUSH1 0xa0
00000daf: SHL
00000db0: SUB
00000db1: AND
00000db2: CALLER
00000db3: EQ
00000db4: PUSH2 0x0dee
00000db7: JUMPI
00000db8: PUSH1 0x40
00000dba: MLOAD
00000dbb: PUSH3 0x461bcd
00000dbf: PUSH1 0xe5
00000dc1: SHL
00000dc2: DUP2
00000dc3: MSTORE
00000dc4: PUSH1 0x04
00000dc6: ADD
00000dc7: DUP1
00000dc8: DUP1
00000dc9: PUSH1 0x20
00000dcb: ADD
00000dcc: DUP3
00000dcd: DUP2
00000dce: SUB
00000dcf: DUP3
00000dd0: MSTORE
00000dd1: PUSH1 0x31
00000dd3: DUP2
00000dd4: MSTORE
00000dd5: PUSH1 0x20
00000dd7: ADD
00000dd8: DUP1
00000dd9: PUSH2 0x13a9
00000ddc: PUSH1 0x31
00000dde: SWAP2
00000ddf: CODECOPY
00000de0: PUSH1 0x40
00000de2: ADD
00000de3: SWAP2
00000de4: POP
00000de5: POP
00000de6: PUSH1 0x40
00000de8: MLOAD
00000de9: DUP1
00000dea: SWAP2
00000deb: SUB
00000dec: SWAP1
00000ded: REVERT
00000dee: JUMPDEST
00000def: PUSH1 0x00
00000df1: DUP3
00000df2: MLOAD
00000df3: GT
00000df4: PUSH2 0x0e2e
00000df7: JUMPI
00000df8: PUSH1 0x40
00000dfa: MLOAD
00000dfb: PUSH3 0x461bcd
00000dff: PUSH1 0xe5
00000e01: SHL
00000e02: DUP2
00000e03: MSTORE
00000e04: PUSH1 0x04
00000e06: ADD
00000e07: DUP1
00000e08: DUP1
00000e09: PUSH1 0x20
00000e0b: ADD
00000e0c: DUP3
00000e0d: DUP2
00000e0e: SUB
00000e0f: DUP3
00000e10: MSTORE
00000e11: PUSH1 0x2a
00000e13: DUP2
00000e14: MSTORE
00000e15: PUSH1 0x20
00000e17: ADD
00000e18: DUP1
00000e19: PUSH2 0x14d7
00000e1c: PUSH1 0x2a
00000e1e: SWAP2
00000e1f: CODECOPY
00000e20: PUSH1 0x40
00000e22: ADD
00000e23: SWAP2
00000e24: POP
00000e25: POP
00000e26: PUSH1 0x40
00000e28: MLOAD
00000e29: DUP1
00000e2a: SWAP2
00000e2b: SUB
00000e2c: SWAP1
00000e2d: REVERT
00000e2e: JUMPDEST
00000e2f: DUP1
00000e30: MLOAD
00000e31: DUP3
00000e32: MLOAD
00000e33: EQ
00000e34: PUSH2 0x0e6e
00000e37: JUMPI
00000e38: PUSH1 0x40
00000e3a: MLOAD
00000e3b: PUSH3 0x461bcd
00000e3f: PUSH1 0xe5
00000e41: SHL
00000e42: DUP2
00000e43: MSTORE
00000e44: PUSH1 0x04
00000e46: ADD
00000e47: DUP1
00000e48: DUP1
00000e49: PUSH1 0x20
00000e4b: ADD
00000e4c: DUP3
00000e4d: DUP2
00000e4e: SUB
00000e4f: DUP3
00000e50: MSTORE
00000e51: PUSH1 0x3b
00000e53: DUP2
00000e54: MSTORE
00000e55: PUSH1 0x20
00000e57: ADD
00000e58: DUP1
00000e59: PUSH2 0x136e
00000e5c: PUSH1 0x3b
00000e5e: SWAP2
00000e5f: CODECOPY
00000e60: PUSH1 0x40
00000e62: ADD
00000e63: SWAP2
00000e64: POP
00000e65: POP
00000e66: PUSH1 0x40
00000e68: MLOAD
00000e69: DUP1
00000e6a: SWAP2
00000e6b: SUB
00000e6c: SWAP1
00000e6d: REVERT
00000e6e: JUMPDEST
00000e6f: PUSH1 0x00
00000e71: JUMPDEST
00000e72: DUP3
00000e73: MLOAD
00000e74: DUP2
00000e75: LT
00000e76: ISZERO
00000e77: PUSH2 0x0d2e
00000e7a: JUMPI
00000e7b: DUP2
00000e7c: DUP2
00000e7d: DUP2
00000e7e: MLOAD
00000e7f: DUP2
00000e80: LT
00000e81: PUSH2 0x0e86
00000e84: JUMPI
00000e85: INVALID
00000e86: JUMPDEST
00000e87: PUSH1 0x20
00000e89: MUL
00000e8a: PUSH1 0x20
00000e8c: ADD
00000e8d: ADD
00000e8e: MLOAD
00000e8f: PUSH1 0x00
00000e91: DUP1
00000e92: DUP6
00000e93: DUP5
00000e94: DUP2
00000e95: MLOAD
00000e96: DUP2
00000e97: LT
00000e98: PUSH2 0x0e9d
00000e9b: JUMPI
00000e9c: INVALID
00000e9d: JUMPDEST
00000e9e: PUSH1 0x20
00000ea0: SWAP1
00000ea1: DUP2
00000ea2: MUL
00000ea3: SWAP2
00000ea4: SWAP1
00000ea5: SWAP2
00000ea6: ADD
00000ea7: DUP2
00000ea8: ADD
00000ea9: MLOAD
00000eaa: PUSH1 0x01
00000eac: PUSH1 0x01
00000eae: PUSH1 0xa0
00000eb0: SHL
00000eb1: SUB
00000eb2: AND
00000eb3: DUP3
00000eb4: MSTORE
00000eb5: DUP2
00000eb6: ADD
00000eb7: SWAP2
00000eb8: SWAP1
00000eb9: SWAP2
00000eba: MSTORE
00000ebb: PUSH1 0x40
00000ebd: ADD
00000ebe: PUSH1 0x00
00000ec0: KECCAK256
00000ec1: DUP1
00000ec2: SLOAD
00000ec3: SWAP1
00000ec4: SWAP2
00000ec5: ADD
00000ec6: SWAP1
00000ec7: SSTORE
00000ec8: PUSH1 0x01
00000eca: ADD
00000ecb: PUSH2 0x0e71
00000ece: JUMP
00000ecf: JUMPDEST
00000ed0: PUSH1 0x01
00000ed2: PUSH1 0x01
00000ed4: PUSH1 0xa0
00000ed6: SHL
00000ed7: SUB
00000ed8: DUP3
00000ed9: AND
00000eda: PUSH2 0x0f14
00000edd: JUMPI
00000ede: PUSH1 0x40
00000ee0: MLOAD
00000ee1: PUSH3 0x461bcd
00000ee5: PUSH1 0xe5
00000ee7: SHL
00000ee8: DUP2
00000ee9: MSTORE
00000eea: PUSH1 0x04
00000eec: ADD
00000eed: DUP1
00000eee: DUP1
00000eef: PUSH1 0x20
00000ef1: ADD
00000ef2: DUP3
00000ef3: DUP2
00000ef4: SUB
00000ef5: DUP3
00000ef6: MSTORE
00000ef7: PUSH1 0x28
00000ef9: DUP2
00000efa: MSTORE
00000efb: PUSH1 0x20
00000efd: ADD
00000efe: DUP1
00000eff: PUSH2 0x14af
00000f02: PUSH1 0x28
00000f04: SWAP2
00000f05: CODECOPY
00000f06: PUSH1 0x40
00000f08: ADD
00000f09: SWAP2
00000f0a: POP
00000f0b: POP
00000f0c: PUSH1 0x40
00000f0e: MLOAD
00000f0f: DUP1
00000f10: SWAP2
00000f11: SUB
00000f12: SWAP1
00000f13: REVERT
00000f14: JUMPDEST
00000f15: PUSH1 0x00
00000f17: DUP2
00000f18: GT
00000f19: PUSH2 0x0f53
00000f1c: JUMPI
00000f1d: PUSH1 0x40
00000f1f: MLOAD
00000f20: PUSH3 0x461bcd
00000f24: PUSH1 0xe5
00000f26: SHL
00000f27: DUP2
00000f28: MSTORE
00000f29: PUSH1 0x04
00000f2b: ADD
00000f2c: DUP1
00000f2d: DUP1
00000f2e: PUSH1 0x20
00000f30: ADD
00000f31: DUP3
00000f32: DUP2
00000f33: SUB
00000f34: DUP3
00000f35: MSTORE
00000f36: PUSH1 0x2f
00000f38: DUP2
00000f39: MSTORE
00000f3a: PUSH1 0x20
00000f3c: ADD
00000f3d: DUP1
00000f3e: PUSH2 0x133f
00000f41: PUSH1 0x2f
00000f43: SWAP2
00000f44: CODECOPY
00000f45: PUSH1 0x40
00000f47: ADD
00000f48: SWAP2
00000f49: POP
00000f4a: POP
00000f4b: PUSH1 0x40
00000f4d: MLOAD
00000f4e: DUP1
00000f4f: SWAP2
00000f50: SUB
00000f51: SWAP1
00000f52: REVERT
00000f53: JUMPDEST
00000f54: PUSH1 0x01
00000f56: PUSH1 0x01
00000f58: PUSH1 0xa0
00000f5a: SHL
00000f5b: SUB
00000f5c: DUP3
00000f5d: AND
00000f5e: PUSH1 0x00
00000f60: SWAP1
00000f61: DUP2
00000f62: MSTORE
00000f63: PUSH1 0x20
00000f65: DUP2
00000f66: SWAP1
00000f67: MSTORE
00000f68: PUSH1 0x40
00000f6a: SWAP1
00000f6b: KECCAK256
00000f6c: SLOAD
00000f6d: DUP1
00000f6e: DUP3
00000f6f: GT
00000f70: ISZERO
00000f71: PUSH2 0x0fab
00000f74: JUMPI
00000f75: PUSH1 0x40
00000f77: MLOAD
00000f78: PUSH3 0x461bcd
00000f7c: PUSH1 0xe5
00000f7e: SHL
00000f7f: DUP2
00000f80: MSTORE
00000f81: PUSH1 0x04
00000f83: ADD
00000f84: DUP1
00000f85: DUP1
00000f86: PUSH1 0x20
00000f88: ADD
00000f89: DUP3
00000f8a: DUP2
00000f8b: SUB
00000f8c: DUP3
00000f8d: MSTORE
00000f8e: PUSH1 0x32
00000f90: DUP2
00000f91: MSTORE
00000f92: PUSH1 0x20
00000f94: ADD
00000f95: DUP1
00000f96: PUSH2 0x13da
00000f99: PUSH1 0x32
00000f9b: SWAP2
00000f9c: CODECOPY
00000f9d: PUSH1 0x40
00000f9f: ADD
00000fa0: SWAP2
00000fa1: POP
00000fa2: POP
00000fa3: PUSH1 0x40
00000fa5: MLOAD
00000fa6: DUP1
00000fa7: SWAP2
00000fa8: SUB
00000fa9: SWAP1
00000faa: REVERT
00000fab: JUMPDEST
00000fac: PUSH1 0x01
00000fae: PUSH1 0x01
00000fb0: PUSH1 0xa0
00000fb2: SHL
00000fb3: SUB
00000fb4: DUP4
00000fb5: AND
00000fb6: PUSH1 0x00
00000fb8: DUP2
00000fb9: DUP2
00000fba: MSTORE
00000fbb: PUSH1 0x20
00000fbd: DUP2
00000fbe: SWAP1
00000fbf: MSTORE
00000fc0: PUSH1 0x40
00000fc2: DUP1
00000fc3: DUP3
00000fc4: KECCAK256
00000fc5: DUP1
00000fc6: SLOAD
00000fc7: DUP7
00000fc8: SWAP1
00000fc9: SUB
00000fca: SWAP1
00000fcb: SSTORE
00000fcc: MLOAD
00000fcd: SWAP1
00000fce: SWAP2
00000fcf: SWAP1
00000fd0: DUP5
00000fd1: SWAP1
00000fd2: DUP4
00000fd3: DUP2
00000fd4: DUP2
00000fd5: DUP2
00000fd6: DUP6
00000fd7: DUP8
00000fd8: GAS
00000fd9: CALL
00000fda: SWAP3
00000fdb: POP
00000fdc: POP
00000fdd: POP
00000fde: RETURNDATASIZE
00000fdf: DUP1
00000fe0: PUSH1 0x00
00000fe2: DUP2
00000fe3: EQ
00000fe4: PUSH2 0x1009
00000fe7: JUMPI
00000fe8: PUSH1 0x40
00000fea: MLOAD
00000feb: SWAP2
00000fec: POP
00000fed: PUSH1 0x1f
00000fef: NOT
00000ff0: PUSH1 0x3f
00000ff2: RETURNDATASIZE
00000ff3: ADD
00000ff4: AND
00000ff5: DUP3
00000ff6: ADD
00000ff7: PUSH1 0x40
00000ff9: MSTORE
00000ffa: RETURNDATASIZE
00000ffb: DUP3
00000ffc: MSTORE
00000ffd: RETURNDATASIZE
00000ffe: PUSH1 0x00
00001000: PUSH1 0x20
00001002: DUP5
00001003: ADD
00001004: RETURNDATACOPY
00001005: PUSH2 0x100e
00001008: JUMP
00001009: JUMPDEST
0000100a: PUSH1 0x60
0000100c: SWAP2
0000100d: POP
0000100e: JUMPDEST
0000100f: POP
00001010: POP
00001011: SWAP1
00001012: POP
00001013: DUP1
00001014: PUSH2 0x104e
00001017: JUMPI
00001018: PUSH1 0x40
0000101a: MLOAD
0000101b: PUSH3 0x461bcd
0000101f: PUSH1 0xe5
00001021: SHL
00001022: DUP2
00001023: MSTORE
00001024: PUSH1 0x04
00001026: ADD
00001027: DUP1
00001028: DUP1
00001029: PUSH1 0x20
0000102b: ADD
0000102c: DUP3
0000102d: DUP2
0000102e: SUB
0000102f: DUP3
00001030: MSTORE
00001031: PUSH1 0x21
00001033: DUP2
00001034: MSTORE
00001035: PUSH1 0x20
00001037: ADD
00001038: DUP1
00001039: PUSH2 0x140c
0000103c: PUSH1 0x21
0000103e: SWAP2
0000103f: CODECOPY
00001040: PUSH1 0x40
00001042: ADD
00001043: SWAP2
00001044: POP
00001045: POP
00001046: PUSH1 0x40
00001048: MLOAD
00001049: DUP1
0000104a: SWAP2
0000104b: SUB
0000104c: SWAP1
0000104d: REVERT
0000104e: JUMPDEST
0000104f: PUSH1 0x40
00001051: DUP1
00001052: MLOAD
00001053: DUP5
00001054: DUP2
00001055: MSTORE
00001056: SWAP1
00001057: MLOAD
00001058: PUSH1 0x01
0000105a: PUSH1 0x01
0000105c: PUSH1 0xa0
0000105e: SHL
0000105f: SUB
00001060: DUP7
00001061: AND
00001062: SWAP2
00001063: PUSH32 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65
00001084: SWAP2
00001085: SWAP1
00001086: DUP2
00001087: SWAP1
00001088: SUB
00001089: PUSH1 0x20
0000108b: ADD
0000108c: SWAP1
0000108d: LOG2
0000108e: POP
0000108f: POP
00001090: POP
00001091: POP
00001092: JUMP
00001093: JUMPDEST
00001094: PUSH1 0x01
00001096: PUSH1 0x01
00001098: PUSH1 0xa0
0000109a: SHL
0000109b: SUB
0000109c: DUP4
0000109d: AND
0000109e: PUSH2 0x10d8
000010a1: JUMPI
000010a2: PUSH1 0x40
000010a4: MLOAD
000010a5: PUSH3 0x461bcd
000010a9: PUSH1 0xe5
000010ab: SHL
000010ac: DUP2
000010ad: MSTORE
000010ae: PUSH1 0x04
000010b0: ADD
000010b1: DUP1
000010b2: DUP1
000010b3: PUSH1 0x20
000010b5: ADD
000010b6: DUP3
000010b7: DUP2
000010b8: SUB
000010b9: DUP3
000010ba: MSTORE
000010bb: PUSH1 0x28
000010bd: DUP2
000010be: MSTORE
000010bf: PUSH1 0x20
000010c1: ADD
000010c2: DUP1
000010c3: PUSH2 0x14af
000010c6: PUSH1 0x28
000010c8: SWAP2
000010c9: CODECOPY
000010ca: PUSH1 0x40
000010cc: ADD
000010cd: SWAP2
000010ce: POP
000010cf: POP
000010d0: PUSH1 0x40
000010d2: MLOAD
000010d3: DUP1
000010d4: SWAP2
000010d5: SUB
000010d6: SWAP1
000010d7: REVERT
000010d8: JUMPDEST
000010d9: PUSH1 0x01
000010db: PUSH1 0x01
000010dd: PUSH1 0xa0
000010df: SHL
000010e0: SUB
000010e1: DUP3
000010e2: AND
000010e3: PUSH2 0x111d
000010e6: JUMPI
000010e7: PUSH1 0x40
000010e9: MLOAD
000010ea: PUSH3 0x461bcd
000010ee: PUSH1 0xe5
000010f0: SHL
000010f1: DUP2
000010f2: MSTORE
000010f3: PUSH1 0x04
000010f5: ADD
000010f6: DUP1
000010f7: DUP1
000010f8: PUSH1 0x20
000010fa: ADD
000010fb: DUP3
000010fc: DUP2
000010fd: SUB
000010fe: DUP3
000010ff: MSTORE
00001100: PUSH1 0x29
00001102: DUP2
00001103: MSTORE
00001104: PUSH1 0x20
00001106: ADD
00001107: DUP1
00001108: PUSH2 0x142d
0000110b: PUSH1 0x29
0000110d: SWAP2
0000110e: CODECOPY
0000110f: PUSH1 0x40
00001111: ADD
00001112: SWAP2
00001113: POP
00001114: POP
00001115: PUSH1 0x40
00001117: MLOAD
00001118: DUP1
00001119: SWAP2
0000111a: SUB
0000111b: SWAP1
0000111c: REVERT
0000111d: JUMPDEST
0000111e: PUSH1 0x00
00001120: DUP2
00001121: GT
00001122: PUSH2 0x115c
00001125: JUMPI
00001126: PUSH1 0x40
00001128: MLOAD
00001129: PUSH3 0x461bcd
0000112d: PUSH1 0xe5
0000112f: SHL
00001130: DUP2
00001131: MSTORE
00001132: PUSH1 0x04
00001134: ADD
00001135: DUP1
00001136: DUP1
00001137: PUSH1 0x20
00001139: ADD
0000113a: DUP3
0000113b: DUP2
0000113c: SUB
0000113d: DUP3
0000113e: MSTORE
0000113f: PUSH1 0x2f
00001141: DUP2
00001142: MSTORE
00001143: PUSH1 0x20
00001145: ADD
00001146: DUP1
00001147: PUSH2 0x133f
0000114a: PUSH1 0x2f
0000114c: SWAP2
0000114d: CODECOPY
0000114e: PUSH1 0x40
00001150: ADD
00001151: SWAP2
00001152: POP
00001153: POP
00001154: PUSH1 0x40
00001156: MLOAD
00001157: DUP1
00001158: SWAP2
00001159: SUB
0000115a: SWAP1
0000115b: REVERT
0000115c: JUMPDEST
0000115d: PUSH1 0x01
0000115f: PUSH1 0x01
00001161: PUSH1 0xa0
00001163: SHL
00001164: SUB
00001165: DUP1
00001166: DUP4
00001167: AND
00001168: PUSH1 0x00
0000116a: SWAP1
0000116b: DUP2
0000116c: MSTORE
0000116d: PUSH1 0x01
0000116f: PUSH1 0x20
00001171: SWAP1
00001172: DUP2
00001173: MSTORE
00001174: PUSH1 0x40
00001176: DUP1
00001177: DUP4
00001178: KECCAK256
00001179: SWAP4
0000117a: DUP8
0000117b: AND
0000117c: DUP4
0000117d: MSTORE
0000117e: SWAP3
0000117f: SWAP1
00001180: MSTORE
00001181: KECCAK256
00001182: SLOAD
00001183: DUP1
00001184: DUP3
00001185: GT
00001186: ISZERO
00001187: PUSH2 0x11c1
0000118a: JUMPI
0000118b: PUSH1 0x40
0000118d: MLOAD
0000118e: PUSH3 0x461bcd
00001192: PUSH1 0xe5
00001194: SHL
00001195: DUP2
00001196: MSTORE
00001197: PUSH1 0x04
00001199: ADD
0000119a: DUP1
0000119b: DUP1
0000119c: PUSH1 0x20
0000119e: ADD
0000119f: DUP3
000011a0: DUP2
000011a1: SUB
000011a2: DUP3
000011a3: MSTORE
000011a4: PUSH1 0x32
000011a6: DUP2
000011a7: MSTORE
000011a8: PUSH1 0x20
000011aa: ADD
000011ab: DUP1
000011ac: PUSH2 0x13da
000011af: PUSH1 0x32
000011b1: SWAP2
000011b2: CODECOPY
000011b3: PUSH1 0x40
000011b5: ADD
000011b6: SWAP2
000011b7: POP
000011b8: POP
000011b9: PUSH1 0x40
000011bb: MLOAD
000011bc: DUP1
000011bd: SWAP2
000011be: SUB
000011bf: SWAP1
000011c0: REVERT
000011c1: JUMPDEST
000011c2: PUSH1 0x01
000011c4: PUSH1 0x01
000011c6: PUSH1 0xa0
000011c8: SHL
000011c9: SUB
000011ca: DUP1
000011cb: DUP6
000011cc: AND
000011cd: PUSH1 0x00
000011cf: DUP2
000011d0: DUP2
000011d1: MSTORE
000011d2: PUSH1 0x20
000011d4: DUP2
000011d5: DUP2
000011d6: MSTORE
000011d7: PUSH1 0x40
000011d9: DUP1
000011da: DUP4
000011db: KECCAK256
000011dc: DUP1
000011dd: SLOAD
000011de: DUP9
000011df: SWAP1
000011e0: SUB
000011e1: SWAP1
000011e2: SSTORE
000011e3: DUP1
000011e4: MLOAD
000011e5: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00001206: DUP2
00001207: MSTORE
00001208: PUSH1 0x04
0000120a: DUP2
0000120b: ADD
0000120c: SWAP5
0000120d: SWAP1
0000120e: SWAP5
0000120f: MSTORE
00001210: PUSH1 0x24
00001212: DUP5
00001213: ADD
00001214: DUP8
00001215: SWAP1
00001216: MSTORE
00001217: MLOAD
00001218: DUP8
00001219: SWAP5
0000121a: SWAP3
0000121b: SWAP4
0000121c: SWAP3
0000121d: DUP6
0000121e: AND
0000121f: SWAP3
00001220: PUSH4 0xa9059cbb
00001225: SWAP3
00001226: PUSH1 0x44
00001228: DUP1
00001229: DUP4
0000122a: ADD
0000122b: SWAP4
0000122c: SWAP2
0000122d: SWAP3
0000122e: DUP3
0000122f: SWAP1
00001230: SUB
00001231: ADD
00001232: DUP2
00001233: DUP8
00001234: DUP8
00001235: DUP1
00001236: EXTCODESIZE
00001237: ISZERO
00001238: DUP1
00001239: ISZERO
0000123a: PUSH2 0x1242
0000123d: JUMPI
0000123e: PUSH1 0x00
00001240: DUP1
00001241: REVERT
00001242: JUMPDEST
00001243: POP
00001244: GAS
00001245: CALL
00001246: ISZERO
00001247: DUP1
00001248: ISZERO
00001249: PUSH2 0x1256
0000124c: JUMPI
0000124d: RETURNDATASIZE
0000124e: PUSH1 0x00
00001250: DUP1
00001251: RETURNDATACOPY
00001252: RETURNDATASIZE
00001253: PUSH1 0x00
00001255: REVERT
00001256: JUMPDEST
00001257: POP
00001258: POP
00001259: POP
0000125a: POP
0000125b: PUSH1 0x40
0000125d: MLOAD
0000125e: RETURNDATASIZE
0000125f: PUSH1 0x20
00001261: DUP2
00001262: LT
00001263: ISZERO
00001264: PUSH2 0x126c
00001267: JUMPI
00001268: PUSH1 0x00
0000126a: DUP1
0000126b: REVERT
0000126c: JUMPDEST
0000126d: POP
0000126e: MLOAD
0000126f: SWAP1
00001270: POP
00001271: DUP1
00001272: PUSH2 0x12ac
00001275: JUMPI
00001276: PUSH1 0x40
00001278: MLOAD
00001279: PUSH3 0x461bcd
0000127d: PUSH1 0xe5
0000127f: SHL
00001280: DUP2
00001281: MSTORE
00001282: PUSH1 0x04
00001284: ADD
00001285: DUP1
00001286: DUP1
00001287: PUSH1 0x20
00001289: ADD
0000128a: DUP3
0000128b: DUP2
0000128c: SUB
0000128d: DUP3
0000128e: MSTORE
0000128f: PUSH1 0x27
00001291: DUP2
00001292: MSTORE
00001293: PUSH1 0x20
00001295: ADD
00001296: DUP1
00001297: PUSH2 0x1488
0000129a: PUSH1 0x27
0000129c: SWAP2
0000129d: CODECOPY
0000129e: PUSH1 0x40
000012a0: ADD
000012a1: SWAP2
000012a2: POP
000012a3: POP
000012a4: PUSH1 0x40
000012a6: MLOAD
000012a7: DUP1
000012a8: SWAP2
000012a9: SUB
000012aa: SWAP1
000012ab: REVERT
000012ac: JUMPDEST
000012ad: DUP6
000012ae: PUSH1 0x01
000012b0: PUSH1 0x01
000012b2: PUSH1 0xa0
000012b4: SHL
000012b5: SUB
000012b6: AND
000012b7: DUP6
000012b8: PUSH1 0x01
000012ba: PUSH1 0x01
000012bc: PUSH1 0xa0
000012be: SHL
000012bf: SUB
000012c0: AND
000012c1: PUSH32 0xd2708b75549f9f4a149b80f5b152801c0e97e2419aa19930ad9cb1bb4cf4f91d
000012e2: DUP7
000012e3: PUSH1 0x40
000012e5: MLOAD
000012e6: DUP1
000012e7: DUP3
000012e8: DUP2
000012e9: MSTORE
000012ea: PUSH1 0x20
000012ec: ADD
000012ed: SWAP2
000012ee: POP
000012ef: POP
000012f0: PUSH1 0x40
000012f2: MLOAD
000012f3: DUP1
000012f4: SWAP2
000012f5: SUB
000012f6: SWAP1
000012f7: LOG3
000012f8: POP
000012f9: POP
000012fa: POP
000012fb: POP
000012fc: POP
000012fd: POP
000012fe: JUMP
000012ff: INVALID
00001300: POP
00001301: PUSH22 0x6c6c576974686472617761626c653a20455243323041
00001318: PUSH5 0x6472657373
0000131e: PUSH6 0x73206d757374
00001325: KECCAK256
00001326: PUSH3 0x652073
0000132a: PUSH2 0x6d65
0000132d: KECCAK256
0000132e: PUSH13 0x656e67746820617320616d6f75
0000133c: PUSH15 0x747350756c6c576974686472617761
0000134c: PUSH3 0x6c653a
00001350: KECCAK256
00001351: PUSH2 0x6d6f
00001354: PUSH22 0x6e74206d757374206265206772656174657220746861
0000136b: PUSH15 0x203050756c6c576974686472617761
0000137b: PUSH3 0x6c653a
0000137f: KECCAK256
00001380: PUSH19 0x6563697069656e7473206d7573742062652073
00001394: PUSH2 0x6d65
00001397: KECCAK256
00001398: PUSH13 0x656e67746820617320616d6f75
000013a6: PUSH15 0x747350756c6c576974686472617761
000013b6: PUSH3 0x6c653a
000013ba: KECCAK256
000013bb: UNKNOWN(0x4F)
000013bc: PUSH15 0x6c7920747275737465644f776e6572
000013cc: KECCAK256
000013cd: PUSH4 0x616e2063
000013d2: PUSH2 0x6c6c
000013d5: KECCAK256
000013d6: PUSH21 0x68697350756c6c576974686472617761626c653a20
000013ec: PUSH2 0x6d6f
000013ef: PUSH22 0x6e74206d757374206265206c657373207468616e2062
00001406: PUSH2 0x6c61
00001409: PUSH15 0x636550756c6c576974686472617761
00001419: PUSH3 0x6c653a
0000141d: KECCAK256
0000141e: SLOAD
0000141f: PUSH19 0x616e73666572206661696c656450756c6c5769
00001433: PUSH21 0x686472617761626c653a2063616e6e6f7420626520
00001449: PUSH15 0x756c6c20636f6e7472616374446570
00001459: PUSH16 0x7369743a2066616c6c6261636b206675
0000146a: PUSH15 0x6374696f6e20646f6573206e6f7420
0000147a: PUSH21 0x616b6520617267756d656e747350756c6c57697468
00001490: PUSH5 0x7261776162
00001496: PUSH13 0x653a204552433230207472616e
000014a4: PUSH20 0x666572206661696c656450756c6c576974686472
000014b9: PUSH2 0x7761
000014bc: PUSH3 0x6c653a
000014c0: KECCAK256
000014c1: PUSH4 0x616e6e6f
000014c6: PUSH21 0x206265206e756c6c206164647265737350756c6c57
000014dc: PUSH10 0x74686472617761626c65
000014e7: GASPRICE
000014e8: KECCAK256
000014e9: PUSH19 0x6563697069656e7473206d7573742062652067
000014fd: PUSH10 0x76656e50756c6c576974
00001508: PUSH9 0x6472617761626c653a
00001512: KECCAK256
00001513: PUSH19 0x6563697069656e7473206d7573742062652073
00001527: PUSH2 0x6d65
0000152a: KECCAK256
0000152b: PUSH13 0x656e6774682061732045524332
00001539: ADDRESS
0000153a: COINBASE
0000153b: PUSH5 0x6472657373
00001541: PUSH6 0x7350756c6c57
00001548: PUSH10 0x74686472617761626c65
00001553: GASPRICE
00001554: KECCAK256
00001555: PUSH15 0x65774f776e65722063616e6e6f7420
00001565: PUSH3 0x652065
00001569: PUSH14 0x707479a265627a7a72315820cd75
00001578: ADDMOD
00001579: BASEFEE
0000157a: SWAP9
0000157b: PUSH22 0xa45e7dd8f2fd73b1a0985a153279f68904083875d906
00001592: XOR
00001593: SSTORE
00001594: UNKNOWN(0xDB)
00001595: PUSH7 0x64736f6c634300
0000159d: SDIV
0000159e: UNKNOWN(0x0C)
0000159f: STOP
000015a0: ORIGIN

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xde1b0486",
            "selector": "0xde1b0486",
            "calldata_variants": [
                "0xde1b0486",
                "0xde1b04860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xebeaa0a7",
            "selector": "0xebeaa0a7",
            "calldata_variants": [
                "0xebeaa0a7",
                "0xebeaa0a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4f3b200",
            "selector": "0xf4f3b200",
            "calldata_variants": [
                "0xf4f3b200",
                "0xf4f3b2000000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf99cc2a4",
            "selector": "0xf99cc2a4",
            "calldata_variants": [
                "0xf99cc2a4",
                "0xf99cc2a40000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa51a828c",
            "selector": "0xa51a828c",
            "calldata_variants": [
                "0xa51a828c",
                "0xa51a828c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa8001d6f",
            "selector": "0xa8001d6f",
            "calldata_variants": [
                "0xa8001d6f",
                "0xa8001d6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb412cf20",
            "selector": "0xb412cf20",
            "calldata_variants": [
                "0xb412cf20",
                "0xb412cf200000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc7927b74",
            "selector": "0xc7927b74",
            "calldata_variants": [
                "0xc7927b74",
                "0xc7927b740000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 5536,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9
call_targets: 0xd27e44f7f4118db2c7812a363f5b76859c20e0b3
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xd27e44f7f4118db2c7812a363f5b76859c20e0b3"
    ],
    "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": "0xde1b0486",
            "selector": "0xde1b0486",
            "calldata_variants": [
                "0xde1b0486",
                "0xde1b04860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xebeaa0a7",
            "selector": "0xebeaa0a7",
            "calldata_variants": [
                "0xebeaa0a7",
                "0xebeaa0a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4f3b200",
            "selector": "0xf4f3b200",
            "calldata_variants": [
                "0xf4f3b200",
                "0xf4f3b2000000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf99cc2a4",
            "selector": "0xf99cc2a4",
            "calldata_variants": [
                "0xf99cc2a4",
                "0xf99cc2a40000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa51a828c",
            "selector": "0xa51a828c",
            "calldata_variants": [
                "0xa51a828c",
                "0xa51a828c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa8001d6f",
            "selector": "0xa8001d6f",
            "calldata_variants": [
                "0xa8001d6f",
                "0xa8001d6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb412cf20",
            "selector": "0xb412cf20",
            "calldata_variants": [
                "0xb412cf20",
                "0xb412cf200000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc7927b74",
            "selector": "0xc7927b74",
            "calldata_variants": [
                "0xc7927b74",
                "0xc7927b740000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4057,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4677,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 2,
    "guards_detected": [
        {
            "pc": 5536,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 2
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9
call_targets: 0xd27e44f7f4118db2c7812a363f5b76859c20e0b3
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xd27e44f7f4118db2c7812a363f5b76859c20e0b3"
    ],
    "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": "0xde1b0486",
            "selector": "0xde1b0486",
            "calldata_variants": [
                "0xde1b0486",
                "0xde1b04860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xebeaa0a7",
            "selector": "0xebeaa0a7",
            "calldata_variants": [
                "0xebeaa0a7",
                "0xebeaa0a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4f3b200",
            "selector": "0xf4f3b200",
            "calldata_variants": [
                "0xf4f3b200",
                "0xf4f3b2000000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf99cc2a4",
            "selector": "0xf99cc2a4",
            "calldata_variants": [
                "0xf99cc2a4",
                "0xf99cc2a40000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa51a828c",
            "selector": "0xa51a828c",
            "calldata_variants": [
                "0xa51a828c",
                "0xa51a828c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa8001d6f",
            "selector": "0xa8001d6f",
            "calldata_variants": [
                "0xa8001d6f",
                "0xa8001d6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb412cf20",
            "selector": "0xb412cf20",
            "calldata_variants": [
                "0xb412cf20",
                "0xb412cf200000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc7927b74",
            "selector": "0xc7927b74",
            "calldata_variants": [
                "0xc7927b74",
                "0xc7927b740000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4057,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4677,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 2,
    "guards_detected": [
        {
            "pc": 5536,
            "type": "tx_origin_used"
        }
    ]
}