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

Analysis Run

ba0b9e1b-24cd-4826-9c45-03cd9bb7bc80

complete
Chain ID
1
Address
Block Number
Created
Thu, Jan 1, 2026 9:23 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
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
31135 report.consolidate complete 1 / 1 3 months ago
76624 artifact.fetch complete 1 / 3 2 weeks ago
76625 tool.cast_disasm complete 1 / 3 2 weeks ago
76626 analysis.bundle complete 1 / 3 2 weeks ago
76627 capability.graph complete 1 / 3 2 weeks ago
76628 detector.run complete 1 / 3 2 weeks ago
76629 validation.fork complete 1 / 3 2 weeks 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
No concrete, exploitable profit path identified from the provided runtime bytecode alone.
View stderr
[codex:436453] OpenAI Codex v0.77.0 (research preview)
[codex:436453] --------
[codex:436453] workdir: /tmp/codex-multi-f5h1esxl
[codex:436453] model: gpt-5.2-codex
[codex:436453] provider: openai
[codex:436453] approval: never
[codex:436453] sandbox: read-only
[codex:436453] reasoning effort: xhigh
[codex:436453] reasoning summaries: auto
[codex:436453] session id: 019b7b66-e08b-7441-bd06-41e5220a7fe4
[codex:436453] --------
[codex:436453] user
[codex:436453] 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:436453] 
[codex:436453] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:436453] 
[codex:436453] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:436453] - Gas inefficiency, code quality, or best practices
[codex:436453] - Theoretical vulnerabilities without a clear extraction path
[codex:436453] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:436453] - Issues requiring social engineering or off-chain coordination
[codex:436453] 
[codex:436453] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:436453] - CALL/DELEGATECALL with controllable destination or calldata
[codex:436453] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:436453] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:436453] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:436453] - External calls before state updates (reentrancy)
[codex:436453] - SELFDESTRUCT with controllable beneficiary
[codex:436453] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:436453] 
[codex:436453] For each finding, you MUST explain:
[codex:436453] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:436453] 2. The concrete sequence of transactions to extract value
[codex:436453] 3. Why you believe this is exploitable (not just suspicious)
[codex:436453] 
[codex:436453] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:436453] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:436453] 
[codex:436453] Output MUST be valid JSON matching the provided schema.
[codex:436453] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:436453] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:436453] mcp startup: no servers
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Checking bytecode file presence**
[codex:436453] exec
[codex:436453] /bin/bash -lc ls in /tmp/codex-multi-f5h1esxl succeeded in 6ms:
[codex:436453] BYTECODE_BUNDLE.txt
[codex:436453] codex-output-schema.json
[codex:436453] exec
[codex:436453] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-f5h1esxl succeeded in 5ms:
[codex:436453] Runtime bytecode bundle for best-effort auditing.
[codex:436453] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:436453] 
[codex:436453] FILE: runtime_bytecode.hex
[codex:436453] 0x6080604052600436106100c75760003560e01c8063843b1a0911610074578063c0ee0b8a1161004e578063c0ee0b8a1461077e578063c1278cc514610846578063f0b9e5ba1461088d576100c7565b8063843b1a091461054857806398ad68a71461055d578063bba85f2814610735576100c7565b8063158ef93e116100a5578063158ef93e1461044657806360b5bb3f1461046f5780637db218b714610521576100c7565b806308405166146101505780630adcf4641461019a578063150b7a0214610373575b361561011a576040805162461bcd60e51b815260206004820152601660248201527f6d73672e64617461206973206e6f7420656d7074792e00000000000000000000604482015290519081900360640190fd5b604080513031815290517fc4c14883ae9fd8e26d5d59e3485ed29fd126d781d7e498a4ca5c54c8268e49369181900360200190a1005b34801561015c57600080fd5b5061016561091f565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b3480156101a657600080fd5b50610371600480360360c08110156101bd57600080fd5b6001600160a01b0382358116926020810135926040820135909216918101906080810160608201356401000000008111156101f757600080fd5b82018360208201111561020957600080fd5b8035906020019184602083028401116401000000008311171561022b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561027b57600080fd5b82018360208201111561028d57600080fd5b803590602001918460208302840111640100000000831117156102af57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156102ff57600080fd5b82018360208201111561031157600080fd5b8035906020019184602083028401116401000000008311171561033357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610943945050505050565b005b34801561037f57600080fd5b506101656004803603608081101561039657600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156103d157600080fd5b8201836020820111156103e357600080fd5b8035906020019184600183028401116401000000008311171561040557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c0e945050505050565b34801561045257600080fd5b5061045b610c37565b604080519115158252519081900360200190f35b34801561047b57600080fd5b506103716004803603604081101561049257600080fd5b8101906020810181356401000000008111156104ad57600080fd5b8201836020820111156104bf57600080fd5b803590602001918460208302840111640100000000831117156104e157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610c40915050565b34801561052d57600080fd5b50610536610e6f565b60408051918252519081900360200190f35b34801561055457600080fd5b50610536610e75565b34801561056957600080fd5b50610371600480360360c081101561058057600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156105bb57600080fd5b8201836020820111156105cd57600080fd5b803590602001918460208302840111640100000000831117156105ef57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561063f57600080fd5b82018360208201111561065157600080fd5b8035906020019184602083028401116401000000008311171561067357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106c357600080fd5b8201836020820111156106d557600080fd5b803590602001918460208302840111640100000000831117156106f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e7b945050505050565b34801561074157600080fd5b506105366004803603608081101561075857600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610fb5565b34801561078a57600080fd5b50610371600480360360608110156107a157600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156107d157600080fd5b8201836020820111156107e357600080fd5b8035906020019184600183028401116401000000008311171561080557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611060945050505050565b34801561085257600080fd5b506105366004803603608081101561086957600080fd5b506001600160a01b0381358116916020810135916040820135169060600135611065565b34801561089957600080fd5b50610165600480360360608110156108b057600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156108e057600080fd5b8201836020820111156108f257600080fd5b8035906020019184600183028401116401000000008311171561091457600080fd5b509092509050611112565b7fc0ee0b8a0000000000000000000000000000000000000000000000000000000081565b61095186868686868661113b565b610997576040805162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039b4b3b730ba3ab9329760711b604482015290519081900360640190fd5b6003805460010190556001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610ad1573031851115610a1b576040805162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520746f2073656e642e000000604482015290519081900360640190fd5b6040516000906060906001600160a01b03891690614e2090899085818181858888f193505050503d8060008114610a6e576040519150601f19603f3d011682016040523d82523d6000602084013e610a73565b606091505b509150915081610aca576040805162461bcd60e51b815260206004820152601660248201527f4574686572207472616e73666572206661696c65642e00000000000000000000604482015290519081900360640190fd5b5050610bbc565b604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018890529151869283169163a9059cbb9160448083019260209291908290030181600087803b158015610b3d57600080fd5b505af1158015610b51573d6000803e3d6000fd5b505050506040513d6020811015610b6757600080fd5b5051610bba576040805162461bcd60e51b815260206004820152601660248201527f546f6b656e207472616e73666572206661696c65642e00000000000000000000604482015290519081900360640190fd5b505b604080516001600160a01b0380891682526020820188905286168183015290517f5a41af68171a76546ae6bd5ae4bc21a429cf8704319e9a5bff7829f9cb959dd59181900360600190a1505050505050565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b60005460ff1681565b60005460ff1615610c825760405162461bcd60e51b815260040180806020018281038252602b8152602001806118d3602b913960400191505060405180910390fd5b6000805b8351811015610db157816001600160a01b0316848281518110610ca557fe5b60200260200101516001600160a01b03161415610cf35760405162461bcd60e51b81526004018080602001828103825260258152602001806118346025913960400191505060405180910390fd5b60016000858381518110610d0357fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615610d665760405162461bcd60e51b81526004018080602001828103825260218152602001806117c76021913960400191505060405180910390fd5b6001806000868481518110610d7757fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610c86565b5060008211610df15760405162461bcd60e51b815260040180806020018281038252602681526020018061188c6026913960400191505060405180910390fd5b8251821115610e315760405162461bcd60e51b815260040180806020018281038252602881526020018061180c6028913960400191505060405180910390fd5b60048290556000805460ff191660011781556040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c89190a1505050565b60045481565b60035481565b610e89868686868686611306565b610ecf576040805162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039b4b3b730ba3ab9329760711b604482015290519081900360640190fd5b600380546001019055604080517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03888116602483015260448201879052915187928316916342842e0e91606480830192600092919082900301818387803b158015610f4957600080fd5b505af1158015610f5d573d6000803e3d6000fd5b5050604080516001600160a01b03808c1682528a16602082015280820189905290517fc18352ae46a2296c951b2256c5ebc5b4546e6222fea2e4f36e824db9d44eb7ec9350908190036060019150a150505050505050565b60006001600160a01b038516301415610fff5760405162461bcd60e51b81526004018080602001828103825260248152602001806117e86024913960400191505060405180910390fd5b506040805130606090811b6020808401919091526bffffffffffffffffffffffff1997821b8816603484015295901b9095166048860152605c850192909252607c8085019190915281518085039091018152609c9093019052815191012090565b505050565b60006001600160a01b0385163014156110af5760405162461bcd60e51b81526004018080602001828103825260248152602001806117e86024913960400191505060405180910390fd5b506040805130606090811b6020808401919091526bffffffffffffffffffffffff1997821b8816603484015260488301969096529390931b9094166068830152607c8083019190915283518083039091018152609c909101909252815191012090565b7ff0b9e5ba00000000000000000000000000000000000000000000000000000000949350505050565b60008061114988888861147d565b9050600454855114801561115f57506004548451145b801561116d57506004548351145b6111a85760405162461bcd60e51b81526004018080602001828103825260338152602001806118596033913960400191505060405180910390fd5b60606004546040519080825280602002602001820160405280156111d6578160200160208202803883390190505b50905060005b6004548110156112b2576001838883815181106111f557fe5b602002602001015188848151811061120957fe5b602002602001015188858151811061121d57fe5b602002602001015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561127c573d6000803e3d6000fd5b5050506020604051035182828151811061129257fe5b6001600160a01b03909216602092830291909101909101526001016111dc565b506112bc81611540565b6112f75760405162461bcd60e51b81526004018080602001828103825260218152602001806118b26021913960400191505060405180910390fd5b50600198975050505050505050565b6000806113148888886117b5565b9050600454855114801561132a57506004548451145b801561133857506004548351145b6113735760405162461bcd60e51b81526004018080602001828103825260338152602001806118596033913960400191505060405180910390fd5b60606004546040519080825280602002602001820160405280156113a1578160200160208202803883390190505b50905060005b6004548110156112b2576001838883815181106113c057fe5b60200260200101518884815181106113d457fe5b60200260200101518885815181106113e857fe5b602002602001015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611447573d6000803e3d6000fd5b5050506020604051035182828151811061145d57fe5b6001600160a01b03909216602092830291909101909101526001016113a7565b60008061148e858585600354611065565b905060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905080826040516020018083805190602001908083835b602083106114fe5780518252601f1990920191602091820191016114df565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381529382019052825192019190912098975050505050505050565b6000600454825114611599576040805162461bcd60e51b815260206004820152601960248201527f496e76616c6964206e756d626572206f66207369676e65722e00000000000000604482015290519081900360640190fd5b60005b825181101561175c5760006001600160a01b03168382815181106115bc57fe5b60200260200101516001600160a01b03161415611615576040805162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039b4b3b730ba3ab9329760711b604482015290519081900360640190fd5b6001600084838151811061162557fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1661169d576040805162461bcd60e51b815260206004820152601960248201527f5369676e6572206d75737420626520746865206f776e65722e00000000000000604482015290519081900360640190fd5b600260008483815181106116ad57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156117105760405162461bcd60e51b81526004018080602001828103825260218152602001806118b26021913960400191505060405180910390fd5b60016002600085848151811061172257fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161159c565b5060005b82518110156117ac576002600084838151811061177957fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169055600101611760565b50600192915050565b60008061148e858585600354610fb556fe4f776e657273206d75737420626520646966666572656e7420616464726573732e44657374696e6174696f6e2063616e6e6f74206265207468697320636f6e74726163742e5369676e65724e756d2063616e6e6f742062652067726561746572207468616e206f776e6572732e4f776e657220616464726573732063616e6e6f74206265207a65726f20616464726573732e4d65737361676520776173206e6f74207369676e656420627920656e6f756768206e756d626572206f66207369676e6572732e5369676e65724e756d2068617320746f2062652067726561746572207468616e207a65726f2e5369676e696e67206f776e657273206d75737420626520646966666572656e742e5468697320636f6e74726163742068617320616c7265616479206265656e20696e697469616c697a65642ea265627a7a72315820388891321ac8cf4cab66078b69511318bcf98bd425840f91dfd7404b78b1f7b764736f6c634300050c0032
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing bytecode for multisig vulnerabilities**
[codex:436453] 
[codex:436453] I'm examining the bytecode to see if it resembles a multisig wallet like Gnosis Safe, focusing on initialization guards and function selectors for possible exploits. I'll try a manual disassembly approach using Python scripts to decode opcodes and interpret the contract’s behavior, especially looking for unprotected initialization or unauthorized ETH transfers.
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # opcode table
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start=0, end=None):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     code_len=len(code) if end is None else min(end,len(code))
[codex:436453]     while i<code_len:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op, f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     return out
[codex:436453] 
[codex:436453] # Let's disassemble first 0x200 bytes for dispatcher.
[codex:436453] for off,name,data in disasm(0,0x200):
[codex:436453]     if data:
[codex:436453]         print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]     else:
[codex:436453]         print(f\"{off:04x}: {name}\")
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 20ms:
[codex:436453] 0000: PUSH1 0x80
[codex:436453] 0002: PUSH1 0x40
[codex:436453] 0004: MSTORE
[codex:436453] 0005: PUSH1 0x04
[codex:436453] 0007: CALLDATASIZE
[codex:436453] 0008: LT
[codex:436453] 0009: PUSH2 0x00c7
[codex:436453] 000c: JUMPI
[codex:436453] 000d: PUSH1 0x00
[codex:436453] 000f: CALLDATALOAD
[codex:436453] 0010: PUSH1 0xe0
[codex:436453] 0012: SHR
[codex:436453] 0013: DUP1
[codex:436453] 0014: PUSH4 0x843b1a09
[codex:436453] 0019: GT
[codex:436453] 001a: PUSH2 0x0074
[codex:436453] 001d: JUMPI
[codex:436453] 001e: DUP1
[codex:436453] 001f: PUSH4 0xc0ee0b8a
[codex:436453] 0024: GT
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Mapping functions by behavior**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start=0,end=None):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     code_len=len(code) if end is None else min(end,len(code))
[codex:436453]     while i<code_len:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     return out
[codex:436453] 
[codex:436453] # disassemble around 0x091f to 0x0c80
[codex:436453] for off,name,data in disasm(0x0900,0x0d00):
[codex:436453]     if data:
[codex:436453]         print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]     else:
[codex:436453]         print(f\"{off:04x}: {name}\")
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 21ms:
[codex:436453] 0900: ADD
[codex:436453] 0901: GT
[codex:436453] 0902: PUSH5 0x0100000000
[codex:436453] 0908: DUP4
[codex:436453] 0909: GT
[codex:436453] 090a: OR
[codex:436453] 090b: ISZERO
[codex:436453] 090c: PUSH2 0x0914
[codex:436453] 090f: JUMPI
[codex:436453] 0910: PUSH1 0x00
[codex:436453] 0912: DUP1
[codex:436453] 0913: REVERT
[codex:436453] 0914: JUMPDEST
[codex:436453] 0915: POP
[codex:436453] 0916: SWAP1
[codex:436453] 0917: SWAP3
[codex:436453] 0918: POP
[codex:436453] 0919: SWAP1
[codex:436453] 091a: POP
[codex:436453] 091b: PUSH2 0x1112
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing initialization function and input parsing**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start=0,end=None):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     code_len=len(code) if end is None else min(end,len(code))
[codex:436453]     while i<code_len:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     return out
[codex:436453] 
[codex:436453] for off,name,data in disasm(0x0420,0x0500):
[codex:436453]     if data:
[codex:436453]         print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]     else:
[codex:436453]         print(f\"{off:04x}: {name}\")
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 20ms:
[codex:436453] 0420: SWAP4
[codex:436453] 0421: SWAP3
[codex:436453] 0422: SWAP2
[codex:436453] 0423: SWAP1
[codex:436453] 0424: DUP2
[codex:436453] 0425: DUP2
[codex:436453] 0426: MSTORE
[codex:436453] 0427: PUSH1 0x20
[codex:436453] 0429: ADD
[codex:436453] 042a: DUP4
[codex:436453] 042b: DUP4
[codex:436453] 042c: DUP1
[codex:436453] 042d: DUP3
[codex:436453] 042e: DUP5
[codex:436453] 042f: CALLDATACOPY
[codex:436453] 0430: PUSH1 0x00
[codex:436453] 0432: SWAP3
[codex:436453] 0433: ADD
[codex:436453] 0434: SWAP2
[codex:436453] 0435: SWAP1
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing contract functions and events**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start=0,end=None):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     code_len=len(code) if end is None else min(end,len(code))
[codex:436453]     while i<code_len:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     return out
[codex:436453] 
[codex:436453] for off,name,data in disasm(0x0e40,0x1000):
[codex:436453]     if data:
[codex:436453]         print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]     else:
[codex:436453]         print(f\"{off:04x}: {name}\")
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 18ms:
[codex:436453] 0e40: ADD
[codex:436453] 0e41: OR
[codex:436453] 0e42: DUP2
[codex:436453] 0e43: SSTORE
[codex:436453] 0e44: PUSH1 0x40
[codex:436453] 0e46: MLOAD
[codex:436453] 0e47: PUSH32 0x5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c8
[codex:436453] 0e68: SWAP2
[codex:436453] 0e69: SWAP1
[codex:436453] 0e6a: LOG1
[codex:436453] 0e6b: POP
[codex:436453] 0e6c: POP
[codex:436453] 0e6d: POP
[codex:436453] 0e6e: JUMP
[codex:436453] 0e6f: JUMPDEST
[codex:436453] 0e70: PUSH1 0x04
[codex:436453] 0e72: SLOAD
[codex:436453] 0e73: DUP2
[codex:436453] 0e74: JUMP
[codex:436453] 0e75: JUMPDEST
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing contract address validation and signature hashing**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start=0,end=None):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     code_len=len(code) if end is None else min(end,len(code))
[codex:436453]     while i<code_len:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     return out
[codex:436453] 
[codex:436453] for off,name,data in disasm(0x0fb0,0x1200):
[codex:436453]     if data:
[codex:436453]         print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]     else:
[codex:436453]         print(f\"{off:04x}: {name}\")
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 19ms:
[codex:436453] 0fb0: POP
[codex:436453] 0fb1: POP
[codex:436453] 0fb2: POP
[codex:436453] 0fb3: POP
[codex:436453] 0fb4: JUMP
[codex:436453] 0fb5: JUMPDEST
[codex:436453] 0fb6: PUSH1 0x00
[codex:436453] 0fb8: PUSH1 0x01
[codex:436453] 0fba: PUSH1 0x01
[codex:436453] 0fbc: PUSH1 0xa0
[codex:436453] 0fbe: SHL
[codex:436453] 0fbf: SUB
[codex:436453] 0fc0: DUP6
[codex:436453] 0fc1: AND
[codex:436453] 0fc2: ADDRESS
[codex:436453] 0fc3: EQ
[codex:436453] 0fc4: ISZERO
[codex:436453] 0fc5: PUSH2 0x0fff
[codex:436453] 0fc8: JUMPI
[codex:436453] 0fc9: PUSH1 0x40
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Investigating ecrecover usage in contract**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # find STATICCALL op (0xfa)
[codex:436453] positions=[i for i,b in enumerate(code) if b==0xfa]
[codex:436453] print('STATICCALL positions:', [hex(p) for p in positions])
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 17ms:
[codex:436453] STATICCALL positions: ['0x126b', '0x1436']
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Investigating staticcall usage**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # disassemble around 0x1240-0x1290 and 0x1410-0x1460
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     for off,name,data in out:
[codex:436453]         if data:
[codex:436453]             print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]         else:
[codex:436453]             print(f\"{off:04x}: {name}\")
[codex:436453] 
[codex:436453] print('--- around 0x1230 ---')
[codex:436453] disasm(0x1230,0x1290)
[codex:436453] print('--- around 0x1410 ---')
[codex:436453] disasm(0x1410,0x1470)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 18ms:
[codex:436453] --- around 0x1230 ---
[codex:436453] 1230: PUSH1 0x40
[codex:436453] 1232: MSTORE
[codex:436453] 1233: PUSH1 0x40
[codex:436453] 1235: MLOAD
[codex:436453] 1236: DUP1
[codex:436453] 1237: DUP6
[codex:436453] 1238: DUP2
[codex:436453] 1239: MSTORE
[codex:436453] 123a: PUSH1 0x20
[codex:436453] 123c: ADD
[codex:436453] 123d: DUP5
[codex:436453] 123e: PUSH1 0xff
[codex:436453] 1240: AND
[codex:436453] 1241: PUSH1 0xff
[codex:436453] 1243: AND
[codex:436453] 1244: DUP2
[codex:436453] 1245: MSTORE
[codex:436453] 1246: PUSH1 0x20
[codex:436453] 1248: ADD
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing multisig nonce and signature validation**
[codex:436453] 
[codex:436453] I'm piecing together how the contract manages nonces and signatures, focusing on storage slots 3 and 4 that seem to hold nonce and threshold. The `execTransaction` function increments slot3 before calling ETH or token transfers, hinting slot3 is a transaction nonce. I'm verifying if signature hashes include the nonce or other critical data to rule out replay risks. The complex hashing functions appear to build structured data for signature verification, so I want to map which selectors relate to those functions to trace signer verification thoroughly.
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     for off,name,data in out:
[codex:436453]         if data:
[codex:436453]             print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]         else:
[codex:436453]             print(f\"{off:04x}: {name}\")
[codex:436453] 
[codex:436453] print('--- around 0x0330-0x03a0 ---')
[codex:436453] disasm(0x0330,0x03a0)
[codex:436453] print('--- around 0x03a0-0x0446 ---')
[codex:436453] disasm(0x03a0,0x0446)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 18ms:
[codex:436453] --- around 0x0330-0x03a0 ---
[codex:436453] 0330: STOP
[codex:436453] 0331: DUP1
[codex:436453] 0332: REVERT
[codex:436453] 0333: JUMPDEST
[codex:436453] 0334: SWAP2
[codex:436453] 0335: SWAP1
[codex:436453] 0336: DUP1
[codex:436453] 0337: DUP1
[codex:436453] 0338: PUSH1 0x20
[codex:436453] 033a: MUL
[codex:436453] 033b: PUSH1 0x20
[codex:436453] 033d: ADD
[codex:436453] 033e: PUSH1 0x40
[codex:436453] 0340: MLOAD
[codex:436453] 0341: SWAP1
[codex:436453] 0342: DUP2
[codex:436453] 0343: ADD
[codex:436453] 0344: PUSH1 0x40
[codex:436453] 0346: MSTORE
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing ERC721 receiver and signature checks**
[codex:436453] 
[codex:436453] I'm examining the function that returns the constant selector 0x150b7a02, which matches `onERC721Received` from ERC721Receiver, confirming the contract supports receiving NFTs. I'm also carefully tracing functions related to token transfers, focusing on where signature checks happen to ensure authorization before executing transfers. I want to make sure no token transfer functions bypass signature verification, while also checking for nonce usage to protect against replay attacks or reentrancy issues. This involves mapping storage updates and calls to signature verification routines.
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # find SSTORE op (0x55)
[codex:436453] positions=[i for i,b in enumerate(code) if b==0x55]
[codex:436453] print('SSTORE positions:', [hex(p) for p in positions])
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 19ms:
[codex:436453] SSTORE positions: ['0x9a0', '0xda9', '0xe36', '0xe43', '0xed8', '0x1754', '0x17a4']
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing SSTORE positions**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     for off,name,data in out:
[codex:436453]         if data:
[codex:436453]             print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]         else:
[codex:436453]             print(f\"{off:04x}: {name}\")
[codex:436453] 
[codex:436453] print('--- around 0xd70-0xdf0 ---')
[codex:436453] disasm(0xd70,0xdf0)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 20ms:
[codex:436453] --- around 0xd70-0xdf0 ---
[codex:436453] 0d70: DUP2
[codex:436453] 0d71: LT
[codex:436453] 0d72: PUSH2 0x0d77
[codex:436453] 0d75: JUMPI
[codex:436453] 0d76: INVALID
[codex:436453] 0d77: JUMPDEST
[codex:436453] 0d78: PUSH1 0x20
[codex:436453] 0d7a: SWAP1
[codex:436453] 0d7b: DUP2
[codex:436453] 0d7c: MUL
[codex:436453] 0d7d: SWAP2
[codex:436453] 0d7e: SWAP1
[codex:436453] 0d7f: SWAP2
[codex:436453] 0d80: ADD
[codex:436453] 0d81: DUP2
[codex:436453] 0d82: ADD
[codex:436453] 0d83: MLOAD
[codex:436453] 0d84: PUSH1 0x01
[codex:436453] 0d86: PUSH1 0x01
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing owner initialization logic**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     out=[]
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             out.append((i,name,data.hex()))
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             out.append((i,name,''))
[codex:436453]             i+=1
[codex:436453]     for off,name,data in out:
[codex:436453]         if data:
[codex:436453]             print(f\"{off:04x}: {name} 0x{data}\")
[codex:436453]         else:
[codex:436453]             print(f\"{off:04x}: {name}\")
[codex:436453] 
[codex:436453] print('--- around 0xe20-0xe90 ---')
[codex:436453] disasm(0xe20,0xe90)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 20ms:
[codex:436453] --- around 0xe20-0xe90 ---
[codex:436453] 0e20: OP28
[codex:436453] 0e21: SWAP2
[codex:436453] 0e22: CODECOPY
[codex:436453] 0e23: PUSH1 0x40
[codex:436453] 0e25: ADD
[codex:436453] 0e26: SWAP2
[codex:436453] 0e27: POP
[codex:436453] 0e28: POP
[codex:436453] 0e29: PUSH1 0x40
[codex:436453] 0e2b: MLOAD
[codex:436453] 0e2c: DUP1
[codex:436453] 0e2d: SWAP2
[codex:436453] 0e2e: SUB
[codex:436453] 0e2f: SWAP1
[codex:436453] 0e30: REVERT
[codex:436453] 0e31: JUMPDEST
[codex:436453] 0e32: PUSH1 0x04
[codex:436453] 0e34: DUP3
[codex:436453] 0e35: SWAP1
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing initialization and potential vulnerability**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] positions=[i for i,b in enumerate(code) if b==0xff]
[codex:436453] print('SELFDESTRUCT positions:', positions)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 18ms:
[codex:436453] SELFDESTRUCT positions: [363, 364, 365, 366, 761, 3062, 3132, 3141, 3369, 3486, 3644, 4039, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4671, 4674, 5130, 5133, 5707, 5843, 5961, 6048]
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Searching for SELFDESTRUCT opcode**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] # full disasm to find actual SELFDESTRUCT opcodes
[codex:436453] res=[]
[codex:436453] i=0
[codex:436453] while i<len(code):
[codex:436453]     op=code[i]
[codex:436453]     name=opnames.get(op)
[codex:436453]     if op==0xff:
[codex:436453]         res.append(i)
[codex:436453]         i+=1
[codex:436453]     elif 0x60<=op<=0x7f:
[codex:436453]         i+=1+(op-0x5f)
[codex:436453]     else:
[codex:436453]         i+=1
[codex:436453] 
[codex:436453] print('Actual SELFDESTRUCT opcodes at:', [hex(x) for x in res])
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 21ms:
[codex:436453] Actual SELFDESTRUCT opcodes at: []
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Checking for DELEGATECALL usage**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] positions=[i for i,b in enumerate(code) if b==0xf4]
[codex:436453] print('DELEGATECALL positions:', [hex(p) for p in positions])
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 17ms:
[codex:436453] DELEGATECALL positions: ['0xb5']
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Investigating DELEGATECALL location**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] # show around 0xa0-0xc0
[codex:436453] disasm(0x00a0,0x00c5)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 17ms:
[codex:436453] 00a0: JUMPI
[codex:436453] 00a1: PUSH2 0x00c7
[codex:436453] 00a4: JUMP
[codex:436453] 00a5: JUMPDEST
[codex:436453] 00a6: DUP1
[codex:436453] 00a7: PUSH4 0x08405166
[codex:436453] 00ac: EQ
[codex:436453] 00ad: PUSH2 0x0150
[codex:436453] 00b0: JUMPI
[codex:436453] 00b1: DUP1
[codex:436453] 00b2: PUSH4 0x0adcf464
[codex:436453] 00b7: EQ
[codex:436453] 00b8: PUSH2 0x019a
[codex:436453] 00bb: JUMPI
[codex:436453] 00bc: DUP1
[codex:436453] 00bd: PUSH4 0x150b7a02
[codex:436453] 00c2: EQ
[codex:436453] 00c3: PUSH2 0x0373
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Verifying presence of delegatecall opcode**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # find actual DELEGATECALL opcodes (0xf4) not in push data
[codex:436453] ops=[]
[codex:436453] i=0
[codex:436453] while i<len(code):
[codex:436453]     op=code[i]
[codex:436453]     if op==0xf4:
[codex:436453]         ops.append(i)
[codex:436453]         i+=1
[codex:436453]     elif 0x60<=op<=0x7f:
[codex:436453]         i+=1+(op-0x5f)
[codex:436453]     else:
[codex:436453]         i+=1
[codex:436453] print('Actual DELEGATECALL ops:', [hex(x) for x in ops])
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 19ms:
[codex:436453] Actual DELEGATECALL ops: []
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing storage and signature checks**
[codex:436453] 
[codex:436453] I'm piecing together how the contract handles storage slots for owners, signer thresholds, and nonces while verifying signatures and preventing replays. I want to confirm which slots track owner count, signer thresholds, and nonces by examining SLOAD and SSTORE patterns alongside error messages and function selectors to understand their roles better.
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x0510-0x0535 ---')
[codex:436453] disasm(0x0510,0x0535)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 20ms:
[codex:436453] --- around 0x0510-0x0535 ---
[codex:436453] 0510: MSTORE
[codex:436453] 0511: POP
[codex:436453] 0512: SWAP3
[codex:436453] 0513: SWAP6
[codex:436453] 0514: POP
[codex:436453] 0515: POP
[codex:436453] 0516: SWAP2
[codex:436453] 0517: CALLDATALOAD
[codex:436453] 0518: SWAP3
[codex:436453] 0519: POP
[codex:436453] 051a: PUSH2 0x0c40
[codex:436453] 051d: SWAP2
[codex:436453] 051e: POP
[codex:436453] 051f: POP
[codex:436453] 0520: JUMP
[codex:436453] 0521: JUMPDEST
[codex:436453] 0522: CALLVALUE
[codex:436453] 0523: DUP1
[codex:436453] 0524: ISZERO
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing function selectors and return values**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x0540-0x0565 ---')
[codex:436453] disasm(0x0540,0x0565)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 19ms:
[codex:436453] --- around 0x0540-0x0565 ---
[codex:436453] 0540: DUP2
[codex:436453] 0541: SWAP1
[codex:436453] 0542: SUB
[codex:436453] 0543: PUSH1 0x20
[codex:436453] 0545: ADD
[codex:436453] 0546: SWAP1
[codex:436453] 0547: RETURN
[codex:436453] 0548: JUMPDEST
[codex:436453] 0549: CALLVALUE
[codex:436453] 054a: DUP1
[codex:436453] 054b: ISZERO
[codex:436453] 054c: PUSH2 0x0554
[codex:436453] 054f: JUMPI
[codex:436453] 0550: PUSH1 0x00
[codex:436453] 0552: DUP1
[codex:436453] 0553: REVERT
[codex:436453] 0554: JUMPDEST
[codex:436453] 0555: POP
[codex:436453] 0556: PUSH2 0x0536
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing function calls and storage slots**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x055d-0x05c5 ---')
[codex:436453] disasm(0x055d,0x05c5)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 18ms:
[codex:436453] --- around 0x055d-0x05c5 ---
[codex:436453] 055d: JUMPDEST
[codex:436453] 055e: CALLVALUE
[codex:436453] 055f: DUP1
[codex:436453] 0560: ISZERO
[codex:436453] 0561: PUSH2 0x0569
[codex:436453] 0564: JUMPI
[codex:436453] 0565: PUSH1 0x00
[codex:436453] 0567: DUP1
[codex:436453] 0568: REVERT
[codex:436453] 0569: JUMPDEST
[codex:436453] 056a: POP
[codex:436453] 056b: PUSH2 0x0371
[codex:436453] 056e: PUSH1 0x04
[codex:436453] 0570: DUP1
[codex:436453] 0571: CALLDATASIZE
[codex:436453] 0572: SUB
[codex:436453] 0573: PUSH1 0xc0
[codex:436453] 0575: DUP2
[codex:436453] 0576: LT
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Identifying function by selector**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # simple disasm around 0x0700-0x0750
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x0730-0x0770 ---')
[codex:436453] disasm(0x0730,0x0770)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 19ms:
[codex:436453] --- around 0x0730-0x0770 ---
[codex:436453] 0730: POP
[codex:436453] 0731: POP
[codex:436453] 0732: POP
[codex:436453] 0733: POP
[codex:436453] 0734: JUMP
[codex:436453] 0735: JUMPDEST
[codex:436453] 0736: CALLVALUE
[codex:436453] 0737: DUP1
[codex:436453] 0738: ISZERO
[codex:436453] 0739: PUSH2 0x0741
[codex:436453] 073c: JUMPI
[codex:436453] 073d: PUSH1 0x00
[codex:436453] 073f: DUP1
[codex:436453] 0740: REVERT
[codex:436453] 0741: JUMPDEST
[codex:436453] 0742: POP
[codex:436453] 0743: PUSH2 0x0536
[codex:436453] 0746: PUSH1 0x04
[codex:436453] 0748: DUP1
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing contract functions and signature verification**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x1470-0x1520 ---')
[codex:436453] disasm(0x1470,0x1520)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 20ms:
[codex:436453] --- around 0x1470-0x1520 ---
[codex:436453] 1470: SWAP2
[codex:436453] 1471: ADD
[codex:436453] 1472: SWAP1
[codex:436453] 1473: SWAP2
[codex:436453] 1474: ADD
[codex:436453] 1475: MSTORE
[codex:436453] 1476: PUSH1 0x01
[codex:436453] 1478: ADD
[codex:436453] 1479: PUSH2 0x13a7
[codex:436453] 147c: JUMP
[codex:436453] 147d: JUMPDEST
[codex:436453] 147e: PUSH1 0x00
[codex:436453] 1480: DUP1
[codex:436453] 1481: PUSH2 0x148e
[codex:436453] 1484: DUP6
[codex:436453] 1485: DUP6
[codex:436453] 1486: DUP6
[codex:436453] 1487: PUSH1 0x03
[codex:436453] 1489: SLOAD
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing signature and access controls**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # find CALLER op (0x33) positions (not in push data)
[codex:436453] ops=[]
[codex:436453] i=0
[codex:436453] while i<len(code):
[codex:436453]     op=code[i]
[codex:436453]     if op==0x33:
[codex:436453]         ops.append(i)
[codex:436453]         i+=1
[codex:436453]     elif 0x60<=op<=0x7f:
[codex:436453]         i+=1+(op-0x5f)
[codex:436453]     else:
[codex:436453]         i+=1
[codex:436453] print('CALLER ops:', [hex(x) for x in ops])
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 21ms:
[codex:436453] CALLER ops: []
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing contract security and signature checks**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x16f0-0x17c0 ---')
[codex:436453] disasm(0x16f0,0x17c0)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 19ms:
[codex:436453] --- around 0x16f0-0x17c0 ---
[codex:436453] 16f0: SUB
[codex:436453] 16f1: DUP3
[codex:436453] 16f2: MSTORE
[codex:436453] 16f3: PUSH1 0x21
[codex:436453] 16f5: DUP2
[codex:436453] 16f6: MSTORE
[codex:436453] 16f7: PUSH1 0x20
[codex:436453] 16f9: ADD
[codex:436453] 16fa: DUP1
[codex:436453] 16fb: PUSH2 0x18b2
[codex:436453] 16fe: PUSH1 0x21
[codex:436453] 1700: SWAP2
[codex:436453] 1701: CODECOPY
[codex:436453] 1702: PUSH1 0x40
[codex:436453] 1704: ADD
[codex:436453] 1705: SWAP2
[codex:436453] 1706: POP
[codex:436453] 1707: POP
[codex:436453] 1708: PUSH1 0x40
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing signer mapping and signature verification**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x0840-0x08c0 ---')
[codex:436453] disasm(0x0840,0x08c0)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 30ms:
[codex:436453] --- around 0x0840-0x08c0 ---
[codex:436453] 0840: POP
[codex:436453] 0841: POP
[codex:436453] 0842: POP
[codex:436453] 0843: POP
[codex:436453] 0844: POP
[codex:436453] 0845: JUMP
[codex:436453] 0846: JUMPDEST
[codex:436453] 0847: CALLVALUE
[codex:436453] 0848: DUP1
[codex:436453] 0849: ISZERO
[codex:436453] 084a: PUSH2 0x0852
[codex:436453] 084d: JUMPI
[codex:436453] 084e: PUSH1 0x00
[codex:436453] 0850: DUP1
[codex:436453] 0851: REVERT
[codex:436453] 0852: JUMPDEST
[codex:436453] 0853: POP
[codex:436453] 0854: PUSH2 0x0536
[codex:436453] 0857: PUSH1 0x04
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing smart contract functions and storage**
[codex:436453] exec
[codex:436453] /bin/bash -lc "python - <<'PY'
[codex:436453] import binascii
[codex:436453] bytecode=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:436453] code=bytes.fromhex(bytecode)
[codex:436453] # disassemble around 0x1120-0x1300
[codex:436453] opnames={
[codex:436453] 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:436453] 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:436453] 0x20:'SHA3',
[codex:436453] 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:436453] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:436453] 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:436453] 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:436453] 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:436453] 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:436453] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:436453] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:436453] }
[codex:436453] 
[codex:436453] def disasm(start,end):
[codex:436453]     i=start
[codex:436453]     while i<end:
[codex:436453]         op=code[i]
[codex:436453]         name=opnames.get(op,f'OP{op:02x}')
[codex:436453]         if 0x60<=op<=0x7f:
[codex:436453]             n=op-0x5f
[codex:436453]             data=code[i+1:i+1+n]
[codex:436453]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:436453]             i+=1+n
[codex:436453]         else:
[codex:436453]             print(f\"{i:04x}: {name}\")
[codex:436453]             i+=1
[codex:436453] 
[codex:436453] print('--- around 0x1120-0x12f0 ---')
[codex:436453] disasm(0x1120,0x12f0)
[codex:436453] PY" in /tmp/codex-multi-f5h1esxl succeeded in 27ms:
[codex:436453] --- around 0x1120-0x12f0 ---
[codex:436453] 1120: STOP
[codex:436453] 1121: STOP
[codex:436453] 1122: STOP
[codex:436453] 1123: STOP
[codex:436453] 1124: STOP
[codex:436453] 1125: STOP
[codex:436453] 1126: STOP
[codex:436453] 1127: STOP
[codex:436453] 1128: STOP
[codex:436453] 1129: STOP
[codex:436453] 112a: STOP
[codex:436453] 112b: STOP
[codex:436453] 112c: STOP
[codex:436453] 112d: STOP
[codex:436453] 112e: STOP
[codex:436453] 112f: STOP
[codex:436453] 1130: STOP
[codex:436453] 1131: STOP
[codex:436453] 1132: STOP
[codex:436453] 
[codex:436453] thinking
[codex:436453] **Analyzing signature verification logic**
[codex:436453] 
[codex:436453] I'm carefully examining how the contract checks signer arrays and verifies signatures, ensuring no exploitable paths exist, and preparing a JSON response affirming no concrete vulnerabilities found after thorough bytecode review.
[codex:436453] codex
[codex:436453] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from the provided runtime bytecode alone.","findings":[]}
[codex:436453] tokens used
[codex:436453] 119,402
[codex:436453] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from the provided runtime bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-01T21:23:51.734993+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable profit path identified from the provided runtime bytecode alone.",
    "raw_final": {
        "summary": "No concrete, exploitable profit path identified from the provided runtime 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)
5
EXT*/BALANCE
4
Total opcodes
4223
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 0x00c7
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x843b1a09
00000019: GT
0000001a: PUSH2 0x0074
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xc0ee0b8a
00000024: GT
00000025: PUSH2 0x004e
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xc0ee0b8a
0000002f: EQ
00000030: PUSH2 0x077e
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xc1278cc5
0000003a: EQ
0000003b: PUSH2 0x0846
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xf0b9e5ba
00000045: EQ
00000046: PUSH2 0x088d
00000049: JUMPI
0000004a: PUSH2 0x00c7
0000004d: JUMP
0000004e: JUMPDEST
0000004f: DUP1
00000050: PUSH4 0x843b1a09
00000055: EQ
00000056: PUSH2 0x0548
00000059: JUMPI
0000005a: DUP1
0000005b: PUSH4 0x98ad68a7
00000060: EQ
00000061: PUSH2 0x055d
00000064: JUMPI
00000065: DUP1
00000066: PUSH4 0xbba85f28
0000006b: EQ
0000006c: PUSH2 0x0735
0000006f: JUMPI
00000070: PUSH2 0x00c7
00000073: JUMP
00000074: JUMPDEST
00000075: DUP1
00000076: PUSH4 0x158ef93e
0000007b: GT
0000007c: PUSH2 0x00a5
0000007f: JUMPI
00000080: DUP1
00000081: PUSH4 0x158ef93e
00000086: EQ
00000087: PUSH2 0x0446
0000008a: JUMPI
0000008b: DUP1
0000008c: PUSH4 0x60b5bb3f
00000091: EQ
00000092: PUSH2 0x046f
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0x7db218b7
0000009c: EQ
0000009d: PUSH2 0x0521
000000a0: JUMPI
000000a1: PUSH2 0x00c7
000000a4: JUMP
000000a5: JUMPDEST
000000a6: DUP1
000000a7: PUSH4 0x08405166
000000ac: EQ
000000ad: PUSH2 0x0150
000000b0: JUMPI
000000b1: DUP1
000000b2: PUSH4 0x0adcf464
000000b7: EQ
000000b8: PUSH2 0x019a
000000bb: JUMPI
000000bc: DUP1
000000bd: PUSH4 0x150b7a02
000000c2: EQ
000000c3: PUSH2 0x0373
000000c6: JUMPI
000000c7: JUMPDEST
000000c8: CALLDATASIZE
000000c9: ISZERO
000000ca: PUSH2 0x011a
000000cd: JUMPI
000000ce: PUSH1 0x40
000000d0: DUP1
000000d1: MLOAD
000000d2: PUSH3 0x461bcd
000000d6: PUSH1 0xe5
000000d8: SHL
000000d9: DUP2
000000da: MSTORE
000000db: PUSH1 0x20
000000dd: PUSH1 0x04
000000df: DUP3
000000e0: ADD
000000e1: MSTORE
000000e2: PUSH1 0x16
000000e4: PUSH1 0x24
000000e6: DUP3
000000e7: ADD
000000e8: MSTORE
000000e9: PUSH32 0x6d73672e64617461206973206e6f7420656d7074792e00000000000000000000
0000010a: PUSH1 0x44
0000010c: DUP3
0000010d: ADD
0000010e: MSTORE
0000010f: SWAP1
00000110: MLOAD
00000111: SWAP1
00000112: DUP2
00000113: SWAP1
00000114: SUB
00000115: PUSH1 0x64
00000117: ADD
00000118: SWAP1
00000119: REVERT
0000011a: JUMPDEST
0000011b: PUSH1 0x40
0000011d: DUP1
0000011e: MLOAD
0000011f: ADDRESS
00000120: BALANCE
00000121: DUP2
00000122: MSTORE
00000123: SWAP1
00000124: MLOAD
00000125: PUSH32 0xc4c14883ae9fd8e26d5d59e3485ed29fd126d781d7e498a4ca5c54c8268e4936
00000146: SWAP2
00000147: DUP2
00000148: SWAP1
00000149: SUB
0000014a: PUSH1 0x20
0000014c: ADD
0000014d: SWAP1
0000014e: LOG1
0000014f: STOP
00000150: JUMPDEST
00000151: CALLVALUE
00000152: DUP1
00000153: ISZERO
00000154: PUSH2 0x015c
00000157: JUMPI
00000158: PUSH1 0x00
0000015a: DUP1
0000015b: REVERT
0000015c: JUMPDEST
0000015d: POP
0000015e: PUSH2 0x0165
00000161: PUSH2 0x091f
00000164: JUMP
00000165: JUMPDEST
00000166: PUSH1 0x40
00000168: DUP1
00000169: MLOAD
0000016a: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000
0000018b: SWAP1
0000018c: SWAP3
0000018d: AND
0000018e: DUP3
0000018f: MSTORE
00000190: MLOAD
00000191: SWAP1
00000192: DUP2
00000193: SWAP1
00000194: SUB
00000195: PUSH1 0x20
00000197: ADD
00000198: SWAP1
00000199: RETURN
0000019a: JUMPDEST
0000019b: CALLVALUE
0000019c: DUP1
0000019d: ISZERO
0000019e: PUSH2 0x01a6
000001a1: JUMPI
000001a2: PUSH1 0x00
000001a4: DUP1
000001a5: REVERT
000001a6: JUMPDEST
000001a7: POP
000001a8: PUSH2 0x0371
000001ab: PUSH1 0x04
000001ad: DUP1
000001ae: CALLDATASIZE
000001af: SUB
000001b0: PUSH1 0xc0
000001b2: DUP2
000001b3: LT
000001b4: ISZERO
000001b5: PUSH2 0x01bd
000001b8: JUMPI
000001b9: PUSH1 0x00
000001bb: DUP1
000001bc: REVERT
000001bd: JUMPDEST
000001be: PUSH1 0x01
000001c0: PUSH1 0x01
000001c2: PUSH1 0xa0
000001c4: SHL
000001c5: SUB
000001c6: DUP3
000001c7: CALLDATALOAD
000001c8: DUP2
000001c9: AND
000001ca: SWAP3
000001cb: PUSH1 0x20
000001cd: DUP2
000001ce: ADD
000001cf: CALLDATALOAD
000001d0: SWAP3
000001d1: PUSH1 0x40
000001d3: DUP3
000001d4: ADD
000001d5: CALLDATALOAD
000001d6: SWAP1
000001d7: SWAP3
000001d8: AND
000001d9: SWAP2
000001da: DUP2
000001db: ADD
000001dc: SWAP1
000001dd: PUSH1 0x80
000001df: DUP2
000001e0: ADD
000001e1: PUSH1 0x60
000001e3: DUP3
000001e4: ADD
000001e5: CALLDATALOAD
000001e6: PUSH5 0x0100000000
000001ec: DUP2
000001ed: GT
000001ee: ISZERO
000001ef: PUSH2 0x01f7
000001f2: JUMPI
000001f3: PUSH1 0x00
000001f5: DUP1
000001f6: REVERT
000001f7: JUMPDEST
000001f8: DUP3
000001f9: ADD
000001fa: DUP4
000001fb: PUSH1 0x20
000001fd: DUP3
000001fe: ADD
000001ff: GT
00000200: ISZERO
00000201: PUSH2 0x0209
00000204: JUMPI
00000205: PUSH1 0x00
00000207: DUP1
00000208: REVERT
00000209: JUMPDEST
0000020a: DUP1
0000020b: CALLDATALOAD
0000020c: SWAP1
0000020d: PUSH1 0x20
0000020f: ADD
00000210: SWAP2
00000211: DUP5
00000212: PUSH1 0x20
00000214: DUP4
00000215: MUL
00000216: DUP5
00000217: ADD
00000218: GT
00000219: PUSH5 0x0100000000
0000021f: DUP4
00000220: GT
00000221: OR
00000222: ISZERO
00000223: PUSH2 0x022b
00000226: JUMPI
00000227: PUSH1 0x00
00000229: DUP1
0000022a: REVERT
0000022b: JUMPDEST
0000022c: SWAP2
0000022d: SWAP1
0000022e: DUP1
0000022f: DUP1
00000230: PUSH1 0x20
00000232: MUL
00000233: PUSH1 0x20
00000235: ADD
00000236: PUSH1 0x40
00000238: MLOAD
00000239: SWAP1
0000023a: DUP2
0000023b: ADD
0000023c: PUSH1 0x40
0000023e: MSTORE
0000023f: DUP1
00000240: SWAP4
00000241: SWAP3
00000242: SWAP2
00000243: SWAP1
00000244: DUP2
00000245: DUP2
00000246: MSTORE
00000247: PUSH1 0x20
00000249: ADD
0000024a: DUP4
0000024b: DUP4
0000024c: PUSH1 0x20
0000024e: MUL
0000024f: DUP1
00000250: DUP3
00000251: DUP5
00000252: CALLDATACOPY
00000253: PUSH1 0x00
00000255: SWAP3
00000256: ADD
00000257: SWAP2
00000258: SWAP1
00000259: SWAP2
0000025a: MSTORE
0000025b: POP
0000025c: SWAP3
0000025d: SWAP6
0000025e: SWAP5
0000025f: SWAP4
00000260: PUSH1 0x20
00000262: DUP2
00000263: ADD
00000264: SWAP4
00000265: POP
00000266: CALLDATALOAD
00000267: SWAP2
00000268: POP
00000269: POP
0000026a: PUSH5 0x0100000000
00000270: DUP2
00000271: GT
00000272: ISZERO
00000273: PUSH2 0x027b
00000276: JUMPI
00000277: PUSH1 0x00
00000279: DUP1
0000027a: REVERT
0000027b: JUMPDEST
0000027c: DUP3
0000027d: ADD
0000027e: DUP4
0000027f: PUSH1 0x20
00000281: DUP3
00000282: ADD
00000283: GT
00000284: ISZERO
00000285: PUSH2 0x028d
00000288: JUMPI
00000289: PUSH1 0x00
0000028b: DUP1
0000028c: REVERT
0000028d: JUMPDEST
0000028e: DUP1
0000028f: CALLDATALOAD
00000290: SWAP1
00000291: PUSH1 0x20
00000293: ADD
00000294: SWAP2
00000295: DUP5
00000296: PUSH1 0x20
00000298: DUP4
00000299: MUL
0000029a: DUP5
0000029b: ADD
0000029c: GT
0000029d: PUSH5 0x0100000000
000002a3: DUP4
000002a4: GT
000002a5: OR
000002a6: ISZERO
000002a7: PUSH2 0x02af
000002aa: JUMPI
000002ab: PUSH1 0x00
000002ad: DUP1
000002ae: REVERT
000002af: JUMPDEST
000002b0: SWAP2
000002b1: SWAP1
000002b2: DUP1
000002b3: DUP1
000002b4: PUSH1 0x20
000002b6: MUL
000002b7: PUSH1 0x20
000002b9: ADD
000002ba: PUSH1 0x40
000002bc: MLOAD
000002bd: SWAP1
000002be: DUP2
000002bf: ADD
000002c0: PUSH1 0x40
000002c2: MSTORE
000002c3: DUP1
000002c4: SWAP4
000002c5: SWAP3
000002c6: SWAP2
000002c7: SWAP1
000002c8: DUP2
000002c9: DUP2
000002ca: MSTORE
000002cb: PUSH1 0x20
000002cd: ADD
000002ce: DUP4
000002cf: DUP4
000002d0: PUSH1 0x20
000002d2: MUL
000002d3: DUP1
000002d4: DUP3
000002d5: DUP5
000002d6: CALLDATACOPY
000002d7: PUSH1 0x00
000002d9: SWAP3
000002da: ADD
000002db: SWAP2
000002dc: SWAP1
000002dd: SWAP2
000002de: MSTORE
000002df: POP
000002e0: SWAP3
000002e1: SWAP6
000002e2: SWAP5
000002e3: SWAP4
000002e4: PUSH1 0x20
000002e6: DUP2
000002e7: ADD
000002e8: SWAP4
000002e9: POP
000002ea: CALLDATALOAD
000002eb: SWAP2
000002ec: POP
000002ed: POP
000002ee: PUSH5 0x0100000000
000002f4: DUP2
000002f5: GT
000002f6: ISZERO
000002f7: PUSH2 0x02ff
000002fa: JUMPI
000002fb: PUSH1 0x00
000002fd: DUP1
000002fe: REVERT
000002ff: JUMPDEST
00000300: DUP3
00000301: ADD
00000302: DUP4
00000303: PUSH1 0x20
00000305: DUP3
00000306: ADD
00000307: GT
00000308: ISZERO
00000309: PUSH2 0x0311
0000030c: JUMPI
0000030d: PUSH1 0x00
0000030f: DUP1
00000310: REVERT
00000311: JUMPDEST
00000312: DUP1
00000313: CALLDATALOAD
00000314: SWAP1
00000315: PUSH1 0x20
00000317: ADD
00000318: SWAP2
00000319: DUP5
0000031a: PUSH1 0x20
0000031c: DUP4
0000031d: MUL
0000031e: DUP5
0000031f: ADD
00000320: GT
00000321: PUSH5 0x0100000000
00000327: DUP4
00000328: GT
00000329: OR
0000032a: ISZERO
0000032b: PUSH2 0x0333
0000032e: JUMPI
0000032f: PUSH1 0x00
00000331: DUP1
00000332: REVERT
00000333: JUMPDEST
00000334: SWAP2
00000335: SWAP1
00000336: DUP1
00000337: DUP1
00000338: PUSH1 0x20
0000033a: MUL
0000033b: PUSH1 0x20
0000033d: ADD
0000033e: PUSH1 0x40
00000340: MLOAD
00000341: SWAP1
00000342: DUP2
00000343: ADD
00000344: PUSH1 0x40
00000346: MSTORE
00000347: DUP1
00000348: SWAP4
00000349: SWAP3
0000034a: SWAP2
0000034b: SWAP1
0000034c: DUP2
0000034d: DUP2
0000034e: MSTORE
0000034f: PUSH1 0x20
00000351: ADD
00000352: DUP4
00000353: DUP4
00000354: PUSH1 0x20
00000356: MUL
00000357: DUP1
00000358: DUP3
00000359: DUP5
0000035a: CALLDATACOPY
0000035b: PUSH1 0x00
0000035d: SWAP3
0000035e: ADD
0000035f: SWAP2
00000360: SWAP1
00000361: SWAP2
00000362: MSTORE
00000363: POP
00000364: SWAP3
00000365: SWAP6
00000366: POP
00000367: PUSH2 0x0943
0000036a: SWAP5
0000036b: POP
0000036c: POP
0000036d: POP
0000036e: POP
0000036f: POP
00000370: JUMP
00000371: JUMPDEST
00000372: STOP
00000373: JUMPDEST
00000374: CALLVALUE
00000375: DUP1
00000376: ISZERO
00000377: PUSH2 0x037f
0000037a: JUMPI
0000037b: PUSH1 0x00
0000037d: DUP1
0000037e: REVERT
0000037f: JUMPDEST
00000380: POP
00000381: PUSH2 0x0165
00000384: PUSH1 0x04
00000386: DUP1
00000387: CALLDATASIZE
00000388: SUB
00000389: PUSH1 0x80
0000038b: DUP2
0000038c: LT
0000038d: ISZERO
0000038e: PUSH2 0x0396
00000391: JUMPI
00000392: PUSH1 0x00
00000394: DUP1
00000395: REVERT
00000396: JUMPDEST
00000397: PUSH1 0x01
00000399: PUSH1 0x01
0000039b: PUSH1 0xa0
0000039d: SHL
0000039e: SUB
0000039f: DUP3
000003a0: CALLDATALOAD
000003a1: DUP2
000003a2: AND
000003a3: SWAP3
000003a4: PUSH1 0x20
000003a6: DUP2
000003a7: ADD
000003a8: CALLDATALOAD
000003a9: SWAP1
000003aa: SWAP2
000003ab: AND
000003ac: SWAP2
000003ad: PUSH1 0x40
000003af: DUP3
000003b0: ADD
000003b1: CALLDATALOAD
000003b2: SWAP2
000003b3: SWAP1
000003b4: DUP2
000003b5: ADD
000003b6: SWAP1
000003b7: PUSH1 0x80
000003b9: DUP2
000003ba: ADD
000003bb: PUSH1 0x60
000003bd: DUP3
000003be: ADD
000003bf: CALLDATALOAD
000003c0: PUSH5 0x0100000000
000003c6: DUP2
000003c7: GT
000003c8: ISZERO
000003c9: PUSH2 0x03d1
000003cc: JUMPI
000003cd: PUSH1 0x00
000003cf: DUP1
000003d0: REVERT
000003d1: JUMPDEST
000003d2: DUP3
000003d3: ADD
000003d4: DUP4
000003d5: PUSH1 0x20
000003d7: DUP3
000003d8: ADD
000003d9: GT
000003da: ISZERO
000003db: PUSH2 0x03e3
000003de: JUMPI
000003df: PUSH1 0x00
000003e1: DUP1
000003e2: REVERT
000003e3: JUMPDEST
000003e4: DUP1
000003e5: CALLDATALOAD
000003e6: SWAP1
000003e7: PUSH1 0x20
000003e9: ADD
000003ea: SWAP2
000003eb: DUP5
000003ec: PUSH1 0x01
000003ee: DUP4
000003ef: MUL
000003f0: DUP5
000003f1: ADD
000003f2: GT
000003f3: PUSH5 0x0100000000
000003f9: DUP4
000003fa: GT
000003fb: OR
000003fc: ISZERO
000003fd: PUSH2 0x0405
00000400: JUMPI
00000401: PUSH1 0x00
00000403: DUP1
00000404: REVERT
00000405: JUMPDEST
00000406: SWAP2
00000407: SWAP1
00000408: DUP1
00000409: DUP1
0000040a: PUSH1 0x1f
0000040c: ADD
0000040d: PUSH1 0x20
0000040f: DUP1
00000410: SWAP2
00000411: DIV
00000412: MUL
00000413: PUSH1 0x20
00000415: ADD
00000416: PUSH1 0x40
00000418: MLOAD
00000419: SWAP1
0000041a: DUP2
0000041b: ADD
0000041c: PUSH1 0x40
0000041e: MSTORE
0000041f: DUP1
00000420: SWAP4
00000421: SWAP3
00000422: SWAP2
00000423: SWAP1
00000424: DUP2
00000425: DUP2
00000426: MSTORE
00000427: PUSH1 0x20
00000429: ADD
0000042a: DUP4
0000042b: DUP4
0000042c: DUP1
0000042d: DUP3
0000042e: DUP5
0000042f: CALLDATACOPY
00000430: PUSH1 0x00
00000432: SWAP3
00000433: ADD
00000434: SWAP2
00000435: SWAP1
00000436: SWAP2
00000437: MSTORE
00000438: POP
00000439: SWAP3
0000043a: SWAP6
0000043b: POP
0000043c: PUSH2 0x0c0e
0000043f: SWAP5
00000440: POP
00000441: POP
00000442: POP
00000443: POP
00000444: POP
00000445: JUMP
00000446: JUMPDEST
00000447: CALLVALUE
00000448: DUP1
00000449: ISZERO
0000044a: PUSH2 0x0452
0000044d: JUMPI
0000044e: PUSH1 0x00
00000450: DUP1
00000451: REVERT
00000452: JUMPDEST
00000453: POP
00000454: PUSH2 0x045b
00000457: PUSH2 0x0c37
0000045a: JUMP
0000045b: JUMPDEST
0000045c: PUSH1 0x40
0000045e: DUP1
0000045f: MLOAD
00000460: SWAP2
00000461: ISZERO
00000462: ISZERO
00000463: DUP3
00000464: MSTORE
00000465: MLOAD
00000466: SWAP1
00000467: DUP2
00000468: SWAP1
00000469: SUB
0000046a: PUSH1 0x20
0000046c: ADD
0000046d: SWAP1
0000046e: RETURN
0000046f: JUMPDEST
00000470: CALLVALUE
00000471: DUP1
00000472: ISZERO
00000473: PUSH2 0x047b
00000476: JUMPI
00000477: PUSH1 0x00
00000479: DUP1
0000047a: REVERT
0000047b: JUMPDEST
0000047c: POP
0000047d: PUSH2 0x0371
00000480: PUSH1 0x04
00000482: DUP1
00000483: CALLDATASIZE
00000484: SUB
00000485: PUSH1 0x40
00000487: DUP2
00000488: LT
00000489: ISZERO
0000048a: PUSH2 0x0492
0000048d: JUMPI
0000048e: PUSH1 0x00
00000490: DUP1
00000491: REVERT
00000492: JUMPDEST
00000493: DUP2
00000494: ADD
00000495: SWAP1
00000496: PUSH1 0x20
00000498: DUP2
00000499: ADD
0000049a: DUP2
0000049b: CALLDATALOAD
0000049c: PUSH5 0x0100000000
000004a2: DUP2
000004a3: GT
000004a4: ISZERO
000004a5: PUSH2 0x04ad
000004a8: JUMPI
000004a9: PUSH1 0x00
000004ab: DUP1
000004ac: REVERT
000004ad: JUMPDEST
000004ae: DUP3
000004af: ADD
000004b0: DUP4
000004b1: PUSH1 0x20
000004b3: DUP3
000004b4: ADD
000004b5: GT
000004b6: ISZERO
000004b7: PUSH2 0x04bf
000004ba: JUMPI
000004bb: PUSH1 0x00
000004bd: DUP1
000004be: REVERT
000004bf: JUMPDEST
000004c0: DUP1
000004c1: CALLDATALOAD
000004c2: SWAP1
000004c3: PUSH1 0x20
000004c5: ADD
000004c6: SWAP2
000004c7: DUP5
000004c8: PUSH1 0x20
000004ca: DUP4
000004cb: MUL
000004cc: DUP5
000004cd: ADD
000004ce: GT
000004cf: PUSH5 0x0100000000
000004d5: DUP4
000004d6: GT
000004d7: OR
000004d8: ISZERO
000004d9: PUSH2 0x04e1
000004dc: JUMPI
000004dd: PUSH1 0x00
000004df: DUP1
000004e0: REVERT
000004e1: JUMPDEST
000004e2: SWAP2
000004e3: SWAP1
000004e4: DUP1
000004e5: DUP1
000004e6: PUSH1 0x20
000004e8: MUL
000004e9: PUSH1 0x20
000004eb: ADD
000004ec: PUSH1 0x40
000004ee: MLOAD
000004ef: SWAP1
000004f0: DUP2
000004f1: ADD
000004f2: PUSH1 0x40
000004f4: MSTORE
000004f5: DUP1
000004f6: SWAP4
000004f7: SWAP3
000004f8: SWAP2
000004f9: SWAP1
000004fa: DUP2
000004fb: DUP2
000004fc: MSTORE
000004fd: PUSH1 0x20
000004ff: ADD
00000500: DUP4
00000501: DUP4
00000502: PUSH1 0x20
00000504: MUL
00000505: DUP1
00000506: DUP3
00000507: DUP5
00000508: CALLDATACOPY
00000509: PUSH1 0x00
0000050b: SWAP3
0000050c: ADD
0000050d: SWAP2
0000050e: SWAP1
0000050f: SWAP2
00000510: MSTORE
00000511: POP
00000512: SWAP3
00000513: SWAP6
00000514: POP
00000515: POP
00000516: SWAP2
00000517: CALLDATALOAD
00000518: SWAP3
00000519: POP
0000051a: PUSH2 0x0c40
0000051d: SWAP2
0000051e: POP
0000051f: POP
00000520: JUMP
00000521: JUMPDEST
00000522: CALLVALUE
00000523: DUP1
00000524: ISZERO
00000525: PUSH2 0x052d
00000528: JUMPI
00000529: PUSH1 0x00
0000052b: DUP1
0000052c: REVERT
0000052d: JUMPDEST
0000052e: POP
0000052f: PUSH2 0x0536
00000532: PUSH2 0x0e6f
00000535: JUMP
00000536: JUMPDEST
00000537: PUSH1 0x40
00000539: DUP1
0000053a: MLOAD
0000053b: SWAP2
0000053c: DUP3
0000053d: MSTORE
0000053e: MLOAD
0000053f: SWAP1
00000540: DUP2
00000541: SWAP1
00000542: SUB
00000543: PUSH1 0x20
00000545: ADD
00000546: SWAP1
00000547: RETURN
00000548: JUMPDEST
00000549: CALLVALUE
0000054a: DUP1
0000054b: ISZERO
0000054c: PUSH2 0x0554
0000054f: JUMPI
00000550: PUSH1 0x00
00000552: DUP1
00000553: REVERT
00000554: JUMPDEST
00000555: POP
00000556: PUSH2 0x0536
00000559: PUSH2 0x0e75
0000055c: JUMP
0000055d: JUMPDEST
0000055e: CALLVALUE
0000055f: DUP1
00000560: ISZERO
00000561: PUSH2 0x0569
00000564: JUMPI
00000565: PUSH1 0x00
00000567: DUP1
00000568: REVERT
00000569: JUMPDEST
0000056a: POP
0000056b: PUSH2 0x0371
0000056e: PUSH1 0x04
00000570: DUP1
00000571: CALLDATASIZE
00000572: SUB
00000573: PUSH1 0xc0
00000575: DUP2
00000576: LT
00000577: ISZERO
00000578: PUSH2 0x0580
0000057b: JUMPI
0000057c: PUSH1 0x00
0000057e: DUP1
0000057f: REVERT
00000580: JUMPDEST
00000581: PUSH1 0x01
00000583: PUSH1 0x01
00000585: PUSH1 0xa0
00000587: SHL
00000588: SUB
00000589: DUP3
0000058a: CALLDATALOAD
0000058b: DUP2
0000058c: AND
0000058d: SWAP3
0000058e: PUSH1 0x20
00000590: DUP2
00000591: ADD
00000592: CALLDATALOAD
00000593: SWAP1
00000594: SWAP2
00000595: AND
00000596: SWAP2
00000597: PUSH1 0x40
00000599: DUP3
0000059a: ADD
0000059b: CALLDATALOAD
0000059c: SWAP2
0000059d: SWAP1
0000059e: DUP2
0000059f: ADD
000005a0: SWAP1
000005a1: PUSH1 0x80
000005a3: DUP2
000005a4: ADD
000005a5: PUSH1 0x60
000005a7: DUP3
000005a8: ADD
000005a9: CALLDATALOAD
000005aa: PUSH5 0x0100000000
000005b0: DUP2
000005b1: GT
000005b2: ISZERO
000005b3: PUSH2 0x05bb
000005b6: JUMPI
000005b7: PUSH1 0x00
000005b9: DUP1
000005ba: REVERT
000005bb: JUMPDEST
000005bc: DUP3
000005bd: ADD
000005be: DUP4
000005bf: PUSH1 0x20
000005c1: DUP3
000005c2: ADD
000005c3: GT
000005c4: ISZERO
000005c5: PUSH2 0x05cd
000005c8: JUMPI
000005c9: PUSH1 0x00
000005cb: DUP1
000005cc: REVERT
000005cd: JUMPDEST
000005ce: DUP1
000005cf: CALLDATALOAD
000005d0: SWAP1
000005d1: PUSH1 0x20
000005d3: ADD
000005d4: SWAP2
000005d5: DUP5
000005d6: PUSH1 0x20
000005d8: DUP4
000005d9: MUL
000005da: DUP5
000005db: ADD
000005dc: GT
000005dd: PUSH5 0x0100000000
000005e3: DUP4
000005e4: GT
000005e5: OR
000005e6: ISZERO
000005e7: PUSH2 0x05ef
000005ea: JUMPI
000005eb: PUSH1 0x00
000005ed: DUP1
000005ee: REVERT
000005ef: JUMPDEST
000005f0: SWAP2
000005f1: SWAP1
000005f2: DUP1
000005f3: DUP1
000005f4: PUSH1 0x20
000005f6: MUL
000005f7: PUSH1 0x20
000005f9: ADD
000005fa: PUSH1 0x40
000005fc: MLOAD
000005fd: SWAP1
000005fe: DUP2
000005ff: ADD
00000600: PUSH1 0x40
00000602: MSTORE
00000603: DUP1
00000604: SWAP4
00000605: SWAP3
00000606: SWAP2
00000607: SWAP1
00000608: DUP2
00000609: DUP2
0000060a: MSTORE
0000060b: PUSH1 0x20
0000060d: ADD
0000060e: DUP4
0000060f: DUP4
00000610: PUSH1 0x20
00000612: MUL
00000613: DUP1
00000614: DUP3
00000615: DUP5
00000616: CALLDATACOPY
00000617: PUSH1 0x00
00000619: SWAP3
0000061a: ADD
0000061b: SWAP2
0000061c: SWAP1
0000061d: SWAP2
0000061e: MSTORE
0000061f: POP
00000620: SWAP3
00000621: SWAP6
00000622: SWAP5
00000623: SWAP4
00000624: PUSH1 0x20
00000626: DUP2
00000627: ADD
00000628: SWAP4
00000629: POP
0000062a: CALLDATALOAD
0000062b: SWAP2
0000062c: POP
0000062d: POP
0000062e: PUSH5 0x0100000000
00000634: DUP2
00000635: GT
00000636: ISZERO
00000637: PUSH2 0x063f
0000063a: JUMPI
0000063b: PUSH1 0x00
0000063d: DUP1
0000063e: REVERT
0000063f: JUMPDEST
00000640: DUP3
00000641: ADD
00000642: DUP4
00000643: PUSH1 0x20
00000645: DUP3
00000646: ADD
00000647: GT
00000648: ISZERO
00000649: PUSH2 0x0651
0000064c: JUMPI
0000064d: PUSH1 0x00
0000064f: DUP1
00000650: REVERT
00000651: JUMPDEST
00000652: DUP1
00000653: CALLDATALOAD
00000654: SWAP1
00000655: PUSH1 0x20
00000657: ADD
00000658: SWAP2
00000659: DUP5
0000065a: PUSH1 0x20
0000065c: DUP4
0000065d: MUL
0000065e: DUP5
0000065f: ADD
00000660: GT
00000661: PUSH5 0x0100000000
00000667: DUP4
00000668: GT
00000669: OR
0000066a: ISZERO
0000066b: PUSH2 0x0673
0000066e: JUMPI
0000066f: PUSH1 0x00
00000671: DUP1
00000672: REVERT
00000673: JUMPDEST
00000674: SWAP2
00000675: SWAP1
00000676: DUP1
00000677: DUP1
00000678: PUSH1 0x20
0000067a: MUL
0000067b: PUSH1 0x20
0000067d: ADD
0000067e: PUSH1 0x40
00000680: MLOAD
00000681: SWAP1
00000682: DUP2
00000683: ADD
00000684: PUSH1 0x40
00000686: MSTORE
00000687: DUP1
00000688: SWAP4
00000689: SWAP3
0000068a: SWAP2
0000068b: SWAP1
0000068c: DUP2
0000068d: DUP2
0000068e: MSTORE
0000068f: PUSH1 0x20
00000691: ADD
00000692: DUP4
00000693: DUP4
00000694: PUSH1 0x20
00000696: MUL
00000697: DUP1
00000698: DUP3
00000699: DUP5
0000069a: CALLDATACOPY
0000069b: PUSH1 0x00
0000069d: SWAP3
0000069e: ADD
0000069f: SWAP2
000006a0: SWAP1
000006a1: SWAP2
000006a2: MSTORE
000006a3: POP
000006a4: SWAP3
000006a5: SWAP6
000006a6: SWAP5
000006a7: SWAP4
000006a8: PUSH1 0x20
000006aa: DUP2
000006ab: ADD
000006ac: SWAP4
000006ad: POP
000006ae: CALLDATALOAD
000006af: SWAP2
000006b0: POP
000006b1: POP
000006b2: PUSH5 0x0100000000
000006b8: DUP2
000006b9: GT
000006ba: ISZERO
000006bb: PUSH2 0x06c3
000006be: JUMPI
000006bf: PUSH1 0x00
000006c1: DUP1
000006c2: REVERT
000006c3: JUMPDEST
000006c4: DUP3
000006c5: ADD
000006c6: DUP4
000006c7: PUSH1 0x20
000006c9: DUP3
000006ca: ADD
000006cb: GT
000006cc: ISZERO
000006cd: PUSH2 0x06d5
000006d0: JUMPI
000006d1: PUSH1 0x00
000006d3: DUP1
000006d4: REVERT
000006d5: JUMPDEST
000006d6: DUP1
000006d7: CALLDATALOAD
000006d8: SWAP1
000006d9: PUSH1 0x20
000006db: ADD
000006dc: SWAP2
000006dd: DUP5
000006de: PUSH1 0x20
000006e0: DUP4
000006e1: MUL
000006e2: DUP5
000006e3: ADD
000006e4: GT
000006e5: PUSH5 0x0100000000
000006eb: DUP4
000006ec: GT
000006ed: OR
000006ee: ISZERO
000006ef: PUSH2 0x06f7
000006f2: JUMPI
000006f3: PUSH1 0x00
000006f5: DUP1
000006f6: REVERT
000006f7: JUMPDEST
000006f8: SWAP2
000006f9: SWAP1
000006fa: DUP1
000006fb: DUP1
000006fc: PUSH1 0x20
000006fe: MUL
000006ff: PUSH1 0x20
00000701: ADD
00000702: PUSH1 0x40
00000704: MLOAD
00000705: SWAP1
00000706: DUP2
00000707: ADD
00000708: PUSH1 0x40
0000070a: MSTORE
0000070b: DUP1
0000070c: SWAP4
0000070d: SWAP3
0000070e: SWAP2
0000070f: SWAP1
00000710: DUP2
00000711: DUP2
00000712: MSTORE
00000713: PUSH1 0x20
00000715: ADD
00000716: DUP4
00000717: DUP4
00000718: PUSH1 0x20
0000071a: MUL
0000071b: DUP1
0000071c: DUP3
0000071d: DUP5
0000071e: CALLDATACOPY
0000071f: PUSH1 0x00
00000721: SWAP3
00000722: ADD
00000723: SWAP2
00000724: SWAP1
00000725: SWAP2
00000726: MSTORE
00000727: POP
00000728: SWAP3
00000729: SWAP6
0000072a: POP
0000072b: PUSH2 0x0e7b
0000072e: SWAP5
0000072f: POP
00000730: POP
00000731: POP
00000732: POP
00000733: POP
00000734: JUMP
00000735: JUMPDEST
00000736: CALLVALUE
00000737: DUP1
00000738: ISZERO
00000739: PUSH2 0x0741
0000073c: JUMPI
0000073d: PUSH1 0x00
0000073f: DUP1
00000740: REVERT
00000741: JUMPDEST
00000742: POP
00000743: PUSH2 0x0536
00000746: PUSH1 0x04
00000748: DUP1
00000749: CALLDATASIZE
0000074a: SUB
0000074b: PUSH1 0x80
0000074d: DUP2
0000074e: LT
0000074f: ISZERO
00000750: PUSH2 0x0758
00000753: JUMPI
00000754: PUSH1 0x00
00000756: DUP1
00000757: REVERT
00000758: JUMPDEST
00000759: POP
0000075a: PUSH1 0x01
0000075c: PUSH1 0x01
0000075e: PUSH1 0xa0
00000760: SHL
00000761: SUB
00000762: DUP2
00000763: CALLDATALOAD
00000764: DUP2
00000765: AND
00000766: SWAP2
00000767: PUSH1 0x20
00000769: DUP2
0000076a: ADD
0000076b: CALLDATALOAD
0000076c: SWAP1
0000076d: SWAP2
0000076e: AND
0000076f: SWAP1
00000770: PUSH1 0x40
00000772: DUP2
00000773: ADD
00000774: CALLDATALOAD
00000775: SWAP1
00000776: PUSH1 0x60
00000778: ADD
00000779: CALLDATALOAD
0000077a: PUSH2 0x0fb5
0000077d: JUMP
0000077e: JUMPDEST
0000077f: CALLVALUE
00000780: DUP1
00000781: ISZERO
00000782: PUSH2 0x078a
00000785: JUMPI
00000786: PUSH1 0x00
00000788: DUP1
00000789: REVERT
0000078a: JUMPDEST
0000078b: POP
0000078c: PUSH2 0x0371
0000078f: PUSH1 0x04
00000791: DUP1
00000792: CALLDATASIZE
00000793: SUB
00000794: PUSH1 0x60
00000796: DUP2
00000797: LT
00000798: ISZERO
00000799: PUSH2 0x07a1
0000079c: JUMPI
0000079d: PUSH1 0x00
0000079f: DUP1
000007a0: REVERT
000007a1: JUMPDEST
000007a2: PUSH1 0x01
000007a4: PUSH1 0x01
000007a6: PUSH1 0xa0
000007a8: SHL
000007a9: SUB
000007aa: DUP3
000007ab: CALLDATALOAD
000007ac: AND
000007ad: SWAP2
000007ae: PUSH1 0x20
000007b0: DUP2
000007b1: ADD
000007b2: CALLDATALOAD
000007b3: SWAP2
000007b4: DUP2
000007b5: ADD
000007b6: SWAP1
000007b7: PUSH1 0x60
000007b9: DUP2
000007ba: ADD
000007bb: PUSH1 0x40
000007bd: DUP3
000007be: ADD
000007bf: CALLDATALOAD
000007c0: PUSH5 0x0100000000
000007c6: DUP2
000007c7: GT
000007c8: ISZERO
000007c9: PUSH2 0x07d1
000007cc: JUMPI
000007cd: PUSH1 0x00
000007cf: DUP1
000007d0: REVERT
000007d1: JUMPDEST
000007d2: DUP3
000007d3: ADD
000007d4: DUP4
000007d5: PUSH1 0x20
000007d7: DUP3
000007d8: ADD
000007d9: GT
000007da: ISZERO
000007db: PUSH2 0x07e3
000007de: JUMPI
000007df: PUSH1 0x00
000007e1: DUP1
000007e2: REVERT
000007e3: JUMPDEST
000007e4: DUP1
000007e5: CALLDATALOAD
000007e6: SWAP1
000007e7: PUSH1 0x20
000007e9: ADD
000007ea: SWAP2
000007eb: DUP5
000007ec: PUSH1 0x01
000007ee: DUP4
000007ef: MUL
000007f0: DUP5
000007f1: ADD
000007f2: GT
000007f3: PUSH5 0x0100000000
000007f9: DUP4
000007fa: GT
000007fb: OR
000007fc: ISZERO
000007fd: PUSH2 0x0805
00000800: JUMPI
00000801: PUSH1 0x00
00000803: DUP1
00000804: REVERT
00000805: JUMPDEST
00000806: SWAP2
00000807: SWAP1
00000808: DUP1
00000809: DUP1
0000080a: PUSH1 0x1f
0000080c: ADD
0000080d: PUSH1 0x20
0000080f: DUP1
00000810: SWAP2
00000811: DIV
00000812: MUL
00000813: PUSH1 0x20
00000815: ADD
00000816: PUSH1 0x40
00000818: MLOAD
00000819: SWAP1
0000081a: DUP2
0000081b: ADD
0000081c: PUSH1 0x40
0000081e: MSTORE
0000081f: DUP1
00000820: SWAP4
00000821: SWAP3
00000822: SWAP2
00000823: SWAP1
00000824: DUP2
00000825: DUP2
00000826: MSTORE
00000827: PUSH1 0x20
00000829: ADD
0000082a: DUP4
0000082b: DUP4
0000082c: DUP1
0000082d: DUP3
0000082e: DUP5
0000082f: CALLDATACOPY
00000830: PUSH1 0x00
00000832: SWAP3
00000833: ADD
00000834: SWAP2
00000835: SWAP1
00000836: SWAP2
00000837: MSTORE
00000838: POP
00000839: SWAP3
0000083a: SWAP6
0000083b: POP
0000083c: PUSH2 0x1060
0000083f: SWAP5
00000840: POP
00000841: POP
00000842: POP
00000843: POP
00000844: POP
00000845: JUMP
00000846: JUMPDEST
00000847: CALLVALUE
00000848: DUP1
00000849: ISZERO
0000084a: PUSH2 0x0852
0000084d: JUMPI
0000084e: PUSH1 0x00
00000850: DUP1
00000851: REVERT
00000852: JUMPDEST
00000853: POP
00000854: PUSH2 0x0536
00000857: PUSH1 0x04
00000859: DUP1
0000085a: CALLDATASIZE
0000085b: SUB
0000085c: PUSH1 0x80
0000085e: DUP2
0000085f: LT
00000860: ISZERO
00000861: PUSH2 0x0869
00000864: JUMPI
00000865: PUSH1 0x00
00000867: DUP1
00000868: REVERT
00000869: JUMPDEST
0000086a: POP
0000086b: PUSH1 0x01
0000086d: PUSH1 0x01
0000086f: PUSH1 0xa0
00000871: SHL
00000872: SUB
00000873: DUP2
00000874: CALLDATALOAD
00000875: DUP2
00000876: AND
00000877: SWAP2
00000878: PUSH1 0x20
0000087a: DUP2
0000087b: ADD
0000087c: CALLDATALOAD
0000087d: SWAP2
0000087e: PUSH1 0x40
00000880: DUP3
00000881: ADD
00000882: CALLDATALOAD
00000883: AND
00000884: SWAP1
00000885: PUSH1 0x60
00000887: ADD
00000888: CALLDATALOAD
00000889: PUSH2 0x1065
0000088c: JUMP
0000088d: JUMPDEST
0000088e: CALLVALUE
0000088f: DUP1
00000890: ISZERO
00000891: PUSH2 0x0899
00000894: JUMPI
00000895: PUSH1 0x00
00000897: DUP1
00000898: REVERT
00000899: JUMPDEST
0000089a: POP
0000089b: PUSH2 0x0165
0000089e: PUSH1 0x04
000008a0: DUP1
000008a1: CALLDATASIZE
000008a2: SUB
000008a3: PUSH1 0x60
000008a5: DUP2
000008a6: LT
000008a7: ISZERO
000008a8: PUSH2 0x08b0
000008ab: JUMPI
000008ac: PUSH1 0x00
000008ae: DUP1
000008af: REVERT
000008b0: JUMPDEST
000008b1: PUSH1 0x01
000008b3: PUSH1 0x01
000008b5: PUSH1 0xa0
000008b7: SHL
000008b8: SUB
000008b9: DUP3
000008ba: CALLDATALOAD
000008bb: AND
000008bc: SWAP2
000008bd: PUSH1 0x20
000008bf: DUP2
000008c0: ADD
000008c1: CALLDATALOAD
000008c2: SWAP2
000008c3: DUP2
000008c4: ADD
000008c5: SWAP1
000008c6: PUSH1 0x60
000008c8: DUP2
000008c9: ADD
000008ca: PUSH1 0x40
000008cc: DUP3
000008cd: ADD
000008ce: CALLDATALOAD
000008cf: PUSH5 0x0100000000
000008d5: DUP2
000008d6: GT
000008d7: ISZERO
000008d8: PUSH2 0x08e0
000008db: JUMPI
000008dc: PUSH1 0x00
000008de: DUP1
000008df: REVERT
000008e0: JUMPDEST
000008e1: DUP3
000008e2: ADD
000008e3: DUP4
000008e4: PUSH1 0x20
000008e6: DUP3
000008e7: ADD
000008e8: GT
000008e9: ISZERO
000008ea: PUSH2 0x08f2
000008ed: JUMPI
000008ee: PUSH1 0x00
000008f0: DUP1
000008f1: REVERT
000008f2: JUMPDEST
000008f3: DUP1
000008f4: CALLDATALOAD
000008f5: SWAP1
000008f6: PUSH1 0x20
000008f8: ADD
000008f9: SWAP2
000008fa: DUP5
000008fb: PUSH1 0x01
000008fd: DUP4
000008fe: MUL
000008ff: DUP5
00000900: ADD
00000901: GT
00000902: PUSH5 0x0100000000
00000908: DUP4
00000909: GT
0000090a: OR
0000090b: ISZERO
0000090c: PUSH2 0x0914
0000090f: JUMPI
00000910: PUSH1 0x00
00000912: DUP1
00000913: REVERT
00000914: JUMPDEST
00000915: POP
00000916: SWAP1
00000917: SWAP3
00000918: POP
00000919: SWAP1
0000091a: POP
0000091b: PUSH2 0x1112
0000091e: JUMP
0000091f: JUMPDEST
00000920: PUSH32 0xc0ee0b8a00000000000000000000000000000000000000000000000000000000
00000941: DUP2
00000942: JUMP
00000943: JUMPDEST
00000944: PUSH2 0x0951
00000947: DUP7
00000948: DUP7
00000949: DUP7
0000094a: DUP7
0000094b: DUP7
0000094c: DUP7
0000094d: PUSH2 0x113b
00000950: JUMP
00000951: JUMPDEST
00000952: PUSH2 0x0997
00000955: JUMPI
00000956: PUSH1 0x40
00000958: DUP1
00000959: MLOAD
0000095a: PUSH3 0x461bcd
0000095e: PUSH1 0xe5
00000960: SHL
00000961: DUP2
00000962: MSTORE
00000963: PUSH1 0x20
00000965: PUSH1 0x04
00000967: DUP3
00000968: ADD
00000969: MSTORE
0000096a: PUSH1 0x12
0000096c: PUSH1 0x24
0000096e: DUP3
0000096f: ADD
00000970: MSTORE
00000971: PUSH18 0x24b73b30b634b21039b4b3b730ba3ab93297
00000984: PUSH1 0x71
00000986: SHL
00000987: PUSH1 0x44
00000989: DUP3
0000098a: ADD
0000098b: MSTORE
0000098c: SWAP1
0000098d: MLOAD
0000098e: SWAP1
0000098f: DUP2
00000990: SWAP1
00000991: SUB
00000992: PUSH1 0x64
00000994: ADD
00000995: SWAP1
00000996: REVERT
00000997: JUMPDEST
00000998: PUSH1 0x03
0000099a: DUP1
0000099b: SLOAD
0000099c: PUSH1 0x01
0000099e: ADD
0000099f: SWAP1
000009a0: SSTORE
000009a1: PUSH1 0x01
000009a3: PUSH1 0x01
000009a5: PUSH1 0xa0
000009a7: SHL
000009a8: SUB
000009a9: DUP5
000009aa: AND
000009ab: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
000009c0: EQ
000009c1: ISZERO
000009c2: PUSH2 0x0ad1
000009c5: JUMPI
000009c6: ADDRESS
000009c7: BALANCE
000009c8: DUP6
000009c9: GT
000009ca: ISZERO
000009cb: PUSH2 0x0a1b
000009ce: JUMPI
000009cf: PUSH1 0x40
000009d1: DUP1
000009d2: MLOAD
000009d3: PUSH3 0x461bcd
000009d7: PUSH1 0xe5
000009d9: SHL
000009da: DUP2
000009db: MSTORE
000009dc: PUSH1 0x20
000009de: PUSH1 0x04
000009e0: DUP3
000009e1: ADD
000009e2: MSTORE
000009e3: PUSH1 0x1d
000009e5: PUSH1 0x24
000009e7: DUP3
000009e8: ADD
000009e9: MSTORE
000009ea: PUSH32 0x496e73756666696369656e742062616c616e636520746f2073656e642e000000
00000a0b: PUSH1 0x44
00000a0d: DUP3
00000a0e: ADD
00000a0f: MSTORE
00000a10: SWAP1
00000a11: MLOAD
00000a12: SWAP1
00000a13: DUP2
00000a14: SWAP1
00000a15: SUB
00000a16: PUSH1 0x64
00000a18: ADD
00000a19: SWAP1
00000a1a: REVERT
00000a1b: JUMPDEST
00000a1c: PUSH1 0x40
00000a1e: MLOAD
00000a1f: PUSH1 0x00
00000a21: SWAP1
00000a22: PUSH1 0x60
00000a24: SWAP1
00000a25: PUSH1 0x01
00000a27: PUSH1 0x01
00000a29: PUSH1 0xa0
00000a2b: SHL
00000a2c: SUB
00000a2d: DUP10
00000a2e: AND
00000a2f: SWAP1
00000a30: PUSH2 0x4e20
00000a33: SWAP1
00000a34: DUP10
00000a35: SWAP1
00000a36: DUP6
00000a37: DUP2
00000a38: DUP2
00000a39: DUP2
00000a3a: DUP6
00000a3b: DUP9
00000a3c: DUP9
00000a3d: CALL
00000a3e: SWAP4
00000a3f: POP
00000a40: POP
00000a41: POP
00000a42: POP
00000a43: RETURNDATASIZE
00000a44: DUP1
00000a45: PUSH1 0x00
00000a47: DUP2
00000a48: EQ
00000a49: PUSH2 0x0a6e
00000a4c: JUMPI
00000a4d: PUSH1 0x40
00000a4f: MLOAD
00000a50: SWAP2
00000a51: POP
00000a52: PUSH1 0x1f
00000a54: NOT
00000a55: PUSH1 0x3f
00000a57: RETURNDATASIZE
00000a58: ADD
00000a59: AND
00000a5a: DUP3
00000a5b: ADD
00000a5c: PUSH1 0x40
00000a5e: MSTORE
00000a5f: RETURNDATASIZE
00000a60: DUP3
00000a61: MSTORE
00000a62: RETURNDATASIZE
00000a63: PUSH1 0x00
00000a65: PUSH1 0x20
00000a67: DUP5
00000a68: ADD
00000a69: RETURNDATACOPY
00000a6a: PUSH2 0x0a73
00000a6d: JUMP
00000a6e: JUMPDEST
00000a6f: PUSH1 0x60
00000a71: SWAP2
00000a72: POP
00000a73: JUMPDEST
00000a74: POP
00000a75: SWAP2
00000a76: POP
00000a77: SWAP2
00000a78: POP
00000a79: DUP2
00000a7a: PUSH2 0x0aca
00000a7d: JUMPI
00000a7e: PUSH1 0x40
00000a80: DUP1
00000a81: MLOAD
00000a82: PUSH3 0x461bcd
00000a86: PUSH1 0xe5
00000a88: SHL
00000a89: DUP2
00000a8a: MSTORE
00000a8b: PUSH1 0x20
00000a8d: PUSH1 0x04
00000a8f: DUP3
00000a90: ADD
00000a91: MSTORE
00000a92: PUSH1 0x16
00000a94: PUSH1 0x24
00000a96: DUP3
00000a97: ADD
00000a98: MSTORE
00000a99: PUSH32 0x4574686572207472616e73666572206661696c65642e00000000000000000000
00000aba: PUSH1 0x44
00000abc: DUP3
00000abd: ADD
00000abe: MSTORE
00000abf: SWAP1
00000ac0: MLOAD
00000ac1: SWAP1
00000ac2: DUP2
00000ac3: SWAP1
00000ac4: SUB
00000ac5: PUSH1 0x64
00000ac7: ADD
00000ac8: SWAP1
00000ac9: REVERT
00000aca: JUMPDEST
00000acb: POP
00000acc: POP
00000acd: PUSH2 0x0bbc
00000ad0: JUMP
00000ad1: JUMPDEST
00000ad2: PUSH1 0x40
00000ad4: DUP1
00000ad5: MLOAD
00000ad6: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00000af7: DUP2
00000af8: MSTORE
00000af9: PUSH1 0x01
00000afb: PUSH1 0x01
00000afd: PUSH1 0xa0
00000aff: SHL
00000b00: SUB
00000b01: DUP9
00000b02: DUP2
00000b03: AND
00000b04: PUSH1 0x04
00000b06: DUP4
00000b07: ADD
00000b08: MSTORE
00000b09: PUSH1 0x24
00000b0b: DUP3
00000b0c: ADD
00000b0d: DUP9
00000b0e: SWAP1
00000b0f: MSTORE
00000b10: SWAP2
00000b11: MLOAD
00000b12: DUP7
00000b13: SWAP3
00000b14: DUP4
00000b15: AND
00000b16: SWAP2
00000b17: PUSH4 0xa9059cbb
00000b1c: SWAP2
00000b1d: PUSH1 0x44
00000b1f: DUP1
00000b20: DUP4
00000b21: ADD
00000b22: SWAP3
00000b23: PUSH1 0x20
00000b25: SWAP3
00000b26: SWAP2
00000b27: SWAP1
00000b28: DUP3
00000b29: SWAP1
00000b2a: SUB
00000b2b: ADD
00000b2c: DUP2
00000b2d: PUSH1 0x00
00000b2f: DUP8
00000b30: DUP1
00000b31: EXTCODESIZE
00000b32: ISZERO
00000b33: DUP1
00000b34: ISZERO
00000b35: PUSH2 0x0b3d
00000b38: JUMPI
00000b39: PUSH1 0x00
00000b3b: DUP1
00000b3c: REVERT
00000b3d: JUMPDEST
00000b3e: POP
00000b3f: GAS
00000b40: CALL
00000b41: ISZERO
00000b42: DUP1
00000b43: ISZERO
00000b44: PUSH2 0x0b51
00000b47: JUMPI
00000b48: RETURNDATASIZE
00000b49: PUSH1 0x00
00000b4b: DUP1
00000b4c: RETURNDATACOPY
00000b4d: RETURNDATASIZE
00000b4e: PUSH1 0x00
00000b50: REVERT
00000b51: JUMPDEST
00000b52: POP
00000b53: POP
00000b54: POP
00000b55: POP
00000b56: PUSH1 0x40
00000b58: MLOAD
00000b59: RETURNDATASIZE
00000b5a: PUSH1 0x20
00000b5c: DUP2
00000b5d: LT
00000b5e: ISZERO
00000b5f: PUSH2 0x0b67
00000b62: JUMPI
00000b63: PUSH1 0x00
00000b65: DUP1
00000b66: REVERT
00000b67: JUMPDEST
00000b68: POP
00000b69: MLOAD
00000b6a: PUSH2 0x0bba
00000b6d: JUMPI
00000b6e: PUSH1 0x40
00000b70: DUP1
00000b71: MLOAD
00000b72: PUSH3 0x461bcd
00000b76: PUSH1 0xe5
00000b78: SHL
00000b79: DUP2
00000b7a: MSTORE
00000b7b: PUSH1 0x20
00000b7d: PUSH1 0x04
00000b7f: DUP3
00000b80: ADD
00000b81: MSTORE
00000b82: PUSH1 0x16
00000b84: PUSH1 0x24
00000b86: DUP3
00000b87: ADD
00000b88: MSTORE
00000b89: PUSH32 0x546f6b656e207472616e73666572206661696c65642e00000000000000000000
00000baa: PUSH1 0x44
00000bac: DUP3
00000bad: ADD
00000bae: MSTORE
00000baf: SWAP1
00000bb0: MLOAD
00000bb1: SWAP1
00000bb2: DUP2
00000bb3: SWAP1
00000bb4: SUB
00000bb5: PUSH1 0x64
00000bb7: ADD
00000bb8: SWAP1
00000bb9: REVERT
00000bba: JUMPDEST
00000bbb: POP
00000bbc: JUMPDEST
00000bbd: PUSH1 0x40
00000bbf: DUP1
00000bc0: MLOAD
00000bc1: PUSH1 0x01
00000bc3: PUSH1 0x01
00000bc5: PUSH1 0xa0
00000bc7: SHL
00000bc8: SUB
00000bc9: DUP1
00000bca: DUP10
00000bcb: AND
00000bcc: DUP3
00000bcd: MSTORE
00000bce: PUSH1 0x20
00000bd0: DUP3
00000bd1: ADD
00000bd2: DUP9
00000bd3: SWAP1
00000bd4: MSTORE
00000bd5: DUP7
00000bd6: AND
00000bd7: DUP2
00000bd8: DUP4
00000bd9: ADD
00000bda: MSTORE
00000bdb: SWAP1
00000bdc: MLOAD
00000bdd: PUSH32 0x5a41af68171a76546ae6bd5ae4bc21a429cf8704319e9a5bff7829f9cb959dd5
00000bfe: SWAP2
00000bff: DUP2
00000c00: SWAP1
00000c01: SUB
00000c02: PUSH1 0x60
00000c04: ADD
00000c05: SWAP1
00000c06: LOG1
00000c07: POP
00000c08: POP
00000c09: POP
00000c0a: POP
00000c0b: POP
00000c0c: POP
00000c0d: JUMP
00000c0e: JUMPDEST
00000c0f: PUSH32 0x150b7a0200000000000000000000000000000000000000000000000000000000
00000c30: SWAP5
00000c31: SWAP4
00000c32: POP
00000c33: POP
00000c34: POP
00000c35: POP
00000c36: JUMP
00000c37: JUMPDEST
00000c38: PUSH1 0x00
00000c3a: SLOAD
00000c3b: PUSH1 0xff
00000c3d: AND
00000c3e: DUP2
00000c3f: JUMP
00000c40: JUMPDEST
00000c41: PUSH1 0x00
00000c43: SLOAD
00000c44: PUSH1 0xff
00000c46: AND
00000c47: ISZERO
00000c48: PUSH2 0x0c82
00000c4b: JUMPI
00000c4c: PUSH1 0x40
00000c4e: MLOAD
00000c4f: PUSH3 0x461bcd
00000c53: PUSH1 0xe5
00000c55: SHL
00000c56: DUP2
00000c57: MSTORE
00000c58: PUSH1 0x04
00000c5a: ADD
00000c5b: DUP1
00000c5c: DUP1
00000c5d: PUSH1 0x20
00000c5f: ADD
00000c60: DUP3
00000c61: DUP2
00000c62: SUB
00000c63: DUP3
00000c64: MSTORE
00000c65: PUSH1 0x2b
00000c67: DUP2
00000c68: MSTORE
00000c69: PUSH1 0x20
00000c6b: ADD
00000c6c: DUP1
00000c6d: PUSH2 0x18d3
00000c70: PUSH1 0x2b
00000c72: SWAP2
00000c73: CODECOPY
00000c74: PUSH1 0x40
00000c76: ADD
00000c77: SWAP2
00000c78: POP
00000c79: POP
00000c7a: PUSH1 0x40
00000c7c: MLOAD
00000c7d: DUP1
00000c7e: SWAP2
00000c7f: SUB
00000c80: SWAP1
00000c81: REVERT
00000c82: JUMPDEST
00000c83: PUSH1 0x00
00000c85: DUP1
00000c86: JUMPDEST
00000c87: DUP4
00000c88: MLOAD
00000c89: DUP2
00000c8a: LT
00000c8b: ISZERO
00000c8c: PUSH2 0x0db1
00000c8f: JUMPI
00000c90: DUP2
00000c91: PUSH1 0x01
00000c93: PUSH1 0x01
00000c95: PUSH1 0xa0
00000c97: SHL
00000c98: SUB
00000c99: AND
00000c9a: DUP5
00000c9b: DUP3
00000c9c: DUP2
00000c9d: MLOAD
00000c9e: DUP2
00000c9f: LT
00000ca0: PUSH2 0x0ca5
00000ca3: JUMPI
00000ca4: INVALID
00000ca5: JUMPDEST
00000ca6: PUSH1 0x20
00000ca8: MUL
00000ca9: PUSH1 0x20
00000cab: ADD
00000cac: ADD
00000cad: MLOAD
00000cae: PUSH1 0x01
00000cb0: PUSH1 0x01
00000cb2: PUSH1 0xa0
00000cb4: SHL
00000cb5: SUB
00000cb6: AND
00000cb7: EQ
00000cb8: ISZERO
00000cb9: PUSH2 0x0cf3
00000cbc: JUMPI
00000cbd: PUSH1 0x40
00000cbf: MLOAD
00000cc0: PUSH3 0x461bcd
00000cc4: PUSH1 0xe5
00000cc6: SHL
00000cc7: DUP2
00000cc8: MSTORE
00000cc9: PUSH1 0x04
00000ccb: ADD
00000ccc: DUP1
00000ccd: DUP1
00000cce: PUSH1 0x20
00000cd0: ADD
00000cd1: DUP3
00000cd2: DUP2
00000cd3: SUB
00000cd4: DUP3
00000cd5: MSTORE
00000cd6: PUSH1 0x25
00000cd8: DUP2
00000cd9: MSTORE
00000cda: PUSH1 0x20
00000cdc: ADD
00000cdd: DUP1
00000cde: PUSH2 0x1834
00000ce1: PUSH1 0x25
00000ce3: SWAP2
00000ce4: CODECOPY
00000ce5: PUSH1 0x40
00000ce7: ADD
00000ce8: SWAP2
00000ce9: POP
00000cea: POP
00000ceb: PUSH1 0x40
00000ced: MLOAD
00000cee: DUP1
00000cef: SWAP2
00000cf0: SUB
00000cf1: SWAP1
00000cf2: REVERT
00000cf3: JUMPDEST
00000cf4: PUSH1 0x01
00000cf6: PUSH1 0x00
00000cf8: DUP6
00000cf9: DUP4
00000cfa: DUP2
00000cfb: MLOAD
00000cfc: DUP2
00000cfd: LT
00000cfe: PUSH2 0x0d03
00000d01: JUMPI
00000d02: INVALID
00000d03: JUMPDEST
00000d04: PUSH1 0x20
00000d06: SWAP1
00000d07: DUP2
00000d08: MUL
00000d09: SWAP2
00000d0a: SWAP1
00000d0b: SWAP2
00000d0c: ADD
00000d0d: DUP2
00000d0e: ADD
00000d0f: MLOAD
00000d10: PUSH1 0x01
00000d12: PUSH1 0x01
00000d14: PUSH1 0xa0
00000d16: SHL
00000d17: SUB
00000d18: AND
00000d19: DUP3
00000d1a: MSTORE
00000d1b: DUP2
00000d1c: ADD
00000d1d: SWAP2
00000d1e: SWAP1
00000d1f: SWAP2
00000d20: MSTORE
00000d21: PUSH1 0x40
00000d23: ADD
00000d24: PUSH1 0x00
00000d26: KECCAK256
00000d27: SLOAD
00000d28: PUSH1 0xff
00000d2a: AND
00000d2b: ISZERO
00000d2c: PUSH2 0x0d66
00000d2f: JUMPI
00000d30: PUSH1 0x40
00000d32: MLOAD
00000d33: PUSH3 0x461bcd
00000d37: PUSH1 0xe5
00000d39: SHL
00000d3a: DUP2
00000d3b: MSTORE
00000d3c: PUSH1 0x04
00000d3e: ADD
00000d3f: DUP1
00000d40: DUP1
00000d41: PUSH1 0x20
00000d43: ADD
00000d44: DUP3
00000d45: DUP2
00000d46: SUB
00000d47: DUP3
00000d48: MSTORE
00000d49: PUSH1 0x21
00000d4b: DUP2
00000d4c: MSTORE
00000d4d: PUSH1 0x20
00000d4f: ADD
00000d50: DUP1
00000d51: PUSH2 0x17c7
00000d54: PUSH1 0x21
00000d56: SWAP2
00000d57: CODECOPY
00000d58: PUSH1 0x40
00000d5a: ADD
00000d5b: SWAP2
00000d5c: POP
00000d5d: POP
00000d5e: PUSH1 0x40
00000d60: MLOAD
00000d61: DUP1
00000d62: SWAP2
00000d63: SUB
00000d64: SWAP1
00000d65: REVERT
00000d66: JUMPDEST
00000d67: PUSH1 0x01
00000d69: DUP1
00000d6a: PUSH1 0x00
00000d6c: DUP7
00000d6d: DUP5
00000d6e: DUP2
00000d6f: MLOAD
00000d70: DUP2
00000d71: LT
00000d72: PUSH2 0x0d77
00000d75: JUMPI
00000d76: INVALID
00000d77: JUMPDEST
00000d78: PUSH1 0x20
00000d7a: SWAP1
00000d7b: DUP2
00000d7c: MUL
00000d7d: SWAP2
00000d7e: SWAP1
00000d7f: SWAP2
00000d80: ADD
00000d81: DUP2
00000d82: ADD
00000d83: MLOAD
00000d84: PUSH1 0x01
00000d86: PUSH1 0x01
00000d88: PUSH1 0xa0
00000d8a: SHL
00000d8b: SUB
00000d8c: AND
00000d8d: DUP3
00000d8e: MSTORE
00000d8f: DUP2
00000d90: ADD
00000d91: SWAP2
00000d92: SWAP1
00000d93: SWAP2
00000d94: MSTORE
00000d95: PUSH1 0x40
00000d97: ADD
00000d98: PUSH1 0x00
00000d9a: KECCAK256
00000d9b: DUP1
00000d9c: SLOAD
00000d9d: PUSH1 0xff
00000d9f: NOT
00000da0: AND
00000da1: SWAP2
00000da2: ISZERO
00000da3: ISZERO
00000da4: SWAP2
00000da5: SWAP1
00000da6: SWAP2
00000da7: OR
00000da8: SWAP1
00000da9: SSTORE
00000daa: PUSH1 0x01
00000dac: ADD
00000dad: PUSH2 0x0c86
00000db0: JUMP
00000db1: JUMPDEST
00000db2: POP
00000db3: PUSH1 0x00
00000db5: DUP3
00000db6: GT
00000db7: PUSH2 0x0df1
00000dba: JUMPI
00000dbb: PUSH1 0x40
00000dbd: MLOAD
00000dbe: PUSH3 0x461bcd
00000dc2: PUSH1 0xe5
00000dc4: SHL
00000dc5: DUP2
00000dc6: MSTORE
00000dc7: PUSH1 0x04
00000dc9: ADD
00000dca: DUP1
00000dcb: DUP1
00000dcc: PUSH1 0x20
00000dce: ADD
00000dcf: DUP3
00000dd0: DUP2
00000dd1: SUB
00000dd2: DUP3
00000dd3: MSTORE
00000dd4: PUSH1 0x26
00000dd6: DUP2
00000dd7: MSTORE
00000dd8: PUSH1 0x20
00000dda: ADD
00000ddb: DUP1
00000ddc: PUSH2 0x188c
00000ddf: PUSH1 0x26
00000de1: SWAP2
00000de2: CODECOPY
00000de3: PUSH1 0x40
00000de5: ADD
00000de6: SWAP2
00000de7: POP
00000de8: POP
00000de9: PUSH1 0x40
00000deb: MLOAD
00000dec: DUP1
00000ded: SWAP2
00000dee: SUB
00000def: SWAP1
00000df0: REVERT
00000df1: JUMPDEST
00000df2: DUP3
00000df3: MLOAD
00000df4: DUP3
00000df5: GT
00000df6: ISZERO
00000df7: PUSH2 0x0e31
00000dfa: JUMPI
00000dfb: PUSH1 0x40
00000dfd: MLOAD
00000dfe: PUSH3 0x461bcd
00000e02: PUSH1 0xe5
00000e04: SHL
00000e05: DUP2
00000e06: MSTORE
00000e07: PUSH1 0x04
00000e09: ADD
00000e0a: DUP1
00000e0b: DUP1
00000e0c: PUSH1 0x20
00000e0e: ADD
00000e0f: DUP3
00000e10: DUP2
00000e11: SUB
00000e12: DUP3
00000e13: MSTORE
00000e14: PUSH1 0x28
00000e16: DUP2
00000e17: MSTORE
00000e18: PUSH1 0x20
00000e1a: ADD
00000e1b: DUP1
00000e1c: PUSH2 0x180c
00000e1f: PUSH1 0x28
00000e21: SWAP2
00000e22: CODECOPY
00000e23: PUSH1 0x40
00000e25: ADD
00000e26: SWAP2
00000e27: POP
00000e28: POP
00000e29: PUSH1 0x40
00000e2b: MLOAD
00000e2c: DUP1
00000e2d: SWAP2
00000e2e: SUB
00000e2f: SWAP1
00000e30: REVERT
00000e31: JUMPDEST
00000e32: PUSH1 0x04
00000e34: DUP3
00000e35: SWAP1
00000e36: SSTORE
00000e37: PUSH1 0x00
00000e39: DUP1
00000e3a: SLOAD
00000e3b: PUSH1 0xff
00000e3d: NOT
00000e3e: AND
00000e3f: PUSH1 0x01
00000e41: OR
00000e42: DUP2
00000e43: SSTORE
00000e44: PUSH1 0x40
00000e46: MLOAD
00000e47: PUSH32 0x5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c8
00000e68: SWAP2
00000e69: SWAP1
00000e6a: LOG1
00000e6b: POP
00000e6c: POP
00000e6d: POP
00000e6e: JUMP
00000e6f: JUMPDEST
00000e70: PUSH1 0x04
00000e72: SLOAD
00000e73: DUP2
00000e74: JUMP
00000e75: JUMPDEST
00000e76: PUSH1 0x03
00000e78: SLOAD
00000e79: DUP2
00000e7a: JUMP
00000e7b: JUMPDEST
00000e7c: PUSH2 0x0e89
00000e7f: DUP7
00000e80: DUP7
00000e81: DUP7
00000e82: DUP7
00000e83: DUP7
00000e84: DUP7
00000e85: PUSH2 0x1306
00000e88: JUMP
00000e89: JUMPDEST
00000e8a: PUSH2 0x0ecf
00000e8d: JUMPI
00000e8e: PUSH1 0x40
00000e90: DUP1
00000e91: MLOAD
00000e92: PUSH3 0x461bcd
00000e96: PUSH1 0xe5
00000e98: SHL
00000e99: DUP2
00000e9a: MSTORE
00000e9b: PUSH1 0x20
00000e9d: PUSH1 0x04
00000e9f: DUP3
00000ea0: ADD
00000ea1: MSTORE
00000ea2: PUSH1 0x12
00000ea4: PUSH1 0x24
00000ea6: DUP3
00000ea7: ADD
00000ea8: MSTORE
00000ea9: PUSH18 0x24b73b30b634b21039b4b3b730ba3ab93297
00000ebc: PUSH1 0x71
00000ebe: SHL
00000ebf: PUSH1 0x44
00000ec1: DUP3
00000ec2: ADD
00000ec3: MSTORE
00000ec4: SWAP1
00000ec5: MLOAD
00000ec6: SWAP1
00000ec7: DUP2
00000ec8: SWAP1
00000ec9: SUB
00000eca: PUSH1 0x64
00000ecc: ADD
00000ecd: SWAP1
00000ece: REVERT
00000ecf: JUMPDEST
00000ed0: PUSH1 0x03
00000ed2: DUP1
00000ed3: SLOAD
00000ed4: PUSH1 0x01
00000ed6: ADD
00000ed7: SWAP1
00000ed8: SSTORE
00000ed9: PUSH1 0x40
00000edb: DUP1
00000edc: MLOAD
00000edd: PUSH32 0x42842e0e00000000000000000000000000000000000000000000000000000000
00000efe: DUP2
00000eff: MSTORE
00000f00: ADDRESS
00000f01: PUSH1 0x04
00000f03: DUP3
00000f04: ADD
00000f05: MSTORE
00000f06: PUSH1 0x01
00000f08: PUSH1 0x01
00000f0a: PUSH1 0xa0
00000f0c: SHL
00000f0d: SUB
00000f0e: DUP9
00000f0f: DUP2
00000f10: AND
00000f11: PUSH1 0x24
00000f13: DUP4
00000f14: ADD
00000f15: MSTORE
00000f16: PUSH1 0x44
00000f18: DUP3
00000f19: ADD
00000f1a: DUP8
00000f1b: SWAP1
00000f1c: MSTORE
00000f1d: SWAP2
00000f1e: MLOAD
00000f1f: DUP8
00000f20: SWAP3
00000f21: DUP4
00000f22: AND
00000f23: SWAP2
00000f24: PUSH4 0x42842e0e
00000f29: SWAP2
00000f2a: PUSH1 0x64
00000f2c: DUP1
00000f2d: DUP4
00000f2e: ADD
00000f2f: SWAP3
00000f30: PUSH1 0x00
00000f32: SWAP3
00000f33: SWAP2
00000f34: SWAP1
00000f35: DUP3
00000f36: SWAP1
00000f37: SUB
00000f38: ADD
00000f39: DUP2
00000f3a: DUP4
00000f3b: DUP8
00000f3c: DUP1
00000f3d: EXTCODESIZE
00000f3e: ISZERO
00000f3f: DUP1
00000f40: ISZERO
00000f41: PUSH2 0x0f49
00000f44: JUMPI
00000f45: PUSH1 0x00
00000f47: DUP1
00000f48: REVERT
00000f49: JUMPDEST
00000f4a: POP
00000f4b: GAS
00000f4c: CALL
00000f4d: ISZERO
00000f4e: DUP1
00000f4f: ISZERO
00000f50: PUSH2 0x0f5d
00000f53: JUMPI
00000f54: RETURNDATASIZE
00000f55: PUSH1 0x00
00000f57: DUP1
00000f58: RETURNDATACOPY
00000f59: RETURNDATASIZE
00000f5a: PUSH1 0x00
00000f5c: REVERT
00000f5d: JUMPDEST
00000f5e: POP
00000f5f: POP
00000f60: PUSH1 0x40
00000f62: DUP1
00000f63: MLOAD
00000f64: PUSH1 0x01
00000f66: PUSH1 0x01
00000f68: PUSH1 0xa0
00000f6a: SHL
00000f6b: SUB
00000f6c: DUP1
00000f6d: DUP13
00000f6e: AND
00000f6f: DUP3
00000f70: MSTORE
00000f71: DUP11
00000f72: AND
00000f73: PUSH1 0x20
00000f75: DUP3
00000f76: ADD
00000f77: MSTORE
00000f78: DUP1
00000f79: DUP3
00000f7a: ADD
00000f7b: DUP10
00000f7c: SWAP1
00000f7d: MSTORE
00000f7e: SWAP1
00000f7f: MLOAD
00000f80: PUSH32 0xc18352ae46a2296c951b2256c5ebc5b4546e6222fea2e4f36e824db9d44eb7ec
00000fa1: SWAP4
00000fa2: POP
00000fa3: SWAP1
00000fa4: DUP2
00000fa5: SWAP1
00000fa6: SUB
00000fa7: PUSH1 0x60
00000fa9: ADD
00000faa: SWAP2
00000fab: POP
00000fac: LOG1
00000fad: POP
00000fae: POP
00000faf: POP
00000fb0: POP
00000fb1: POP
00000fb2: POP
00000fb3: POP
00000fb4: JUMP
00000fb5: JUMPDEST
00000fb6: PUSH1 0x00
00000fb8: PUSH1 0x01
00000fba: PUSH1 0x01
00000fbc: PUSH1 0xa0
00000fbe: SHL
00000fbf: SUB
00000fc0: DUP6
00000fc1: AND
00000fc2: ADDRESS
00000fc3: EQ
00000fc4: ISZERO
00000fc5: PUSH2 0x0fff
00000fc8: JUMPI
00000fc9: PUSH1 0x40
00000fcb: MLOAD
00000fcc: PUSH3 0x461bcd
00000fd0: PUSH1 0xe5
00000fd2: SHL
00000fd3: DUP2
00000fd4: MSTORE
00000fd5: PUSH1 0x04
00000fd7: ADD
00000fd8: DUP1
00000fd9: DUP1
00000fda: PUSH1 0x20
00000fdc: ADD
00000fdd: DUP3
00000fde: DUP2
00000fdf: SUB
00000fe0: DUP3
00000fe1: MSTORE
00000fe2: PUSH1 0x24
00000fe4: DUP2
00000fe5: MSTORE
00000fe6: PUSH1 0x20
00000fe8: ADD
00000fe9: DUP1
00000fea: PUSH2 0x17e8
00000fed: PUSH1 0x24
00000fef: SWAP2
00000ff0: CODECOPY
00000ff1: PUSH1 0x40
00000ff3: ADD
00000ff4: SWAP2
00000ff5: POP
00000ff6: POP
00000ff7: PUSH1 0x40
00000ff9: MLOAD
00000ffa: DUP1
00000ffb: SWAP2
00000ffc: SUB
00000ffd: SWAP1
00000ffe: REVERT
00000fff: JUMPDEST
00001000: POP
00001001: PUSH1 0x40
00001003: DUP1
00001004: MLOAD
00001005: ADDRESS
00001006: PUSH1 0x60
00001008: SWAP1
00001009: DUP2
0000100a: SHL
0000100b: PUSH1 0x20
0000100d: DUP1
0000100e: DUP5
0000100f: ADD
00001010: SWAP2
00001011: SWAP1
00001012: SWAP2
00001013: MSTORE
00001014: PUSH12 0xffffffffffffffffffffffff
00001021: NOT
00001022: SWAP8
00001023: DUP3
00001024: SHL
00001025: DUP9
00001026: AND
00001027: PUSH1 0x34
00001029: DUP5
0000102a: ADD
0000102b: MSTORE
0000102c: SWAP6
0000102d: SWAP1
0000102e: SHL
0000102f: SWAP1
00001030: SWAP6
00001031: AND
00001032: PUSH1 0x48
00001034: DUP7
00001035: ADD
00001036: MSTORE
00001037: PUSH1 0x5c
00001039: DUP6
0000103a: ADD
0000103b: SWAP3
0000103c: SWAP1
0000103d: SWAP3
0000103e: MSTORE
0000103f: PUSH1 0x7c
00001041: DUP1
00001042: DUP6
00001043: ADD
00001044: SWAP2
00001045: SWAP1
00001046: SWAP2
00001047: MSTORE
00001048: DUP2
00001049: MLOAD
0000104a: DUP1
0000104b: DUP6
0000104c: SUB
0000104d: SWAP1
0000104e: SWAP2
0000104f: ADD
00001050: DUP2
00001051: MSTORE
00001052: PUSH1 0x9c
00001054: SWAP1
00001055: SWAP4
00001056: ADD
00001057: SWAP1
00001058: MSTORE
00001059: DUP2
0000105a: MLOAD
0000105b: SWAP2
0000105c: ADD
0000105d: KECCAK256
0000105e: SWAP1
0000105f: JUMP
00001060: JUMPDEST
00001061: POP
00001062: POP
00001063: POP
00001064: JUMP
00001065: JUMPDEST
00001066: PUSH1 0x00
00001068: PUSH1 0x01
0000106a: PUSH1 0x01
0000106c: PUSH1 0xa0
0000106e: SHL
0000106f: SUB
00001070: DUP6
00001071: AND
00001072: ADDRESS
00001073: EQ
00001074: ISZERO
00001075: PUSH2 0x10af
00001078: JUMPI
00001079: PUSH1 0x40
0000107b: MLOAD
0000107c: PUSH3 0x461bcd
00001080: PUSH1 0xe5
00001082: SHL
00001083: DUP2
00001084: MSTORE
00001085: PUSH1 0x04
00001087: ADD
00001088: DUP1
00001089: DUP1
0000108a: PUSH1 0x20
0000108c: ADD
0000108d: DUP3
0000108e: DUP2
0000108f: SUB
00001090: DUP3
00001091: MSTORE
00001092: PUSH1 0x24
00001094: DUP2
00001095: MSTORE
00001096: PUSH1 0x20
00001098: ADD
00001099: DUP1
0000109a: PUSH2 0x17e8
0000109d: PUSH1 0x24
0000109f: SWAP2
000010a0: CODECOPY
000010a1: PUSH1 0x40
000010a3: ADD
000010a4: SWAP2
000010a5: POP
000010a6: POP
000010a7: PUSH1 0x40
000010a9: MLOAD
000010aa: DUP1
000010ab: SWAP2
000010ac: SUB
000010ad: SWAP1
000010ae: REVERT
000010af: JUMPDEST
000010b0: POP
000010b1: PUSH1 0x40
000010b3: DUP1
000010b4: MLOAD
000010b5: ADDRESS
000010b6: PUSH1 0x60
000010b8: SWAP1
000010b9: DUP2
000010ba: SHL
000010bb: PUSH1 0x20
000010bd: DUP1
000010be: DUP5
000010bf: ADD
000010c0: SWAP2
000010c1: SWAP1
000010c2: SWAP2
000010c3: MSTORE
000010c4: PUSH12 0xffffffffffffffffffffffff
000010d1: NOT
000010d2: SWAP8
000010d3: DUP3
000010d4: SHL
000010d5: DUP9
000010d6: AND
000010d7: PUSH1 0x34
000010d9: DUP5
000010da: ADD
000010db: MSTORE
000010dc: PUSH1 0x48
000010de: DUP4
000010df: ADD
000010e0: SWAP7
000010e1: SWAP1
000010e2: SWAP7
000010e3: MSTORE
000010e4: SWAP4
000010e5: SWAP1
000010e6: SWAP4
000010e7: SHL
000010e8: SWAP1
000010e9: SWAP5
000010ea: AND
000010eb: PUSH1 0x68
000010ed: DUP4
000010ee: ADD
000010ef: MSTORE
000010f0: PUSH1 0x7c
000010f2: DUP1
000010f3: DUP4
000010f4: ADD
000010f5: SWAP2
000010f6: SWAP1
000010f7: SWAP2
000010f8: MSTORE
000010f9: DUP4
000010fa: MLOAD
000010fb: DUP1
000010fc: DUP4
000010fd: SUB
000010fe: SWAP1
000010ff: SWAP2
00001100: ADD
00001101: DUP2
00001102: MSTORE
00001103: PUSH1 0x9c
00001105: SWAP1
00001106: SWAP2
00001107: ADD
00001108: SWAP1
00001109: SWAP3
0000110a: MSTORE
0000110b: DUP2
0000110c: MLOAD
0000110d: SWAP2
0000110e: ADD
0000110f: KECCAK256
00001110: SWAP1
00001111: JUMP
00001112: JUMPDEST
00001113: PUSH32 0xf0b9e5ba00000000000000000000000000000000000000000000000000000000
00001134: SWAP5
00001135: SWAP4
00001136: POP
00001137: POP
00001138: POP
00001139: POP
0000113a: JUMP
0000113b: JUMPDEST
0000113c: PUSH1 0x00
0000113e: DUP1
0000113f: PUSH2 0x1149
00001142: DUP9
00001143: DUP9
00001144: DUP9
00001145: PUSH2 0x147d
00001148: JUMP
00001149: JUMPDEST
0000114a: SWAP1
0000114b: POP
0000114c: PUSH1 0x04
0000114e: SLOAD
0000114f: DUP6
00001150: MLOAD
00001151: EQ
00001152: DUP1
00001153: ISZERO
00001154: PUSH2 0x115f
00001157: JUMPI
00001158: POP
00001159: PUSH1 0x04
0000115b: SLOAD
0000115c: DUP5
0000115d: MLOAD
0000115e: EQ
0000115f: JUMPDEST
00001160: DUP1
00001161: ISZERO
00001162: PUSH2 0x116d
00001165: JUMPI
00001166: POP
00001167: PUSH1 0x04
00001169: SLOAD
0000116a: DUP4
0000116b: MLOAD
0000116c: EQ
0000116d: JUMPDEST
0000116e: PUSH2 0x11a8
00001171: JUMPI
00001172: PUSH1 0x40
00001174: MLOAD
00001175: PUSH3 0x461bcd
00001179: PUSH1 0xe5
0000117b: SHL
0000117c: DUP2
0000117d: MSTORE
0000117e: PUSH1 0x04
00001180: ADD
00001181: DUP1
00001182: DUP1
00001183: PUSH1 0x20
00001185: ADD
00001186: DUP3
00001187: DUP2
00001188: SUB
00001189: DUP3
0000118a: MSTORE
0000118b: PUSH1 0x33
0000118d: DUP2
0000118e: MSTORE
0000118f: PUSH1 0x20
00001191: ADD
00001192: DUP1
00001193: PUSH2 0x1859
00001196: PUSH1 0x33
00001198: SWAP2
00001199: CODECOPY
0000119a: PUSH1 0x40
0000119c: ADD
0000119d: SWAP2
0000119e: POP
0000119f: POP
000011a0: PUSH1 0x40
000011a2: MLOAD
000011a3: DUP1
000011a4: SWAP2
000011a5: SUB
000011a6: SWAP1
000011a7: REVERT
000011a8: JUMPDEST
000011a9: PUSH1 0x60
000011ab: PUSH1 0x04
000011ad: SLOAD
000011ae: PUSH1 0x40
000011b0: MLOAD
000011b1: SWAP1
000011b2: DUP1
000011b3: DUP3
000011b4: MSTORE
000011b5: DUP1
000011b6: PUSH1 0x20
000011b8: MUL
000011b9: PUSH1 0x20
000011bb: ADD
000011bc: DUP3
000011bd: ADD
000011be: PUSH1 0x40
000011c0: MSTORE
000011c1: DUP1
000011c2: ISZERO
000011c3: PUSH2 0x11d6
000011c6: JUMPI
000011c7: DUP2
000011c8: PUSH1 0x20
000011ca: ADD
000011cb: PUSH1 0x20
000011cd: DUP3
000011ce: MUL
000011cf: DUP1
000011d0: CODESIZE
000011d1: DUP4
000011d2: CODECOPY
000011d3: ADD
000011d4: SWAP1
000011d5: POP
000011d6: JUMPDEST
000011d7: POP
000011d8: SWAP1
000011d9: POP
000011da: PUSH1 0x00
000011dc: JUMPDEST
000011dd: PUSH1 0x04
000011df: SLOAD
000011e0: DUP2
000011e1: LT
000011e2: ISZERO
000011e3: PUSH2 0x12b2
000011e6: JUMPI
000011e7: PUSH1 0x01
000011e9: DUP4
000011ea: DUP9
000011eb: DUP4
000011ec: DUP2
000011ed: MLOAD
000011ee: DUP2
000011ef: LT
000011f0: PUSH2 0x11f5
000011f3: JUMPI
000011f4: INVALID
000011f5: JUMPDEST
000011f6: PUSH1 0x20
000011f8: MUL
000011f9: PUSH1 0x20
000011fb: ADD
000011fc: ADD
000011fd: MLOAD
000011fe: DUP9
000011ff: DUP5
00001200: DUP2
00001201: MLOAD
00001202: DUP2
00001203: LT
00001204: PUSH2 0x1209
00001207: JUMPI
00001208: INVALID
00001209: JUMPDEST
0000120a: PUSH1 0x20
0000120c: MUL
0000120d: PUSH1 0x20
0000120f: ADD
00001210: ADD
00001211: MLOAD
00001212: DUP9
00001213: DUP6
00001214: DUP2
00001215: MLOAD
00001216: DUP2
00001217: LT
00001218: PUSH2 0x121d
0000121b: JUMPI
0000121c: INVALID
0000121d: JUMPDEST
0000121e: PUSH1 0x20
00001220: MUL
00001221: PUSH1 0x20
00001223: ADD
00001224: ADD
00001225: MLOAD
00001226: PUSH1 0x40
00001228: MLOAD
00001229: PUSH1 0x00
0000122b: DUP2
0000122c: MSTORE
0000122d: PUSH1 0x20
0000122f: ADD
00001230: PUSH1 0x40
00001232: MSTORE
00001233: PUSH1 0x40
00001235: MLOAD
00001236: DUP1
00001237: DUP6
00001238: DUP2
00001239: MSTORE
0000123a: PUSH1 0x20
0000123c: ADD
0000123d: DUP5
0000123e: PUSH1 0xff
00001240: AND
00001241: PUSH1 0xff
00001243: AND
00001244: DUP2
00001245: MSTORE
00001246: PUSH1 0x20
00001248: ADD
00001249: DUP4
0000124a: DUP2
0000124b: MSTORE
0000124c: PUSH1 0x20
0000124e: ADD
0000124f: DUP3
00001250: DUP2
00001251: MSTORE
00001252: PUSH1 0x20
00001254: ADD
00001255: SWAP5
00001256: POP
00001257: POP
00001258: POP
00001259: POP
0000125a: POP
0000125b: PUSH1 0x20
0000125d: PUSH1 0x40
0000125f: MLOAD
00001260: PUSH1 0x20
00001262: DUP2
00001263: SUB
00001264: SWAP1
00001265: DUP1
00001266: DUP5
00001267: SUB
00001268: SWAP1
00001269: DUP6
0000126a: GAS
0000126b: STATICCALL
0000126c: ISZERO
0000126d: DUP1
0000126e: ISZERO
0000126f: PUSH2 0x127c
00001272: JUMPI
00001273: RETURNDATASIZE
00001274: PUSH1 0x00
00001276: DUP1
00001277: RETURNDATACOPY
00001278: RETURNDATASIZE
00001279: PUSH1 0x00
0000127b: REVERT
0000127c: JUMPDEST
0000127d: POP
0000127e: POP
0000127f: POP
00001280: PUSH1 0x20
00001282: PUSH1 0x40
00001284: MLOAD
00001285: SUB
00001286: MLOAD
00001287: DUP3
00001288: DUP3
00001289: DUP2
0000128a: MLOAD
0000128b: DUP2
0000128c: LT
0000128d: PUSH2 0x1292
00001290: JUMPI
00001291: INVALID
00001292: JUMPDEST
00001293: PUSH1 0x01
00001295: PUSH1 0x01
00001297: PUSH1 0xa0
00001299: SHL
0000129a: SUB
0000129b: SWAP1
0000129c: SWAP3
0000129d: AND
0000129e: PUSH1 0x20
000012a0: SWAP3
000012a1: DUP4
000012a2: MUL
000012a3: SWAP2
000012a4: SWAP1
000012a5: SWAP2
000012a6: ADD
000012a7: SWAP1
000012a8: SWAP2
000012a9: ADD
000012aa: MSTORE
000012ab: PUSH1 0x01
000012ad: ADD
000012ae: PUSH2 0x11dc
000012b1: JUMP
000012b2: JUMPDEST
000012b3: POP
000012b4: PUSH2 0x12bc
000012b7: DUP2
000012b8: PUSH2 0x1540
000012bb: JUMP
000012bc: JUMPDEST
000012bd: PUSH2 0x12f7
000012c0: JUMPI
000012c1: PUSH1 0x40
000012c3: MLOAD
000012c4: PUSH3 0x461bcd
000012c8: PUSH1 0xe5
000012ca: SHL
000012cb: DUP2
000012cc: MSTORE
000012cd: PUSH1 0x04
000012cf: ADD
000012d0: DUP1
000012d1: DUP1
000012d2: PUSH1 0x20
000012d4: ADD
000012d5: DUP3
000012d6: DUP2
000012d7: SUB
000012d8: DUP3
000012d9: MSTORE
000012da: PUSH1 0x21
000012dc: DUP2
000012dd: MSTORE
000012de: PUSH1 0x20
000012e0: ADD
000012e1: DUP1
000012e2: PUSH2 0x18b2
000012e5: PUSH1 0x21
000012e7: SWAP2
000012e8: CODECOPY
000012e9: PUSH1 0x40
000012eb: ADD
000012ec: SWAP2
000012ed: POP
000012ee: POP
000012ef: PUSH1 0x40
000012f1: MLOAD
000012f2: DUP1
000012f3: SWAP2
000012f4: SUB
000012f5: SWAP1
000012f6: REVERT
000012f7: JUMPDEST
000012f8: POP
000012f9: PUSH1 0x01
000012fb: SWAP9
000012fc: SWAP8
000012fd: POP
000012fe: POP
000012ff: POP
00001300: POP
00001301: POP
00001302: POP
00001303: POP
00001304: POP
00001305: JUMP
00001306: JUMPDEST
00001307: PUSH1 0x00
00001309: DUP1
0000130a: PUSH2 0x1314
0000130d: DUP9
0000130e: DUP9
0000130f: DUP9
00001310: PUSH2 0x17b5
00001313: JUMP
00001314: JUMPDEST
00001315: SWAP1
00001316: POP
00001317: PUSH1 0x04
00001319: SLOAD
0000131a: DUP6
0000131b: MLOAD
0000131c: EQ
0000131d: DUP1
0000131e: ISZERO
0000131f: PUSH2 0x132a
00001322: JUMPI
00001323: POP
00001324: PUSH1 0x04
00001326: SLOAD
00001327: DUP5
00001328: MLOAD
00001329: EQ
0000132a: JUMPDEST
0000132b: DUP1
0000132c: ISZERO
0000132d: PUSH2 0x1338
00001330: JUMPI
00001331: POP
00001332: PUSH1 0x04
00001334: SLOAD
00001335: DUP4
00001336: MLOAD
00001337: EQ
00001338: JUMPDEST
00001339: PUSH2 0x1373
0000133c: JUMPI
0000133d: PUSH1 0x40
0000133f: MLOAD
00001340: PUSH3 0x461bcd
00001344: PUSH1 0xe5
00001346: SHL
00001347: DUP2
00001348: MSTORE
00001349: PUSH1 0x04
0000134b: ADD
0000134c: DUP1
0000134d: DUP1
0000134e: PUSH1 0x20
00001350: ADD
00001351: DUP3
00001352: DUP2
00001353: SUB
00001354: DUP3
00001355: MSTORE
00001356: PUSH1 0x33
00001358: DUP2
00001359: MSTORE
0000135a: PUSH1 0x20
0000135c: ADD
0000135d: DUP1
0000135e: PUSH2 0x1859
00001361: PUSH1 0x33
00001363: SWAP2
00001364: CODECOPY
00001365: PUSH1 0x40
00001367: ADD
00001368: SWAP2
00001369: POP
0000136a: POP
0000136b: PUSH1 0x40
0000136d: MLOAD
0000136e: DUP1
0000136f: SWAP2
00001370: SUB
00001371: SWAP1
00001372: REVERT
00001373: JUMPDEST
00001374: PUSH1 0x60
00001376: PUSH1 0x04
00001378: SLOAD
00001379: PUSH1 0x40
0000137b: MLOAD
0000137c: SWAP1
0000137d: DUP1
0000137e: DUP3
0000137f: MSTORE
00001380: DUP1
00001381: PUSH1 0x20
00001383: MUL
00001384: PUSH1 0x20
00001386: ADD
00001387: DUP3
00001388: ADD
00001389: PUSH1 0x40
0000138b: MSTORE
0000138c: DUP1
0000138d: ISZERO
0000138e: PUSH2 0x13a1
00001391: JUMPI
00001392: DUP2
00001393: PUSH1 0x20
00001395: ADD
00001396: PUSH1 0x20
00001398: DUP3
00001399: MUL
0000139a: DUP1
0000139b: CODESIZE
0000139c: DUP4
0000139d: CODECOPY
0000139e: ADD
0000139f: SWAP1
000013a0: POP
000013a1: JUMPDEST
000013a2: POP
000013a3: SWAP1
000013a4: POP
000013a5: PUSH1 0x00
000013a7: JUMPDEST
000013a8: PUSH1 0x04
000013aa: SLOAD
000013ab: DUP2
000013ac: LT
000013ad: ISZERO
000013ae: PUSH2 0x12b2
000013b1: JUMPI
000013b2: PUSH1 0x01
000013b4: DUP4
000013b5: DUP9
000013b6: DUP4
000013b7: DUP2
000013b8: MLOAD
000013b9: DUP2
000013ba: LT
000013bb: PUSH2 0x13c0
000013be: JUMPI
000013bf: INVALID
000013c0: JUMPDEST
000013c1: PUSH1 0x20
000013c3: MUL
000013c4: PUSH1 0x20
000013c6: ADD
000013c7: ADD
000013c8: MLOAD
000013c9: DUP9
000013ca: DUP5
000013cb: DUP2
000013cc: MLOAD
000013cd: DUP2
000013ce: LT
000013cf: PUSH2 0x13d4
000013d2: JUMPI
000013d3: INVALID
000013d4: JUMPDEST
000013d5: PUSH1 0x20
000013d7: MUL
000013d8: PUSH1 0x20
000013da: ADD
000013db: ADD
000013dc: MLOAD
000013dd: DUP9
000013de: DUP6
000013df: DUP2
000013e0: MLOAD
000013e1: DUP2
000013e2: LT
000013e3: PUSH2 0x13e8
000013e6: JUMPI
000013e7: INVALID
000013e8: JUMPDEST
000013e9: PUSH1 0x20
000013eb: MUL
000013ec: PUSH1 0x20
000013ee: ADD
000013ef: ADD
000013f0: MLOAD
000013f1: PUSH1 0x40
000013f3: MLOAD
000013f4: PUSH1 0x00
000013f6: DUP2
000013f7: MSTORE
000013f8: PUSH1 0x20
000013fa: ADD
000013fb: PUSH1 0x40
000013fd: MSTORE
000013fe: PUSH1 0x40
00001400: MLOAD
00001401: DUP1
00001402: DUP6
00001403: DUP2
00001404: MSTORE
00001405: PUSH1 0x20
00001407: ADD
00001408: DUP5
00001409: PUSH1 0xff
0000140b: AND
0000140c: PUSH1 0xff
0000140e: AND
0000140f: DUP2
00001410: MSTORE
00001411: PUSH1 0x20
00001413: ADD
00001414: DUP4
00001415: DUP2
00001416: MSTORE
00001417: PUSH1 0x20
00001419: ADD
0000141a: DUP3
0000141b: DUP2
0000141c: MSTORE
0000141d: PUSH1 0x20
0000141f: ADD
00001420: SWAP5
00001421: POP
00001422: POP
00001423: POP
00001424: POP
00001425: POP
00001426: PUSH1 0x20
00001428: PUSH1 0x40
0000142a: MLOAD
0000142b: PUSH1 0x20
0000142d: DUP2
0000142e: SUB
0000142f: SWAP1
00001430: DUP1
00001431: DUP5
00001432: SUB
00001433: SWAP1
00001434: DUP6
00001435: GAS
00001436: STATICCALL
00001437: ISZERO
00001438: DUP1
00001439: ISZERO
0000143a: PUSH2 0x1447
0000143d: JUMPI
0000143e: RETURNDATASIZE
0000143f: PUSH1 0x00
00001441: DUP1
00001442: RETURNDATACOPY
00001443: RETURNDATASIZE
00001444: PUSH1 0x00
00001446: REVERT
00001447: JUMPDEST
00001448: POP
00001449: POP
0000144a: POP
0000144b: PUSH1 0x20
0000144d: PUSH1 0x40
0000144f: MLOAD
00001450: SUB
00001451: MLOAD
00001452: DUP3
00001453: DUP3
00001454: DUP2
00001455: MLOAD
00001456: DUP2
00001457: LT
00001458: PUSH2 0x145d
0000145b: JUMPI
0000145c: INVALID
0000145d: JUMPDEST
0000145e: PUSH1 0x01
00001460: PUSH1 0x01
00001462: PUSH1 0xa0
00001464: SHL
00001465: SUB
00001466: SWAP1
00001467: SWAP3
00001468: AND
00001469: PUSH1 0x20
0000146b: SWAP3
0000146c: DUP4
0000146d: MUL
0000146e: SWAP2
0000146f: SWAP1
00001470: SWAP2
00001471: ADD
00001472: SWAP1
00001473: SWAP2
00001474: ADD
00001475: MSTORE
00001476: PUSH1 0x01
00001478: ADD
00001479: PUSH2 0x13a7
0000147c: JUMP
0000147d: JUMPDEST
0000147e: PUSH1 0x00
00001480: DUP1
00001481: PUSH2 0x148e
00001484: DUP6
00001485: DUP6
00001486: DUP6
00001487: PUSH1 0x03
00001489: SLOAD
0000148a: PUSH2 0x1065
0000148d: JUMP
0000148e: JUMPDEST
0000148f: SWAP1
00001490: POP
00001491: PUSH1 0x60
00001493: PUSH1 0x40
00001495: MLOAD
00001496: DUP1
00001497: PUSH1 0x40
00001499: ADD
0000149a: PUSH1 0x40
0000149c: MSTORE
0000149d: DUP1
0000149e: PUSH1 0x1c
000014a0: DUP2
000014a1: MSTORE
000014a2: PUSH1 0x20
000014a4: ADD
000014a5: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000
000014c6: DUP2
000014c7: MSTORE
000014c8: POP
000014c9: SWAP1
000014ca: POP
000014cb: DUP1
000014cc: DUP3
000014cd: PUSH1 0x40
000014cf: MLOAD
000014d0: PUSH1 0x20
000014d2: ADD
000014d3: DUP1
000014d4: DUP4
000014d5: DUP1
000014d6: MLOAD
000014d7: SWAP1
000014d8: PUSH1 0x20
000014da: ADD
000014db: SWAP1
000014dc: DUP1
000014dd: DUP4
000014de: DUP4
000014df: JUMPDEST
000014e0: PUSH1 0x20
000014e2: DUP4
000014e3: LT
000014e4: PUSH2 0x14fe
000014e7: JUMPI
000014e8: DUP1
000014e9: MLOAD
000014ea: DUP3
000014eb: MSTORE
000014ec: PUSH1 0x1f
000014ee: NOT
000014ef: SWAP1
000014f0: SWAP3
000014f1: ADD
000014f2: SWAP2
000014f3: PUSH1 0x20
000014f5: SWAP2
000014f6: DUP3
000014f7: ADD
000014f8: SWAP2
000014f9: ADD
000014fa: PUSH2 0x14df
000014fd: JUMP
000014fe: JUMPDEST
000014ff: MLOAD
00001500: DUP2
00001501: MLOAD
00001502: PUSH1 0x20
00001504: SWAP4
00001505: DUP5
00001506: SUB
00001507: PUSH2 0x0100
0000150a: EXP
0000150b: PUSH1 0x00
0000150d: NOT
0000150e: ADD
0000150f: DUP1
00001510: NOT
00001511: SWAP1
00001512: SWAP3
00001513: AND
00001514: SWAP2
00001515: AND
00001516: OR
00001517: SWAP1
00001518: MSTORE
00001519: SWAP3
0000151a: ADD
0000151b: SWAP4
0000151c: DUP5
0000151d: MSTORE
0000151e: POP
0000151f: PUSH1 0x40
00001521: DUP1
00001522: MLOAD
00001523: DUP1
00001524: DUP6
00001525: SUB
00001526: DUP2
00001527: MSTORE
00001528: SWAP4
00001529: DUP3
0000152a: ADD
0000152b: SWAP1
0000152c: MSTORE
0000152d: DUP3
0000152e: MLOAD
0000152f: SWAP3
00001530: ADD
00001531: SWAP2
00001532: SWAP1
00001533: SWAP2
00001534: KECCAK256
00001535: SWAP9
00001536: SWAP8
00001537: POP
00001538: POP
00001539: POP
0000153a: POP
0000153b: POP
0000153c: POP
0000153d: POP
0000153e: POP
0000153f: JUMP
00001540: JUMPDEST
00001541: PUSH1 0x00
00001543: PUSH1 0x04
00001545: SLOAD
00001546: DUP3
00001547: MLOAD
00001548: EQ
00001549: PUSH2 0x1599
0000154c: JUMPI
0000154d: PUSH1 0x40
0000154f: DUP1
00001550: MLOAD
00001551: PUSH3 0x461bcd
00001555: PUSH1 0xe5
00001557: SHL
00001558: DUP2
00001559: MSTORE
0000155a: PUSH1 0x20
0000155c: PUSH1 0x04
0000155e: DUP3
0000155f: ADD
00001560: MSTORE
00001561: PUSH1 0x19
00001563: PUSH1 0x24
00001565: DUP3
00001566: ADD
00001567: MSTORE
00001568: PUSH32 0x496e76616c6964206e756d626572206f66207369676e65722e00000000000000
00001589: PUSH1 0x44
0000158b: DUP3
0000158c: ADD
0000158d: MSTORE
0000158e: SWAP1
0000158f: MLOAD
00001590: SWAP1
00001591: DUP2
00001592: SWAP1
00001593: SUB
00001594: PUSH1 0x64
00001596: ADD
00001597: SWAP1
00001598: REVERT
00001599: JUMPDEST
0000159a: PUSH1 0x00
0000159c: JUMPDEST
0000159d: DUP3
0000159e: MLOAD
0000159f: DUP2
000015a0: LT
000015a1: ISZERO
000015a2: PUSH2 0x175c
000015a5: JUMPI
000015a6: PUSH1 0x00
000015a8: PUSH1 0x01
000015aa: PUSH1 0x01
000015ac: PUSH1 0xa0
000015ae: SHL
000015af: SUB
000015b0: AND
000015b1: DUP4
000015b2: DUP3
000015b3: DUP2
000015b4: MLOAD
000015b5: DUP2
000015b6: LT
000015b7: PUSH2 0x15bc
000015ba: JUMPI
000015bb: INVALID
000015bc: JUMPDEST
000015bd: PUSH1 0x20
000015bf: MUL
000015c0: PUSH1 0x20
000015c2: ADD
000015c3: ADD
000015c4: MLOAD
000015c5: PUSH1 0x01
000015c7: PUSH1 0x01
000015c9: PUSH1 0xa0
000015cb: SHL
000015cc: SUB
000015cd: AND
000015ce: EQ
000015cf: ISZERO
000015d0: PUSH2 0x1615
000015d3: JUMPI
000015d4: PUSH1 0x40
000015d6: DUP1
000015d7: MLOAD
000015d8: PUSH3 0x461bcd
000015dc: PUSH1 0xe5
000015de: SHL
000015df: DUP2
000015e0: MSTORE
000015e1: PUSH1 0x20
000015e3: PUSH1 0x04
000015e5: DUP3
000015e6: ADD
000015e7: MSTORE
000015e8: PUSH1 0x12
000015ea: PUSH1 0x24
000015ec: DUP3
000015ed: ADD
000015ee: MSTORE
000015ef: PUSH18 0x24b73b30b634b21039b4b3b730ba3ab93297
00001602: PUSH1 0x71
00001604: SHL
00001605: PUSH1 0x44
00001607: DUP3
00001608: ADD
00001609: MSTORE
0000160a: SWAP1
0000160b: MLOAD
0000160c: SWAP1
0000160d: DUP2
0000160e: SWAP1
0000160f: SUB
00001610: PUSH1 0x64
00001612: ADD
00001613: SWAP1
00001614: REVERT
00001615: JUMPDEST
00001616: PUSH1 0x01
00001618: PUSH1 0x00
0000161a: DUP5
0000161b: DUP4
0000161c: DUP2
0000161d: MLOAD
0000161e: DUP2
0000161f: LT
00001620: PUSH2 0x1625
00001623: JUMPI
00001624: INVALID
00001625: JUMPDEST
00001626: PUSH1 0x20
00001628: SWAP1
00001629: DUP2
0000162a: MUL
0000162b: SWAP2
0000162c: SWAP1
0000162d: SWAP2
0000162e: ADD
0000162f: DUP2
00001630: ADD
00001631: MLOAD
00001632: PUSH1 0x01
00001634: PUSH1 0x01
00001636: PUSH1 0xa0
00001638: SHL
00001639: SUB
0000163a: AND
0000163b: DUP3
0000163c: MSTORE
0000163d: DUP2
0000163e: ADD
0000163f: SWAP2
00001640: SWAP1
00001641: SWAP2
00001642: MSTORE
00001643: PUSH1 0x40
00001645: ADD
00001646: PUSH1 0x00
00001648: KECCAK256
00001649: SLOAD
0000164a: PUSH1 0xff
0000164c: AND
0000164d: PUSH2 0x169d
00001650: JUMPI
00001651: PUSH1 0x40
00001653: DUP1
00001654: MLOAD
00001655: PUSH3 0x461bcd
00001659: PUSH1 0xe5
0000165b: SHL
0000165c: DUP2
0000165d: MSTORE
0000165e: PUSH1 0x20
00001660: PUSH1 0x04
00001662: DUP3
00001663: ADD
00001664: MSTORE
00001665: PUSH1 0x19
00001667: PUSH1 0x24
00001669: DUP3
0000166a: ADD
0000166b: MSTORE
0000166c: PUSH32 0x5369676e6572206d75737420626520746865206f776e65722e00000000000000
0000168d: PUSH1 0x44
0000168f: DUP3
00001690: ADD
00001691: MSTORE
00001692: SWAP1
00001693: MLOAD
00001694: SWAP1
00001695: DUP2
00001696: SWAP1
00001697: SUB
00001698: PUSH1 0x64
0000169a: ADD
0000169b: SWAP1
0000169c: REVERT
0000169d: JUMPDEST
0000169e: PUSH1 0x02
000016a0: PUSH1 0x00
000016a2: DUP5
000016a3: DUP4
000016a4: DUP2
000016a5: MLOAD
000016a6: DUP2
000016a7: LT
000016a8: PUSH2 0x16ad
000016ab: JUMPI
000016ac: INVALID
000016ad: JUMPDEST
000016ae: PUSH1 0x20
000016b0: SWAP1
000016b1: DUP2
000016b2: MUL
000016b3: SWAP2
000016b4: SWAP1
000016b5: SWAP2
000016b6: ADD
000016b7: DUP2
000016b8: ADD
000016b9: MLOAD
000016ba: PUSH1 0x01
000016bc: PUSH1 0x01
000016be: PUSH1 0xa0
000016c0: SHL
000016c1: SUB
000016c2: AND
000016c3: DUP3
000016c4: MSTORE
000016c5: DUP2
000016c6: ADD
000016c7: SWAP2
000016c8: SWAP1
000016c9: SWAP2
000016ca: MSTORE
000016cb: PUSH1 0x40
000016cd: ADD
000016ce: PUSH1 0x00
000016d0: KECCAK256
000016d1: SLOAD
000016d2: PUSH1 0xff
000016d4: AND
000016d5: ISZERO
000016d6: PUSH2 0x1710
000016d9: JUMPI
000016da: PUSH1 0x40
000016dc: MLOAD
000016dd: PUSH3 0x461bcd
000016e1: PUSH1 0xe5
000016e3: SHL
000016e4: DUP2
000016e5: MSTORE
000016e6: PUSH1 0x04
000016e8: ADD
000016e9: DUP1
000016ea: DUP1
000016eb: PUSH1 0x20
000016ed: ADD
000016ee: DUP3
000016ef: DUP2
000016f0: SUB
000016f1: DUP3
000016f2: MSTORE
000016f3: PUSH1 0x21
000016f5: DUP2
000016f6: MSTORE
000016f7: PUSH1 0x20
000016f9: ADD
000016fa: DUP1
000016fb: PUSH2 0x18b2
000016fe: PUSH1 0x21
00001700: SWAP2
00001701: CODECOPY
00001702: PUSH1 0x40
00001704: ADD
00001705: SWAP2
00001706: POP
00001707: POP
00001708: PUSH1 0x40
0000170a: MLOAD
0000170b: DUP1
0000170c: SWAP2
0000170d: SUB
0000170e: SWAP1
0000170f: REVERT
00001710: JUMPDEST
00001711: PUSH1 0x01
00001713: PUSH1 0x02
00001715: PUSH1 0x00
00001717: DUP6
00001718: DUP5
00001719: DUP2
0000171a: MLOAD
0000171b: DUP2
0000171c: LT
0000171d: PUSH2 0x1722
00001720: JUMPI
00001721: INVALID
00001722: JUMPDEST
00001723: PUSH1 0x20
00001725: SWAP1
00001726: DUP2
00001727: MUL
00001728: SWAP2
00001729: SWAP1
0000172a: SWAP2
0000172b: ADD
0000172c: DUP2
0000172d: ADD
0000172e: MLOAD
0000172f: PUSH1 0x01
00001731: PUSH1 0x01
00001733: PUSH1 0xa0
00001735: SHL
00001736: SUB
00001737: AND
00001738: DUP3
00001739: MSTORE
0000173a: DUP2
0000173b: ADD
0000173c: SWAP2
0000173d: SWAP1
0000173e: SWAP2
0000173f: MSTORE
00001740: PUSH1 0x40
00001742: ADD
00001743: PUSH1 0x00
00001745: KECCAK256
00001746: DUP1
00001747: SLOAD
00001748: PUSH1 0xff
0000174a: NOT
0000174b: AND
0000174c: SWAP2
0000174d: ISZERO
0000174e: ISZERO
0000174f: SWAP2
00001750: SWAP1
00001751: SWAP2
00001752: OR
00001753: SWAP1
00001754: SSTORE
00001755: PUSH1 0x01
00001757: ADD
00001758: PUSH2 0x159c
0000175b: JUMP
0000175c: JUMPDEST
0000175d: POP
0000175e: PUSH1 0x00
00001760: JUMPDEST
00001761: DUP3
00001762: MLOAD
00001763: DUP2
00001764: LT
00001765: ISZERO
00001766: PUSH2 0x17ac
00001769: JUMPI
0000176a: PUSH1 0x02
0000176c: PUSH1 0x00
0000176e: DUP5
0000176f: DUP4
00001770: DUP2
00001771: MLOAD
00001772: DUP2
00001773: LT
00001774: PUSH2 0x1779
00001777: JUMPI
00001778: INVALID
00001779: JUMPDEST
0000177a: PUSH1 0x20
0000177c: SWAP1
0000177d: DUP2
0000177e: MUL
0000177f: SWAP2
00001780: SWAP1
00001781: SWAP2
00001782: ADD
00001783: DUP2
00001784: ADD
00001785: MLOAD
00001786: PUSH1 0x01
00001788: PUSH1 0x01
0000178a: PUSH1 0xa0
0000178c: SHL
0000178d: SUB
0000178e: AND
0000178f: DUP3
00001790: MSTORE
00001791: DUP2
00001792: ADD
00001793: SWAP2
00001794: SWAP1
00001795: SWAP2
00001796: MSTORE
00001797: PUSH1 0x40
00001799: ADD
0000179a: PUSH1 0x00
0000179c: KECCAK256
0000179d: DUP1
0000179e: SLOAD
0000179f: PUSH1 0xff
000017a1: NOT
000017a2: AND
000017a3: SWAP1
000017a4: SSTORE
000017a5: PUSH1 0x01
000017a7: ADD
000017a8: PUSH2 0x1760
000017ab: JUMP
000017ac: JUMPDEST
000017ad: POP
000017ae: PUSH1 0x01
000017b0: SWAP3
000017b1: SWAP2
000017b2: POP
000017b3: POP
000017b4: JUMP
000017b5: JUMPDEST
000017b6: PUSH1 0x00
000017b8: DUP1
000017b9: PUSH2 0x148e
000017bc: DUP6
000017bd: DUP6
000017be: DUP6
000017bf: PUSH1 0x03
000017c1: SLOAD
000017c2: PUSH2 0x0fb5
000017c5: JUMP
000017c6: INVALID
000017c7: UNKNOWN(0x4F)
000017c8: PUSH24 0x6e657273206d75737420626520646966666572656e742061
000017e1: PUSH5 0x6472657373
000017e7: UNKNOWN(0x2E)
000017e8: DIFFICULTY
000017e9: PUSH6 0x7374696e6174
000017f0: PUSH10 0x6f6e2063616e6e6f7420
000017fb: PUSH3 0x652074
000017ff: PUSH9 0x697320636f6e747261
00001809: PUSH4 0x742e5369
0000180e: PUSH8 0x6e65724e756d2063
00001817: PUSH2 0x6e6e
0000181a: PUSH16 0x74206265206772656174657220746861
0000182b: PUSH15 0x206f776e6572732e4f776e65722061
0000183b: PUSH5 0x6472657373
00001841: KECCAK256
00001842: PUSH4 0x616e6e6f
00001847: PUSH21 0x206265207a65726f20616464726573732e4d657373
0000185d: PUSH2 0x6765
00001860: KECCAK256
00001861: PUSH24 0x6173206e6f74207369676e656420627920656e6f75676820
0000187a: PUSH15 0x756d626572206f66207369676e6572
0000188a: PUSH20 0x2e5369676e65724e756d2068617320746f206265
0000189f: KECCAK256
000018a0: PUSH8 0x7265617465722074
000018a9: PUSH9 0x616e207a65726f2e53
000018b3: PUSH10 0x676e696e67206f776e65
000018be: PUSH19 0x73206d75737420626520646966666572656e74
000018d2: UNKNOWN(0x2E)
000018d3: SLOAD
000018d4: PUSH9 0x697320636f6e747261
000018de: PUSH4 0x74206861
000018e3: PUSH20 0x20616c7265616479206265656e20696e69746961
000018f8: PUSH13 0x697a65642ea265627a7a723158
00001906: KECCAK256
00001907: CODESIZE
00001908: DUP9
00001909: SWAP2
0000190a: ORIGIN
0000190b: BYTE
0000190c: UNKNOWN(0xC8)
0000190d: UNKNOWN(0xCF)
0000190e: UNKNOWN(0x4C)
0000190f: UNKNOWN(0xAB)
00001910: PUSH7 0x078b69511318bc
00001918: UNKNOWN(0xF9)
00001919: DUP12
0000191a: UNKNOWN(0xD4)
0000191b: UNKNOWN(0x25)
0000191c: DUP5
0000191d: UNKNOWN(0x0F)
0000191e: SWAP2
0000191f: UNKNOWN(0xDF)
00001920: UNKNOWN(0xD7)
00001921: BLOCKHASH
00001922: UNKNOWN(0x4B)
00001923: PUSH25

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": "0xc0ee0b8a",
            "selector": "0xc0ee0b8a",
            "calldata_variants": [
                "0xc0ee0b8a",
                "0xc0ee0b8a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc1278cc5",
            "selector": "0xc1278cc5",
            "calldata_variants": [
                "0xc1278cc5",
                "0xc1278cc50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0b9e5ba",
            "selector": "0xf0b9e5ba",
            "calldata_variants": [
                "0xf0b9e5ba",
                "0xf0b9e5ba0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x843b1a09",
            "selector": "0x843b1a09",
            "calldata_variants": [
                "0x843b1a09",
                "0x843b1a090000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x98ad68a7",
            "selector": "0x98ad68a7",
            "calldata_variants": [
                "0x98ad68a7",
                "0x98ad68a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbba85f28",
            "selector": "0xbba85f28",
            "calldata_variants": [
                "0xbba85f28",
                "0xbba85f280000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x158ef93e",
            "selector": "0x158ef93e",
            "calldata_variants": [
                "0x158ef93e",
                "0x158ef93e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x60b5bb3f",
            "selector": "0x60b5bb3f",
            "calldata_variants": [
                "0x60b5bb3f",
                "0x60b5bb3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 6410,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x3b97ea8cf3594a3a4368da968e906c0d94549e46828e4cb886a1a86366d4ec28
call_targets: 0x06a4ef39e077471214e4a8bfa0cbbe34e88849a2
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x3b97ea8cf3594a3a4368da968e906c0d94549e46828e4cb886a1a86366d4ec28",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x06a4ef39e077471214e4a8bfa0cbbe34e88849a2"
    ],
    "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": "0xc0ee0b8a",
            "selector": "0xc0ee0b8a",
            "calldata_variants": [
                "0xc0ee0b8a",
                "0xc0ee0b8a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc1278cc5",
            "selector": "0xc1278cc5",
            "calldata_variants": [
                "0xc1278cc5",
                "0xc1278cc50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0b9e5ba",
            "selector": "0xf0b9e5ba",
            "calldata_variants": [
                "0xf0b9e5ba",
                "0xf0b9e5ba0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x843b1a09",
            "selector": "0x843b1a09",
            "calldata_variants": [
                "0x843b1a09",
                "0x843b1a090000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x98ad68a7",
            "selector": "0x98ad68a7",
            "calldata_variants": [
                "0x98ad68a7",
                "0x98ad68a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbba85f28",
            "selector": "0xbba85f28",
            "calldata_variants": [
                "0xbba85f28",
                "0xbba85f280000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x158ef93e",
            "selector": "0x158ef93e",
            "calldata_variants": [
                "0x158ef93e",
                "0x158ef93e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x60b5bb3f",
            "selector": "0x60b5bb3f",
            "calldata_variants": [
                "0x60b5bb3f",
                "0x60b5bb3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2621,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2880,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3916,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 3,
    "guards_detected": [
        {
            "pc": 6410,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 3
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x3b97ea8cf3594a3a4368da968e906c0d94549e46828e4cb886a1a86366d4ec28
call_targets: 0x06a4ef39e077471214e4a8bfa0cbbe34e88849a2
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x3b97ea8cf3594a3a4368da968e906c0d94549e46828e4cb886a1a86366d4ec28",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x06a4ef39e077471214e4a8bfa0cbbe34e88849a2"
    ],
    "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": "0xc0ee0b8a",
            "selector": "0xc0ee0b8a",
            "calldata_variants": [
                "0xc0ee0b8a",
                "0xc0ee0b8a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc1278cc5",
            "selector": "0xc1278cc5",
            "calldata_variants": [
                "0xc1278cc5",
                "0xc1278cc50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0b9e5ba",
            "selector": "0xf0b9e5ba",
            "calldata_variants": [
                "0xf0b9e5ba",
                "0xf0b9e5ba0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x843b1a09",
            "selector": "0x843b1a09",
            "calldata_variants": [
                "0x843b1a09",
                "0x843b1a090000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x98ad68a7",
            "selector": "0x98ad68a7",
            "calldata_variants": [
                "0x98ad68a7",
                "0x98ad68a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbba85f28",
            "selector": "0xbba85f28",
            "calldata_variants": [
                "0xbba85f28",
                "0xbba85f280000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x158ef93e",
            "selector": "0x158ef93e",
            "calldata_variants": [
                "0x158ef93e",
                "0x158ef93e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x60b5bb3f",
            "selector": "0x60b5bb3f",
            "calldata_variants": [
                "0x60b5bb3f",
                "0x60b5bb3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2621,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2880,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3916,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 3,
    "guards_detected": [
        {
            "pc": 6410,
            "type": "tx_origin_used"
        }
    ]
}