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