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

Analysis Run

d9e06a52-bd3d-4a75-8dc3-fcde65c7345a

complete
Chain ID
1
Address
Block Number
Created
Mon, Dec 29, 2025 4:08 PM
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
Untrusted CALL target/value reachable
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
30519 report.consolidate complete 1 / 1 3 months ago
103973 artifact.fetch complete 1 / 3 1 week ago
103974 tool.cast_disasm complete 1 / 3 1 week ago
103975 analysis.bundle complete 1 / 3 1 week ago
103976 capability.graph complete 1 / 3 1 week ago
103977 detector.run complete 1 / 3 1 week ago
103978 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; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.
View stderr
[codex:1094450] OpenAI Codex v0.77.0 (research preview)
[codex:1094450] --------
[codex:1094450] workdir: /tmp/codex-multi-rq79bvth
[codex:1094450] model: gpt-5.2-codex
[codex:1094450] provider: openai
[codex:1094450] approval: never
[codex:1094450] sandbox: read-only
[codex:1094450] reasoning effort: xhigh
[codex:1094450] reasoning summaries: auto
[codex:1094450] session id: 019b6ad7-5468-7203-aec5-ba81f2150b7c
[codex:1094450] --------
[codex:1094450] user
[codex:1094450] You are a security auditor. You are given EVM runtime bytecode (and possibly a disassembly) for a contract with NO verified source.
[codex:1094450] This is best-effort. Do not hallucinate: only flag issues when there's a concrete, explainable angle from bytecode/disasm patterns.
[codex:1094450] 
[codex:1094450] You MUST read the full `BYTECODE_BUNDLE.txt` before concluding.
[codex:1094450] 
[codex:1094450] Output MUST be valid JSON matching the provided schema.
[codex:1094450] - If you cannot identify a concrete issue from bytecode/disasm alone: set no_findings=true and findings=[].
[codex:1094450] - Otherwise: include findings with severity/category/title/evidence and point locations to BYTECODE_BUNDLE.txt line ranges when possible.
[codex:1094450] 
[codex:1094450] Output constraints (IMPORTANT):
[codex:1094450] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1094450] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1094450] mcp startup: no servers
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Reading BYTECODE_BUNDLE.txt contents**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc ls in /tmp/codex-multi-rq79bvth succeeded in 6ms:
[codex:1094450] BYTECODE_BUNDLE.txt
[codex:1094450] codex-output-schema.json
[codex:1094450] exec
[codex:1094450] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-rq79bvth succeeded in 5ms:
[codex:1094450] Runtime bytecode bundle for best-effort auditing.
[codex:1094450] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1094450] 
[codex:1094450] FILE: runtime_bytecode.hex
[codex:1094450] 0x608060405234801561001057600080fd5b50600436106100635760003560e01c8062e71aaf1161004e578062e71aaf146100905780630f59f83a146100ae57806395ddbc58146100c957600080fd5b806207e964146100685780627a77ff1461007d575b600080fd5b61007b610076366004610775565b6100dc565b005b61007b61008b36600461080f565b61023a565b610098610359565b6040516100a59190610851565b60405180910390f35b6000546040516001600160a01b0390911681526020016100a5565b61007b6100d73660046108b3565b6103bb565b3360009081526002602052604090205460ff168061010457506000546001600160a01b031633145b6101555760405162461bcd60e51b815260206004820152600660248201527f3430333a4f53000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b848114801561016357508083145b6101af5760405162461bcd60e51b815260206004820152600560248201527f3430303a4c000000000000000000000000000000000000000000000000000000604482015260640161014c565b60005b85811015610231576102298787838181106101cf576101cf6108d0565b90506020020160208101906101e491906108b3565b8686848181106101f6576101f66108d0565b905060200201602081019061020b91906108b3565b85858581811061021d5761021d6108d0565b9050602002013561042c565b6001016101b2565b50505050505050565b6000546001600160a01b0316331461027c5760405162461bcd60e51b81526020600482015260056024820152643430333a4f60d81b604482015260640161014c565b60005b6001548110156102de57600060026000600184815481106102a2576102a26108d0565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560010161027f565b5060005b8181101561034757600160026000858585818110610302576103026108d0565b905060200201602081019061031791906108b3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016102e2565b50610354600183836106a4565b505050565b606060018054806020026020016040519081016040528092919081815260200182805480156103b157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610393575b5050505050905090565b6000546001600160a01b031633146103fd5760405162461bcd60e51b81526020600482015260056024820152643430333a4f60d81b604482015260640161014c565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610354918591906000906104b89084168361051f565b905080516000141580156104dd5750808060200190518101906104db91906108ff565b155b15610354576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161014c565b606061052d83836000610534565b9392505050565b606081471015610572576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161014c565b600080856001600160a01b0316848660405161058e9190610921565b60006040518083038185875af1925050503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e08683836105ea565b9695505050505050565b6060826105ff576105fa8261065f565b61052d565b815115801561061657506001600160a01b0384163b155b15610658576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161014c565b508061052d565b80511561066f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b828054828255906000526020600020908101928215610704579160200282015b8281111561070457815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038435161782556020909201916001909101906106c4565b50610710929150610714565b5090565b5b808211156107105760008155600101610715565b60008083601f84011261073b57600080fd5b50813567ffffffffffffffff81111561075357600080fd5b6020830191508360208260051b850101111561076e57600080fd5b9250929050565b6000806000806000806060878903121561078e57600080fd5b863567ffffffffffffffff808211156107a657600080fd5b6107b28a838b01610729565b909850965060208901359150808211156107cb57600080fd5b6107d78a838b01610729565b909650945060408901359150808211156107f057600080fd5b506107fd89828a01610729565b979a9699509497509295939492505050565b6000806020838503121561082257600080fd5b823567ffffffffffffffff81111561083957600080fd5b61084585828601610729565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156108925783516001600160a01b03168352928401929184019160010161086d565b50909695505050505050565b6001600160a01b03811681146106a157600080fd5b6000602082840312156108c557600080fd5b813561052d8161089e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561091157600080fd5b8151801515811461052d57600080fd5b6000825160005b818110156109425760208186018101518583015201610928565b50600092019182525091905056fea264697066735822122018174e7c060d60c16eaa8d2621705d3326b2030eaaea0f269d8021e9ff1f4ce564736f6c63430008180033
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Preparing for bytecode audit**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-rq79bvth succeeded in 5ms:
[codex:1094450] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:1094450] 
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Interpreting and analyzing runtime EVM bytecode**
[codex:1094450] 
[codex:1094450] I'm manually decoding the contract's runtime bytecode to identify functions, selectors, storage patterns, and access control. I’m mapping selectors to functions like owner(), batchTransfer, setOperators, and transferOwnership, and parsing storage usage to understand dynamic arrays and mappings for operator whitelists. I'm examining internal calls, especially safe ERC20 transfers, to check for patterns and potential vulnerabilities like reentrancy, considering the absence of reentrancy guards and the contract's access controls. This gives me a clearer understanding of the contract’s structure and behavioral logic despite only having bytecode.
[codex:1094450] thinking
[codex:1094450] **Evaluating function argument decoding and planning disassembler script**
[codex:1094450] 
[codex:1094450] I'm studying the contract’s argument decoding routines for functions handling dynamic arrays and multiple parameters, trying to understand how parameters like token address, recipients, and amounts are parsed. Since the code involves complex calldata decoding with helper functions, I'm considering running a quick in-memory disassembler script to convert hex bytecode into opcodes for clearer insight into function layouts and parameter patterns. This should help me clarify the contract’s ABI and function boundaries without modifying any files.
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] import sys
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # opcode map
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] for i in range(0,1):
[codex:1094450]     pass
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] # print few around function selectors
[codex:1094450] for pc,name,data in out[:200]:
[codex:1094450]     print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 35ms:
[codex:1094450] 0000 PUSH1      0x80
[codex:1094450] 0002 PUSH1      0x40
[codex:1094450] 0004 MSTORE     
[codex:1094450] 0005 CALLVALUE  
[codex:1094450] 0006 DUP1       
[codex:1094450] 0007 ISZERO     
[codex:1094450] 0008 PUSH2      0x0010
[codex:1094450] 000b JUMPI      
[codex:1094450] 000c PUSH1      0x00
[codex:1094450] 000e DUP1       
[codex:1094450] 000f REVERT     
[codex:1094450] 0010 JUMPDEST   
[codex:1094450] 0011 POP        
[codex:1094450] 0012 PUSH1      0x04
[codex:1094450] 0014 CALLDATASIZE 
[codex:1094450] 0015 LT         
[codex:1094450] 0016 PUSH2      0x0063
[codex:1094450] 0019 JUMPI      
[codex:1094450] 001a PUSH1      0x00
[codex:1094450] 001c CALLDATALOAD 
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Requesting more disassembler output**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] # print region 0x00dc-0x0235
[codex:1094450] for pc,name,data in out:
[codex:1094450]     if 0x00dc <= pc <= 0x0235:
[codex:1094450]         print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 00dc JUMPDEST   
[codex:1094450] 00dd CALLER     
[codex:1094450] 00de PUSH1      0x00
[codex:1094450] 00e0 SWAP1      
[codex:1094450] 00e1 DUP2       
[codex:1094450] 00e2 MSTORE     
[codex:1094450] 00e3 PUSH1      0x02
[codex:1094450] 00e5 PUSH1      0x20
[codex:1094450] 00e7 MSTORE     
[codex:1094450] 00e8 PUSH1      0x40
[codex:1094450] 00ea SWAP1      
[codex:1094450] 00eb SHA3       
[codex:1094450] 00ec SLOAD      
[codex:1094450] 00ed PUSH1      0xff
[codex:1094450] 00ef AND        
[codex:1094450] 00f0 DUP1       
[codex:1094450] 00f1 PUSH2      0x0104
[codex:1094450] 00f4 JUMPI      
[codex:1094450] 00f5 POP        
[codex:1094450] 00f6 PUSH1      0x00
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Continuing review from offset 0x023a**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm function
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] for pc,name,data in out:
[codex:1094450]     if 0x023a <= pc <= 0x03c5:
[codex:1094450]         print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 023a JUMPDEST   
[codex:1094450] 023b PUSH1      0x00
[codex:1094450] 023d SLOAD      
[codex:1094450] 023e PUSH1      0x01
[codex:1094450] 0240 PUSH1      0x01
[codex:1094450] 0242 PUSH1      0xa0
[codex:1094450] 0244 SHL        
[codex:1094450] 0245 SUB        
[codex:1094450] 0246 AND        
[codex:1094450] 0247 CALLER     
[codex:1094450] 0248 EQ         
[codex:1094450] 0249 PUSH2      0x027c
[codex:1094450] 024c JUMPI      
[codex:1094450] 024d PUSH1      0x40
[codex:1094450] 024f MLOAD      
[codex:1094450] 0250 PUSH3      0x461bcd
[codex:1094450] 0254 PUSH1      0xe5
[codex:1094450] 0256 SHL        
[codex:1094450] 0257 DUP2       
[codex:1094450] 0258 MSTORE     
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Continuing code inspection near 0x3bb**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] for pc,name,data in out:
[codex:1094450]     if 0x03bb <= pc <= 0x0530:
[codex:1094450]         print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 20ms:
[codex:1094450] 03bb JUMPDEST   
[codex:1094450] 03bc PUSH1      0x00
[codex:1094450] 03be SLOAD      
[codex:1094450] 03bf PUSH1      0x01
[codex:1094450] 03c1 PUSH1      0x01
[codex:1094450] 03c3 PUSH1      0xa0
[codex:1094450] 03c5 SHL        
[codex:1094450] 03c6 SUB        
[codex:1094450] 03c7 AND        
[codex:1094450] 03c8 CALLER     
[codex:1094450] 03c9 EQ         
[codex:1094450] 03ca PUSH2      0x03fd
[codex:1094450] 03cd JUMPI      
[codex:1094450] 03ce PUSH1      0x40
[codex:1094450] 03d0 MLOAD      
[codex:1094450] 03d1 PUSH3      0x461bcd
[codex:1094450] 03d5 PUSH1      0xe5
[codex:1094450] 03d7 SHL        
[codex:1094450] 03d8 DUP2       
[codex:1094450] 03d9 MSTORE     
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Requesting more data**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] for pc,name,data in out:
[codex:1094450]     if 0x0530 <= pc <= 0x06a8:
[codex:1094450]         print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 0530 POP        
[codex:1094450] 0531 POP        
[codex:1094450] 0532 POP        
[codex:1094450] 0533 JUMP       
[codex:1094450] 0534 JUMPDEST   
[codex:1094450] 0535 PUSH1      0x60
[codex:1094450] 0537 DUP2       
[codex:1094450] 0538 SELFBALANCE 
[codex:1094450] 0539 LT         
[codex:1094450] 053a ISZERO     
[codex:1094450] 053b PUSH2      0x0572
[codex:1094450] 053e JUMPI      
[codex:1094450] 053f PUSH1      0x40
[codex:1094450] 0541 MLOAD      
[codex:1094450] 0542 PUSH32     0xcd78605900000000000000000000000000000000000000000000000000000000
[codex:1094450] 0563 DUP2       
[codex:1094450] 0564 MSTORE     
[codex:1094450] 0565 ADDRESS    
[codex:1094450] 0566 PUSH1      0x04
[codex:1094450] 0568 DUP3       
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Continuing code inspection**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] for pc,name,data in out:
[codex:1094450]     if 0x06a4 <= pc <= 0x0745:
[codex:1094450]         print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 25ms:
[codex:1094450] 06a4 JUMPDEST   
[codex:1094450] 06a5 DUP3       
[codex:1094450] 06a6 DUP1       
[codex:1094450] 06a7 SLOAD      
[codex:1094450] 06a8 DUP3       
[codex:1094450] 06a9 DUP3       
[codex:1094450] 06aa SSTORE     
[codex:1094450] 06ab SWAP1      
[codex:1094450] 06ac PUSH1      0x00
[codex:1094450] 06ae MSTORE     
[codex:1094450] 06af PUSH1      0x20
[codex:1094450] 06b1 PUSH1      0x00
[codex:1094450] 06b3 SHA3       
[codex:1094450] 06b4 SWAP1      
[codex:1094450] 06b5 DUP2       
[codex:1094450] 06b6 ADD        
[codex:1094450] 06b7 SWAP3      
[codex:1094450] 06b8 DUP3       
[codex:1094450] 06b9 ISZERO     
[codex:1094450] 06ba PUSH2      0x0704
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Decoding additional opcode**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] for pc,name,data in out:
[codex:1094450]     if 0x0729 <= pc <= 0x0830:
[codex:1094450]         print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 0729 JUMPDEST   
[codex:1094450] 072a PUSH1      0x00
[codex:1094450] 072c DUP1       
[codex:1094450] 072d DUP4       
[codex:1094450] 072e PUSH1      0x1f
[codex:1094450] 0730 DUP5       
[codex:1094450] 0731 ADD        
[codex:1094450] 0732 SLT        
[codex:1094450] 0733 PUSH2      0x073b
[codex:1094450] 0736 JUMPI      
[codex:1094450] 0737 PUSH1      0x00
[codex:1094450] 0739 DUP1       
[codex:1094450] 073a REVERT     
[codex:1094450] 073b JUMPDEST   
[codex:1094450] 073c POP        
[codex:1094450] 073d DUP2       
[codex:1094450] 073e CALLDATALOAD 
[codex:1094450] 073f PUSH8      0xffffffffffffffff
[codex:1094450] 0748 DUP2       
[codex:1094450] 0749 GT         
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Continuing to examine decoders**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 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:1094450] 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:1094450] 0x20:'SHA3',
[codex:1094450] 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:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 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:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450]     opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450]     opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] 
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450]     op=code[pc]
[codex:1094450]     name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450]     if name.startswith('PUSH'):
[codex:1094450]         n=int(name[4:])
[codex:1094450]         data=code[pc+1:pc+1+n]
[codex:1094450]         out.append((pc,name,'0x'+data.hex()))
[codex:1094450]         pc+=1+n
[codex:1094450]     else:
[codex:1094450]         out.append((pc,name,''))
[codex:1094450]         pc+=1
[codex:1094450] 
[codex:1094450] for pc,name,data in out:
[codex:1094450]     if 0x0830 <= pc <= 0x0950:
[codex:1094450]         print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 21ms:
[codex:1094450] 0830 ISZERO     
[codex:1094450] 0831 PUSH2      0x0839
[codex:1094450] 0834 JUMPI      
[codex:1094450] 0835 PUSH1      0x00
[codex:1094450] 0837 DUP1       
[codex:1094450] 0838 REVERT     
[codex:1094450] 0839 JUMPDEST   
[codex:1094450] 083a PUSH2      0x0845
[codex:1094450] 083d DUP6       
[codex:1094450] 083e DUP3       
[codex:1094450] 083f DUP7       
[codex:1094450] 0840 ADD        
[codex:1094450] 0841 PUSH2      0x0729
[codex:1094450] 0844 JUMP       
[codex:1094450] 0845 JUMPDEST   
[codex:1094450] 0846 SWAP1      
[codex:1094450] 0847 SWAP7      
[codex:1094450] 0848 SWAP1      
[codex:1094450] 0849 SWAP6      
[codex:1094450] 084a POP        
[codex:1094450] 
[codex:1094450] 
[codex:1094450] 
[codex:1094450] thinking
[codex:1094450] **Analyzing batchTransfer function bytecode**
[codex:1094450] thinking
[codex:1094450] **Examining call result verification and access control logic**
[codex:1094450] 
[codex:1094450] I’m carefully stepping through the bytecode that verifies returndata and checks call success, confirming it matches standard patterns ensuring calls to tokens are safe. Then I’m analyzing the access control checks combining operator mapping and owner checks, verifying the logic gate correctly restricts function use. I’m also reviewing array length comparisons and loops handling dynamic arrays in batchTransfer for consistent input validation and proper bounds checks.
[codex:1094450] thinking
[codex:1094450] **Summarizing bytecode analysis and findings**
[codex:1094450] 
[codex:1094450] I’ve reviewed the bytecode thoroughly, checking for any concrete vulnerabilities such as access control issues, array length mismatches, reentrancy risks, or improper use of calls. The logic for owner and operator permissions appears correctly enforced, array length validations seem sound, and external calls are properly handled with call result verification. Overall, no explicit security flaws or bugs are evident from the disassembly and runtime code.
[codex:1094450] codex
[codex:1094450] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.","findings":[]}
[codex:1094450] tokens used
[codex:1094450] 69,336
[codex:1094450] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-29T16:08:53.488632+00:00",
        "returncode": 0
    },
    "summary": "Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.",
    "raw_final": {
        "summary": "Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly 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)
1
EXT*/BALANCE
1
Total opcodes
1510
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLVALUE
00000006: DUP1
00000007: ISZERO
00000008: PUSH2 0x0010
0000000b: JUMPI
0000000c: PUSH1 0x00
0000000e: DUP1
0000000f: REVERT
00000010: JUMPDEST
00000011: POP
00000012: PUSH1 0x04
00000014: CALLDATASIZE
00000015: LT
00000016: PUSH2 0x0063
00000019: JUMPI
0000001a: PUSH1 0x00
0000001c: CALLDATALOAD
0000001d: PUSH1 0xe0
0000001f: SHR
00000020: DUP1
00000021: PUSH3 0xe71aaf
00000025: GT
00000026: PUSH2 0x004e
00000029: JUMPI
0000002a: DUP1
0000002b: PUSH3 0xe71aaf
0000002f: EQ
00000030: PUSH2 0x0090
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0x0f59f83a
0000003a: EQ
0000003b: PUSH2 0x00ae
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0x95ddbc58
00000045: EQ
00000046: PUSH2 0x00c9
00000049: JUMPI
0000004a: PUSH1 0x00
0000004c: DUP1
0000004d: REVERT
0000004e: JUMPDEST
0000004f: DUP1
00000050: PUSH3 0x07e964
00000054: EQ
00000055: PUSH2 0x0068
00000058: JUMPI
00000059: DUP1
0000005a: PUSH3 0x7a77ff
0000005e: EQ
0000005f: PUSH2 0x007d
00000062: JUMPI
00000063: JUMPDEST
00000064: PUSH1 0x00
00000066: DUP1
00000067: REVERT
00000068: JUMPDEST
00000069: PUSH2 0x007b
0000006c: PUSH2 0x0076
0000006f: CALLDATASIZE
00000070: PUSH1 0x04
00000072: PUSH2 0x0775
00000075: JUMP
00000076: JUMPDEST
00000077: PUSH2 0x00dc
0000007a: JUMP
0000007b: JUMPDEST
0000007c: STOP
0000007d: JUMPDEST
0000007e: PUSH2 0x007b
00000081: PUSH2 0x008b
00000084: CALLDATASIZE
00000085: PUSH1 0x04
00000087: PUSH2 0x080f
0000008a: JUMP
0000008b: JUMPDEST
0000008c: PUSH2 0x023a
0000008f: JUMP
00000090: JUMPDEST
00000091: PUSH2 0x0098
00000094: PUSH2 0x0359
00000097: JUMP
00000098: JUMPDEST
00000099: PUSH1 0x40
0000009b: MLOAD
0000009c: PUSH2 0x00a5
0000009f: SWAP2
000000a0: SWAP1
000000a1: PUSH2 0x0851
000000a4: JUMP
000000a5: JUMPDEST
000000a6: PUSH1 0x40
000000a8: MLOAD
000000a9: DUP1
000000aa: SWAP2
000000ab: SUB
000000ac: SWAP1
000000ad: RETURN
000000ae: JUMPDEST
000000af: PUSH1 0x00
000000b1: SLOAD
000000b2: PUSH1 0x40
000000b4: MLOAD
000000b5: PUSH1 0x01
000000b7: PUSH1 0x01
000000b9: PUSH1 0xa0
000000bb: SHL
000000bc: SUB
000000bd: SWAP1
000000be: SWAP2
000000bf: AND
000000c0: DUP2
000000c1: MSTORE
000000c2: PUSH1 0x20
000000c4: ADD
000000c5: PUSH2 0x00a5
000000c8: JUMP
000000c9: JUMPDEST
000000ca: PUSH2 0x007b
000000cd: PUSH2 0x00d7
000000d0: CALLDATASIZE
000000d1: PUSH1 0x04
000000d3: PUSH2 0x08b3
000000d6: JUMP
000000d7: JUMPDEST
000000d8: PUSH2 0x03bb
000000db: JUMP
000000dc: JUMPDEST
000000dd: CALLER
000000de: PUSH1 0x00
000000e0: SWAP1
000000e1: DUP2
000000e2: MSTORE
000000e3: PUSH1 0x02
000000e5: PUSH1 0x20
000000e7: MSTORE
000000e8: PUSH1 0x40
000000ea: SWAP1
000000eb: KECCAK256
000000ec: SLOAD
000000ed: PUSH1 0xff
000000ef: AND
000000f0: DUP1
000000f1: PUSH2 0x0104
000000f4: JUMPI
000000f5: POP
000000f6: PUSH1 0x00
000000f8: SLOAD
000000f9: PUSH1 0x01
000000fb: PUSH1 0x01
000000fd: PUSH1 0xa0
000000ff: SHL
00000100: SUB
00000101: AND
00000102: CALLER
00000103: EQ
00000104: JUMPDEST
00000105: PUSH2 0x0155
00000108: JUMPI
00000109: PUSH1 0x40
0000010b: MLOAD
0000010c: PUSH3 0x461bcd
00000110: PUSH1 0xe5
00000112: SHL
00000113: DUP2
00000114: MSTORE
00000115: PUSH1 0x20
00000117: PUSH1 0x04
00000119: DUP3
0000011a: ADD
0000011b: MSTORE
0000011c: PUSH1 0x06
0000011e: PUSH1 0x24
00000120: DUP3
00000121: ADD
00000122: MSTORE
00000123: PUSH32 0x3430333a4f530000000000000000000000000000000000000000000000000000
00000144: PUSH1 0x44
00000146: DUP3
00000147: ADD
00000148: MSTORE
00000149: PUSH1 0x64
0000014b: ADD
0000014c: JUMPDEST
0000014d: PUSH1 0x40
0000014f: MLOAD
00000150: DUP1
00000151: SWAP2
00000152: SUB
00000153: SWAP1
00000154: REVERT
00000155: JUMPDEST
00000156: DUP5
00000157: DUP2
00000158: EQ
00000159: DUP1
0000015a: ISZERO
0000015b: PUSH2 0x0163
0000015e: JUMPI
0000015f: POP
00000160: DUP1
00000161: DUP4
00000162: EQ
00000163: JUMPDEST
00000164: PUSH2 0x01af
00000167: JUMPI
00000168: PUSH1 0x40
0000016a: MLOAD
0000016b: PUSH3 0x461bcd
0000016f: PUSH1 0xe5
00000171: SHL
00000172: DUP2
00000173: MSTORE
00000174: PUSH1 0x20
00000176: PUSH1 0x04
00000178: DUP3
00000179: ADD
0000017a: MSTORE
0000017b: PUSH1 0x05
0000017d: PUSH1 0x24
0000017f: DUP3
00000180: ADD
00000181: MSTORE
00000182: PUSH32 0x3430303a4c000000000000000000000000000000000000000000000000000000
000001a3: PUSH1 0x44
000001a5: DUP3
000001a6: ADD
000001a7: MSTORE
000001a8: PUSH1 0x64
000001aa: ADD
000001ab: PUSH2 0x014c
000001ae: JUMP
000001af: JUMPDEST
000001b0: PUSH1 0x00
000001b2: JUMPDEST
000001b3: DUP6
000001b4: DUP2
000001b5: LT
000001b6: ISZERO
000001b7: PUSH2 0x0231
000001ba: JUMPI
000001bb: PUSH2 0x0229
000001be: DUP8
000001bf: DUP8
000001c0: DUP4
000001c1: DUP2
000001c2: DUP2
000001c3: LT
000001c4: PUSH2 0x01cf
000001c7: JUMPI
000001c8: PUSH2 0x01cf
000001cb: PUSH2 0x08d0
000001ce: JUMP
000001cf: JUMPDEST
000001d0: SWAP1
000001d1: POP
000001d2: PUSH1 0x20
000001d4: MUL
000001d5: ADD
000001d6: PUSH1 0x20
000001d8: DUP2
000001d9: ADD
000001da: SWAP1
000001db: PUSH2 0x01e4
000001de: SWAP2
000001df: SWAP1
000001e0: PUSH2 0x08b3
000001e3: JUMP
000001e4: JUMPDEST
000001e5: DUP7
000001e6: DUP7
000001e7: DUP5
000001e8: DUP2
000001e9: DUP2
000001ea: LT
000001eb: PUSH2 0x01f6
000001ee: JUMPI
000001ef: PUSH2 0x01f6
000001f2: PUSH2 0x08d0
000001f5: JUMP
000001f6: JUMPDEST
000001f7: SWAP1
000001f8: POP
000001f9: PUSH1 0x20
000001fb: MUL
000001fc: ADD
000001fd: PUSH1 0x20
000001ff: DUP2
00000200: ADD
00000201: SWAP1
00000202: PUSH2 0x020b
00000205: SWAP2
00000206: SWAP1
00000207: PUSH2 0x08b3
0000020a: JUMP
0000020b: JUMPDEST
0000020c: DUP6
0000020d: DUP6
0000020e: DUP6
0000020f: DUP2
00000210: DUP2
00000211: LT
00000212: PUSH2 0x021d
00000215: JUMPI
00000216: PUSH2 0x021d
00000219: PUSH2 0x08d0
0000021c: JUMP
0000021d: JUMPDEST
0000021e: SWAP1
0000021f: POP
00000220: PUSH1 0x20
00000222: MUL
00000223: ADD
00000224: CALLDATALOAD
00000225: PUSH2 0x042c
00000228: JUMP
00000229: JUMPDEST
0000022a: PUSH1 0x01
0000022c: ADD
0000022d: PUSH2 0x01b2
00000230: JUMP
00000231: JUMPDEST
00000232: POP
00000233: POP
00000234: POP
00000235: POP
00000236: POP
00000237: POP
00000238: POP
00000239: JUMP
0000023a: JUMPDEST
0000023b: PUSH1 0x00
0000023d: SLOAD
0000023e: PUSH1 0x01
00000240: PUSH1 0x01
00000242: PUSH1 0xa0
00000244: SHL
00000245: SUB
00000246: AND
00000247: CALLER
00000248: EQ
00000249: PUSH2 0x027c
0000024c: JUMPI
0000024d: PUSH1 0x40
0000024f: MLOAD
00000250: PUSH3 0x461bcd
00000254: PUSH1 0xe5
00000256: SHL
00000257: DUP2
00000258: MSTORE
00000259: PUSH1 0x20
0000025b: PUSH1 0x04
0000025d: DUP3
0000025e: ADD
0000025f: MSTORE
00000260: PUSH1 0x05
00000262: PUSH1 0x24
00000264: DUP3
00000265: ADD
00000266: MSTORE
00000267: PUSH5 0x3430333a4f
0000026d: PUSH1 0xd8
0000026f: SHL
00000270: PUSH1 0x44
00000272: DUP3
00000273: ADD
00000274: MSTORE
00000275: PUSH1 0x64
00000277: ADD
00000278: PUSH2 0x014c
0000027b: JUMP
0000027c: JUMPDEST
0000027d: PUSH1 0x00
0000027f: JUMPDEST
00000280: PUSH1 0x01
00000282: SLOAD
00000283: DUP2
00000284: LT
00000285: ISZERO
00000286: PUSH2 0x02de
00000289: JUMPI
0000028a: PUSH1 0x00
0000028c: PUSH1 0x02
0000028e: PUSH1 0x00
00000290: PUSH1 0x01
00000292: DUP5
00000293: DUP2
00000294: SLOAD
00000295: DUP2
00000296: LT
00000297: PUSH2 0x02a2
0000029a: JUMPI
0000029b: PUSH2 0x02a2
0000029e: PUSH2 0x08d0
000002a1: JUMP
000002a2: JUMPDEST
000002a3: PUSH1 0x00
000002a5: SWAP2
000002a6: DUP3
000002a7: MSTORE
000002a8: PUSH1 0x20
000002aa: DUP1
000002ab: DUP4
000002ac: KECCAK256
000002ad: SWAP2
000002ae: SWAP1
000002af: SWAP2
000002b0: ADD
000002b1: SLOAD
000002b2: PUSH1 0x01
000002b4: PUSH1 0x01
000002b6: PUSH1 0xa0
000002b8: SHL
000002b9: SUB
000002ba: AND
000002bb: DUP4
000002bc: MSTORE
000002bd: DUP3
000002be: ADD
000002bf: SWAP3
000002c0: SWAP1
000002c1: SWAP3
000002c2: MSTORE
000002c3: PUSH1 0x40
000002c5: ADD
000002c6: SWAP1
000002c7: KECCAK256
000002c8: DUP1
000002c9: SLOAD
000002ca: PUSH1 0xff
000002cc: NOT
000002cd: AND
000002ce: SWAP2
000002cf: ISZERO
000002d0: ISZERO
000002d1: SWAP2
000002d2: SWAP1
000002d3: SWAP2
000002d4: OR
000002d5: SWAP1
000002d6: SSTORE
000002d7: PUSH1 0x01
000002d9: ADD
000002da: PUSH2 0x027f
000002dd: JUMP
000002de: JUMPDEST
000002df: POP
000002e0: PUSH1 0x00
000002e2: JUMPDEST
000002e3: DUP2
000002e4: DUP2
000002e5: LT
000002e6: ISZERO
000002e7: PUSH2 0x0347
000002ea: JUMPI
000002eb: PUSH1 0x01
000002ed: PUSH1 0x02
000002ef: PUSH1 0x00
000002f1: DUP6
000002f2: DUP6
000002f3: DUP6
000002f4: DUP2
000002f5: DUP2
000002f6: LT
000002f7: PUSH2 0x0302
000002fa: JUMPI
000002fb: PUSH2 0x0302
000002fe: PUSH2 0x08d0
00000301: JUMP
00000302: JUMPDEST
00000303: SWAP1
00000304: POP
00000305: PUSH1 0x20
00000307: MUL
00000308: ADD
00000309: PUSH1 0x20
0000030b: DUP2
0000030c: ADD
0000030d: SWAP1
0000030e: PUSH2 0x0317
00000311: SWAP2
00000312: SWAP1
00000313: PUSH2 0x08b3
00000316: JUMP
00000317: JUMPDEST
00000318: PUSH1 0x01
0000031a: PUSH1 0x01
0000031c: PUSH1 0xa0
0000031e: SHL
0000031f: SUB
00000320: AND
00000321: DUP2
00000322: MSTORE
00000323: PUSH1 0x20
00000325: DUP2
00000326: ADD
00000327: SWAP2
00000328: SWAP1
00000329: SWAP2
0000032a: MSTORE
0000032b: PUSH1 0x40
0000032d: ADD
0000032e: PUSH1 0x00
00000330: KECCAK256
00000331: DUP1
00000332: SLOAD
00000333: PUSH1 0xff
00000335: NOT
00000336: AND
00000337: SWAP2
00000338: ISZERO
00000339: ISZERO
0000033a: SWAP2
0000033b: SWAP1
0000033c: SWAP2
0000033d: OR
0000033e: SWAP1
0000033f: SSTORE
00000340: PUSH1 0x01
00000342: ADD
00000343: PUSH2 0x02e2
00000346: JUMP
00000347: JUMPDEST
00000348: POP
00000349: PUSH2 0x0354
0000034c: PUSH1 0x01
0000034e: DUP4
0000034f: DUP4
00000350: PUSH2 0x06a4
00000353: JUMP
00000354: JUMPDEST
00000355: POP
00000356: POP
00000357: POP
00000358: JUMP
00000359: JUMPDEST
0000035a: PUSH1 0x60
0000035c: PUSH1 0x01
0000035e: DUP1
0000035f: SLOAD
00000360: DUP1
00000361: PUSH1 0x20
00000363: MUL
00000364: PUSH1 0x20
00000366: ADD
00000367: PUSH1 0x40
00000369: MLOAD
0000036a: SWAP1
0000036b: DUP2
0000036c: ADD
0000036d: PUSH1 0x40
0000036f: MSTORE
00000370: DUP1
00000371: SWAP3
00000372: SWAP2
00000373: SWAP1
00000374: DUP2
00000375: DUP2
00000376: MSTORE
00000377: PUSH1 0x20
00000379: ADD
0000037a: DUP3
0000037b: DUP1
0000037c: SLOAD
0000037d: DUP1
0000037e: ISZERO
0000037f: PUSH2 0x03b1
00000382: JUMPI
00000383: PUSH1 0x20
00000385: MUL
00000386: DUP3
00000387: ADD
00000388: SWAP2
00000389: SWAP1
0000038a: PUSH1 0x00
0000038c: MSTORE
0000038d: PUSH1 0x20
0000038f: PUSH1 0x00
00000391: KECCAK256
00000392: SWAP1
00000393: JUMPDEST
00000394: DUP2
00000395: SLOAD
00000396: PUSH1 0x01
00000398: PUSH1 0x01
0000039a: PUSH1 0xa0
0000039c: SHL
0000039d: SUB
0000039e: AND
0000039f: DUP2
000003a0: MSTORE
000003a1: PUSH1 0x01
000003a3: SWAP1
000003a4: SWAP2
000003a5: ADD
000003a6: SWAP1
000003a7: PUSH1 0x20
000003a9: ADD
000003aa: DUP1
000003ab: DUP4
000003ac: GT
000003ad: PUSH2 0x0393
000003b0: JUMPI
000003b1: JUMPDEST
000003b2: POP
000003b3: POP
000003b4: POP
000003b5: POP
000003b6: POP
000003b7: SWAP1
000003b8: POP
000003b9: SWAP1
000003ba: JUMP
000003bb: JUMPDEST
000003bc: PUSH1 0x00
000003be: SLOAD
000003bf: PUSH1 0x01
000003c1: PUSH1 0x01
000003c3: PUSH1 0xa0
000003c5: SHL
000003c6: SUB
000003c7: AND
000003c8: CALLER
000003c9: EQ
000003ca: PUSH2 0x03fd
000003cd: JUMPI
000003ce: PUSH1 0x40
000003d0: MLOAD
000003d1: PUSH3 0x461bcd
000003d5: PUSH1 0xe5
000003d7: SHL
000003d8: DUP2
000003d9: MSTORE
000003da: PUSH1 0x20
000003dc: PUSH1 0x04
000003de: DUP3
000003df: ADD
000003e0: MSTORE
000003e1: PUSH1 0x05
000003e3: PUSH1 0x24
000003e5: DUP3
000003e6: ADD
000003e7: MSTORE
000003e8: PUSH5 0x3430333a4f
000003ee: PUSH1 0xd8
000003f0: SHL
000003f1: PUSH1 0x44
000003f3: DUP3
000003f4: ADD
000003f5: MSTORE
000003f6: PUSH1 0x64
000003f8: ADD
000003f9: PUSH2 0x014c
000003fc: JUMP
000003fd: JUMPDEST
000003fe: PUSH1 0x00
00000400: DUP1
00000401: SLOAD
00000402: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000417: NOT
00000418: AND
00000419: PUSH1 0x01
0000041b: PUSH1 0x01
0000041d: PUSH1 0xa0
0000041f: SHL
00000420: SUB
00000421: SWAP3
00000422: SWAP1
00000423: SWAP3
00000424: AND
00000425: SWAP2
00000426: SWAP1
00000427: SWAP2
00000428: OR
00000429: SWAP1
0000042a: SSTORE
0000042b: JUMP
0000042c: JUMPDEST
0000042d: PUSH1 0x40
0000042f: DUP1
00000430: MLOAD
00000431: PUSH1 0x01
00000433: PUSH1 0x01
00000435: PUSH1 0xa0
00000437: SHL
00000438: SUB
00000439: DUP5
0000043a: DUP2
0000043b: AND
0000043c: PUSH1 0x24
0000043e: DUP4
0000043f: ADD
00000440: MSTORE
00000441: PUSH1 0x44
00000443: DUP1
00000444: DUP4
00000445: ADD
00000446: DUP6
00000447: SWAP1
00000448: MSTORE
00000449: DUP4
0000044a: MLOAD
0000044b: DUP1
0000044c: DUP5
0000044d: SUB
0000044e: SWAP1
0000044f: SWAP2
00000450: ADD
00000451: DUP2
00000452: MSTORE
00000453: PUSH1 0x64
00000455: SWAP1
00000456: SWAP3
00000457: ADD
00000458: SWAP1
00000459: SWAP3
0000045a: MSTORE
0000045b: PUSH1 0x20
0000045d: DUP2
0000045e: ADD
0000045f: DUP1
00000460: MLOAD
00000461: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000047e: AND
0000047f: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000004a0: OR
000004a1: SWAP1
000004a2: MSTORE
000004a3: PUSH2 0x0354
000004a6: SWAP2
000004a7: DUP6
000004a8: SWAP2
000004a9: SWAP1
000004aa: PUSH1 0x00
000004ac: SWAP1
000004ad: PUSH2 0x04b8
000004b0: SWAP1
000004b1: DUP5
000004b2: AND
000004b3: DUP4
000004b4: PUSH2 0x051f
000004b7: JUMP
000004b8: JUMPDEST
000004b9: SWAP1
000004ba: POP
000004bb: DUP1
000004bc: MLOAD
000004bd: PUSH1 0x00
000004bf: EQ
000004c0: ISZERO
000004c1: DUP1
000004c2: ISZERO
000004c3: PUSH2 0x04dd
000004c6: JUMPI
000004c7: POP
000004c8: DUP1
000004c9: DUP1
000004ca: PUSH1 0x20
000004cc: ADD
000004cd: SWAP1
000004ce: MLOAD
000004cf: DUP2
000004d0: ADD
000004d1: SWAP1
000004d2: PUSH2 0x04db
000004d5: SWAP2
000004d6: SWAP1
000004d7: PUSH2 0x08ff
000004da: JUMP
000004db: JUMPDEST
000004dc: ISZERO
000004dd: JUMPDEST
000004de: ISZERO
000004df: PUSH2 0x0354
000004e2: JUMPI
000004e3: PUSH1 0x40
000004e5: MLOAD
000004e6: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000
00000507: DUP2
00000508: MSTORE
00000509: PUSH1 0x01
0000050b: PUSH1 0x01
0000050d: PUSH1 0xa0
0000050f: SHL
00000510: SUB
00000511: DUP5
00000512: AND
00000513: PUSH1 0x04
00000515: DUP3
00000516: ADD
00000517: MSTORE
00000518: PUSH1 0x24
0000051a: ADD
0000051b: PUSH2 0x014c
0000051e: JUMP
0000051f: JUMPDEST
00000520: PUSH1 0x60
00000522: PUSH2 0x052d
00000525: DUP4
00000526: DUP4
00000527: PUSH1 0x00
00000529: PUSH2 0x0534
0000052c: JUMP
0000052d: JUMPDEST
0000052e: SWAP4
0000052f: SWAP3
00000530: POP
00000531: POP
00000532: POP
00000533: JUMP
00000534: JUMPDEST
00000535: PUSH1 0x60
00000537: DUP2
00000538: SELFBALANCE
00000539: LT
0000053a: ISZERO
0000053b: PUSH2 0x0572
0000053e: JUMPI
0000053f: PUSH1 0x40
00000541: MLOAD
00000542: PUSH32 0xcd78605900000000000000000000000000000000000000000000000000000000
00000563: DUP2
00000564: MSTORE
00000565: ADDRESS
00000566: PUSH1 0x04
00000568: DUP3
00000569: ADD
0000056a: MSTORE
0000056b: PUSH1 0x24
0000056d: ADD
0000056e: PUSH2 0x014c
00000571: JUMP
00000572: JUMPDEST
00000573: PUSH1 0x00
00000575: DUP1
00000576: DUP6
00000577: PUSH1 0x01
00000579: PUSH1 0x01
0000057b: PUSH1 0xa0
0000057d: SHL
0000057e: SUB
0000057f: AND
00000580: DUP5
00000581: DUP7
00000582: PUSH1 0x40
00000584: MLOAD
00000585: PUSH2 0x058e
00000588: SWAP2
00000589: SWAP1
0000058a: PUSH2 0x0921
0000058d: JUMP
0000058e: JUMPDEST
0000058f: PUSH1 0x00
00000591: PUSH1 0x40
00000593: MLOAD
00000594: DUP1
00000595: DUP4
00000596: SUB
00000597: DUP2
00000598: DUP6
00000599: DUP8
0000059a: GAS
0000059b: CALL
0000059c: SWAP3
0000059d: POP
0000059e: POP
0000059f: POP
000005a0: RETURNDATASIZE
000005a1: DUP1
000005a2: PUSH1 0x00
000005a4: DUP2
000005a5: EQ
000005a6: PUSH2 0x05cb
000005a9: JUMPI
000005aa: PUSH1 0x40
000005ac: MLOAD
000005ad: SWAP2
000005ae: POP
000005af: PUSH1 0x1f
000005b1: NOT
000005b2: PUSH1 0x3f
000005b4: RETURNDATASIZE
000005b5: ADD
000005b6: AND
000005b7: DUP3
000005b8: ADD
000005b9: PUSH1 0x40
000005bb: MSTORE
000005bc: RETURNDATASIZE
000005bd: DUP3
000005be: MSTORE
000005bf: RETURNDATASIZE
000005c0: PUSH1 0x00
000005c2: PUSH1 0x20
000005c4: DUP5
000005c5: ADD
000005c6: RETURNDATACOPY
000005c7: PUSH2 0x05d0
000005ca: JUMP
000005cb: JUMPDEST
000005cc: PUSH1 0x60
000005ce: SWAP2
000005cf: POP
000005d0: JUMPDEST
000005d1: POP
000005d2: SWAP2
000005d3: POP
000005d4: SWAP2
000005d5: POP
000005d6: PUSH2 0x05e0
000005d9: DUP7
000005da: DUP4
000005db: DUP4
000005dc: PUSH2 0x05ea
000005df: JUMP
000005e0: JUMPDEST
000005e1: SWAP7
000005e2: SWAP6
000005e3: POP
000005e4: POP
000005e5: POP
000005e6: POP
000005e7: POP
000005e8: POP
000005e9: JUMP
000005ea: JUMPDEST
000005eb: PUSH1 0x60
000005ed: DUP3
000005ee: PUSH2 0x05ff
000005f1: JUMPI
000005f2: PUSH2 0x05fa
000005f5: DUP3
000005f6: PUSH2 0x065f
000005f9: JUMP
000005fa: JUMPDEST
000005fb: PUSH2 0x052d
000005fe: JUMP
000005ff: JUMPDEST
00000600: DUP2
00000601: MLOAD
00000602: ISZERO
00000603: DUP1
00000604: ISZERO
00000605: PUSH2 0x0616
00000608: JUMPI
00000609: POP
0000060a: PUSH1 0x01
0000060c: PUSH1 0x01
0000060e: PUSH1 0xa0
00000610: SHL
00000611: SUB
00000612: DUP5
00000613: AND
00000614: EXTCODESIZE
00000615: ISZERO
00000616: JUMPDEST
00000617: ISZERO
00000618: PUSH2 0x0658
0000061b: JUMPI
0000061c: PUSH1 0x40
0000061e: MLOAD
0000061f: PUSH32 0x9996b31500000000000000000000000000000000000000000000000000000000
00000640: DUP2
00000641: MSTORE
00000642: PUSH1 0x01
00000644: PUSH1 0x01
00000646: PUSH1 0xa0
00000648: SHL
00000649: SUB
0000064a: DUP6
0000064b: AND
0000064c: PUSH1 0x04
0000064e: DUP3
0000064f: ADD
00000650: MSTORE
00000651: PUSH1 0x24
00000653: ADD
00000654: PUSH2 0x014c
00000657: JUMP
00000658: JUMPDEST
00000659: POP
0000065a: DUP1
0000065b: PUSH2 0x052d
0000065e: JUMP
0000065f: JUMPDEST
00000660: DUP1
00000661: MLOAD
00000662: ISZERO
00000663: PUSH2 0x066f
00000666: JUMPI
00000667: DUP1
00000668: MLOAD
00000669: DUP1
0000066a: DUP3
0000066b: PUSH1 0x20
0000066d: ADD
0000066e: REVERT
0000066f: JUMPDEST
00000670: PUSH1 0x40
00000672: MLOAD
00000673: PUSH32 0x1425ea4200000000000000000000000000000000000000000000000000000000
00000694: DUP2
00000695: MSTORE
00000696: PUSH1 0x04
00000698: ADD
00000699: PUSH1 0x40
0000069b: MLOAD
0000069c: DUP1
0000069d: SWAP2
0000069e: SUB
0000069f: SWAP1
000006a0: REVERT
000006a1: JUMPDEST
000006a2: POP
000006a3: JUMP
000006a4: JUMPDEST
000006a5: DUP3
000006a6: DUP1
000006a7: SLOAD
000006a8: DUP3
000006a9: DUP3
000006aa: SSTORE
000006ab: SWAP1
000006ac: PUSH1 0x00
000006ae: MSTORE
000006af: PUSH1 0x20
000006b1: PUSH1 0x00
000006b3: KECCAK256
000006b4: SWAP1
000006b5: DUP2
000006b6: ADD
000006b7: SWAP3
000006b8: DUP3
000006b9: ISZERO
000006ba: PUSH2 0x0704
000006bd: JUMPI
000006be: SWAP2
000006bf: PUSH1 0x20
000006c1: MUL
000006c2: DUP3
000006c3: ADD
000006c4: JUMPDEST
000006c5: DUP3
000006c6: DUP2
000006c7: GT
000006c8: ISZERO
000006c9: PUSH2 0x0704
000006cc: JUMPI
000006cd: DUP2
000006ce: SLOAD
000006cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006e4: NOT
000006e5: AND
000006e6: PUSH1 0x01
000006e8: PUSH1 0x01
000006ea: PUSH1 0xa0
000006ec: SHL
000006ed: SUB
000006ee: DUP5
000006ef: CALLDATALOAD
000006f0: AND
000006f1: OR
000006f2: DUP3
000006f3: SSTORE
000006f4: PUSH1 0x20
000006f6: SWAP1
000006f7: SWAP3
000006f8: ADD
000006f9: SWAP2
000006fa: PUSH1 0x01
000006fc: SWAP1
000006fd: SWAP2
000006fe: ADD
000006ff: SWAP1
00000700: PUSH2 0x06c4
00000703: JUMP
00000704: JUMPDEST
00000705: POP
00000706: PUSH2 0x0710
00000709: SWAP3
0000070a: SWAP2
0000070b: POP
0000070c: PUSH2 0x0714
0000070f: JUMP
00000710: JUMPDEST
00000711: POP
00000712: SWAP1
00000713: JUMP
00000714: JUMPDEST
00000715: JUMPDEST
00000716: DUP1
00000717: DUP3
00000718: GT
00000719: ISZERO
0000071a: PUSH2 0x0710
0000071d: JUMPI
0000071e: PUSH1 0x00
00000720: DUP2
00000721: SSTORE
00000722: PUSH1 0x01
00000724: ADD
00000725: PUSH2 0x0715
00000728: JUMP
00000729: JUMPDEST
0000072a: PUSH1 0x00
0000072c: DUP1
0000072d: DUP4
0000072e: PUSH1 0x1f
00000730: DUP5
00000731: ADD
00000732: SLT
00000733: PUSH2 0x073b
00000736: JUMPI
00000737: PUSH1 0x00
00000739: DUP1
0000073a: REVERT
0000073b: JUMPDEST
0000073c: POP
0000073d: DUP2
0000073e: CALLDATALOAD
0000073f: PUSH8 0xffffffffffffffff
00000748: DUP2
00000749: GT
0000074a: ISZERO
0000074b: PUSH2 0x0753
0000074e: JUMPI
0000074f: PUSH1 0x00
00000751: DUP1
00000752: REVERT
00000753: JUMPDEST
00000754: PUSH1 0x20
00000756: DUP4
00000757: ADD
00000758: SWAP2
00000759: POP
0000075a: DUP4
0000075b: PUSH1 0x20
0000075d: DUP3
0000075e: PUSH1 0x05
00000760: SHL
00000761: DUP6
00000762: ADD
00000763: ADD
00000764: GT
00000765: ISZERO
00000766: PUSH2 0x076e
00000769: JUMPI
0000076a: PUSH1 0x00
0000076c: DUP1
0000076d: REVERT
0000076e: JUMPDEST
0000076f: SWAP3
00000770: POP
00000771: SWAP3
00000772: SWAP1
00000773: POP
00000774: JUMP
00000775: JUMPDEST
00000776: PUSH1 0x00
00000778: DUP1
00000779: PUSH1 0x00
0000077b: DUP1
0000077c: PUSH1 0x00
0000077e: DUP1
0000077f: PUSH1 0x60
00000781: DUP8
00000782: DUP10
00000783: SUB
00000784: SLT
00000785: ISZERO
00000786: PUSH2 0x078e
00000789: JUMPI
0000078a: PUSH1 0x00
0000078c: DUP1
0000078d: REVERT
0000078e: JUMPDEST
0000078f: DUP7
00000790: CALLDATALOAD
00000791: PUSH8 0xffffffffffffffff
0000079a: DUP1
0000079b: DUP3
0000079c: GT
0000079d: ISZERO
0000079e: PUSH2 0x07a6
000007a1: JUMPI
000007a2: PUSH1 0x00
000007a4: DUP1
000007a5: REVERT
000007a6: JUMPDEST
000007a7: PUSH2 0x07b2
000007aa: DUP11
000007ab: DUP4
000007ac: DUP12
000007ad: ADD
000007ae: PUSH2 0x0729
000007b1: JUMP
000007b2: JUMPDEST
000007b3: SWAP1
000007b4: SWAP9
000007b5: POP
000007b6: SWAP7
000007b7: POP
000007b8: PUSH1 0x20
000007ba: DUP10
000007bb: ADD
000007bc: CALLDATALOAD
000007bd: SWAP2
000007be: POP
000007bf: DUP1
000007c0: DUP3
000007c1: GT
000007c2: ISZERO
000007c3: PUSH2 0x07cb
000007c6: JUMPI
000007c7: PUSH1 0x00
000007c9: DUP1
000007ca: REVERT
000007cb: JUMPDEST
000007cc: PUSH2 0x07d7
000007cf: DUP11
000007d0: DUP4
000007d1: DUP12
000007d2: ADD
000007d3: PUSH2 0x0729
000007d6: JUMP
000007d7: JUMPDEST
000007d8: SWAP1
000007d9: SWAP7
000007da: POP
000007db: SWAP5
000007dc: POP
000007dd: PUSH1 0x40
000007df: DUP10
000007e0: ADD
000007e1: CALLDATALOAD
000007e2: SWAP2
000007e3: POP
000007e4: DUP1
000007e5: DUP3
000007e6: GT
000007e7: ISZERO
000007e8: PUSH2 0x07f0
000007eb: JUMPI
000007ec: PUSH1 0x00
000007ee: DUP1
000007ef: REVERT
000007f0: JUMPDEST
000007f1: POP
000007f2: PUSH2 0x07fd
000007f5: DUP10
000007f6: DUP3
000007f7: DUP11
000007f8: ADD
000007f9: PUSH2 0x0729
000007fc: JUMP
000007fd: JUMPDEST
000007fe: SWAP8
000007ff: SWAP11
00000800: SWAP7
00000801: SWAP10
00000802: POP
00000803: SWAP5
00000804: SWAP8
00000805: POP
00000806: SWAP3
00000807: SWAP6
00000808: SWAP4
00000809: SWAP5
0000080a: SWAP3
0000080b: POP
0000080c: POP
0000080d: POP
0000080e: JUMP
0000080f: JUMPDEST
00000810: PUSH1 0x00
00000812: DUP1
00000813: PUSH1 0x20
00000815: DUP4
00000816: DUP6
00000817: SUB
00000818: SLT
00000819: ISZERO
0000081a: PUSH2 0x0822
0000081d: JUMPI
0000081e: PUSH1 0x00
00000820: DUP1
00000821: REVERT
00000822: JUMPDEST
00000823: DUP3
00000824: CALLDATALOAD
00000825: PUSH8 0xffffffffffffffff
0000082e: DUP2
0000082f: GT
00000830: ISZERO
00000831: PUSH2 0x0839
00000834: JUMPI
00000835: PUSH1 0x00
00000837: DUP1
00000838: REVERT
00000839: JUMPDEST
0000083a: PUSH2 0x0845
0000083d: DUP6
0000083e: DUP3
0000083f: DUP7
00000840: ADD
00000841: PUSH2 0x0729
00000844: JUMP
00000845: JUMPDEST
00000846: SWAP1
00000847: SWAP7
00000848: SWAP1
00000849: SWAP6
0000084a: POP
0000084b: SWAP4
0000084c: POP
0000084d: POP
0000084e: POP
0000084f: POP
00000850: JUMP
00000851: JUMPDEST
00000852: PUSH1 0x20
00000854: DUP1
00000855: DUP3
00000856: MSTORE
00000857: DUP3
00000858: MLOAD
00000859: DUP3
0000085a: DUP3
0000085b: ADD
0000085c: DUP2
0000085d: SWAP1
0000085e: MSTORE
0000085f: PUSH1 0x00
00000861: SWAP2
00000862: SWAP1
00000863: DUP5
00000864: DUP3
00000865: ADD
00000866: SWAP1
00000867: PUSH1 0x40
00000869: DUP6
0000086a: ADD
0000086b: SWAP1
0000086c: DUP5
0000086d: JUMPDEST
0000086e: DUP2
0000086f: DUP2
00000870: LT
00000871: ISZERO
00000872: PUSH2 0x0892
00000875: JUMPI
00000876: DUP4
00000877: MLOAD
00000878: PUSH1 0x01
0000087a: PUSH1 0x01
0000087c: PUSH1 0xa0
0000087e: SHL
0000087f: SUB
00000880: AND
00000881: DUP4
00000882: MSTORE
00000883: SWAP3
00000884: DUP5
00000885: ADD
00000886: SWAP3
00000887: SWAP2
00000888: DUP5
00000889: ADD
0000088a: SWAP2
0000088b: PUSH1 0x01
0000088d: ADD
0000088e: PUSH2 0x086d
00000891: JUMP
00000892: JUMPDEST
00000893: POP
00000894: SWAP1
00000895: SWAP7
00000896: SWAP6
00000897: POP
00000898: POP
00000899: POP
0000089a: POP
0000089b: POP
0000089c: POP
0000089d: JUMP
0000089e: JUMPDEST
0000089f: PUSH1 0x01
000008a1: PUSH1 0x01
000008a3: PUSH1 0xa0
000008a5: SHL
000008a6: SUB
000008a7: DUP2
000008a8: AND
000008a9: DUP2
000008aa: EQ
000008ab: PUSH2 0x06a1
000008ae: JUMPI
000008af: PUSH1 0x00
000008b1: DUP1
000008b2: REVERT
000008b3: JUMPDEST
000008b4: PUSH1 0x00
000008b6: PUSH1 0x20
000008b8: DUP3
000008b9: DUP5
000008ba: SUB
000008bb: SLT
000008bc: ISZERO
000008bd: PUSH2 0x08c5
000008c0: JUMPI
000008c1: PUSH1 0x00
000008c3: DUP1
000008c4: REVERT
000008c5: JUMPDEST
000008c6: DUP2
000008c7: CALLDATALOAD
000008c8: PUSH2 0x052d
000008cb: DUP2
000008cc: PUSH2 0x089e
000008cf: JUMP
000008d0: JUMPDEST
000008d1: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000008f2: PUSH1 0x00
000008f4: MSTORE
000008f5: PUSH1 0x32
000008f7: PUSH1 0x04
000008f9: MSTORE
000008fa: PUSH1 0x24
000008fc: PUSH1 0x00
000008fe: REVERT
000008ff: JUMPDEST
00000900: PUSH1 0x00
00000902: PUSH1 0x20
00000904: DUP3
00000905: DUP5
00000906: SUB
00000907: SLT
00000908: ISZERO
00000909: PUSH2 0x0911
0000090c: JUMPI
0000090d: PUSH1 0x00
0000090f: DUP1
00000910: REVERT
00000911: JUMPDEST
00000912: DUP2
00000913: MLOAD
00000914: DUP1
00000915: ISZERO
00000916: ISZERO
00000917: DUP2
00000918: EQ
00000919: PUSH2 0x052d
0000091c: JUMPI
0000091d: PUSH1 0x00
0000091f: DUP1
00000920: REVERT
00000921: JUMPDEST
00000922: PUSH1 0x00
00000924: DUP3
00000925: MLOAD
00000926: PUSH1 0x00
00000928: JUMPDEST
00000929: DUP2
0000092a: DUP2
0000092b: LT
0000092c: ISZERO
0000092d: PUSH2 0x0942
00000930: JUMPI
00000931: PUSH1 0x20
00000933: DUP2
00000934: DUP7
00000935: ADD
00000936: DUP2
00000937: ADD
00000938: MLOAD
00000939: DUP6
0000093a: DUP4
0000093b: ADD
0000093c: MSTORE
0000093d: ADD
0000093e: PUSH2 0x0928
00000941: JUMP
00000942: JUMPDEST
00000943: POP
00000944: PUSH1 0x00
00000946: SWAP3
00000947: ADD
00000948: SWAP2
00000949: DUP3
0000094a: MSTORE
0000094b: POP
0000094c: SWAP2
0000094d: SWAP1
0000094e: POP
0000094f: JUMP
00000950: INVALID
00000951: LOG2
00000952: PUSH5 0x6970667358
00000958: UNKNOWN(0x22)
00000959: SLT
0000095a: KECCAK256
0000095b: XOR
0000095c: OR
0000095d: UNKNOWN(0x4E)
0000095e: PUSH29 0x060d60c16eaa8d2621705d3326b2030eaaea0f269d8021e9ff1f4ce564
0000097c: PUSH20

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208
call_targets: 0xa3222357a0eccf60c73606170be6c99adecb59b3
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa3222357a0eccf60c73606170be6c99adecb59b3"
    ],
    "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": "0x0f59f83a",
            "selector": "0x0f59f83a",
            "calldata_variants": [
                "0x0f59f83a",
                "0x0f59f83a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95ddbc58",
            "selector": "0x95ddbc58",
            "calldata_variants": [
                "0x95ddbc58",
                "0x95ddbc580000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1435,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [],
    "untrusted_call_count": 1
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208
call_targets: 0xa3222357a0eccf60c73606170be6c99adecb59b3
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa3222357a0eccf60c73606170be6c99adecb59b3"
    ],
    "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": "0x0f59f83a",
            "selector": "0x0f59f83a",
            "calldata_variants": [
                "0x0f59f83a",
                "0x0f59f83a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95ddbc58",
            "selector": "0x95ddbc58",
            "calldata_variants": [
                "0x95ddbc58",
                "0x95ddbc580000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1435,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}