fedf28c3-4222-44d0-996a-630016ee83ec
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31018 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 75922 | artifact.fetch | complete | 1 / 3 | 2 weeks ago |
| 75923 | tool.cast_disasm | complete | 1 / 3 | 2 weeks ago |
| 75924 | analysis.bundle | complete | 1 / 3 | 2 weeks ago |
| 75925 | capability.graph | complete | 1 / 3 | 2 weeks ago |
| 75926 | detector.run | complete | 1 / 3 | 2 weeks ago |
| 75927 | validation.fork | complete | 1 / 3 | 2 weeks ago |
No slither job recorded yet.
[codex:1415433] OpenAI Codex v0.77.0 (research preview)
[codex:1415433] --------
[codex:1415433] workdir: /tmp/codex-multi-i36ucnhr
[codex:1415433] model: gpt-5.2-codex
[codex:1415433] provider: openai
[codex:1415433] approval: never
[codex:1415433] sandbox: read-only
[codex:1415433] reasoning effort: xhigh
[codex:1415433] reasoning summaries: auto
[codex:1415433] session id: 019b79c9-630f-7d01-ab27-84a81c814c5e
[codex:1415433] --------
[codex:1415433] user
[codex:1415433] 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:1415433]
[codex:1415433] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1415433]
[codex:1415433] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1415433] - Gas inefficiency, code quality, or best practices
[codex:1415433] - Theoretical vulnerabilities without a clear extraction path
[codex:1415433] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1415433] - Issues requiring social engineering or off-chain coordination
[codex:1415433]
[codex:1415433] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1415433] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1415433] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1415433] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1415433] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1415433] - External calls before state updates (reentrancy)
[codex:1415433] - SELFDESTRUCT with controllable beneficiary
[codex:1415433] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1415433]
[codex:1415433] For each finding, you MUST explain:
[codex:1415433] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1415433] 2. The concrete sequence of transactions to extract value
[codex:1415433] 3. Why you believe this is exploitable (not just suspicious)
[codex:1415433]
[codex:1415433] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1415433] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1415433]
[codex:1415433] Output MUST be valid JSON matching the provided schema.
[codex:1415433] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1415433] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1415433] mcp startup: no servers
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Preparing to analyze BYTECODE_BUNDLE.txt**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc ls in /tmp/codex-multi-i36ucnhr succeeded in 6ms:
[codex:1415433] BYTECODE_BUNDLE.txt
[codex:1415433] codex-output-schema.json
[codex:1415433] exec
[codex:1415433] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-i36ucnhr succeeded in 5ms:
[codex:1415433] Runtime bytecode bundle for best-effort auditing.
[codex:1415433] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1415433]
[codex:1415433] FILE: runtime_bytecode.hex
[codex:1415433] 0x608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461012c5780639e281a9814610146578063ab2217e414610159578063e8ea777014610179578063f2fde38b14610199578063f65041e6146101ac575f5ffd5b80630e90b3c9146100b557806324e38dca146100d35780634c8142a9146100e857806354fd4d50146100fb578063715018a6146101115780638947606914610119575b5f5ffd5b6100bd6101cd565b6040516100ca9190610d00565b60405180910390f35b6100e66100e1366004610d6f565b610235565b005b6100e66100f6366004610d6f565b6103a5565b610103600181565b6040519081526020016100ca565b6100e661045d565b6100e6610127366004610d6f565b610470565b5f546040516001600160a01b0390911681526020016100ca565b6100e6610154366004610d91565b61048f565b61016c610167366004610dbb565b6104f2565b6040516100ca9190610ded565b61018c610187366004610e68565b610830565b6040516100ca9190610f33565b6100e66101a7366004610d6f565b6108d1565b6101bf6101ba366004610e68565b61090b565b6040516100ca929190610f6a565b60606101d7610adb565b600180548060200260200160405190810160405280929190818152602001828054801561022b57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161020d575b5050505050905090565b61023d610adb565b6001600160a01b0381165f9081526002602052604090205460ff1661028f5760405162461bcd60e51b815260206004820152600360248201526229a72960e91b60448201526064015b60405180910390fd5b6001600160a01b0381165f908152600260205260408120805460ff191690555b6001548110156103a157816001600160a01b0316600182815481106102d6576102d6610fed565b5f918252602090912001546001600160a01b03160361039957600180546102fe908290611015565b8154811061030e5761030e610fed565b5f91825260209091200154600180546001600160a01b03909216918390811061033957610339610fed565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550600180548061037557610375611028565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001016102af565b5050565b6103ad610adb565b6001600160a01b0381165f9081526002602052604090205460ff16156103fb5760405162461bcd60e51b815260206004820152600360248201526229a0a960e91b6044820152606401610286565b6001600160a01b03165f818152600260205260408120805460ff191660019081179091558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055565b610465610adb565b61046e5f610b07565b565b610478610adb565b61048c816104868330610b56565b33610bca565b50565b5f546001600160a01b03163314806104b55750335f9081526002602052604090205460ff165b6104e75760405162461bcd60e51b815260206004820152600360248201526234303360e81b6044820152606401610286565b6103a1828233610bca565b60605f846001600160a01b031663574f2ba36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610531573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610555919061103c565b90505f8184116105655783610567565b815b90508481101561059f5760405162461bcd60e51b815260206004820152600360248201526253485360e81b6044820152606401610286565b5f6105aa8683611015565b90505f8167ffffffffffffffff8111156105c6576105c6610e54565b6040519080825280602002602001820160405280156105ff57816020015b6105ec610ce2565b8152602001906001900390816105e45790505b5090505f5b82811015610824575f6001600160a01b038a16631e3dd18b610626848c611053565b6040518263ffffffff1660e01b815260040161064491815260200190565b602060405180830381865afa15801561065f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106839190611066565b90505f819050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611066565b8484815181106106fb576106fb610fed565b60200260200101515f6003811061071457610714610fed565b60200201906001600160a01b031690816001600160a01b031681525050806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107919190611066565b8484815181106107a3576107a3610fed565b60200260200101516001600381106107bd576107bd610fed565b60200201906001600160a01b031690816001600160a01b031681525050818484815181106107ed576107ed610fed565b602002602001015160026003811061080757610807610fed565b6001600160a01b0390921660209290920201525050600101610604565b50979650505050505050565b6060815167ffffffffffffffff81111561084c5761084c610e54565b604051908082528060200260200182016040528015610875578160200160208202803683370190505b5090505f5b82518110156108cb576108a683828151811061089857610898610fed565b602002602001015130610b56565b8282815181106108b8576108b8610fed565b602090810291909101015260010161087a565b50919050565b6108d9610adb565b6001600160a01b03811661090257604051631e4fbdf760e01b81525f6004820152602401610286565b61048c81610b07565b606080825167ffffffffffffffff81111561092857610928610e54565b604051908082528060200260200182016040528015610951578160200160208202803683370190505b509150825167ffffffffffffffff81111561096e5761096e610e54565b604051908082528060200260200182016040528015610997578160200160208202803683370190505b5090505f5b8351811015610ad5575f8482815181106109b8576109b8610fed565b60200260200101519050806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a22919061109a565b5050865191925086918591508110610a3c57610a3c610fed565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa891906110e8565b838381518110610aba57610aba610fed565b60ff909216602092830291909101909101525060010161099c565b50915091565b5f546001600160a01b0316331461046e5760405163118cdaa760e01b8152336004820152602401610286565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516370a0823160e01b81526001600160a01b0382811660048301525f91908416906370a0823190602401602060405180830381865afa158015610b9d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc1919061103c565b90505b92915050565b81610bd58430610b56565b1015610c085760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610286565b610c1c6001600160a01b0384168284610c21565b505050565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251610c1c93879390925f9283929183919082885af180610c8f576040513d5f823e3d81fd5b50505f513d91508115610ca6578060011415610cb3565b6001600160a01b0384163b155b15610cdc57604051635274afe760e01b81526001600160a01b0385166004820152602401610286565b50505050565b60405180606001604052806003906020820280368337509192915050565b602080825282518282018190525f918401906040840190835b81811015610d405783516001600160a01b0316835260209384019390920191600101610d19565b509095945050505050565b6001600160a01b038116811461048c575f5ffd5b8035610d6a81610d4b565b919050565b5f60208284031215610d7f575f5ffd5b8135610d8a81610d4b565b9392505050565b5f5f60408385031215610da2575f5ffd5b8235610dad81610d4b565b946020939093013593505050565b5f5f5f60608486031215610dcd575f5ffd5b8335610dd881610d4b565b95602085013595506040909401359392505050565b602080825282518282018190525f918401906040840190835b81811015610d40578351835f5b6003811015610e3b5782516001600160a01b0316825260209283019290910190600101610e13565b5050506020939093019260609290920191600101610e06565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610e78575f5ffd5b813567ffffffffffffffff811115610e8e575f5ffd5b8201601f81018413610e9e575f5ffd5b803567ffffffffffffffff811115610eb857610eb8610e54565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715610ee557610ee5610e54565b604052918252602081840181019290810187841115610f02575f5ffd5b6020850194505b83851015610f2857610f1a85610d5f565b815260209485019401610f09565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610d40578351835260209384019390920191600101610f4c565b604080825283519082018190525f9060208501906060840190835b81811015610fa3578351835260209384019390920191600101610f85565b5050838103602080860191909152855180835291810192508501905f5b81811015610fe157825160ff16845260209384019390920191600101610fc0565b50919695505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bc457610bc4611001565b634e487b7160e01b5f52603160045260245ffd5b5f6020828403121561104c575f5ffd5b5051919050565b80820180821115610bc457610bc4611001565b5f60208284031215611076575f5ffd5b8151610d8a81610d4b565b805169ffffffffffffffffffff81168114610d6a575f5ffd5b5f5f5f5f5f60a086880312156110ae575f5ffd5b6110b786611081565b602087015160408801516060890151929750909550935091506110dc60808701611081565b90509295509295909350565b5f602082840312156110f8575f5ffd5b815160ff81168114610d8a575f5ffdfea2646970667358221220bf378c141b0c6efa3ec8b5b8aea6ad419126e09636d653d7fb5fa0126d5cc87464736f6c634300081e0033
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Parsing bytecode and preparing exploit analysis**
[codex:1415433]
[codex:1415433] I'm analyzing the bytecode to identify the contract's role and detect any exploit paths. I’m focusing on owner and whitelist checks, common function selectors, and searching for risky opcodes like delegatecall or selfdestruct. To do this thoroughly, I plan to write a quick Python script that disassembles the bytecode and scans for critical operations, aiming to confirm any exploits or return no findings if none appear.
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii,sys
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433] # opcodes mapping
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433] # disassemble and record calllike ops with context
[codex:1415433] ops=[]
[codex:1415433] i=0
[codex:1415433] while i<len(code):
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] ops.append((i,name,data.hex()))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] ops.append((i,name,None))
[codex:1415433] i+=1
[codex:1415433]
[codex:1415433] # find CALL/DELEGATECALL/SELFDESTRUCT
[codex:1415433] for idx,(pc,name,data) in enumerate(ops):
[codex:1415433] if name in ('CALL','DELEGATECALL','SELFDESTRUCT','CALLCODE'):
[codex:1415433] # show previous 6 ops
[codex:1415433] prev=ops[max(0,idx-8):idx]
[codex:1415433] print('\\nPC',pc,name)
[codex:1415433] for p in prev:
[codex:1415433] print(' ',p)
[codex:1415433]
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 21ms:
[codex:1415433]
[codex:1415433] PC 3199 CALL
[codex:1415433] (3191, 'SWAP3', None)
[codex:1415433] (3192, 'SWAP2', None)
[codex:1415433] (3193, 'DUP4', None)
[codex:1415433] (3194, 'SWAP2', None)
[codex:1415433] (3195, 'SWAP1', None)
[codex:1415433] (3196, 'DUP3', None)
[codex:1415433] (3197, 'DUP9', None)
[codex:1415433] (3198, 'GAS', None)
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing CALL instructions and function selectors**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii, re
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433] # find pattern PUSH4 <sel> EQ PUSH2 <dest> JUMPI (0x63 sel 0x14 0x61 dest 0x57)
[codex:1415433] # We'll scan through bytes
[codex:1415433] selectors=[]
[codex:1415433] for i in range(len(code)-9):
[codex:1415433] if code[i]==0x63 and code[i+5]==0x14 and code[i+6]==0x61 and code[i+9]==0x57:
[codex:1415433] sel=code[i+1:i+5].hex()
[codex:1415433] dest=int.from_bytes(code[i+7:i+9],'big')
[codex:1415433] selectors.append((sel,dest,i))
[codex:1415433] # unique
[codex:1415433] print('selectors',len(selectors))
[codex:1415433] for sel,dest,i in selectors:
[codex:1415433] print(sel,hex(dest), 'at',i)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 27ms:
[codex:1415433] selectors 12
[codex:1415433] 8da5cb5b 0x12c at 42
[codex:1415433] 9e281a98 0x146 at 53
[codex:1415433] ab2217e4 0x159 at 64
[codex:1415433] e8ea7770 0x179 at 75
[codex:1415433] f2fde38b 0x199 at 86
[codex:1415433] f65041e6 0x1ac at 97
[codex:1415433] 0e90b3c9 0xb5 at 112
[codex:1415433] 24e38dca 0xd3 at 123
[codex:1415433] 4c8142a9 0xe8 at 134
[codex:1415433] 54fd4d50 0xfb at 145
[codex:1415433] 715018a6 0x111 at 156
[codex:1415433] 89476069 0x119 at 167
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Implementing function disassembler**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] # quick disasm function
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=80):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] # function selectors
[codex:1415433] selectors=[
[codex:1415433] ('8da5cb5b',0x12c),('9e281a98',0x146),('ab2217e4',0x159),('e8ea7770',0x179),('f2fde38b',0x199),('f65041e6',0x1ac),('0e90b3c9',0xb5),('24e38dca',0xd3),('4c8142a9',0xe8),('54fd4d50',0xfb),('715018a6',0x111),('89476069',0x119),]
[codex:1415433]
[codex:1415433] for sel,dest in selectors:
[codex:1415433] print('\\n==',sel,'dest',hex(dest))
[codex:1415433] for pc,ins in disasm(dest,40):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 20ms:
[codex:1415433]
[codex:1415433] == 8da5cb5b dest 0x12c
[codex:1415433] 0x12c JUMPDEST
[codex:1415433] 0x12d 0x5f
[codex:1415433] 0x12e SLOAD
[codex:1415433] 0x12f PUSH1 0x40
[codex:1415433] 0x131 MLOAD
[codex:1415433] 0x132 PUSH1 0x01
[codex:1415433] 0x134 PUSH1 0x01
[codex:1415433] 0x136 PUSH1 0xa0
[codex:1415433] 0x138 SHL
[codex:1415433] 0x139 SUB
[codex:1415433] 0x13a SWAP1
[codex:1415433] 0x13b SWAP2
[codex:1415433] 0x13c AND
[codex:1415433] 0x13d DUP2
[codex:1415433] 0x13e MSTORE
[codex:1415433] 0x13f PUSH1 0x20
[codex:1415433] 0x141 ADD
[codex:1415433] 0x142 PUSH2 0x00ca
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing internal contract functions**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=200):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0x235,200):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 18ms:
[codex:1415433] 0x235 JUMPDEST
[codex:1415433] 0x236 PUSH2 0x023d
[codex:1415433] 0x239 PUSH2 0x0adb
[codex:1415433] 0x23c JUMP
[codex:1415433] 0x23d JUMPDEST
[codex:1415433] 0x23e PUSH1 0x01
[codex:1415433] 0x240 PUSH1 0x01
[codex:1415433] 0x242 PUSH1 0xa0
[codex:1415433] 0x244 SHL
[codex:1415433] 0x245 SUB
[codex:1415433] 0x246 DUP2
[codex:1415433] 0x247 AND
[codex:1415433] 0x248 0x5f
[codex:1415433] 0x249 SWAP1
[codex:1415433] 0x24a DUP2
[codex:1415433] 0x24b MSTORE
[codex:1415433] 0x24c PUSH1 0x02
[codex:1415433] 0x24e PUSH1 0x20
[codex:1415433] 0x250 MSTORE
[codex:1415433] 0x251 PUSH1 0x40
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=200):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0x339,150):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 18ms:
[codex:1415433] 0x339 JUMPDEST
[codex:1415433] 0x33a SWAP1
[codex:1415433] 0x33b 0x5f
[codex:1415433] 0x33c MSTORE
[codex:1415433] 0x33d PUSH1 0x20
[codex:1415433] 0x33f 0x5f
[codex:1415433] 0x340 SHA3
[codex:1415433] 0x341 ADD
[codex:1415433] 0x342 0x5f
[codex:1415433] 0x343 PUSH2 0x0100
[codex:1415433] 0x346 EXP
[codex:1415433] 0x347 DUP2
[codex:1415433] 0x348 SLOAD
[codex:1415433] 0x349 DUP2
[codex:1415433] 0x34a PUSH1 0x01
[codex:1415433] 0x34c PUSH1 0x01
[codex:1415433] 0x34e PUSH1 0xa0
[codex:1415433] 0x350 SHL
[codex:1415433] 0x351 SUB
[codex:1415433] 0x352 MUL
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=200):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0x3fb,160):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 18ms:
[codex:1415433] 0x3fb JUMPDEST
[codex:1415433] 0x3fc PUSH1 0x01
[codex:1415433] 0x3fe PUSH1 0x01
[codex:1415433] 0x400 PUSH1 0xa0
[codex:1415433] 0x402 SHL
[codex:1415433] 0x403 SUB
[codex:1415433] 0x404 AND
[codex:1415433] 0x405 0x5f
[codex:1415433] 0x406 DUP2
[codex:1415433] 0x407 DUP2
[codex:1415433] 0x408 MSTORE
[codex:1415433] 0x409 PUSH1 0x02
[codex:1415433] 0x40b PUSH1 0x20
[codex:1415433] 0x40d MSTORE
[codex:1415433] 0x40e PUSH1 0x40
[codex:1415433] 0x410 DUP2
[codex:1415433] 0x411 SHA3
[codex:1415433] 0x412 DUP1
[codex:1415433] 0x413 SLOAD
[codex:1415433] 0x414 PUSH1 0xff
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Continuing function decoding**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=260):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0x4f2,260):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 18ms:
[codex:1415433] 0x4f2 JUMPDEST
[codex:1415433] 0x4f3 PUSH1 0x60
[codex:1415433] 0x4f5 0x5f
[codex:1415433] 0x4f6 DUP5
[codex:1415433] 0x4f7 PUSH1 0x01
[codex:1415433] 0x4f9 PUSH1 0x01
[codex:1415433] 0x4fb PUSH1 0xa0
[codex:1415433] 0x4fd SHL
[codex:1415433] 0x4fe SUB
[codex:1415433] 0x4ff AND
[codex:1415433] 0x500 PUSH4 0x574f2ba3
[codex:1415433] 0x505 PUSH1 0x40
[codex:1415433] 0x507 MLOAD
[codex:1415433] 0x508 DUP2
[codex:1415433] 0x509 PUSH4 0xffffffff
[codex:1415433] 0x50e AND
[codex:1415433] 0x50f PUSH1 0xe0
[codex:1415433] 0x511 SHL
[codex:1415433] 0x512 DUP2
[codex:1415433] 0x513 MSTORE
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing function selectors and calls**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=200):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0x830,200):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 19ms:
[codex:1415433] 0x830 JUMPDEST
[codex:1415433] 0x831 PUSH1 0x60
[codex:1415433] 0x833 DUP2
[codex:1415433] 0x834 MLOAD
[codex:1415433] 0x835 PUSH8 0xffffffffffffffff
[codex:1415433] 0x83e DUP2
[codex:1415433] 0x83f GT
[codex:1415433] 0x840 ISZERO
[codex:1415433] 0x841 PUSH2 0x084c
[codex:1415433] 0x844 JUMPI
[codex:1415433] 0x845 PUSH2 0x084c
[codex:1415433] 0x848 PUSH2 0x0e54
[codex:1415433] 0x84b JUMP
[codex:1415433] 0x84c JUMPDEST
[codex:1415433] 0x84d PUSH1 0x40
[codex:1415433] 0x84f MLOAD
[codex:1415433] 0x850 SWAP1
[codex:1415433] 0x851 DUP1
[codex:1415433] 0x852 DUP3
[codex:1415433] 0x853 MSTORE
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing internal function calls**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=200):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for label,start in [('0b07',0xb07),('0b56',0xb56),('0bca',0xbca)]:
[codex:1415433] print('\\n--',label)
[codex:1415433] for pc,ins in disasm(start,120):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 18ms:
[codex:1415433]
[codex:1415433] -- 0b07
[codex:1415433] 0xb07 JUMPDEST
[codex:1415433] 0xb08 0x5f
[codex:1415433] 0xb09 DUP1
[codex:1415433] 0xb0a SLOAD
[codex:1415433] 0xb0b PUSH1 0x01
[codex:1415433] 0xb0d PUSH1 0x01
[codex:1415433] 0xb0f PUSH1 0xa0
[codex:1415433] 0xb11 SHL
[codex:1415433] 0xb12 SUB
[codex:1415433] 0xb13 DUP4
[codex:1415433] 0xb14 DUP2
[codex:1415433] 0xb15 AND
[codex:1415433] 0xb16 PUSH1 0x01
[codex:1415433] 0xb18 PUSH1 0x01
[codex:1415433] 0xb1a PUSH1 0xa0
[codex:1415433] 0xb1c SHL
[codex:1415433] 0xb1d SUB
[codex:1415433] 0xb1e NOT
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Examining ERC20 transfer call sequence**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=200):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0xc6f,200):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 18ms:
[codex:1415433] 0xc6f SWAP4
[codex:1415433] 0xc70 DUP8
[codex:1415433] 0xc71 SWAP4
[codex:1415433] 0xc72 SWAP1
[codex:1415433] 0xc73 SWAP3
[codex:1415433] 0xc74 0x5f
[codex:1415433] 0xc75 SWAP3
[codex:1415433] 0xc76 DUP4
[codex:1415433] 0xc77 SWAP3
[codex:1415433] 0xc78 SWAP2
[codex:1415433] 0xc79 DUP4
[codex:1415433] 0xc7a SWAP2
[codex:1415433] 0xc7b SWAP1
[codex:1415433] 0xc7c DUP3
[codex:1415433] 0xc7d DUP9
[codex:1415433] 0xc7e GAS
[codex:1415433] 0xc7f CALL
[codex:1415433] 0xc80 DUP1
[codex:1415433] 0xc81 PUSH2 0x0c8f
[codex:1415433] 0xc84 JUMPI
[codex:1415433]
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing contract access controls and token transfers**
[codex:1415433]
[codex:1415433] I'm carefully examining the contract's internal and external functions to map which ones have owner or operator restrictions, focusing especially on those that perform token transfers. There seems to be solid access control on critical transfer functions, ensuring only authorized roles can move tokens from the contract. I'm also clarifying that some functions are view-only with no transfer capability. The key point is verifying no unprotected function allows arbitrary token extraction, which so far does not appear to be the case.
[codex:1415433] thinking
[codex:1415433] **Verifying withdrawal functions and stack argument order**
[codex:1415433]
[codex:1415433] I'm digging deeper into the access-controlled withdrawal function that calls the internal token transfer, trying to decode exactly which arguments get passed on the stack to the transfer routine. It looks like authorized operators can withdraw tokens to themselves, and I’m simulating the stack to confirm parameter order for the call. This helps ensure token transfers are properly gated and not exposed to unauthorized users.
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, end=None):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] while i < len(code) and (end is None or i < end):
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0x48f,0x4f2):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 20ms:
[codex:1415433] 0x48f JUMPDEST
[codex:1415433] 0x490 0x5f
[codex:1415433] 0x491 SLOAD
[codex:1415433] 0x492 PUSH1 0x01
[codex:1415433] 0x494 PUSH1 0x01
[codex:1415433] 0x496 PUSH1 0xa0
[codex:1415433] 0x498 SHL
[codex:1415433] 0x499 SUB
[codex:1415433] 0x49a AND
[codex:1415433] 0x49b CALLER
[codex:1415433] 0x49c EQ
[codex:1415433] 0x49d DUP1
[codex:1415433] 0x49e PUSH2 0x04b5
[codex:1415433] 0x4a1 JUMPI
[codex:1415433] 0x4a2 POP
[codex:1415433] 0x4a3 CALLER
[codex:1415433] 0x4a4 0x5f
[codex:1415433] 0x4a5 SWAP1
[codex:1415433] 0x4a6 DUP2
[codex:1415433] 0x4a7 MSTORE
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing internal call stack conventions**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=60):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0xadb,80):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 19ms:
[codex:1415433] 0xadb JUMPDEST
[codex:1415433] 0xadc 0x5f
[codex:1415433] 0xadd SLOAD
[codex:1415433] 0xade PUSH1 0x01
[codex:1415433] 0xae0 PUSH1 0x01
[codex:1415433] 0xae2 PUSH1 0xa0
[codex:1415433] 0xae4 SHL
[codex:1415433] 0xae5 SUB
[codex:1415433] 0xae6 AND
[codex:1415433] 0xae7 CALLER
[codex:1415433] 0xae8 EQ
[codex:1415433] 0xae9 PUSH2 0x046e
[codex:1415433] 0xaec JUMPI
[codex:1415433] 0xaed PUSH1 0x40
[codex:1415433] 0xaef MLOAD
[codex:1415433] 0xaf0 PUSH4 0x118cdaa7
[codex:1415433] 0xaf5 PUSH1 0xe0
[codex:1415433] 0xaf7 SHL
[codex:1415433] 0xaf8 DUP2
[codex:1415433] 0xaf9 MSTORE
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing jump and return addresses**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433] start=0xadb-10
[codex:1415433] print(code[start:start+40].hex())
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 16ms:
[codex:1415433] 61099c565b50915091565b5f546001600160a01b0316331461046e5760405163118cdaa760e01b81
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing jump and return conventions in bytecode**
[codex:1415433]
[codex:1415433] I'm tracing how the function at 0x0adb uses a shared return jumpdest at 0x046e for control flow, confirming a calling convention where the return address stays on the stack and is used at function epilogues. This helps clarify owner check flow and prepares me to analyze potential vulnerabilities around call stack and unprotected state-changing operations by mapping SSTORE usage to function contexts.
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] # find all JUMPDEST positions
[codex:1415433] jumpdests=set()
[codex:1415433] for i,b in enumerate(code):
[codex:1415433] if b==0x5b:
[codex:1415433] jumpdests.add(i)
[codex:1415433]
[codex:1415433] # find SSTORE positions
[codex:1415433] sstore_positions=[i for i,b in enumerate(code) if b==0x55]
[codex:1415433]
[codex:1415433] # helper to find nearest preceding jumpdest
[codex:1415433] for pos in sstore_positions:
[codex:1415433] prev= max([j for j in jumpdests if j<pos], default=None)
[codex:1415433] print('SSTORE at',hex(pos),'prev jumpdest',hex(prev) if prev else None)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 19ms:
[codex:1415433] SSTORE at 0x2ae prev jumpdest 0x28f
[codex:1415433] SSTORE at 0x363 prev jumpdest 0x339
[codex:1415433] SSTORE at 0x392 prev jumpdest 0x375
[codex:1415433] SSTORE at 0x395 prev jumpdest 0x375
[codex:1415433] SSTORE at 0x41f prev jumpdest 0x3fb
[codex:1415433] SSTORE at 0x426 prev jumpdest 0x3fb
[codex:1415433] SSTORE at 0x45b prev jumpdest 0x3fb
[codex:1415433] SSTORE at 0x54e prev jumpdest 0x531
[codex:1415433] SSTORE at 0xb24 prev jumpdest 0xb07
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing SSTORE instructions within functions**
[codex:1415433] exec
[codex:1415433] /bin/bash -lc "python - <<'PY'
[codex:1415433] import binascii
[codex:1415433] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0]
[codex:1415433] code=binascii.unhexlify(hexdata)
[codex:1415433]
[codex:1415433] opmap={
[codex:1415433] 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:1415433] 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:1415433] 0x20:'SHA3',
[codex:1415433] 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:1415433] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1415433] 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:1415433] 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:1415433] 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:1415433] 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:1415433] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1415433] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1415433] }
[codex:1415433]
[codex:1415433] def disasm(start, max_ins=80):
[codex:1415433] i=start
[codex:1415433] out=[]
[codex:1415433] count=0
[codex:1415433] while i < len(code) and count<max_ins:
[codex:1415433] op=code[i]
[codex:1415433] name=opmap.get(op,hex(op))
[codex:1415433] if 0x60<=op<=0x7f:
[codex:1415433] n=op-0x5f
[codex:1415433] data=code[i+1:i+1+n]
[codex:1415433] out.append((i,f\"{name} 0x{data.hex()}\"))
[codex:1415433] i+=1+n
[codex:1415433] else:
[codex:1415433] out.append((i,name))
[codex:1415433] i+=1
[codex:1415433] count+=1
[codex:1415433] return out
[codex:1415433]
[codex:1415433] for pc,ins in disasm(0x520,60):
[codex:1415433] print(hex(pc),ins)
[codex:1415433] PY" in /tmp/codex-multi-i36ucnhr succeeded in 19ms:
[codex:1415433] 0x520 DUP7
[codex:1415433] 0x521 GAS
[codex:1415433] 0x522 STATICCALL
[codex:1415433] 0x523 ISZERO
[codex:1415433] 0x524 DUP1
[codex:1415433] 0x525 ISZERO
[codex:1415433] 0x526 PUSH2 0x0531
[codex:1415433] 0x529 JUMPI
[codex:1415433] 0x52a RETURNDATASIZE
[codex:1415433] 0x52b 0x5f
[codex:1415433] 0x52c 0x5f
[codex:1415433] 0x52d RETURNDATACOPY
[codex:1415433] 0x52e RETURNDATASIZE
[codex:1415433] 0x52f 0x5f
[codex:1415433] 0x530 REVERT
[codex:1415433] 0x531 JUMPDEST
[codex:1415433] 0x532 POP
[codex:1415433] 0x533 POP
[codex:1415433] 0x534 POP
[codex:1415433] 0x535 POP
[codex:1415433]
[codex:1415433] thinking
[codex:1415433] **Analyzing bytecode for vulnerabilities**
[codex:1415433] codex
[codex:1415433] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified in the provided runtime bytecode bundle. The only state-mutating/token-transfer flows appear gated by owner/operator checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT paths were found.","findings":[]}
[codex:1415433] tokens used
[codex:1415433] 87,471
[codex:1415433] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified in the provided runtime bytecode bundle. The only state-mutating/token-transfer flows appear gated by owner/operator checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT paths were found.","findings":[]}
{
"codex": {
"ran_at": "2026-01-01T13:49:36.233708+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction path identified in the provided runtime bytecode bundle. The only state-mutating/token-transfer flows appear gated by owner/operator checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT paths were found.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction path identified in the provided runtime bytecode bundle. The only state-mutating/token-transfer flows appear gated by owner/operator checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT paths were found.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x000f 0000000b: JUMPI 0000000c: PUSH0 0000000d: PUSH0 0000000e: REVERT 0000000f: JUMPDEST 00000010: POP 00000011: PUSH1 0x04 00000013: CALLDATASIZE 00000014: LT 00000015: PUSH2 0x00b1 00000018: JUMPI 00000019: PUSH0 0000001a: CALLDATALOAD 0000001b: PUSH1 0xe0 0000001d: SHR 0000001e: DUP1 0000001f: PUSH4 0x8da5cb5b 00000024: GT 00000025: PUSH2 0x006e 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0x8da5cb5b 0000002f: EQ 00000030: PUSH2 0x012c 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0x9e281a98 0000003a: EQ 0000003b: PUSH2 0x0146 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xab2217e4 00000045: EQ 00000046: PUSH2 0x0159 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xe8ea7770 00000050: EQ 00000051: PUSH2 0x0179 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf2fde38b 0000005b: EQ 0000005c: PUSH2 0x0199 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xf65041e6 00000066: EQ 00000067: PUSH2 0x01ac 0000006a: JUMPI 0000006b: PUSH0 0000006c: PUSH0 0000006d: REVERT 0000006e: JUMPDEST 0000006f: DUP1 00000070: PUSH4 0x0e90b3c9 00000075: EQ 00000076: PUSH2 0x00b5 00000079: JUMPI 0000007a: DUP1 0000007b: PUSH4 0x24e38dca 00000080: EQ 00000081: PUSH2 0x00d3 00000084: JUMPI 00000085: DUP1 00000086: PUSH4 0x4c8142a9 0000008b: EQ 0000008c: PUSH2 0x00e8 0000008f: JUMPI 00000090: DUP1 00000091: PUSH4 0x54fd4d50 00000096: EQ 00000097: PUSH2 0x00fb 0000009a: JUMPI 0000009b: DUP1 0000009c: PUSH4 0x715018a6 000000a1: EQ 000000a2: PUSH2 0x0111 000000a5: JUMPI 000000a6: DUP1 000000a7: PUSH4 0x89476069 000000ac: EQ 000000ad: PUSH2 0x0119 000000b0: JUMPI 000000b1: JUMPDEST 000000b2: PUSH0 000000b3: PUSH0 000000b4: REVERT 000000b5: JUMPDEST 000000b6: PUSH2 0x00bd 000000b9: PUSH2 0x01cd 000000bc: JUMP 000000bd: JUMPDEST 000000be: PUSH1 0x40 000000c0: MLOAD 000000c1: PUSH2 0x00ca 000000c4: SWAP2 000000c5: SWAP1 000000c6: PUSH2 0x0d00 000000c9: JUMP 000000ca: JUMPDEST 000000cb: PUSH1 0x40 000000cd: MLOAD 000000ce: DUP1 000000cf: SWAP2 000000d0: SUB 000000d1: SWAP1 000000d2: RETURN 000000d3: JUMPDEST 000000d4: PUSH2 0x00e6 000000d7: PUSH2 0x00e1 000000da: CALLDATASIZE 000000db: PUSH1 0x04 000000dd: PUSH2 0x0d6f 000000e0: JUMP 000000e1: JUMPDEST 000000e2: PUSH2 0x0235 000000e5: JUMP 000000e6: JUMPDEST 000000e7: STOP 000000e8: JUMPDEST 000000e9: PUSH2 0x00e6 000000ec: PUSH2 0x00f6 000000ef: CALLDATASIZE 000000f0: PUSH1 0x04 000000f2: PUSH2 0x0d6f 000000f5: JUMP 000000f6: JUMPDEST 000000f7: PUSH2 0x03a5 000000fa: JUMP 000000fb: JUMPDEST 000000fc: PUSH2 0x0103 000000ff: PUSH1 0x01 00000101: DUP2 00000102: JUMP 00000103: JUMPDEST 00000104: PUSH1 0x40 00000106: MLOAD 00000107: SWAP1 00000108: DUP2 00000109: MSTORE 0000010a: PUSH1 0x20 0000010c: ADD 0000010d: PUSH2 0x00ca 00000110: JUMP 00000111: JUMPDEST 00000112: PUSH2 0x00e6 00000115: PUSH2 0x045d 00000118: JUMP 00000119: JUMPDEST 0000011a: PUSH2 0x00e6 0000011d: PUSH2 0x0127 00000120: CALLDATASIZE 00000121: PUSH1 0x04 00000123: PUSH2 0x0d6f 00000126: JUMP 00000127: JUMPDEST 00000128: PUSH2 0x0470 0000012b: JUMP 0000012c: JUMPDEST 0000012d: PUSH0 0000012e: SLOAD 0000012f: PUSH1 0x40 00000131: MLOAD 00000132: PUSH1 0x01 00000134: PUSH1 0x01 00000136: PUSH1 0xa0 00000138: SHL 00000139: SUB 0000013a: SWAP1 0000013b: SWAP2 0000013c: AND 0000013d: DUP2 0000013e: MSTORE 0000013f: PUSH1 0x20 00000141: ADD 00000142: PUSH2 0x00ca 00000145: JUMP 00000146: JUMPDEST 00000147: PUSH2 0x00e6 0000014a: PUSH2 0x0154 0000014d: CALLDATASIZE 0000014e: PUSH1 0x04 00000150: PUSH2 0x0d91 00000153: JUMP 00000154: JUMPDEST 00000155: PUSH2 0x048f 00000158: JUMP 00000159: JUMPDEST 0000015a: PUSH2 0x016c 0000015d: PUSH2 0x0167 00000160: CALLDATASIZE 00000161: PUSH1 0x04 00000163: PUSH2 0x0dbb 00000166: JUMP 00000167: JUMPDEST 00000168: PUSH2 0x04f2 0000016b: JUMP 0000016c: JUMPDEST 0000016d: PUSH1 0x40 0000016f: MLOAD 00000170: PUSH2 0x00ca 00000173: SWAP2 00000174: SWAP1 00000175: PUSH2 0x0ded 00000178: JUMP 00000179: JUMPDEST 0000017a: PUSH2 0x018c 0000017d: PUSH2 0x0187 00000180: CALLDATASIZE 00000181: PUSH1 0x04 00000183: PUSH2 0x0e68 00000186: JUMP 00000187: JUMPDEST 00000188: PUSH2 0x0830 0000018b: JUMP 0000018c: JUMPDEST 0000018d: PUSH1 0x40 0000018f: MLOAD 00000190: PUSH2 0x00ca 00000193: SWAP2 00000194: SWAP1 00000195: PUSH2 0x0f33 00000198: JUMP 00000199: JUMPDEST 0000019a: PUSH2 0x00e6 0000019d: PUSH2 0x01a7 000001a0: CALLDATASIZE 000001a1: PUSH1 0x04 000001a3: PUSH2 0x0d6f 000001a6: JUMP 000001a7: JUMPDEST 000001a8: PUSH2 0x08d1 000001ab: JUMP 000001ac: JUMPDEST 000001ad: PUSH2 0x01bf 000001b0: PUSH2 0x01ba 000001b3: CALLDATASIZE 000001b4: PUSH1 0x04 000001b6: PUSH2 0x0e68 000001b9: JUMP 000001ba: JUMPDEST 000001bb: PUSH2 0x090b 000001be: JUMP 000001bf: JUMPDEST 000001c0: PUSH1 0x40 000001c2: MLOAD 000001c3: PUSH2 0x00ca 000001c6: SWAP3 000001c7: SWAP2 000001c8: SWAP1 000001c9: PUSH2 0x0f6a 000001cc: JUMP 000001cd: JUMPDEST 000001ce: PUSH1 0x60 000001d0: PUSH2 0x01d7 000001d3: PUSH2 0x0adb 000001d6: JUMP 000001d7: JUMPDEST 000001d8: PUSH1 0x01 000001da: DUP1 000001db: SLOAD 000001dc: DUP1 000001dd: PUSH1 0x20 000001df: MUL 000001e0: PUSH1 0x20 000001e2: ADD 000001e3: PUSH1 0x40 000001e5: MLOAD 000001e6: SWAP1 000001e7: DUP2 000001e8: ADD 000001e9: PUSH1 0x40 000001eb: MSTORE 000001ec: DUP1 000001ed: SWAP3 000001ee: SWAP2 000001ef: SWAP1 000001f0: DUP2 000001f1: DUP2 000001f2: MSTORE 000001f3: PUSH1 0x20 000001f5: ADD 000001f6: DUP3 000001f7: DUP1 000001f8: SLOAD 000001f9: DUP1 000001fa: ISZERO 000001fb: PUSH2 0x022b 000001fe: JUMPI 000001ff: PUSH1 0x20 00000201: MUL 00000202: DUP3 00000203: ADD 00000204: SWAP2 00000205: SWAP1 00000206: PUSH0 00000207: MSTORE 00000208: PUSH1 0x20 0000020a: PUSH0 0000020b: KECCAK256 0000020c: SWAP1 0000020d: JUMPDEST 0000020e: DUP2 0000020f: SLOAD 00000210: PUSH1 0x01 00000212: PUSH1 0x01 00000214: PUSH1 0xa0 00000216: SHL 00000217: SUB 00000218: AND 00000219: DUP2 0000021a: MSTORE 0000021b: PUSH1 0x01 0000021d: SWAP1 0000021e: SWAP2 0000021f: ADD 00000220: SWAP1 00000221: PUSH1 0x20 00000223: ADD 00000224: DUP1 00000225: DUP4 00000226: GT 00000227: PUSH2 0x020d 0000022a: JUMPI 0000022b: JUMPDEST 0000022c: POP 0000022d: POP 0000022e: POP 0000022f: POP 00000230: POP 00000231: SWAP1 00000232: POP 00000233: SWAP1 00000234: JUMP 00000235: JUMPDEST 00000236: PUSH2 0x023d 00000239: PUSH2 0x0adb 0000023c: JUMP 0000023d: JUMPDEST 0000023e: PUSH1 0x01 00000240: PUSH1 0x01 00000242: PUSH1 0xa0 00000244: SHL 00000245: SUB 00000246: DUP2 00000247: AND 00000248: PUSH0 00000249: SWAP1 0000024a: DUP2 0000024b: MSTORE 0000024c: PUSH1 0x02 0000024e: PUSH1 0x20 00000250: MSTORE 00000251: PUSH1 0x40 00000253: SWAP1 00000254: KECCAK256 00000255: SLOAD 00000256: PUSH1 0xff 00000258: AND 00000259: PUSH2 0x028f 0000025c: JUMPI 0000025d: PUSH1 0x40 0000025f: MLOAD 00000260: PUSH3 0x461bcd 00000264: PUSH1 0xe5 00000266: SHL 00000267: DUP2 00000268: MSTORE 00000269: PUSH1 0x20 0000026b: PUSH1 0x04 0000026d: DUP3 0000026e: ADD 0000026f: MSTORE 00000270: PUSH1 0x03 00000272: PUSH1 0x24 00000274: DUP3 00000275: ADD 00000276: MSTORE 00000277: PUSH3 0x29a729 0000027b: PUSH1 0xe9 0000027d: SHL 0000027e: PUSH1 0x44 00000280: DUP3 00000281: ADD 00000282: MSTORE 00000283: PUSH1 0x64 00000285: ADD 00000286: JUMPDEST 00000287: PUSH1 0x40 00000289: MLOAD 0000028a: DUP1 0000028b: SWAP2 0000028c: SUB 0000028d: SWAP1 0000028e: REVERT 0000028f: JUMPDEST 00000290: PUSH1 0x01 00000292: PUSH1 0x01 00000294: PUSH1 0xa0 00000296: SHL 00000297: SUB 00000298: DUP2 00000299: AND 0000029a: PUSH0 0000029b: SWAP1 0000029c: DUP2 0000029d: MSTORE 0000029e: PUSH1 0x02 000002a0: PUSH1 0x20 000002a2: MSTORE 000002a3: PUSH1 0x40 000002a5: DUP2 000002a6: KECCAK256 000002a7: DUP1 000002a8: SLOAD 000002a9: PUSH1 0xff 000002ab: NOT 000002ac: AND 000002ad: SWAP1 000002ae: SSTORE 000002af: JUMPDEST 000002b0: PUSH1 0x01 000002b2: SLOAD 000002b3: DUP2 000002b4: LT 000002b5: ISZERO 000002b6: PUSH2 0x03a1 000002b9: JUMPI 000002ba: DUP2 000002bb: PUSH1 0x01 000002bd: PUSH1 0x01 000002bf: PUSH1 0xa0 000002c1: SHL 000002c2: SUB 000002c3: AND 000002c4: PUSH1 0x01 000002c6: DUP3 000002c7: DUP2 000002c8: SLOAD 000002c9: DUP2 000002ca: LT 000002cb: PUSH2 0x02d6 000002ce: JUMPI 000002cf: PUSH2 0x02d6 000002d2: PUSH2 0x0fed 000002d5: JUMP 000002d6: JUMPDEST 000002d7: PUSH0 000002d8: SWAP2 000002d9: DUP3 000002da: MSTORE 000002db: PUSH1 0x20 000002dd: SWAP1 000002de: SWAP2 000002df: KECCAK256 000002e0: ADD 000002e1: SLOAD 000002e2: PUSH1 0x01 000002e4: PUSH1 0x01 000002e6: PUSH1 0xa0 000002e8: SHL 000002e9: SUB 000002ea: AND 000002eb: SUB 000002ec: PUSH2 0x0399 000002ef: JUMPI 000002f0: PUSH1 0x01 000002f2: DUP1 000002f3: SLOAD 000002f4: PUSH2 0x02fe 000002f7: SWAP1 000002f8: DUP3 000002f9: SWAP1 000002fa: PUSH2 0x1015 000002fd: JUMP 000002fe: JUMPDEST 000002ff: DUP2 00000300: SLOAD 00000301: DUP2 00000302: LT 00000303: PUSH2 0x030e 00000306: JUMPI 00000307: PUSH2 0x030e 0000030a: PUSH2 0x0fed 0000030d: JUMP 0000030e: JUMPDEST 0000030f: PUSH0 00000310: SWAP2 00000311: DUP3 00000312: MSTORE 00000313: PUSH1 0x20 00000315: SWAP1 00000316: SWAP2 00000317: KECCAK256 00000318: ADD 00000319: SLOAD 0000031a: PUSH1 0x01 0000031c: DUP1 0000031d: SLOAD 0000031e: PUSH1 0x01 00000320: PUSH1 0x01 00000322: PUSH1 0xa0 00000324: SHL 00000325: SUB 00000326: SWAP1 00000327: SWAP3 00000328: AND 00000329: SWAP2 0000032a: DUP4 0000032b: SWAP1 0000032c: DUP2 0000032d: LT 0000032e: PUSH2 0x0339 00000331: JUMPI 00000332: PUSH2 0x0339 00000335: PUSH2 0x0fed 00000338: JUMP 00000339: JUMPDEST 0000033a: SWAP1 0000033b: PUSH0 0000033c: MSTORE 0000033d: PUSH1 0x20 0000033f: PUSH0 00000340: KECCAK256 00000341: ADD 00000342: PUSH0 00000343: PUSH2 0x0100 00000346: EXP 00000347: DUP2 00000348: SLOAD 00000349: DUP2 0000034a: PUSH1 0x01 0000034c: PUSH1 0x01 0000034e: PUSH1 0xa0 00000350: SHL 00000351: SUB 00000352: MUL 00000353: NOT 00000354: AND 00000355: SWAP1 00000356: DUP4 00000357: PUSH1 0x01 00000359: PUSH1 0x01 0000035b: PUSH1 0xa0 0000035d: SHL 0000035e: SUB 0000035f: AND 00000360: MUL 00000361: OR 00000362: SWAP1 00000363: SSTORE 00000364: POP 00000365: PUSH1 0x01 00000367: DUP1 00000368: SLOAD 00000369: DUP1 0000036a: PUSH2 0x0375 0000036d: JUMPI 0000036e: PUSH2 0x0375 00000371: PUSH2 0x1028 00000374: JUMP 00000375: JUMPDEST 00000376: PUSH0 00000377: DUP3 00000378: DUP2 00000379: MSTORE 0000037a: PUSH1 0x20 0000037c: SWAP1 0000037d: KECCAK256 0000037e: DUP2 0000037f: ADD 00000380: PUSH0 00000381: NOT 00000382: SWAP1 00000383: DUP2 00000384: ADD 00000385: DUP1 00000386: SLOAD 00000387: PUSH1 0x01 00000389: PUSH1 0x01 0000038b: PUSH1 0xa0 0000038d: SHL 0000038e: SUB 0000038f: NOT 00000390: AND 00000391: SWAP1 00000392: SSTORE 00000393: ADD 00000394: SWAP1 00000395: SSTORE 00000396: POP 00000397: POP 00000398: JUMP 00000399: JUMPDEST 0000039a: PUSH1 0x01 0000039c: ADD 0000039d: PUSH2 0x02af 000003a0: JUMP 000003a1: JUMPDEST 000003a2: POP 000003a3: POP 000003a4: JUMP 000003a5: JUMPDEST 000003a6: PUSH2 0x03ad 000003a9: PUSH2 0x0adb 000003ac: JUMP 000003ad: JUMPDEST 000003ae: PUSH1 0x01 000003b0: PUSH1 0x01 000003b2: PUSH1 0xa0 000003b4: SHL 000003b5: SUB 000003b6: DUP2 000003b7: AND 000003b8: PUSH0 000003b9: SWAP1 000003ba: DUP2 000003bb: MSTORE 000003bc: PUSH1 0x02 000003be: PUSH1 0x20 000003c0: MSTORE 000003c1: PUSH1 0x40 000003c3: SWAP1 000003c4: KECCAK256 000003c5: SLOAD 000003c6: PUSH1 0xff 000003c8: AND 000003c9: ISZERO 000003ca: PUSH2 0x03fb 000003cd: JUMPI 000003ce: PUSH1 0x40 000003d0: MLOAD 000003d1: PUSH3 0x461bcd 000003d5: PUSH1 0xe5 000003d7: SHL 000003d8: DUP2 000003d9: MSTORE 000003da: PUSH1 0x20 000003dc: PUSH1 0x04 000003de: DUP3 000003df: ADD 000003e0: MSTORE 000003e1: PUSH1 0x03 000003e3: PUSH1 0x24 000003e5: DUP3 000003e6: ADD 000003e7: MSTORE 000003e8: PUSH3 0x29a0a9 000003ec: PUSH1 0xe9 000003ee: SHL 000003ef: PUSH1 0x44 000003f1: DUP3 000003f2: ADD 000003f3: MSTORE 000003f4: PUSH1 0x64 000003f6: ADD 000003f7: PUSH2 0x0286 000003fa: JUMP 000003fb: JUMPDEST 000003fc: PUSH1 0x01 000003fe: PUSH1 0x01 00000400: PUSH1 0xa0 00000402: SHL 00000403: SUB 00000404: AND 00000405: PUSH0 00000406: DUP2 00000407: DUP2 00000408: MSTORE 00000409: PUSH1 0x02 0000040b: PUSH1 0x20 0000040d: MSTORE 0000040e: PUSH1 0x40 00000410: DUP2 00000411: KECCAK256 00000412: DUP1 00000413: SLOAD 00000414: PUSH1 0xff 00000416: NOT 00000417: AND 00000418: PUSH1 0x01 0000041a: SWAP1 0000041b: DUP2 0000041c: OR 0000041d: SWAP1 0000041e: SWAP2 0000041f: SSTORE 00000420: DUP1 00000421: SLOAD 00000422: DUP1 00000423: DUP3 00000424: ADD 00000425: DUP3 00000426: SSTORE 00000427: SWAP2 00000428: MSTORE 00000429: PUSH32 0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6 0000044a: ADD 0000044b: DUP1 0000044c: SLOAD 0000044d: PUSH1 0x01 0000044f: PUSH1 0x01 00000451: PUSH1 0xa0 00000453: SHL 00000454: SUB 00000455: NOT 00000456: AND 00000457: SWAP1 00000458: SWAP2 00000459: OR 0000045a: SWAP1 0000045b: SSTORE 0000045c: JUMP 0000045d: JUMPDEST 0000045e: PUSH2 0x0465 00000461: PUSH2 0x0adb 00000464: JUMP 00000465: JUMPDEST 00000466: PUSH2 0x046e 00000469: PUSH0 0000046a: PUSH2 0x0b07 0000046d: JUMP 0000046e: JUMPDEST 0000046f: JUMP 00000470: JUMPDEST 00000471: PUSH2 0x0478 00000474: PUSH2 0x0adb 00000477: JUMP 00000478: JUMPDEST 00000479: PUSH2 0x048c 0000047c: DUP2 0000047d: PUSH2 0x0486 00000480: DUP4 00000481: ADDRESS 00000482: PUSH2 0x0b56 00000485: JUMP 00000486: JUMPDEST 00000487: CALLER 00000488: PUSH2 0x0bca 0000048b: JUMP 0000048c: JUMPDEST 0000048d: POP 0000048e: JUMP 0000048f: JUMPDEST 00000490: PUSH0 00000491: SLOAD 00000492: PUSH1 0x01 00000494: PUSH1 0x01 00000496: PUSH1 0xa0 00000498: SHL 00000499: SUB 0000049a: AND 0000049b: CALLER 0000049c: EQ 0000049d: DUP1 0000049e: PUSH2 0x04b5 000004a1: JUMPI 000004a2: POP 000004a3: CALLER 000004a4: PUSH0 000004a5: SWAP1 000004a6: DUP2 000004a7: MSTORE 000004a8: PUSH1 0x02 000004aa: PUSH1 0x20 000004ac: MSTORE 000004ad: PUSH1 0x40 000004af: SWAP1 000004b0: KECCAK256 000004b1: SLOAD 000004b2: PUSH1 0xff 000004b4: AND 000004b5: JUMPDEST 000004b6: PUSH2 0x04e7 000004b9: JUMPI 000004ba: PUSH1 0x40 000004bc: MLOAD 000004bd: PUSH3 0x461bcd 000004c1: PUSH1 0xe5 000004c3: SHL 000004c4: DUP2 000004c5: MSTORE 000004c6: PUSH1 0x20 000004c8: PUSH1 0x04 000004ca: DUP3 000004cb: ADD 000004cc: MSTORE 000004cd: PUSH1 0x03 000004cf: PUSH1 0x24 000004d1: DUP3 000004d2: ADD 000004d3: MSTORE 000004d4: PUSH3 0x343033 000004d8: PUSH1 0xe8 000004da: SHL 000004db: PUSH1 0x44 000004dd: DUP3 000004de: ADD 000004df: MSTORE 000004e0: PUSH1 0x64 000004e2: ADD 000004e3: PUSH2 0x0286 000004e6: JUMP 000004e7: JUMPDEST 000004e8: PUSH2 0x03a1 000004eb: DUP3 000004ec: DUP3 000004ed: CALLER 000004ee: PUSH2 0x0bca 000004f1: JUMP 000004f2: JUMPDEST 000004f3: PUSH1 0x60 000004f5: PUSH0 000004f6: DUP5 000004f7: PUSH1 0x01 000004f9: PUSH1 0x01 000004fb: PUSH1 0xa0 000004fd: SHL 000004fe: SUB 000004ff: AND 00000500: PUSH4 0x574f2ba3 00000505: PUSH1 0x40 00000507: MLOAD 00000508: DUP2 00000509: PUSH4 0xffffffff 0000050e: AND 0000050f: PUSH1 0xe0 00000511: SHL 00000512: DUP2 00000513: MSTORE 00000514: PUSH1 0x04 00000516: ADD 00000517: PUSH1 0x20 00000519: PUSH1 0x40 0000051b: MLOAD 0000051c: DUP1 0000051d: DUP4 0000051e: SUB 0000051f: DUP2 00000520: DUP7 00000521: GAS 00000522: STATICCALL 00000523: ISZERO 00000524: DUP1 00000525: ISZERO 00000526: PUSH2 0x0531 00000529: JUMPI 0000052a: RETURNDATASIZE 0000052b: PUSH0 0000052c: PUSH0 0000052d: RETURNDATACOPY 0000052e: RETURNDATASIZE 0000052f: PUSH0 00000530: REVERT 00000531: JUMPDEST 00000532: POP 00000533: POP 00000534: POP 00000535: POP 00000536: PUSH1 0x40 00000538: MLOAD 00000539: RETURNDATASIZE 0000053a: PUSH1 0x1f 0000053c: NOT 0000053d: PUSH1 0x1f 0000053f: DUP3 00000540: ADD 00000541: AND 00000542: DUP3 00000543: ADD 00000544: DUP1 00000545: PUSH1 0x40 00000547: MSTORE 00000548: POP 00000549: DUP2 0000054a: ADD 0000054b: SWAP1 0000054c: PUSH2 0x0555 0000054f: SWAP2 00000550: SWAP1 00000551: PUSH2 0x103c 00000554: JUMP 00000555: JUMPDEST 00000556: SWAP1 00000557: POP 00000558: PUSH0 00000559: DUP2 0000055a: DUP5 0000055b: GT 0000055c: PUSH2 0x0565 0000055f: JUMPI 00000560: DUP4 00000561: PUSH2 0x0567 00000564: JUMP 00000565: JUMPDEST 00000566: DUP2 00000567: JUMPDEST 00000568: SWAP1 00000569: POP 0000056a: DUP5 0000056b: DUP2 0000056c: LT 0000056d: ISZERO 0000056e: PUSH2 0x059f 00000571: JUMPI 00000572: PUSH1 0x40 00000574: MLOAD 00000575: PUSH3 0x461bcd 00000579: PUSH1 0xe5 0000057b: SHL 0000057c: DUP2 0000057d: MSTORE 0000057e: PUSH1 0x20 00000580: PUSH1 0x04 00000582: DUP3 00000583: ADD 00000584: MSTORE 00000585: PUSH1 0x03 00000587: PUSH1 0x24 00000589: DUP3 0000058a: ADD 0000058b: MSTORE 0000058c: PUSH3 0x534853 00000590: PUSH1 0xe8 00000592: SHL 00000593: PUSH1 0x44 00000595: DUP3 00000596: ADD 00000597: MSTORE 00000598: PUSH1 0x64 0000059a: ADD 0000059b: PUSH2 0x0286 0000059e: JUMP 0000059f: JUMPDEST 000005a0: PUSH0 000005a1: PUSH2 0x05aa 000005a4: DUP7 000005a5: DUP4 000005a6: PUSH2 0x1015 000005a9: JUMP 000005aa: JUMPDEST 000005ab: SWAP1 000005ac: POP 000005ad: PUSH0 000005ae: DUP2 000005af: PUSH8 0xffffffffffffffff 000005b8: DUP2 000005b9: GT 000005ba: ISZERO 000005bb: PUSH2 0x05c6 000005be: JUMPI 000005bf: PUSH2 0x05c6 000005c2: PUSH2 0x0e54 000005c5: JUMP 000005c6: JUMPDEST 000005c7: PUSH1 0x40 000005c9: MLOAD 000005ca: SWAP1 000005cb: DUP1 000005cc: DUP3 000005cd: MSTORE 000005ce: DUP1 000005cf: PUSH1 0x20 000005d1: MUL 000005d2: PUSH1 0x20 000005d4: ADD 000005d5: DUP3 000005d6: ADD 000005d7: PUSH1 0x40 000005d9: MSTORE 000005da: DUP1 000005db: ISZERO 000005dc: PUSH2 0x05ff 000005df: JUMPI 000005e0: DUP2 000005e1: PUSH1 0x20 000005e3: ADD 000005e4: JUMPDEST 000005e5: PUSH2 0x05ec 000005e8: PUSH2 0x0ce2 000005eb: JUMP 000005ec: JUMPDEST 000005ed: DUP2 000005ee: MSTORE 000005ef: PUSH1 0x20 000005f1: ADD 000005f2: SWAP1 000005f3: PUSH1 0x01 000005f5: SWAP1 000005f6: SUB 000005f7: SWAP1 000005f8: DUP2 000005f9: PUSH2 0x05e4 000005fc: JUMPI 000005fd: SWAP1 000005fe: POP 000005ff: JUMPDEST 00000600: POP 00000601: SWAP1 00000602: POP 00000603: PUSH0 00000604: JUMPDEST 00000605: DUP3 00000606: DUP2 00000607: LT 00000608: ISZERO 00000609: PUSH2 0x0824 0000060c: JUMPI 0000060d: PUSH0 0000060e: PUSH1 0x01 00000610: PUSH1 0x01 00000612: PUSH1 0xa0 00000614: SHL 00000615: SUB 00000616: DUP11 00000617: AND 00000618: PUSH4 0x1e3dd18b 0000061d: PUSH2 0x0626 00000620: DUP5 00000621: DUP13 00000622: PUSH2 0x1053 00000625: JUMP 00000626: JUMPDEST 00000627: PUSH1 0x40 00000629: MLOAD 0000062a: DUP3 0000062b: PUSH4 0xffffffff 00000630: AND 00000631: PUSH1 0xe0 00000633: SHL 00000634: DUP2 00000635: MSTORE 00000636: PUSH1 0x04 00000638: ADD 00000639: PUSH2 0x0644 0000063c: SWAP2 0000063d: DUP2 0000063e: MSTORE 0000063f: PUSH1 0x20 00000641: ADD 00000642: SWAP1 00000643: JUMP 00000644: JUMPDEST 00000645: PUSH1 0x20 00000647: PUSH1 0x40 00000649: MLOAD 0000064a: DUP1 0000064b: DUP4 0000064c: SUB 0000064d: DUP2 0000064e: DUP7 0000064f: GAS 00000650: STATICCALL 00000651: ISZERO 00000652: DUP1 00000653: ISZERO 00000654: PUSH2 0x065f 00000657: JUMPI 00000658: RETURNDATASIZE 00000659: PUSH0 0000065a: PUSH0 0000065b: RETURNDATACOPY 0000065c: RETURNDATASIZE 0000065d: PUSH0 0000065e: REVERT 0000065f: JUMPDEST 00000660: POP 00000661: POP 00000662: POP 00000663: POP 00000664: PUSH1 0x40 00000666: MLOAD 00000667: RETURNDATASIZE 00000668: PUSH1 0x1f 0000066a: NOT 0000066b: PUSH1 0x1f 0000066d: DUP3 0000066e: ADD 0000066f: AND 00000670: DUP3 00000671: ADD 00000672: DUP1 00000673: PUSH1 0x40 00000675: MSTORE 00000676: POP 00000677: DUP2 00000678: ADD 00000679: SWAP1 0000067a: PUSH2 0x0683 0000067d: SWAP2 0000067e: SWAP1 0000067f: PUSH2 0x1066 00000682: JUMP 00000683: JUMPDEST 00000684: SWAP1 00000685: POP 00000686: PUSH0 00000687: DUP2 00000688: SWAP1 00000689: POP 0000068a: DUP1 0000068b: PUSH1 0x01 0000068d: PUSH1 0x01 0000068f: PUSH1 0xa0 00000691: SHL 00000692: SUB 00000693: AND 00000694: PUSH4 0x0dfe1681 00000699: PUSH1 0x40 0000069b: MLOAD 0000069c: DUP2 0000069d: PUSH4 0xffffffff 000006a2: AND 000006a3: PUSH1 0xe0 000006a5: SHL 000006a6: DUP2 000006a7: MSTORE 000006a8: PUSH1 0x04 000006aa: ADD 000006ab: PUSH1 0x20 000006ad: PUSH1 0x40 000006af: MLOAD 000006b0: DUP1 000006b1: DUP4 000006b2: SUB 000006b3: DUP2 000006b4: DUP7 000006b5: GAS 000006b6: STATICCALL 000006b7: ISZERO 000006b8: DUP1 000006b9: ISZERO 000006ba: PUSH2 0x06c5 000006bd: JUMPI 000006be: RETURNDATASIZE 000006bf: PUSH0 000006c0: PUSH0 000006c1: RETURNDATACOPY 000006c2: RETURNDATASIZE 000006c3: PUSH0 000006c4: REVERT 000006c5: JUMPDEST 000006c6: POP 000006c7: POP 000006c8: POP 000006c9: POP 000006ca: PUSH1 0x40 000006cc: MLOAD 000006cd: RETURNDATASIZE 000006ce: PUSH1 0x1f 000006d0: NOT 000006d1: PUSH1 0x1f 000006d3: DUP3 000006d4: ADD 000006d5: AND 000006d6: DUP3 000006d7: ADD 000006d8: DUP1 000006d9: PUSH1 0x40 000006db: MSTORE 000006dc: POP 000006dd: DUP2 000006de: ADD 000006df: SWAP1 000006e0: PUSH2 0x06e9 000006e3: SWAP2 000006e4: SWAP1 000006e5: PUSH2 0x1066 000006e8: JUMP 000006e9: JUMPDEST 000006ea: DUP5 000006eb: DUP5 000006ec: DUP2 000006ed: MLOAD 000006ee: DUP2 000006ef: LT 000006f0: PUSH2 0x06fb 000006f3: JUMPI 000006f4: PUSH2 0x06fb 000006f7: PUSH2 0x0fed 000006fa: JUMP 000006fb: JUMPDEST 000006fc: PUSH1 0x20 000006fe: MUL 000006ff: PUSH1 0x20 00000701: ADD 00000702: ADD 00000703: MLOAD 00000704: PUSH0 00000705: PUSH1 0x03 00000707: DUP2 00000708: LT 00000709: PUSH2 0x0714 0000070c: JUMPI 0000070d: PUSH2 0x0714 00000710: PUSH2 0x0fed 00000713: JUMP 00000714: JUMPDEST 00000715: PUSH1 0x20 00000717: MUL 00000718: ADD 00000719: SWAP1 0000071a: PUSH1 0x01 0000071c: PUSH1 0x01 0000071e: PUSH1 0xa0 00000720: SHL 00000721: SUB 00000722: AND 00000723: SWAP1 00000724: DUP2 00000725: PUSH1 0x01 00000727: PUSH1 0x01 00000729: PUSH1 0xa0 0000072b: SHL 0000072c: SUB 0000072d: AND 0000072e: DUP2 0000072f: MSTORE 00000730: POP 00000731: POP 00000732: DUP1 00000733: PUSH1 0x01 00000735: PUSH1 0x01 00000737: PUSH1 0xa0 00000739: SHL 0000073a: SUB 0000073b: AND 0000073c: PUSH4 0xd21220a7 00000741: PUSH1 0x40 00000743: MLOAD 00000744: DUP2 00000745: PUSH4 0xffffffff 0000074a: AND 0000074b: PUSH1 0xe0 0000074d: SHL 0000074e: DUP2 0000074f: MSTORE 00000750: PUSH1 0x04 00000752: ADD 00000753: PUSH1 0x20 00000755: PUSH1 0x40 00000757: MLOAD 00000758: DUP1 00000759: DUP4 0000075a: SUB 0000075b: DUP2 0000075c: DUP7 0000075d: GAS 0000075e: STATICCALL 0000075f: ISZERO 00000760: DUP1 00000761: ISZERO 00000762: PUSH2 0x076d 00000765: JUMPI 00000766: RETURNDATASIZE 00000767: PUSH0 00000768: PUSH0 00000769: RETURNDATACOPY 0000076a: RETURNDATASIZE 0000076b: PUSH0 0000076c: REVERT 0000076d: JUMPDEST 0000076e: POP 0000076f: POP 00000770: POP 00000771: POP 00000772: PUSH1 0x40 00000774: MLOAD 00000775: RETURNDATASIZE 00000776: PUSH1 0x1f 00000778: NOT 00000779: PUSH1 0x1f 0000077b: DUP3 0000077c: ADD 0000077d: AND 0000077e: DUP3 0000077f: ADD 00000780: DUP1 00000781: PUSH1 0x40 00000783: MSTORE 00000784: POP 00000785: DUP2 00000786: ADD 00000787: SWAP1 00000788: PUSH2 0x0791 0000078b: SWAP2 0000078c: SWAP1 0000078d: PUSH2 0x1066 00000790: JUMP 00000791: JUMPDEST 00000792: DUP5 00000793: DUP5 00000794: DUP2 00000795: MLOAD 00000796: DUP2 00000797: LT 00000798: PUSH2 0x07a3 0000079b: JUMPI 0000079c: PUSH2 0x07a3 0000079f: PUSH2 0x0fed 000007a2: JUMP 000007a3: JUMPDEST 000007a4: PUSH1 0x20 000007a6: MUL 000007a7: PUSH1 0x20 000007a9: ADD 000007aa: ADD 000007ab: MLOAD 000007ac: PUSH1 0x01 000007ae: PUSH1 0x03 000007b0: DUP2 000007b1: LT 000007b2: PUSH2 0x07bd 000007b5: JUMPI 000007b6: PUSH2 0x07bd 000007b9: PUSH2 0x0fed 000007bc: JUMP 000007bd: JUMPDEST 000007be: PUSH1 0x20 000007c0: MUL 000007c1: ADD 000007c2: SWAP1 000007c3: PUSH1 0x01 000007c5: PUSH1 0x01 000007c7: PUSH1 0xa0 000007c9: SHL 000007ca: SUB 000007cb: AND 000007cc: SWAP1 000007cd: DUP2 000007ce: PUSH1 0x01 000007d0: PUSH1 0x01 000007d2: PUSH1 0xa0 000007d4: SHL 000007d5: SUB 000007d6: AND 000007d7: DUP2 000007d8: MSTORE 000007d9: POP 000007da: POP 000007db: DUP2 000007dc: DUP5 000007dd: DUP5 000007de: DUP2 000007df: MLOAD 000007e0: DUP2 000007e1: LT 000007e2: PUSH2 0x07ed 000007e5: JUMPI 000007e6: PUSH2 0x07ed 000007e9: PUSH2 0x0fed 000007ec: JUMP 000007ed: JUMPDEST 000007ee: PUSH1 0x20 000007f0: MUL 000007f1: PUSH1 0x20 000007f3: ADD 000007f4: ADD 000007f5: MLOAD 000007f6: PUSH1 0x02 000007f8: PUSH1 0x03 000007fa: DUP2 000007fb: LT 000007fc: PUSH2 0x0807 000007ff: JUMPI 00000800: PUSH2 0x0807 00000803: PUSH2 0x0fed 00000806: JUMP 00000807: JUMPDEST 00000808: PUSH1 0x01 0000080a: PUSH1 0x01 0000080c: PUSH1 0xa0 0000080e: SHL 0000080f: SUB 00000810: SWAP1 00000811: SWAP3 00000812: AND 00000813: PUSH1 0x20 00000815: SWAP3 00000816: SWAP1 00000817: SWAP3 00000818: MUL 00000819: ADD 0000081a: MSTORE 0000081b: POP 0000081c: POP 0000081d: PUSH1 0x01 0000081f: ADD 00000820: PUSH2 0x0604 00000823: JUMP 00000824: JUMPDEST 00000825: POP 00000826: SWAP8 00000827: SWAP7 00000828: POP 00000829: POP 0000082a: POP 0000082b: POP 0000082c: POP 0000082d: POP 0000082e: POP 0000082f: JUMP 00000830: JUMPDEST 00000831: PUSH1 0x60 00000833: DUP2 00000834: MLOAD 00000835: PUSH8 0xffffffffffffffff 0000083e: DUP2 0000083f: GT 00000840: ISZERO 00000841: PUSH2 0x084c 00000844: JUMPI 00000845: PUSH2 0x084c 00000848: PUSH2 0x0e54 0000084b: JUMP 0000084c: JUMPDEST 0000084d: PUSH1 0x40 0000084f: MLOAD 00000850: SWAP1 00000851: DUP1 00000852: DUP3 00000853: MSTORE 00000854: DUP1 00000855: PUSH1 0x20 00000857: MUL 00000858: PUSH1 0x20 0000085a: ADD 0000085b: DUP3 0000085c: ADD 0000085d: PUSH1 0x40 0000085f: MSTORE 00000860: DUP1 00000861: ISZERO 00000862: PUSH2 0x0875 00000865: JUMPI 00000866: DUP2 00000867: PUSH1 0x20 00000869: ADD 0000086a: PUSH1 0x20 0000086c: DUP3 0000086d: MUL 0000086e: DUP1 0000086f: CALLDATASIZE 00000870: DUP4 00000871: CALLDATACOPY 00000872: ADD 00000873: SWAP1 00000874: POP 00000875: JUMPDEST 00000876: POP 00000877: SWAP1 00000878: POP 00000879: PUSH0 0000087a: JUMPDEST 0000087b: DUP3 0000087c: MLOAD 0000087d: DUP2 0000087e: LT 0000087f: ISZERO 00000880: PUSH2 0x08cb 00000883: JUMPI 00000884: PUSH2 0x08a6 00000887: DUP4 00000888: DUP3 00000889: DUP2 0000088a: MLOAD 0000088b: DUP2 0000088c: LT 0000088d: PUSH2 0x0898 00000890: JUMPI 00000891: PUSH2 0x0898 00000894: PUSH2 0x0fed 00000897: JUMP 00000898: JUMPDEST 00000899: PUSH1 0x20 0000089b: MUL 0000089c: PUSH1 0x20 0000089e: ADD 0000089f: ADD 000008a0: MLOAD 000008a1: ADDRESS 000008a2: PUSH2 0x0b56 000008a5: JUMP 000008a6: JUMPDEST 000008a7: DUP3 000008a8: DUP3 000008a9: DUP2 000008aa: MLOAD 000008ab: DUP2 000008ac: LT 000008ad: PUSH2 0x08b8 000008b0: JUMPI 000008b1: PUSH2 0x08b8 000008b4: PUSH2 0x0fed 000008b7: JUMP 000008b8: JUMPDEST 000008b9: PUSH1 0x20 000008bb: SWAP1 000008bc: DUP2 000008bd: MUL 000008be: SWAP2 000008bf: SWAP1 000008c0: SWAP2 000008c1: ADD 000008c2: ADD 000008c3: MSTORE 000008c4: PUSH1 0x01 000008c6: ADD 000008c7: PUSH2 0x087a 000008ca: JUMP 000008cb: JUMPDEST 000008cc: POP 000008cd: SWAP2 000008ce: SWAP1 000008cf: POP 000008d0: JUMP 000008d1: JUMPDEST 000008d2: PUSH2 0x08d9 000008d5: PUSH2 0x0adb 000008d8: JUMP 000008d9: JUMPDEST 000008da: PUSH1 0x01 000008dc: PUSH1 0x01 000008de: PUSH1 0xa0 000008e0: SHL 000008e1: SUB 000008e2: DUP2 000008e3: AND 000008e4: PUSH2 0x0902 000008e7: JUMPI 000008e8: PUSH1 0x40 000008ea: MLOAD 000008eb: PUSH4 0x1e4fbdf7 000008f0: PUSH1 0xe0 000008f2: SHL 000008f3: DUP2 000008f4: MSTORE 000008f5: PUSH0 000008f6: PUSH1 0x04 000008f8: DUP3 000008f9: ADD 000008fa: MSTORE 000008fb: PUSH1 0x24 000008fd: ADD 000008fe: PUSH2 0x0286 00000901: JUMP 00000902: JUMPDEST 00000903: PUSH2 0x048c 00000906: DUP2 00000907: PUSH2 0x0b07 0000090a: JUMP 0000090b: JUMPDEST 0000090c: PUSH1 0x60 0000090e: DUP1 0000090f: DUP3 00000910: MLOAD 00000911: PUSH8 0xffffffffffffffff 0000091a: DUP2 0000091b: GT 0000091c: ISZERO 0000091d: PUSH2 0x0928 00000920: JUMPI 00000921: PUSH2 0x0928 00000924: PUSH2 0x0e54 00000927: JUMP 00000928: JUMPDEST 00000929: PUSH1 0x40 0000092b: MLOAD 0000092c: SWAP1 0000092d: DUP1 0000092e: DUP3 0000092f: MSTORE 00000930: DUP1 00000931: PUSH1 0x20 00000933: MUL 00000934: PUSH1 0x20 00000936: ADD 00000937: DUP3 00000938: ADD 00000939: PUSH1 0x40 0000093b: MSTORE 0000093c: DUP1 0000093d: ISZERO 0000093e: PUSH2 0x0951 00000941: JUMPI 00000942: DUP2 00000943: PUSH1 0x20 00000945: ADD 00000946: PUSH1 0x20 00000948: DUP3 00000949: MUL 0000094a: DUP1 0000094b: CALLDATASIZE 0000094c: DUP4 0000094d: CALLDATACOPY 0000094e: ADD 0000094f: SWAP1 00000950: POP 00000951: JUMPDEST 00000952: POP 00000953: SWAP2 00000954: POP 00000955: DUP3 00000956: MLOAD 00000957: PUSH8 0xffffffffffffffff 00000960: DUP2 00000961: GT 00000962: ISZERO 00000963: PUSH2 0x096e 00000966: JUMPI 00000967: PUSH2 0x096e 0000096a: PUSH2 0x0e54 0000096d: JUMP 0000096e: JUMPDEST 0000096f: PUSH1 0x40 00000971: MLOAD 00000972: SWAP1 00000973: DUP1 00000974: DUP3 00000975: MSTORE 00000976: DUP1 00000977: PUSH1 0x20 00000979: MUL 0000097a: PUSH1 0x20 0000097c: ADD 0000097d: DUP3 0000097e: ADD 0000097f: PUSH1 0x40 00000981: MSTORE 00000982: DUP1 00000983: ISZERO 00000984: PUSH2 0x0997 00000987: JUMPI 00000988: DUP2 00000989: PUSH1 0x20 0000098b: ADD 0000098c: PUSH1 0x20 0000098e: DUP3 0000098f: MUL 00000990: DUP1 00000991: CALLDATASIZE 00000992: DUP4 00000993: CALLDATACOPY 00000994: ADD 00000995: SWAP1 00000996: POP 00000997: JUMPDEST 00000998: POP 00000999: SWAP1 0000099a: POP 0000099b: PUSH0 0000099c: JUMPDEST 0000099d: DUP4 0000099e: MLOAD 0000099f: DUP2 000009a0: LT 000009a1: ISZERO 000009a2: PUSH2 0x0ad5 000009a5: JUMPI 000009a6: PUSH0 000009a7: DUP5 000009a8: DUP3 000009a9: DUP2 000009aa: MLOAD 000009ab: DUP2 000009ac: LT 000009ad: PUSH2 0x09b8 000009b0: JUMPI 000009b1: PUSH2 0x09b8 000009b4: PUSH2 0x0fed 000009b7: JUMP 000009b8: JUMPDEST 000009b9: PUSH1 0x20 000009bb: MUL 000009bc: PUSH1 0x20 000009be: ADD 000009bf: ADD 000009c0: MLOAD 000009c1: SWAP1 000009c2: POP 000009c3: DUP1 000009c4: PUSH1 0x01 000009c6: PUSH1 0x01 000009c8: PUSH1 0xa0 000009ca: SHL 000009cb: SUB 000009cc: AND 000009cd: PUSH4 0xfeaf968c 000009d2: PUSH1 0x40 000009d4: MLOAD 000009d5: DUP2 000009d6: PUSH4 0xffffffff 000009db: AND 000009dc: PUSH1 0xe0 000009de: SHL 000009df: DUP2 000009e0: MSTORE 000009e1: PUSH1 0x04 000009e3: ADD 000009e4: PUSH1 0xa0 000009e6: PUSH1 0x40 000009e8: MLOAD 000009e9: DUP1 000009ea: DUP4 000009eb: SUB 000009ec: DUP2 000009ed: DUP7 000009ee: GAS 000009ef: STATICCALL 000009f0: ISZERO 000009f1: DUP1 000009f2: ISZERO 000009f3: PUSH2 0x09fe 000009f6: JUMPI 000009f7: RETURNDATASIZE 000009f8: PUSH0 000009f9: PUSH0 000009fa: RETURNDATACOPY 000009fb: RETURNDATASIZE 000009fc: PUSH0 000009fd: REVERT 000009fe: JUMPDEST 000009ff: POP 00000a00: POP 00000a01: POP 00000a02: POP 00000a03: PUSH1 0x40 00000a05: MLOAD 00000a06: RETURNDATASIZE 00000a07: PUSH1 0x1f 00000a09: NOT 00000a0a: PUSH1 0x1f 00000a0c: DUP3 00000a0d: ADD 00000a0e: AND 00000a0f: DUP3 00000a10: ADD 00000a11: DUP1 00000a12: PUSH1 0x40 00000a14: MSTORE 00000a15: POP 00000a16: DUP2 00000a17: ADD 00000a18: SWAP1 00000a19: PUSH2 0x0a22 00000a1c: SWAP2 00000a1d: SWAP1 00000a1e: PUSH2 0x109a 00000a21: JUMP 00000a22: JUMPDEST 00000a23: POP 00000a24: POP 00000a25: DUP7 00000a26: MLOAD 00000a27: SWAP2 00000a28: SWAP3 00000a29: POP 00000a2a: DUP7 00000a2b: SWAP2 00000a2c: DUP6 00000a2d: SWAP2 00000a2e: POP 00000a2f: DUP2 00000a30: LT 00000a31: PUSH2 0x0a3c 00000a34: JUMPI 00000a35: PUSH2 0x0a3c 00000a38: PUSH2 0x0fed 00000a3b: JUMP 00000a3c: JUMPDEST 00000a3d: PUSH1 0x20 00000a3f: MUL 00000a40: PUSH1 0x20 00000a42: ADD 00000a43: ADD 00000a44: DUP2 00000a45: DUP2 00000a46: MSTORE 00000a47: POP 00000a48: POP 00000a49: DUP1 00000a4a: PUSH1 0x01 00000a4c: PUSH1 0x01 00000a4e: PUSH1 0xa0 00000a50: SHL 00000a51: SUB 00000a52: AND 00000a53: PUSH4 0x313ce567 00000a58: PUSH1 0x40 00000a5a: MLOAD 00000a5b: DUP2 00000a5c: PUSH4 0xffffffff 00000a61: AND 00000a62: PUSH1 0xe0 00000a64: SHL 00000a65: DUP2 00000a66: MSTORE 00000a67: PUSH1 0x04 00000a69: ADD 00000a6a: PUSH1 0x20 00000a6c: PUSH1 0x40 00000a6e: MLOAD 00000a6f: DUP1 00000a70: DUP4 00000a71: SUB 00000a72: DUP2 00000a73: DUP7 00000a74: GAS 00000a75: STATICCALL 00000a76: ISZERO 00000a77: DUP1 00000a78: ISZERO 00000a79: PUSH2 0x0a84 00000a7c: JUMPI 00000a7d: RETURNDATASIZE 00000a7e: PUSH0 00000a7f: PUSH0 00000a80: RETURNDATACOPY 00000a81: RETURNDATASIZE 00000a82: PUSH0 00000a83: REVERT 00000a84: JUMPDEST 00000a85: POP 00000a86: POP 00000a87: POP 00000a88: POP 00000a89: PUSH1 0x40 00000a8b: MLOAD 00000a8c: RETURNDATASIZE 00000a8d: PUSH1 0x1f 00000a8f: NOT 00000a90: PUSH1 0x1f 00000a92: DUP3 00000a93: ADD 00000a94: AND 00000a95: DUP3 00000a96: ADD 00000a97: DUP1 00000a98: PUSH1 0x40 00000a9a: MSTORE 00000a9b: POP 00000a9c: DUP2 00000a9d: ADD 00000a9e: SWAP1 00000a9f: PUSH2 0x0aa8 00000aa2: SWAP2 00000aa3: SWAP1 00000aa4: PUSH2 0x10e8 00000aa7: JUMP 00000aa8: JUMPDEST 00000aa9: DUP4 00000aaa: DUP4 00000aab: DUP2 00000aac: MLOAD 00000aad: DUP2 00000aae: LT 00000aaf: PUSH2 0x0aba 00000ab2: JUMPI 00000ab3: PUSH2 0x0aba 00000ab6: PUSH2 0x0fed 00000ab9: JUMP 00000aba: JUMPDEST 00000abb: PUSH1 0xff 00000abd: SWAP1 00000abe: SWAP3 00000abf: AND 00000ac0: PUSH1 0x20 00000ac2: SWAP3 00000ac3: DUP4 00000ac4: MUL 00000ac5: SWAP2 00000ac6: SWAP1 00000ac7: SWAP2 00000ac8: ADD 00000ac9: SWAP1 00000aca: SWAP2 00000acb: ADD 00000acc: MSTORE 00000acd: POP 00000ace: PUSH1 0x01 00000ad0: ADD 00000ad1: PUSH2 0x099c 00000ad4: JUMP 00000ad5: JUMPDEST 00000ad6: POP 00000ad7: SWAP2 00000ad8: POP 00000ad9: SWAP2 00000ada: JUMP 00000adb: JUMPDEST 00000adc: PUSH0 00000add: SLOAD 00000ade: PUSH1 0x01 00000ae0: PUSH1 0x01 00000ae2: PUSH1 0xa0 00000ae4: SHL 00000ae5: SUB 00000ae6: AND 00000ae7: CALLER 00000ae8: EQ 00000ae9: PUSH2 0x046e 00000aec: JUMPI 00000aed: PUSH1 0x40 00000aef: MLOAD 00000af0: PUSH4 0x118cdaa7 00000af5: PUSH1 0xe0 00000af7: SHL 00000af8: DUP2 00000af9: MSTORE 00000afa: CALLER 00000afb: PUSH1 0x04 00000afd: DUP3 00000afe: ADD 00000aff: MSTORE 00000b00: PUSH1 0x24 00000b02: ADD 00000b03: PUSH2 0x0286 00000b06: JUMP 00000b07: JUMPDEST 00000b08: PUSH0 00000b09: DUP1 00000b0a: SLOAD 00000b0b: PUSH1 0x01 00000b0d: PUSH1 0x01 00000b0f: PUSH1 0xa0 00000b11: SHL 00000b12: SUB 00000b13: DUP4 00000b14: DUP2 00000b15: AND 00000b16: PUSH1 0x01 00000b18: PUSH1 0x01 00000b1a: PUSH1 0xa0 00000b1c: SHL 00000b1d: SUB 00000b1e: NOT 00000b1f: DUP4 00000b20: AND 00000b21: DUP2 00000b22: OR 00000b23: DUP5 00000b24: SSTORE 00000b25: PUSH1 0x40 00000b27: MLOAD 00000b28: SWAP2 00000b29: SWAP1 00000b2a: SWAP3 00000b2b: AND 00000b2c: SWAP3 00000b2d: DUP4 00000b2e: SWAP2 00000b2f: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000b50: SWAP2 00000b51: SWAP1 00000b52: LOG3 00000b53: POP 00000b54: POP 00000b55: JUMP 00000b56: JUMPDEST 00000b57: PUSH1 0x40 00000b59: MLOAD 00000b5a: PUSH4 0x70a08231 00000b5f: PUSH1 0xe0 00000b61: SHL 00000b62: DUP2 00000b63: MSTORE 00000b64: PUSH1 0x01 00000b66: PUSH1 0x01 00000b68: PUSH1 0xa0 00000b6a: SHL 00000b6b: SUB 00000b6c: DUP3 00000b6d: DUP2 00000b6e: AND 00000b6f: PUSH1 0x04 00000b71: DUP4 00000b72: ADD 00000b73: MSTORE 00000b74: PUSH0 00000b75: SWAP2 00000b76: SWAP1 00000b77: DUP5 00000b78: AND 00000b79: SWAP1 00000b7a: PUSH4 0x70a08231 00000b7f: SWAP1 00000b80: PUSH1 0x24 00000b82: ADD 00000b83: PUSH1 0x20 00000b85: PUSH1 0x40 00000b87: MLOAD 00000b88: DUP1 00000b89: DUP4 00000b8a: SUB 00000b8b: DUP2 00000b8c: DUP7 00000b8d: GAS 00000b8e: STATICCALL 00000b8f: ISZERO 00000b90: DUP1 00000b91: ISZERO 00000b92: PUSH2 0x0b9d 00000b95: JUMPI 00000b96: RETURNDATASIZE 00000b97: PUSH0 00000b98: PUSH0 00000b99: RETURNDATACOPY 00000b9a: RETURNDATASIZE 00000b9b: PUSH0 00000b9c: REVERT 00000b9d: JUMPDEST 00000b9e: POP 00000b9f: POP 00000ba0: POP 00000ba1: POP 00000ba2: PUSH1 0x40 00000ba4: MLOAD 00000ba5: RETURNDATASIZE 00000ba6: PUSH1 0x1f 00000ba8: NOT 00000ba9: PUSH1 0x1f 00000bab: DUP3 00000bac: ADD 00000bad: AND 00000bae: DUP3 00000baf: ADD 00000bb0: DUP1 00000bb1: PUSH1 0x40 00000bb3: MSTORE 00000bb4: POP 00000bb5: DUP2 00000bb6: ADD 00000bb7: SWAP1 00000bb8: PUSH2 0x0bc1 00000bbb: SWAP2 00000bbc: SWAP1 00000bbd: PUSH2 0x103c 00000bc0: JUMP 00000bc1: JUMPDEST 00000bc2: SWAP1 00000bc3: POP 00000bc4: JUMPDEST 00000bc5: SWAP3 00000bc6: SWAP2 00000bc7: POP 00000bc8: POP 00000bc9: JUMP 00000bca: JUMPDEST 00000bcb: DUP2 00000bcc: PUSH2 0x0bd5 00000bcf: DUP5 00000bd0: ADDRESS 00000bd1: PUSH2 0x0b56 00000bd4: JUMP 00000bd5: JUMPDEST 00000bd6: LT 00000bd7: ISZERO 00000bd8: PUSH2 0x0c08 00000bdb: JUMPI 00000bdc: PUSH1 0x40 00000bde: MLOAD 00000bdf: PUSH3 0x461bcd 00000be3: PUSH1 0xe5 00000be5: SHL 00000be6: DUP2 00000be7: MSTORE 00000be8: PUSH1 0x20 00000bea: PUSH1 0x04 00000bec: DUP3 00000bed: ADD 00000bee: MSTORE 00000bef: PUSH1 0x02 00000bf1: PUSH1 0x24 00000bf3: DUP3 00000bf4: ADD 00000bf5: MSTORE 00000bf6: PUSH2 0x24a1 00000bf9: PUSH1 0xf1 00000bfb: SHL 00000bfc: PUSH1 0x44 00000bfe: DUP3 00000bff: ADD 00000c00: MSTORE 00000c01: PUSH1 0x64 00000c03: ADD 00000c04: PUSH2 0x0286 00000c07: JUMP 00000c08: JUMPDEST 00000c09: PUSH2 0x0c1c 00000c0c: PUSH1 0x01 00000c0e: PUSH1 0x01 00000c10: PUSH1 0xa0 00000c12: SHL 00000c13: SUB 00000c14: DUP5 00000c15: AND 00000c16: DUP3 00000c17: DUP5 00000c18: PUSH2 0x0c21 00000c1b: JUMP 00000c1c: JUMPDEST 00000c1d: POP 00000c1e: POP 00000c1f: POP 00000c20: JUMP 00000c21: JUMPDEST 00000c22: PUSH1 0x40 00000c24: DUP1 00000c25: MLOAD 00000c26: PUSH1 0x01 00000c28: PUSH1 0x01 00000c2a: PUSH1 0xa0 00000c2c: SHL 00000c2d: SUB 00000c2e: DUP5 00000c2f: AND 00000c30: PUSH1 0x24 00000c32: DUP3 00000c33: ADD 00000c34: MSTORE 00000c35: PUSH1 0x44 00000c37: DUP1 00000c38: DUP3 00000c39: ADD 00000c3a: DUP5 00000c3b: SWAP1 00000c3c: MSTORE 00000c3d: DUP3 00000c3e: MLOAD 00000c3f: DUP1 00000c40: DUP4 00000c41: SUB 00000c42: SWAP1 00000c43: SWAP2 00000c44: ADD 00000c45: DUP2 00000c46: MSTORE 00000c47: PUSH1 0x64 00000c49: SWAP1 00000c4a: SWAP2 00000c4b: ADD 00000c4c: SWAP1 00000c4d: SWAP2 00000c4e: MSTORE 00000c4f: PUSH1 0x20 00000c51: DUP1 00000c52: DUP3 00000c53: ADD 00000c54: DUP1 00000c55: MLOAD 00000c56: PUSH1 0x01 00000c58: PUSH1 0x01 00000c5a: PUSH1 0xe0 00000c5c: SHL 00000c5d: SUB 00000c5e: AND 00000c5f: PUSH4 0xa9059cbb 00000c64: PUSH1 0xe0 00000c66: SHL 00000c67: OR 00000c68: DUP2 00000c69: MSTORE 00000c6a: DUP3 00000c6b: MLOAD 00000c6c: PUSH2 0x0c1c 00000c6f: SWAP4 00000c70: DUP8 00000c71: SWAP4 00000c72: SWAP1 00000c73: SWAP3 00000c74: PUSH0 00000c75: SWAP3 00000c76: DUP4 00000c77: SWAP3 00000c78: SWAP2 00000c79: DUP4 00000c7a: SWAP2 00000c7b: SWAP1 00000c7c: DUP3 00000c7d: DUP9 00000c7e: GAS 00000c7f: CALL 00000c80: DUP1 00000c81: PUSH2 0x0c8f 00000c84: JUMPI 00000c85: PUSH1 0x40 00000c87: MLOAD 00000c88: RETURNDATASIZE 00000c89: PUSH0 00000c8a: DUP3 00000c8b: RETURNDATACOPY 00000c8c: RETURNDATASIZE 00000c8d: DUP2 00000c8e: REVERT 00000c8f: JUMPDEST 00000c90: POP 00000c91: POP 00000c92: PUSH0 00000c93: MLOAD 00000c94: RETURNDATASIZE 00000c95: SWAP2 00000c96: POP 00000c97: DUP2 00000c98: ISZERO 00000c99: PUSH2 0x0ca6 00000c9c: JUMPI 00000c9d: DUP1 00000c9e: PUSH1 0x01 00000ca0: EQ 00000ca1: ISZERO 00000ca2: PUSH2 0x0cb3 00000ca5: JUMP 00000ca6: JUMPDEST 00000ca7: PUSH1 0x01 00000ca9: PUSH1 0x01 00000cab: PUSH1 0xa0 00000cad: SHL 00000cae: SUB 00000caf: DUP5 00000cb0: AND 00000cb1: EXTCODESIZE 00000cb2: ISZERO 00000cb3: JUMPDEST 00000cb4: ISZERO 00000cb5: PUSH2 0x0cdc 00000cb8: JUMPI 00000cb9: PUSH1 0x40 00000cbb: MLOAD 00000cbc: PUSH4 0x5274afe7 00000cc1: PUSH1 0xe0 00000cc3: SHL 00000cc4: DUP2 00000cc5: MSTORE 00000cc6: PUSH1 0x01 00000cc8: PUSH1 0x01 00000cca: PUSH1 0xa0 00000ccc: SHL 00000ccd: SUB 00000cce: DUP6 00000ccf: AND 00000cd0: PUSH1 0x04 00000cd2: DUP3 00000cd3: ADD 00000cd4: MSTORE 00000cd5: PUSH1 0x24 00000cd7: ADD 00000cd8: PUSH2 0x0286 00000cdb: JUMP 00000cdc: JUMPDEST 00000cdd: POP 00000cde: POP 00000cdf: POP 00000ce0: POP 00000ce1: JUMP 00000ce2: JUMPDEST 00000ce3: PUSH1 0x40 00000ce5: MLOAD 00000ce6: DUP1 00000ce7: PUSH1 0x60 00000ce9: ADD 00000cea: PUSH1 0x40 00000cec: MSTORE 00000ced: DUP1 00000cee: PUSH1 0x03 00000cf0: SWAP1 00000cf1: PUSH1 0x20 00000cf3: DUP3 00000cf4: MUL 00000cf5: DUP1 00000cf6: CALLDATASIZE 00000cf7: DUP4 00000cf8: CALLDATACOPY 00000cf9: POP 00000cfa: SWAP2 00000cfb: SWAP3 00000cfc: SWAP2 00000cfd: POP 00000cfe: POP 00000cff: JUMP 00000d00: JUMPDEST 00000d01: PUSH1 0x20 00000d03: DUP1 00000d04: DUP3 00000d05: MSTORE 00000d06: DUP3 00000d07: MLOAD 00000d08: DUP3 00000d09: DUP3 00000d0a: ADD 00000d0b: DUP2 00000d0c: SWAP1 00000d0d: MSTORE 00000d0e: PUSH0 00000d0f: SWAP2 00000d10: DUP5 00000d11: ADD 00000d12: SWAP1 00000d13: PUSH1 0x40 00000d15: DUP5 00000d16: ADD 00000d17: SWAP1 00000d18: DUP4 00000d19: JUMPDEST 00000d1a: DUP2 00000d1b: DUP2 00000d1c: LT 00000d1d: ISZERO 00000d1e: PUSH2 0x0d40 00000d21: JUMPI 00000d22: DUP4 00000d23: MLOAD 00000d24: PUSH1 0x01 00000d26: PUSH1 0x01 00000d28: PUSH1 0xa0 00000d2a: SHL 00000d2b: SUB 00000d2c: AND 00000d2d: DUP4 00000d2e: MSTORE 00000d2f: PUSH1 0x20 00000d31: SWAP4 00000d32: DUP5 00000d33: ADD 00000d34: SWAP4 00000d35: SWAP1 00000d36: SWAP3 00000d37: ADD 00000d38: SWAP2 00000d39: PUSH1 0x01 00000d3b: ADD 00000d3c: PUSH2 0x0d19 00000d3f: JUMP 00000d40: JUMPDEST 00000d41: POP 00000d42: SWAP1 00000d43: SWAP6 00000d44: SWAP5 00000d45: POP 00000d46: POP 00000d47: POP 00000d48: POP 00000d49: POP 00000d4a: JUMP 00000d4b: JUMPDEST 00000d4c: PUSH1 0x01 00000d4e: PUSH1 0x01 00000d50: PUSH1 0xa0 00000d52: SHL 00000d53: SUB 00000d54: DUP2 00000d55: AND 00000d56: DUP2 00000d57: EQ 00000d58: PUSH2 0x048c 00000d5b: JUMPI 00000d5c: PUSH0 00000d5d: PUSH0 00000d5e: REVERT 00000d5f: JUMPDEST 00000d60: DUP1 00000d61: CALLDATALOAD 00000d62: PUSH2 0x0d6a 00000d65: DUP2 00000d66: PUSH2 0x0d4b 00000d69: JUMP 00000d6a: JUMPDEST 00000d6b: SWAP2 00000d6c: SWAP1 00000d6d: POP 00000d6e: JUMP 00000d6f: JUMPDEST 00000d70: PUSH0 00000d71: PUSH1 0x20 00000d73: DUP3 00000d74: DUP5 00000d75: SUB 00000d76: SLT 00000d77: ISZERO 00000d78: PUSH2 0x0d7f 00000d7b: JUMPI 00000d7c: PUSH0 00000d7d: PUSH0 00000d7e: REVERT 00000d7f: JUMPDEST 00000d80: DUP2 00000d81: CALLDATALOAD 00000d82: PUSH2 0x0d8a 00000d85: DUP2 00000d86: PUSH2 0x0d4b 00000d89: JUMP 00000d8a: JUMPDEST 00000d8b: SWAP4 00000d8c: SWAP3 00000d8d: POP 00000d8e: POP 00000d8f: POP 00000d90: JUMP 00000d91: JUMPDEST 00000d92: PUSH0 00000d93: PUSH0 00000d94: PUSH1 0x40 00000d96: DUP4 00000d97: DUP6 00000d98: SUB 00000d99: SLT 00000d9a: ISZERO 00000d9b: PUSH2 0x0da2 00000d9e: JUMPI 00000d9f: PUSH0 00000da0: PUSH0 00000da1: REVERT 00000da2: JUMPDEST 00000da3: DUP3 00000da4: CALLDATALOAD 00000da5: PUSH2 0x0dad 00000da8: DUP2 00000da9: PUSH2 0x0d4b 00000dac: JUMP 00000dad: JUMPDEST 00000dae: SWAP5 00000daf: PUSH1 0x20 00000db1: SWAP4 00000db2: SWAP1 00000db3: SWAP4 00000db4: ADD 00000db5: CALLDATALOAD 00000db6: SWAP4 00000db7: POP 00000db8: POP 00000db9: POP 00000dba: JUMP 00000dbb: JUMPDEST 00000dbc: PUSH0 00000dbd: PUSH0 00000dbe: PUSH0 00000dbf: PUSH1 0x60 00000dc1: DUP5 00000dc2: DUP7 00000dc3: SUB 00000dc4: SLT 00000dc5: ISZERO 00000dc6: PUSH2 0x0dcd 00000dc9: JUMPI 00000dca: PUSH0 00000dcb: PUSH0 00000dcc: REVERT 00000dcd: JUMPDEST 00000dce: DUP4 00000dcf: CALLDATALOAD 00000dd0: PUSH2 0x0dd8 00000dd3: DUP2 00000dd4: PUSH2 0x0d4b 00000dd7: JUMP 00000dd8: JUMPDEST 00000dd9: SWAP6 00000dda: PUSH1 0x20 00000ddc: DUP6 00000ddd: ADD 00000dde: CALLDATALOAD 00000ddf: SWAP6 00000de0: POP 00000de1: PUSH1 0x40 00000de3: SWAP1 00000de4: SWAP5 00000de5: ADD 00000de6: CALLDATALOAD 00000de7: SWAP4 00000de8: SWAP3 00000de9: POP 00000dea: POP 00000deb: POP 00000dec: JUMP 00000ded: JUMPDEST 00000dee: PUSH1 0x20 00000df0: DUP1 00000df1: DUP3 00000df2: MSTORE 00000df3: DUP3 00000df4: MLOAD 00000df5: DUP3 00000df6: DUP3 00000df7: ADD 00000df8: DUP2 00000df9: SWAP1 00000dfa: MSTORE 00000dfb: PUSH0 00000dfc: SWAP2 00000dfd: DUP5 00000dfe: ADD 00000dff: SWAP1 00000e00: PUSH1 0x40 00000e02: DUP5 00000e03: ADD 00000e04: SWAP1 00000e05: DUP4 00000e06: JUMPDEST 00000e07: DUP2 00000e08: DUP2 00000e09: LT 00000e0a: ISZERO 00000e0b: PUSH2 0x0d40 00000e0e: JUMPI 00000e0f: DUP4 00000e10: MLOAD 00000e11: DUP4 00000e12: PUSH0 00000e13: JUMPDEST 00000e14: PUSH1 0x03 00000e16: DUP2 00000e17: LT 00000e18: ISZERO 00000e19: PUSH2 0x0e3b 00000e1c: JUMPI 00000e1d: DUP3 00000e1e: MLOAD 00000e1f: PUSH1 0x01 00000e21: PUSH1 0x01 00000e23: PUSH1 0xa0 00000e25: SHL 00000e26: SUB 00000e27: AND 00000e28: DUP3 00000e29: MSTORE 00000e2a: PUSH1 0x20 00000e2c: SWAP3 00000e2d: DUP4 00000e2e: ADD 00000e2f: SWAP3 00000e30: SWAP1 00000e31: SWAP2 00000e32: ADD 00000e33: SWAP1 00000e34: PUSH1 0x01 00000e36: ADD 00000e37: PUSH2 0x0e13 00000e3a: JUMP 00000e3b: JUMPDEST 00000e3c: POP 00000e3d: POP 00000e3e: POP 00000e3f: PUSH1 0x20 00000e41: SWAP4 00000e42: SWAP1 00000e43: SWAP4 00000e44: ADD 00000e45: SWAP3 00000e46: PUSH1 0x60 00000e48: SWAP3 00000e49: SWAP1 00000e4a: SWAP3 00000e4b: ADD 00000e4c: SWAP2 00000e4d: PUSH1 0x01 00000e4f: ADD 00000e50: PUSH2 0x0e06 00000e53: JUMP 00000e54: JUMPDEST 00000e55: PUSH4 0x4e487b71 00000e5a: PUSH1 0xe0 00000e5c: SHL 00000e5d: PUSH0 00000e5e: MSTORE 00000e5f: PUSH1 0x41 00000e61: PUSH1 0x04 00000e63: MSTORE 00000e64: PUSH1 0x24 00000e66: PUSH0 00000e67: REVERT 00000e68: JUMPDEST 00000e69: PUSH0 00000e6a: PUSH1 0x20 00000e6c: DUP3 00000e6d: DUP5 00000e6e: SUB 00000e6f: SLT 00000e70: ISZERO 00000e71: PUSH2 0x0e78 00000e74: JUMPI 00000e75: PUSH0 00000e76: PUSH0 00000e77: REVERT 00000e78: JUMPDEST 00000e79: DUP2 00000e7a: CALLDATALOAD 00000e7b: PUSH8 0xffffffffffffffff 00000e84: DUP2 00000e85: GT 00000e86: ISZERO 00000e87: PUSH2 0x0e8e 00000e8a: JUMPI 00000e8b: PUSH0 00000e8c: PUSH0 00000e8d: REVERT 00000e8e: JUMPDEST 00000e8f: DUP3 00000e90: ADD 00000e91: PUSH1 0x1f 00000e93: DUP2 00000e94: ADD 00000e95: DUP5 00000e96: SGT 00000e97: PUSH2 0x0e9e 00000e9a: JUMPI 00000e9b: PUSH0 00000e9c: PUSH0 00000e9d: REVERT 00000e9e: JUMPDEST 00000e9f: DUP1 00000ea0: CALLDATALOAD 00000ea1: PUSH8 0xffffffffffffffff 00000eaa: DUP2 00000eab: GT 00000eac: ISZERO 00000ead: PUSH2 0x0eb8 00000eb0: JUMPI 00000eb1: PUSH2 0x0eb8 00000eb4: PUSH2 0x0e54 00000eb7: JUMP 00000eb8: JUMPDEST 00000eb9: DUP1 00000eba: PUSH1 0x05 00000ebc: SHL 00000ebd: PUSH1 0x40 00000ebf: MLOAD 00000ec0: PUSH1 0x1f 00000ec2: NOT 00000ec3: PUSH1 0x3f 00000ec5: DUP4 00000ec6: ADD 00000ec7: AND 00000ec8: DUP2 00000ec9: ADD 00000eca: DUP2 00000ecb: DUP2 00000ecc: LT 00000ecd: PUSH8 0xffffffffffffffff 00000ed6: DUP3 00000ed7: GT 00000ed8: OR 00000ed9: ISZERO 00000eda: PUSH2 0x0ee5 00000edd: JUMPI 00000ede: PUSH2 0x0ee5 00000ee1: PUSH2 0x0e54 00000ee4: JUMP 00000ee5: JUMPDEST 00000ee6: PUSH1 0x40 00000ee8: MSTORE 00000ee9: SWAP2 00000eea: DUP3 00000eeb: MSTORE 00000eec: PUSH1 0x20 00000eee: DUP2 00000eef: DUP5 00000ef0: ADD 00000ef1: DUP2 00000ef2: ADD 00000ef3: SWAP3 00000ef4: SWAP1 00000ef5: DUP2 00000ef6: ADD 00000ef7: DUP8 00000ef8: DUP5 00000ef9: GT 00000efa: ISZERO 00000efb: PUSH2 0x0f02 00000efe: JUMPI 00000eff: PUSH0 00000f00: PUSH0 00000f01: REVERT 00000f02: JUMPDEST 00000f03: PUSH1 0x20 00000f05: DUP6 00000f06: ADD 00000f07: SWAP5 00000f08: POP 00000f09: JUMPDEST 00000f0a: DUP4 00000f0b: DUP6 00000f0c: LT 00000f0d: ISZERO 00000f0e: PUSH2 0x0f28 00000f11: JUMPI 00000f12: PUSH2 0x0f1a 00000f15: DUP6 00000f16: PUSH2 0x0d5f 00000f19: JUMP 00000f1a: JUMPDEST 00000f1b: DUP2 00000f1c: MSTORE 00000f1d: PUSH1 0x20 00000f1f: SWAP5 00000f20: DUP6 00000f21: ADD 00000f22: SWAP5 00000f23: ADD 00000f24: PUSH2 0x0f09 00000f27: JUMP 00000f28: JUMPDEST 00000f29: POP 00000f2a: SWAP7 00000f2b: SWAP6 00000f2c: POP 00000f2d: POP 00000f2e: POP 00000f2f: POP 00000f30: POP 00000f31: POP 00000f32: JUMP 00000f33: JUMPDEST 00000f34: PUSH1 0x20 00000f36: DUP1 00000f37: DUP3 00000f38: MSTORE 00000f39: DUP3 00000f3a: MLOAD 00000f3b: DUP3 00000f3c: DUP3 00000f3d: ADD 00000f3e: DUP2 00000f3f: SWAP1 00000f40: MSTORE 00000f41: PUSH0 00000f42: SWAP2 00000f43: DUP5 00000f44: ADD 00000f45: SWAP1 00000f46: PUSH1 0x40 00000f48: DUP5 00000f49: ADD 00000f4a: SWAP1 00000f4b: DUP4 00000f4c: JUMPDEST 00000f4d: DUP2 00000f4e: DUP2 00000f4f: LT 00000f50: ISZERO 00000f51: PUSH2 0x0d40 00000f54: JUMPI 00000f55: DUP4 00000f56: MLOAD 00000f57: DUP4 00000f58: MSTORE 00000f59: PUSH1 0x20 00000f5b: SWAP4 00000f5c: DUP5 00000f5d: ADD 00000f5e: SWAP4 00000f5f: SWAP1 00000f60: SWAP3 00000f61: ADD 00000f62: SWAP2 00000f63: PUSH1 0x01 00000f65: ADD 00000f66: PUSH2 0x0f4c 00000f69: JUMP 00000f6a: JUMPDEST 00000f6b: PUSH1 0x40 00000f6d: DUP1 00000f6e: DUP3 00000f6f: MSTORE 00000f70: DUP4 00000f71: MLOAD 00000f72: SWAP1 00000f73: DUP3 00000f74: ADD 00000f75: DUP2 00000f76: SWAP1 00000f77: MSTORE 00000f78: PUSH0 00000f79: SWAP1 00000f7a: PUSH1 0x20 00000f7c: DUP6 00000f7d: ADD 00000f7e: SWAP1 00000f7f: PUSH1 0x60 00000f81: DUP5 00000f82: ADD 00000f83: SWAP1 00000f84: DUP4 00000f85: JUMPDEST 00000f86: DUP2 00000f87: DUP2 00000f88: LT 00000f89: ISZERO 00000f8a: PUSH2 0x0fa3 00000f8d: JUMPI 00000f8e: DUP4 00000f8f: MLOAD 00000f90: DUP4 00000f91: MSTORE 00000f92: PUSH1 0x20 00000f94: SWAP4 00000f95: DUP5 00000f96: ADD 00000f97: SWAP4 00000f98: SWAP1 00000f99: SWAP3 00000f9a: ADD 00000f9b: SWAP2 00000f9c: PUSH1 0x01 00000f9e: ADD 00000f9f: PUSH2 0x0f85 00000fa2: JUMP 00000fa3: JUMPDEST 00000fa4: POP 00000fa5: POP 00000fa6: DUP4 00000fa7: DUP2 00000fa8: SUB 00000fa9: PUSH1 0x20 00000fab: DUP1 00000fac: DUP7 00000fad: ADD 00000fae: SWAP2 00000faf: SWAP1 00000fb0: SWAP2 00000fb1: MSTORE 00000fb2: DUP6 00000fb3: MLOAD 00000fb4: DUP1 00000fb5: DUP4 00000fb6: MSTORE 00000fb7: SWAP2 00000fb8: DUP2 00000fb9: ADD 00000fba: SWAP3 00000fbb: POP 00000fbc: DUP6 00000fbd: ADD 00000fbe: SWAP1 00000fbf: PUSH0 00000fc0: JUMPDEST 00000fc1: DUP2 00000fc2: DUP2 00000fc3: LT 00000fc4: ISZERO 00000fc5: PUSH2 0x0fe1 00000fc8: JUMPI 00000fc9: DUP3 00000fca: MLOAD 00000fcb: PUSH1 0xff 00000fcd: AND 00000fce: DUP5 00000fcf: MSTORE 00000fd0: PUSH1 0x20 00000fd2: SWAP4 00000fd3: DUP5 00000fd4: ADD 00000fd5: SWAP4 00000fd6: SWAP1 00000fd7: SWAP3 00000fd8: ADD 00000fd9: SWAP2 00000fda: PUSH1 0x01 00000fdc: ADD 00000fdd: PUSH2 0x0fc0 00000fe0: JUMP 00000fe1: JUMPDEST 00000fe2: POP 00000fe3: SWAP2 00000fe4: SWAP7 00000fe5: SWAP6 00000fe6: POP 00000fe7: POP 00000fe8: POP 00000fe9: POP 00000fea: POP 00000feb: POP 00000fec: JUMP 00000fed: JUMPDEST 00000fee: PUSH4 0x4e487b71 00000ff3: PUSH1 0xe0 00000ff5: SHL 00000ff6: PUSH0 00000ff7: MSTORE 00000ff8: PUSH1 0x32 00000ffa: PUSH1 0x04 00000ffc: MSTORE 00000ffd: PUSH1 0x24 00000fff: PUSH0 00001000: REVERT 00001001: JUMPDEST 00001002: PUSH4 0x4e487b71 00001007: PUSH1 0xe0 00001009: SHL 0000100a: PUSH0 0000100b: MSTORE 0000100c: PUSH1 0x11 0000100e: PUSH1 0x04 00001010: MSTORE 00001011: PUSH1 0x24 00001013: PUSH0 00001014: REVERT 00001015: JUMPDEST 00001016: DUP2 00001017: DUP2 00001018: SUB 00001019: DUP2 0000101a: DUP2 0000101b: GT 0000101c: ISZERO 0000101d: PUSH2 0x0bc4 00001020: JUMPI 00001021: PUSH2 0x0bc4 00001024: PUSH2 0x1001 00001027: JUMP 00001028: JUMPDEST 00001029: PUSH4 0x4e487b71 0000102e: PUSH1 0xe0 00001030: SHL 00001031: PUSH0 00001032: MSTORE 00001033: PUSH1 0x31 00001035: PUSH1 0x04 00001037: MSTORE 00001038: PUSH1 0x24 0000103a: PUSH0 0000103b: REVERT 0000103c: JUMPDEST 0000103d: PUSH0 0000103e: PUSH1 0x20 00001040: DUP3 00001041: DUP5 00001042: SUB 00001043: SLT 00001044: ISZERO 00001045: PUSH2 0x104c 00001048: JUMPI 00001049: PUSH0 0000104a: PUSH0 0000104b: REVERT 0000104c: JUMPDEST 0000104d: POP 0000104e: MLOAD 0000104f: SWAP2 00001050: SWAP1 00001051: POP 00001052: JUMP 00001053: JUMPDEST 00001054: DUP1 00001055: DUP3 00001056: ADD 00001057: DUP1 00001058: DUP3 00001059: GT 0000105a: ISZERO 0000105b: PUSH2 0x0bc4 0000105e: JUMPI 0000105f: PUSH2 0x0bc4 00001062: PUSH2 0x1001 00001065: JUMP 00001066: JUMPDEST 00001067: PUSH0 00001068: PUSH1 0x20 0000106a: DUP3 0000106b: DUP5 0000106c: SUB 0000106d: SLT 0000106e: ISZERO 0000106f: PUSH2 0x1076 00001072: JUMPI 00001073: PUSH0 00001074: PUSH0 00001075: REVERT 00001076: JUMPDEST 00001077: DUP2 00001078: MLOAD 00001079: PUSH2 0x0d8a 0000107c: DUP2 0000107d: PUSH2 0x0d4b 00001080: JUMP 00001081: JUMPDEST 00001082: DUP1 00001083: MLOAD 00001084: PUSH10 0xffffffffffffffffffff 0000108f: DUP2 00001090: AND 00001091: DUP2 00001092: EQ 00001093: PUSH2 0x0d6a 00001096: JUMPI 00001097: PUSH0 00001098: PUSH0 00001099: REVERT 0000109a: JUMPDEST 0000109b: PUSH0 0000109c: PUSH0 0000109d: PUSH0 0000109e: PUSH0 0000109f: PUSH0 000010a0: PUSH1 0xa0 000010a2: DUP7 000010a3: DUP9 000010a4: SUB 000010a5: SLT 000010a6: ISZERO 000010a7: PUSH2 0x10ae 000010aa: JUMPI 000010ab: PUSH0 000010ac: PUSH0 000010ad: REVERT 000010ae: JUMPDEST 000010af: PUSH2 0x10b7 000010b2: DUP7 000010b3: PUSH2 0x1081 000010b6: JUMP 000010b7: JUMPDEST 000010b8: PUSH1 0x20 000010ba: DUP8 000010bb: ADD 000010bc: MLOAD 000010bd: PUSH1 0x40 000010bf: DUP9 000010c0: ADD 000010c1: MLOAD 000010c2: PUSH1 0x60 000010c4: DUP10 000010c5: ADD 000010c6: MLOAD 000010c7: SWAP3 000010c8: SWAP8 000010c9: POP 000010ca: SWAP1 000010cb: SWAP6 000010cc: POP 000010cd: SWAP4 000010ce: POP 000010cf: SWAP2 000010d0: POP 000010d1: PUSH2 0x10dc 000010d4: PUSH1 0x80 000010d6: DUP8 000010d7: ADD 000010d8: PUSH2 0x1081 000010db: JUMP 000010dc: JUMPDEST 000010dd: SWAP1 000010de: POP 000010df: SWAP3 000010e0: SWAP6 000010e1: POP 000010e2: SWAP3 000010e3: SWAP6 000010e4: SWAP1 000010e5: SWAP4 000010e6: POP 000010e7: JUMP 000010e8: JUMPDEST 000010e9: PUSH0 000010ea: PUSH1 0x20 000010ec: DUP3 000010ed: DUP5 000010ee: SUB 000010ef: SLT 000010f0: ISZERO 000010f1: PUSH2 0x10f8 000010f4: JUMPI 000010f5: PUSH0 000010f6: PUSH0 000010f7: REVERT 000010f8: JUMPDEST 000010f9: DUP2 000010fa: MLOAD 000010fb: PUSH1 0xff 000010fd: DUP2 000010fe: AND 000010ff: DUP2 00001100: EQ 00001101: PUSH2 0x0d8a 00001104: JUMPI 00001105: PUSH0 00001106: PUSH0 00001107: REVERT 00001108: INVALID 00001109: LOG2 0000110a: PUSH5 0x6970667358 00001110: UNKNOWN(0x22) 00001111: SLT 00001112: KECCAK256 00001113: UNKNOWN(0xBF) 00001114: CALLDATACOPY 00001115: DUP13 00001116: EQ 00001117: SHL 00001118: UNKNOWN(0x0C) 00001119: PUSH15 0xfa3ec8b5b8aea6ad419126e09636d6 00001129: MSTORE8 0000112a: UNKNOWN(0xD7) 0000112b: UNKNOWN(0xFB) 0000112c: PUSH0 0000112d: LOG0 0000112e: SLT 0000112f: PUSH14 0x5cc87464736f6c634300081e0033
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x91dacffdf280a3199c64bc484b0e85dba8ca32a18bce787b4ae7c3034b8aa2e0
call_targets:
0xc8d0457a22adf3cfae188f447227a1b45ddc45de
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x91dacffdf280a3199c64bc484b0e85dba8ca32a18bce787b4ae7c3034b8aa2e0",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xc8d0457a22adf3cfae188f447227a1b45ddc45de"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xab2217e4",
"selector": "0xab2217e4",
"calldata_variants": [
"0xab2217e4",
"0xab2217e40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8ea7770",
"selector": "0xe8ea7770",
"calldata_variants": [
"0xe8ea7770",
"0xe8ea77700000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf65041e6",
"selector": "0xf65041e6",
"calldata_variants": [
"0xf65041e6",
"0xf65041e60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0e90b3c9",
"selector": "0x0e90b3c9",
"calldata_variants": [
"0x0e90b3c9",
"0x0e90b3c90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24e38dca",
"selector": "0x24e38dca",
"calldata_variants": [
"0x24e38dca",
"0x24e38dca0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3199,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [],
"untrusted_call_count": 1
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x91dacffdf280a3199c64bc484b0e85dba8ca32a18bce787b4ae7c3034b8aa2e0
call_targets:
0xc8d0457a22adf3cfae188f447227a1b45ddc45de
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x91dacffdf280a3199c64bc484b0e85dba8ca32a18bce787b4ae7c3034b8aa2e0",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xc8d0457a22adf3cfae188f447227a1b45ddc45de"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xab2217e4",
"selector": "0xab2217e4",
"calldata_variants": [
"0xab2217e4",
"0xab2217e40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8ea7770",
"selector": "0xe8ea7770",
"calldata_variants": [
"0xe8ea7770",
"0xe8ea77700000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf65041e6",
"selector": "0xf65041e6",
"calldata_variants": [
"0xf65041e6",
"0xf65041e60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0e90b3c9",
"selector": "0x0e90b3c9",
"calldata_variants": [
"0x0e90b3c9",
"0x0e90b3c90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24e38dca",
"selector": "0x24e38dca",
"calldata_variants": [
"0x24e38dca",
"0x24e38dca0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3199,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|