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

Analysis Run

83748a80-3298-43de-8ee4-edc4a58c2247

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 3, 2026 9:59 PM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31466 report.consolidate complete 1 / 1 3 months ago
77422 artifact.fetch complete 1 / 3 1 week ago
77423 tool.cast_disasm complete 1 / 3 1 week ago
77424 analysis.bundle complete 1 / 3 1 week ago
77425 capability.graph complete 1 / 3 1 week ago
77426 detector.run complete 1 / 3 1 week ago
77427 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
No concrete, exploitable profit paths identified from the provided runtime bytecode.
View stderr
[codex:486307] OpenAI Codex v0.77.0 (research preview)
[codex:486307] --------
[codex:486307] workdir: /tmp/codex-multi-1bg8j8hv
[codex:486307] model: gpt-5.2-codex
[codex:486307] provider: openai
[codex:486307] approval: never
[codex:486307] sandbox: read-only
[codex:486307] reasoning effort: xhigh
[codex:486307] reasoning summaries: auto
[codex:486307] session id: 019b85d2-6695-7040-9b7e-03937a4bbc8c
[codex:486307] --------
[codex:486307] user
[codex:486307] 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:486307] 
[codex:486307] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:486307] 
[codex:486307] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:486307] - Gas inefficiency, code quality, or best practices
[codex:486307] - Theoretical vulnerabilities without a clear extraction path
[codex:486307] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:486307] - Issues requiring social engineering or off-chain coordination
[codex:486307] 
[codex:486307] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:486307] - CALL/DELEGATECALL with controllable destination or calldata
[codex:486307] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:486307] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:486307] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:486307] - External calls before state updates (reentrancy)
[codex:486307] - SELFDESTRUCT with controllable beneficiary
[codex:486307] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:486307] 
[codex:486307] For each finding, you MUST explain:
[codex:486307] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:486307] 2. The concrete sequence of transactions to extract value
[codex:486307] 3. Why you believe this is exploitable (not just suspicious)
[codex:486307] 
[codex:486307] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:486307] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:486307] 
[codex:486307] Output MUST be valid JSON matching the provided schema.
[codex:486307] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:486307] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:486307] mcp startup: no servers
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Searching for BYTECODE_BUNDLE**
[codex:486307] exec
[codex:486307] /bin/bash -lc ls in /tmp/codex-multi-1bg8j8hv succeeded in 6ms:
[codex:486307] BYTECODE_BUNDLE.txt
[codex:486307] codex-output-schema.json
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Reading file contents**
[codex:486307] exec
[codex:486307] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1bg8j8hv succeeded in 5ms:
[codex:486307] Runtime bytecode bundle for best-effort auditing.
[codex:486307] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:486307] 
[codex:486307] FILE: runtime_bytecode.hex
[codex:486307] 0x6080604052600436106101485760003560e01c8063679aefce116100c0578063a457c2d711610074578063aa271e1a11610059578063aa271e1a1461055a578063dd62ed3e1461059a578063f05fcdf2146105e257610186565b8063a457c2d7146104ce578063a9059cbb1461051457610186565b8063903d8e77116100a5578063903d8e771461046057806395d89b41146104a45780639975038c146104b957610186565b8063679aefce146103dc57806370a082311461042057610186565b80632f13b60c1161011757806339509351116100fc578063395093511461032657806340c10f191461036c57806342966c68146103b257610186565b80632f13b60c146102e6578063313ce567146102fb57610186565b806306fdde031461018b578063095ea7b31461021557806318160ddd1461026f57806323b872dd1461029657610186565b3661018657604080513481529051309133917fdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c9181900360200190a3005b600080fd5b34801561019757600080fd5b506101a0610628565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101da5781810151838201526020016101c2565b50505050905090810190601f1680156102075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022157600080fd5b5061025b6004803603604081101561023857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106dc565b604080519115158252519081900360200190f35b34801561027b57600080fd5b506102846106fa565b60408051918252519081900360200190f35b3480156102a257600080fd5b5061025b600480360360608110156102b957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610700565b3480156102f257600080fd5b5061025b610755565b34801561030757600080fd5b50610310610783565b6040805160ff9092168252519081900360200190f35b34801561033257600080fd5b5061025b6004803603604081101561034957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561078c565b34801561037857600080fd5b5061025b6004803603604081101561038f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107ed565b3480156103be57600080fd5b5061025b600480360360208110156103d557600080fd5b50356108cb565b3480156103e857600080fd5b506103f1610999565b604080516fffffffffffffffffffffffffffffffff938416815291909216602082015281519081900390910190f35b34801561042c57600080fd5b506102846004803603602081101561044357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109ca565b34801561046c57600080fd5b5061025b6004803603604081101561048357600080fd5b506fffffffffffffffffffffffffffffffff813581169160200135166109f2565b3480156104b057600080fd5b506101a0610afe565b3480156104c557600080fd5b50610284610b7d565b3480156104da57600080fd5b5061025b600480360360408110156104f157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610ba5565b34801561052057600080fd5b5061025b6004803603604081101561053757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c20565b34801561056657600080fd5b5061025b6004803603602081101561057d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c2d565b3480156105a657600080fd5b50610284600480360360408110156105bd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610c38565b3480156105ee57600080fd5b5061025b6004803603604081101561060557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c70565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b820191906000526020600020905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b60006106f06106e9610cf2565b8484610cf6565b5060015b92915050565b60025490565b600061070d848484610e3d565b61074b843361074685604051806060016040528060288152602001611936602891396107398a33610c38565b919063ffffffff61101916565b610cf6565b5060019392505050565b60065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16151590565b60055460ff1690565b60006106f0610799610cf2565b8461074685600160006107aa610cf2565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6110ca16565b60006107f833611145565b61084d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806118ac602e913960400191505060405180910390fd5b610855610755565b156108c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7468697320746f6b656e20636f6e747261637420686173206578706972656400604482015290519081900360640190fd5b6106f08383611184565b60006108d5610755565b6108e157506000610994565b6108eb33836112c1565b6006546fffffffffffffffffffffffffffffffff161561099057600654600090610969906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169161095d9116610951876402540be40063ffffffff61141716565b9063ffffffff61141716565b9063ffffffff61148a16565b905061098e338260405180606001604052806022815260200161188a602291396114cc565b505b5060015b919050565b6006546fffffffffffffffffffffffffffffffff808216927001000000000000000000000000000000009092041690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60006109fd33611145565b610a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806118ac602e913960400191505060405180910390fd5b610a5a610755565b1590508015610aa457610aa46040518060400160405280856fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff1681525061165d565b604080516fffffffffffffffffffffffffffffffff8086168252841660208201528215158183015290517fcdcd2e977c58a9c82d799c0986ab5c6fe48d43a9b96bbf60a654b46728c6f6679181900360600190a192915050565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b6000610b88336109ca565b90506000610b95826108cb565b905080610ba157600091505b5090565b60006106f0610bb2610cf2565b84610746856040518060600160405280602581526020016119c86025913960016000610bdc610cf2565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61101916565b60006106f0338484610e3d565b60006106f482611145565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6000610c7b33611145565b610cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806118ac602e913960400191505060405180910390fd5b610cd9836109ca565b821115610ce8575060006106f4565b6106f083836112c1565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610d62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806119a46024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806118426022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061197f6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806117fd6023913960400191505060405180910390fd5b610f2083838361172f565b610f70816040518060600160405280602681526020016118646026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff61101916565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610fb2908263ffffffff6110ca16565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108757818101518382015260200161106f565b50505050905090810190601f1680156110b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561113e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b7f0000000000000000000000008b24f5c764ab741bc8a2426505bda458c30df01073ffffffffffffffffffffffffffffffffffffffff90811691161490565b73ffffffffffffffffffffffffffffffffffffffff821661120657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6112126000838361172f565b600254611225908263ffffffff6110ca16565b60025573ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461125e908263ffffffff6110ca16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff821661132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061195e6021913960400191505060405180910390fd5b6113398260008361172f565b611389816040518060600160405280602281526020016118206022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260208190526040902054919063ffffffff61101916565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020556002546113c2908263ffffffff61173416565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082611426575060006106f4565b8282028284828161143357fe5b041461113e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806119156021913960400191505060405180910390fd5b600061113e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611776565b6114d5826117f5565b819061153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561108757818101518382015260200161106f565b5060405160009073ffffffffffffffffffffffffffffffffffffffff85169084908381818185875af1925050503d8060008114611595576040519150601f19603f3d011682016040523d82523d6000602084013e61159a565b606091505b505090508061160a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7472616e7366657272696e67204574686572206661696c656400000000000000604482015290519081900360640190fd5b60408051848152905173ffffffffffffffffffffffffffffffffffffffff86169130917fdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c9181900360200190a350505050565b60208101516fffffffffffffffffffffffffffffffff166116c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806118da603b913960400191505060405180910390fd5b8051600680546020909301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029281167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941693909317909216179055565b505050565b600061113e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611019565b600081836117df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561108757818101518382015260200161106f565b5060008385816117eb57fe5b0495945050505050565b303110159056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636573797374656d206572726f723a20696e73756666696369656e742062616c616e63656f6e6c79206465706c6f79657220697320616c6c6f77656420746f2063616c6c20746869732066756e6374696f6e73797374656d206572726f723a207468652065786368616e67652072617465206d757374206265206e6f6e2d6e65676174697665206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d7f6c98e7947c587cb2cacbbd60112ff671feabdd34e2fe6aaa8e4e36045e5964736f6c63430006060033
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing bytecode for vulnerabilities**
[codex:486307] 
[codex:486307] I'm digging into the contract's bytecode to identify key ERC20 functions and uncommon ones, looking for signs of minting, ETH handling, or suspicious calls like delegatecall. I'm parsing storage layout and opcodes to detect unprotected minting or fund-draining exploits, considering packed storage and event signatures to piece together contract behavior.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] # remove non-hex? We'll keep hex chars only
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] print('len bytes',len(hexdata)//2)
[codex:486307] for opcode,name in [('f4','DELEGATECALL'),('f1','CALL'),('ff','SELFDESTRUCT'),('f2','CALLCODE')]:
[codex:486307]     print(name, hexdata.lower().count(opcode))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] len bytes 6690
[codex:486307] DELEGATECALL 4
[codex:486307] CALL 25
[codex:486307] SELFDESTRUCT 947
[codex:486307] CALLCODE 22
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Planning EVM disassembler implementation**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:486307] # get runtime hex after 'FILE: runtime_bytecode.hex'
[codex:486307] # naive: find first '0x'
[codex:486307] if '0x' in hexdata:
[codex:486307]     hexdata=hexdata.split('0x',1)[1]
[codex:486307] # keep only hex chars
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] # decode bytes
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode names
[codex:486307] opnames={}
[codex:486307] # build mapping
[codex:486307] for i in range(0x00,0x60):
[codex:486307]     opnames[i]='STOP' if i==0x00 else ''
[codex:486307] # Fill base
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] opnames.update(base)
[codex:486307] # Push opcodes
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     opnames[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     opnames[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     opnames[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     opnames[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] # disassemble
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=opnames.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         ops.append((pc,name,data))
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         ops.append((pc,name,None))
[codex:486307]         pc+=1
[codex:486307] # find CALL/DELEGATECALL/SELFDESTRUCT positions
[codex:486307] for target in ('CALL','DELEGATECALL','SELFDESTRUCT','CALLCODE'):
[codex:486307]     poss=[pc for pc,name,data in ops if name==target]
[codex:486307]     print(target, len(poss), poss[:10])
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 34ms:
[codex:486307] CALL 1 [5477]
[codex:486307] DELEGATECALL 0 []
[codex:486307] SELFDESTRUCT 0 []
[codex:486307] CALLCODE 0 []
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Inspecting CALL opcode near pc 5477**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:486307] hexdata=hexdata.split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # disassemble near pc
[codex:486307] start=5400; end=5560
[codex:486307] # create op mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] pc=0
[codex:486307] ops=[]
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         ops.append((pc,name,data))
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         ops.append((pc,name,None))
[codex:486307]         pc+=1
[codex:486307] 
[codex:486307] for pc,name,data in ops:
[codex:486307]     if start<=pc<=end:
[codex:486307]         if data is None:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         else:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] 1518: PUSH1 0x44
[codex:486307] 151a: SWAP1
[codex:486307] 151b: SWAP2
[codex:486307] 151c: ADD
[codex:486307] 151d: SWAP2
[codex:486307] 151e: SWAP1
[codex:486307] 151f: DUP6
[codex:486307] 1520: ADD
[codex:486307] 1521: SWAP1
[codex:486307] 1522: DUP1
[codex:486307] 1523: DUP4
[codex:486307] 1524: DUP4
[codex:486307] 1525: PUSH1 0x00
[codex:486307] 1527: DUP4
[codex:486307] 1528: ISZERO
[codex:486307] 1529: PUSH2 0x1087
[codex:486307] 152c: JUMPI
[codex:486307] 152d: DUP2
[codex:486307] 152e: DUP2
[codex:486307] 152f: ADD
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Examining CALL usage for Ether transfer**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:486307] hexdata=hexdata.split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # create op mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] # disassemble region around 0x1460-0x1620
[codex:486307] start=0x1450; end=0x1620
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 27ms:
[codex:486307] 145e: DUP2
[codex:486307] 145f: MSTORE
[codex:486307] 1460: PUSH1 0x04
[codex:486307] 1462: ADD
[codex:486307] 1463: DUP1
[codex:486307] 1464: DUP1
[codex:486307] 1465: PUSH1 0x20
[codex:486307] 1467: ADD
[codex:486307] 1468: DUP3
[codex:486307] 1469: DUP2
[codex:486307] 146a: SUB
[codex:486307] 146b: DUP3
[codex:486307] 146c: MSTORE
[codex:486307] 146d: PUSH1 0x21
[codex:486307] 146f: DUP2
[codex:486307] 1470: MSTORE
[codex:486307] 1471: PUSH1 0x20
[codex:486307] 1473: ADD
[codex:486307] 1474: DUP1
[codex:486307] 1475: PUSH2 0x1915
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing CALL and dispatch logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] # disassemble first 0x1c0 bytes
[codex:486307] pc=0
[codex:486307] end=0x1c0
[codex:486307] while pc<end:
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 24ms:
[codex:486307] 0000: PUSH1 0x80
[codex:486307] 0002: PUSH1 0x40
[codex:486307] 0004: MSTORE
[codex:486307] 0005: PUSH1 0x04
[codex:486307] 0007: CALLDATASIZE
[codex:486307] 0008: LT
[codex:486307] 0009: PUSH2 0x0148
[codex:486307] 000c: JUMPI
[codex:486307] 000d: PUSH1 0x00
[codex:486307] 000f: CALLDATALOAD
[codex:486307] 0010: PUSH1 0xe0
[codex:486307] 0012: SHR
[codex:486307] 0013: DUP1
[codex:486307] 0014: PUSH4 0x679aefce
[codex:486307] 0019: GT
[codex:486307] 001a: PUSH2 0x00c0
[codex:486307] 001d: JUMPI
[codex:486307] 001e: DUP1
[codex:486307] 001f: PUSH4 0xa457c2d7
[codex:486307] 0024: GT
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Mapping function selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import hashlib
[codex:486307] sigs=['burn(uint256)','burnFrom(address,uint256)','mint(address,uint256)','increaseAllowance(address,uint256)','decreaseAllowance(address,uint256)','transfer(address,uint256)','transferFrom(address,uint256)','name()','symbol()','decimals()','totalSupply()','allowance(address,address)','balanceOf(address)','owner()','renounceOwnership()','transferOwnership(address)','pause()','unpause()','permit(address,address,uint256,uint256,uint8,bytes32,bytes32)','DOMAIN_SEPARATOR()','nonces(address)','withdraw(uint256)','deposit()','sell(uint256)','buy()','setRate(uint256)','setExchangeRate(uint256)','setExchangeRate(int256)','getRate()','rate()','buyTokens()','sellTokens(uint256)','withdrawEther(uint256)','withdraw()','buy(uint256)']
[codex:486307] # compute selector
[codex:486307] for s in sigs:
[codex:486307]     sel=hashlib.sha3_256(s.encode()).hexdigest()[:8]
[codex:486307]     if sel in ['42966c68','39509351','2f13b60c','679aefce','903d8e77','9975038c','a457c2d7','aa271e1a','f05fcdf2']:
[codex:486307]         print(s, sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 31ms:
[codex:486307] 
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Planning function and event analysis**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import hashlib
[codex:486307] cands=['Deposit(address,uint256)','Deposit(address,address,uint256)','Deposited(address,uint256)','Transfer(address,address,uint256)','Approval(address,address,uint256)','Withdraw(address,uint256)','Withdrawal(address,uint256)','Bought(address,uint256)','Sold(address,uint256)','Buy(address,uint256)','Sell(address,uint256)','Burn(address,uint256)','Mint(address,uint256)','Donation(address,uint256)','Received(address,uint256)','Payment(address,uint256)']
[codex:486307] for s in cands:
[codex:486307]     sel=hashlib.sha3_256(s.encode()).hexdigest()
[codex:486307]     if sel.startswith('dd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c'):
[codex:486307]         print('match',s)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 36ms:
[codex:486307] 
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing function signatures and storage writes**
[codex:486307] 
[codex:486307] I'm working through the function signatures to match known patterns and compiling instructions to locate where storage writes (SSTORE) happen, aiming to identify any unprotected critical state changes that could hint at vulnerabilities. I'll also consider using tooling or scripts to dissect calldata and access control around these writes.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # disassemble into (pc, op, data)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         ops.append((pc,name,data))
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         ops.append((pc,name,None))
[codex:486307]         pc+=1
[codex:486307] 
[codex:486307] # find SSTOREs
[codex:486307] for i,(pc,name,data) in enumerate(ops):
[codex:486307]     if name=='SSTORE':
[codex:486307]         # show few ops around
[codex:486307]         start=max(0,i-8); end=min(len(ops),i+6)
[codex:486307]         print('--- SSTORE at',hex(pc),'---')
[codex:486307]         for j in range(start,end):
[codex:486307]             pc2,name2,data2=ops[j]
[codex:486307]             if data2 is None:
[codex:486307]                 print(f\"{pc2:04x}: {name2}\")
[codex:486307]             else:
[codex:486307]                 print(f\"{pc2:04x}: {name2} 0x{data2.hex()}\")
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 44ms:
[codex:486307] --- SSTORE at 0xe07 ---
[codex:486307] 0dff: DUP3
[codex:486307] 0e00: MSTORE
[codex:486307] 0e01: SWAP2
[codex:486307] 0e02: DUP3
[codex:486307] 0e03: SWAP1
[codex:486307] 0e04: SHA3
[codex:486307] 0e05: DUP6
[codex:486307] 0e06: SWAP1
[codex:486307] 0e07: SSTORE
[codex:486307] 0e08: DUP2
[codex:486307] 0e09: MLOAD
[codex:486307] 0e0a: DUP6
[codex:486307] 0e0b: DUP2
[codex:486307] 0e0c: MSTORE
[codex:486307] --- SSTORE at 0xf9b ---
[codex:486307] 0f92: MSTORE
[codex:486307] 0f93: PUSH1 0x40
[codex:486307] 0f95: DUP1
[codex:486307] 0f96: DUP3
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Mapping SSTOREs to functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] # parse into list
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         ops.append((pc,name,data))
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         ops.append((pc,name,None))
[codex:486307]         pc+=1
[codex:486307] 
[codex:486307] entry_points=[0x018b,0x0215,0x026f,0x0296,0x02e6,0x02fb,0x0326,0x036c,0x03b2,0x03dc,0x0420,0x0460,0x04a4,0x04b9,0x04ce,0x0514,0x055a,0x059a,0x05e2]
[codex:486307] 
[codex:486307] # build dict for quick access
[codex:486307] op_index={pc:i for i,(pc,_,_) in enumerate(ops)}
[codex:486307] 
[codex:486307] def print_ops(start,count=40):
[codex:486307]     if start not in op_index:
[codex:486307]         print('start not found',hex(start));return
[codex:486307]     i=op_index[start]
[codex:486307]     print('--- entry',hex(start),'---')
[codex:486307]     for pc,name,data in ops[i:i+count]:
[codex:486307]         if data is None:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         else:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] 
[codex:486307] for ep in entry_points:
[codex:486307]     print_ops(ep,45)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 48ms:
[codex:486307] --- entry 0x18b ---
[codex:486307] 018b: JUMPDEST
[codex:486307] 018c: CALLVALUE
[codex:486307] 018d: DUP1
[codex:486307] 018e: ISZERO
[codex:486307] 018f: PUSH2 0x0197
[codex:486307] 0192: JUMPI
[codex:486307] 0193: PUSH1 0x00
[codex:486307] 0195: DUP1
[codex:486307] 0196: REVERT
[codex:486307] 0197: JUMPDEST
[codex:486307] 0198: POP
[codex:486307] 0199: PUSH2 0x01a0
[codex:486307] 019c: PUSH2 0x0628
[codex:486307] 019f: JUMP
[codex:486307] 01a0: JUMPDEST
[codex:486307] 01a1: PUSH1 0x40
[codex:486307] 01a3: DUP1
[codex:486307] 01a4: MLOAD
[codex:486307] 01a5: PUSH1 0x20
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Investigating function selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] # disassemble into list
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         ops.append((pc,name,data))
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         ops.append((pc,name,None))
[codex:486307]         pc+=1
[codex:486307] 
[codex:486307] op_index={pc:i for i,(pc,_,_) in enumerate(ops)}
[codex:486307] 
[codex:486307] internal=[0x0628,0x06dc,0x06fa,0x0700,0x0755,0x0783,0x078c,0x07ed,0x08cb,0x0999,0x09ca,0x09f2,0x0afe,0x0b7d,0x0ba5,0x0c20,0x0c2d,0x0c38,0x0c70]
[codex:486307] 
[codex:486307] for start in internal:
[codex:486307]     if start not in op_index:
[codex:486307]         print('missing',hex(start));
[codex:486307]         continue
[codex:486307]     print('\\n--- internal',hex(start),'---')
[codex:486307]     i=op_index[start]
[codex:486307]     for pc,name,data in ops[i:i+50]:
[codex:486307]         if data is None:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         else:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 56ms:
[codex:486307] 
[codex:486307] --- internal 0x628 ---
[codex:486307] 0628: JUMPDEST
[codex:486307] 0629: PUSH1 0x03
[codex:486307] 062b: DUP1
[codex:486307] 062c: SLOAD
[codex:486307] 062d: PUSH1 0x40
[codex:486307] 062f: DUP1
[codex:486307] 0630: MLOAD
[codex:486307] 0631: PUSH1 0x20
[codex:486307] 0633: PUSH1 0x1f
[codex:486307] 0635: PUSH1 0x02
[codex:486307] 0637: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
[codex:486307] 0658: PUSH2 0x0100
[codex:486307] 065b: PUSH1 0x01
[codex:486307] 065d: DUP9
[codex:486307] 065e: AND
[codex:486307] 065f: ISZERO
[codex:486307] 0660: MUL
[codex:486307] 0661: ADD
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Inspecting access control function**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x1120; end=0x11b0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 49ms:
[codex:486307] 112e: PUSH1 0x44
[codex:486307] 1130: DUP3
[codex:486307] 1131: ADD
[codex:486307] 1132: MSTORE
[codex:486307] 1133: SWAP1
[codex:486307] 1134: MLOAD
[codex:486307] 1135: SWAP1
[codex:486307] 1136: DUP2
[codex:486307] 1137: SWAP1
[codex:486307] 1138: SUB
[codex:486307] 1139: PUSH1 0x64
[codex:486307] 113b: ADD
[codex:486307] 113c: SWAP1
[codex:486307] 113d: REVERT
[codex:486307] 113e: JUMPDEST
[codex:486307] 113f: SWAP4
[codex:486307] 1140: SWAP3
[codex:486307] 1141: POP
[codex:486307] 1142: POP
[codex:486307] 1143: POP
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing access control and ETH transfer calls**
[codex:486307] 
[codex:486307] I'm examining a hardcoded owner address check at 0x1145 that restricts functions like minting and setting exchange rates to the deployer. I want to identify which functions use this check and verify if any ETH transfer functions bypass caller verification or token burning, focusing on offsets 0x14d5 and 0x1565 to assess potential withdrawal vulnerabilities.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # find references to 0x14d5 and 0x153c
[codex:486307] for target in [0x14d5,0x153c]:
[codex:486307]     b=target.to_bytes(2,'big')
[codex:486307]     # find push2 immediate occurrences
[codex:486307]     pat=b\"\\x61\"+b
[codex:486307]     idxs=[i for i in range(len(code)-3) if code[i]==0x61 and code[i+1:i+3]==b]
[codex:486307]     print('target',hex(target),'refs',idxs[:10],'count',len(idxs))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307] target 0x14d5 refs [5325] count 1
[codex:486307] target 0x153c refs [5336] count 1
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Tracing function references**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # find all push2 targets in code
[codex:486307] refs={}
[codex:486307] for i in range(len(code)-2):
[codex:486307]     if code[i]==0x61: # PUSH2
[codex:486307]         target=(code[i+1]<<8)|code[i+2]
[codex:486307]         refs.setdefault(target,[]).append(i)
[codex:486307] # print some references for targets around 0x14xx
[codex:486307] for t in sorted([k for k in refs if 0x1400<=k<=0x160a]):
[codex:486307]     print(hex(t),len(refs[t]),refs[t][:5])
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 37ms:
[codex:486307] 0x1417 2 [2380, 2392]
[codex:486307] 0x1426 1 [5147]
[codex:486307] 0x1433 1 [5166]
[codex:486307] 0x148a 1 [2404]
[codex:486307] 0x14cc 1 [2442]
[codex:486307] 0x14d5 1 [5325]
[codex:486307] 0x153c 1 [5336]
[codex:486307] 0x1595 1 [5488]
[codex:486307] 0x159a 1 [5521]
[codex:486307] 0x160a 1 [5536]
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Examining memory address references**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x2360; end=0x2480
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307] 
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Clarifying code length and offsets**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x960; end=0x9c5
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307] 0964: PUSH2 0x148a
[codex:486307] 0967: AND
[codex:486307] 0968: JUMP
[codex:486307] 0969: JUMPDEST
[codex:486307] 096a: SWAP1
[codex:486307] 096b: POP
[codex:486307] 096c: PUSH2 0x098e
[codex:486307] 096f: CALLER
[codex:486307] 0970: DUP3
[codex:486307] 0971: PUSH1 0x40
[codex:486307] 0973: MLOAD
[codex:486307] 0974: DUP1
[codex:486307] 0975: PUSH1 0x60
[codex:486307] 0977: ADD
[codex:486307] 0978: PUSH1 0x40
[codex:486307] 097a: MSTORE
[codex:486307] 097b: DUP1
[codex:486307] 097c: PUSH1 0x22
[codex:486307] 097e: DUP2
[codex:486307] 097f: MSTORE
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing internal function calls for vulnerabilities**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x08cb; end=0x0998
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 47ms:
[codex:486307] 08cb: JUMPDEST
[codex:486307] 08cc: PUSH1 0x00
[codex:486307] 08ce: PUSH2 0x08d5
[codex:486307] 08d1: PUSH2 0x0755
[codex:486307] 08d4: JUMP
[codex:486307] 08d5: JUMPDEST
[codex:486307] 08d6: PUSH2 0x08e1
[codex:486307] 08d9: JUMPI
[codex:486307] 08da: POP
[codex:486307] 08db: PUSH1 0x00
[codex:486307] 08dd: PUSH2 0x0994
[codex:486307] 08e0: JUMP
[codex:486307] 08e1: JUMPDEST
[codex:486307] 08e2: PUSH2 0x08eb
[codex:486307] 08e5: CALLER
[codex:486307] 08e6: DUP4
[codex:486307] 08e7: PUSH2 0x12c1
[codex:486307] 08ea: JUMP
[codex:486307] 08eb: JUMPDEST
[codex:486307] 08ec: PUSH1 0x06
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing storage layout and internal functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x12a0; end=0x1320
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 43ms:
[codex:486307] 12b5: SWAP3
[codex:486307] 12b6: DUP2
[codex:486307] 12b7: SWAP1
[codex:486307] 12b8: SUB
[codex:486307] 12b9: SWAP1
[codex:486307] 12ba: SWAP2
[codex:486307] 12bb: ADD
[codex:486307] 12bc: SWAP1
[codex:486307] 12bd: LOG4
[codex:486307] 12be: POP
[codex:486307] 12bf: POP
[codex:486307] 12c0: JUMP
[codex:486307] 12c1: JUMPDEST
[codex:486307] 12c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 12d7: DUP3
[codex:486307] 12d8: AND
[codex:486307] 12d9: PUSH2 0x132d
[codex:486307] 12dc: JUMPI
[codex:486307] 12dd: PUSH1 0x40
[codex:486307] 12df: MLOAD
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Continuing to gather information**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x12c0; end=0x13e0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 49ms:
[codex:486307] 12c0: JUMP
[codex:486307] 12c1: JUMPDEST
[codex:486307] 12c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 12d7: DUP3
[codex:486307] 12d8: AND
[codex:486307] 12d9: PUSH2 0x132d
[codex:486307] 12dc: JUMPI
[codex:486307] 12dd: PUSH1 0x40
[codex:486307] 12df: MLOAD
[codex:486307] 12e0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 1301: DUP2
[codex:486307] 1302: MSTORE
[codex:486307] 1303: PUSH1 0x04
[codex:486307] 1305: ADD
[codex:486307] 1306: DUP1
[codex:486307] 1307: DUP1
[codex:486307] 1308: PUSH1 0x20
[codex:486307] 130a: ADD
[codex:486307] 130b: DUP3
[codex:486307] 130c: DUP2
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing burn and sell functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x07ed; end=0x08b0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 43ms:
[codex:486307] 07ed: JUMPDEST
[codex:486307] 07ee: PUSH1 0x00
[codex:486307] 07f0: PUSH2 0x07f8
[codex:486307] 07f3: CALLER
[codex:486307] 07f4: PUSH2 0x1145
[codex:486307] 07f7: JUMP
[codex:486307] 07f8: JUMPDEST
[codex:486307] 07f9: PUSH2 0x084d
[codex:486307] 07fc: JUMPI
[codex:486307] 07fd: PUSH1 0x40
[codex:486307] 07ff: MLOAD
[codex:486307] 0800: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 0821: DUP2
[codex:486307] 0822: MSTORE
[codex:486307] 0823: PUSH1 0x04
[codex:486307] 0825: ADD
[codex:486307] 0826: DUP1
[codex:486307] 0827: DUP1
[codex:486307] 0828: PUSH1 0x20
[codex:486307] 082a: ADD
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Continuing process**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x0880; end=0x08c8
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 50ms:
[codex:486307] 0880: DUP2
[codex:486307] 0881: MSTORE
[codex:486307] 0882: PUSH1 0x20
[codex:486307] 0884: PUSH1 0x04
[codex:486307] 0886: DUP3
[codex:486307] 0887: ADD
[codex:486307] 0888: MSTORE
[codex:486307] 0889: PUSH1 0x1f
[codex:486307] 088b: PUSH1 0x24
[codex:486307] 088d: DUP3
[codex:486307] 088e: ADD
[codex:486307] 088f: MSTORE
[codex:486307] 0890: PUSH32 0x7468697320746f6b656e20636f6e747261637420686173206578706972656400
[codex:486307] 08b1: PUSH1 0x44
[codex:486307] 08b3: DUP3
[codex:486307] 08b4: ADD
[codex:486307] 08b5: MSTORE
[codex:486307] 08b6: SWAP1
[codex:486307] 08b7: MLOAD
[codex:486307] 08b8: SWAP1
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Decoding contract functions and permissions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import hashlib
[codex:486307] for s in ['increaseAllowance(address,uint256)','decreaseAllowance(address,uint256)','burn(uint256)','burnFrom(address,uint256)','sell(uint256)','buy()','buyTokens()','redeem(uint256)','sellTokens(uint256)','withdraw(uint256)','withdraw()','setRate(uint256)','setExchangeRate(uint256)','setExchangeRate(int256)','exchangeRate()','rate()','getExchangeRate()','expiry()','isExpired()','pause()','unpause()','setPaused(bool)','setPaused(uint256)','setExpiry(uint256)','setExpiration(uint256)','setExpiryTime(uint256)','getExpiry()','owner()','admin()','deployer()','symbol()','name()']:
[codex:486307]     sel=hashlib.sha3_256(s.encode()).hexdigest()[:8]
[codex:486307]     if sel in ['39509351','2f13b60c','679aefce','903d8e77','9975038c','a457c2d7','aa271e1a','f05fcdf2','42966c68']:
[codex:486307]         print(s, sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 31ms:
[codex:486307] 
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing function selectors and vulnerabilities**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x16f0; end=0x1760
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 37ms:
[codex:486307] 16fc: MUL
[codex:486307] 16fd: SWAP3
[codex:486307] 16fe: DUP2
[codex:486307] 16ff: AND
[codex:486307] 1700: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:486307] 1721: SWAP1
[codex:486307] 1722: SWAP5
[codex:486307] 1723: AND
[codex:486307] 1724: SWAP4
[codex:486307] 1725: SWAP1
[codex:486307] 1726: SWAP4
[codex:486307] 1727: OR
[codex:486307] 1728: SWAP1
[codex:486307] 1729: SWAP3
[codex:486307] 172a: AND
[codex:486307] 172b: OR
[codex:486307] 172c: SWAP1
[codex:486307] 172d: SSTORE
[codex:486307] 172e: JUMP
[codex:486307] 172f: JUMPDEST
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Investigating storage slot updates**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] refs={}
[codex:486307] for i in range(len(code)-2):
[codex:486307]     if code[i]==0x61:
[codex:486307]         target=(code[i+1]<<8)|code[i+2]
[codex:486307]         refs.setdefault(target,[]).append(i)
[codex:486307] for t in sorted([k for k in refs if 0x1600<=k<=0x1730]):
[codex:486307]     print(hex(t),len(refs[t]),refs[t][:5])
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 39ms:
[codex:486307] 0x160a 1 [5536]
[codex:486307] 0x165d 1 [2720]
[codex:486307] 0x16c9 1 [5749]
[codex:486307] 0x172f 3 [3868, 4622, 4917]
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing internal function references in bytecode**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x160a; end=0x16f5
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 34ms:
[codex:486307] 160a: JUMPDEST
[codex:486307] 160b: PUSH1 0x40
[codex:486307] 160d: DUP1
[codex:486307] 160e: MLOAD
[codex:486307] 160f: DUP5
[codex:486307] 1610: DUP2
[codex:486307] 1611: MSTORE
[codex:486307] 1612: SWAP1
[codex:486307] 1613: MLOAD
[codex:486307] 1614: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 1629: DUP7
[codex:486307] 162a: AND
[codex:486307] 162b: SWAP2
[codex:486307] 162c: ADDRESS
[codex:486307] 162d: SWAP2
[codex:486307] 162e: PUSH32 0xdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c
[codex:486307] 164f: SWAP2
[codex:486307] 1650: DUP2
[codex:486307] 1651: SWAP1
[codex:486307] 1652: SUB
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Continuing to display output**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x16c9; end=0x1735
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 26ms:
[codex:486307] 16c9: JUMPDEST
[codex:486307] 16ca: DUP1
[codex:486307] 16cb: MLOAD
[codex:486307] 16cc: PUSH1 0x06
[codex:486307] 16ce: DUP1
[codex:486307] 16cf: SLOAD
[codex:486307] 16d0: PUSH1 0x20
[codex:486307] 16d2: SWAP1
[codex:486307] 16d3: SWAP4
[codex:486307] 16d4: ADD
[codex:486307] 16d5: MLOAD
[codex:486307] 16d6: PUSH16 0xffffffffffffffffffffffffffffffff
[codex:486307] 16e7: SWAP1
[codex:486307] 16e8: DUP2
[codex:486307] 16e9: AND
[codex:486307] 16ea: PUSH17 0x0100000000000000000000000000000000
[codex:486307] 16fc: MUL
[codex:486307] 16fd: SWAP3
[codex:486307] 16fe: DUP2
[codex:486307] 16ff: AND
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing internal function behavior**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x0a40; end=0x0ab0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] 0a40: PUSH1 0x2e
[codex:486307] 0a42: SWAP2
[codex:486307] 0a43: CODECOPY
[codex:486307] 0a44: PUSH1 0x40
[codex:486307] 0a46: ADD
[codex:486307] 0a47: SWAP2
[codex:486307] 0a48: POP
[codex:486307] 0a49: POP
[codex:486307] 0a4a: PUSH1 0x40
[codex:486307] 0a4c: MLOAD
[codex:486307] 0a4d: DUP1
[codex:486307] 0a4e: SWAP2
[codex:486307] 0a4f: SUB
[codex:486307] 0a50: SWAP1
[codex:486307] 0a51: REVERT
[codex:486307] 0a52: JUMPDEST
[codex:486307] 0a53: PUSH2 0x0a5a
[codex:486307] 0a56: PUSH2 0x0755
[codex:486307] 0a59: JUMP
[codex:486307] 0a5a: JUMPDEST
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing internal token contract functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x0e3d; end=0x0f90
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 27ms:
[codex:486307] 0e3d: JUMPDEST
[codex:486307] 0e3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 0e53: DUP4
[codex:486307] 0e54: AND
[codex:486307] 0e55: PUSH2 0x0ea9
[codex:486307] 0e58: JUMPI
[codex:486307] 0e59: PUSH1 0x40
[codex:486307] 0e5b: MLOAD
[codex:486307] 0e5c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 0e7d: DUP2
[codex:486307] 0e7e: MSTORE
[codex:486307] 0e7f: PUSH1 0x04
[codex:486307] 0e81: ADD
[codex:486307] 0e82: DUP1
[codex:486307] 0e83: DUP1
[codex:486307] 0e84: PUSH1 0x20
[codex:486307] 0e86: ADD
[codex:486307] 0e87: DUP3
[codex:486307] 0e88: DUP2
[codex:486307] 0e89: SUB
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing allowance mapping and transferFrom logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x0d40; end=0x0e20
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 29ms:
[codex:486307] 0d40: DUP3
[codex:486307] 0d41: DUP2
[codex:486307] 0d42: SUB
[codex:486307] 0d43: DUP3
[codex:486307] 0d44: MSTORE
[codex:486307] 0d45: PUSH1 0x24
[codex:486307] 0d47: DUP2
[codex:486307] 0d48: MSTORE
[codex:486307] 0d49: PUSH1 0x20
[codex:486307] 0d4b: ADD
[codex:486307] 0d4c: DUP1
[codex:486307] 0d4d: PUSH2 0x19a4
[codex:486307] 0d50: PUSH1 0x24
[codex:486307] 0d52: SWAP2
[codex:486307] 0d53: CODECOPY
[codex:486307] 0d54: PUSH1 0x40
[codex:486307] 0d56: ADD
[codex:486307] 0d57: SWAP2
[codex:486307] 0d58: POP
[codex:486307] 0d59: POP
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing approval and transferFrom logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # find ORIGIN opcode 0x32 positions
[codex:486307] positions=[i for i,b in enumerate(code) if b==0x32]
[codex:486307] print('ORIGIN positions',positions[:10],'count',len(positions))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 28ms:
[codex:486307] ORIGIN positions [812, 4569, 6144, 6179, 6213, 6247, 6457, 6497, 6530, 6567] count 11
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Verifying opcode occurrences**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode map for ORIGIN
[codex:486307] base={0x32:'ORIGIN'}
[codex:486307] # disassemble quickly to find ORIGIN
[codex:486307] pc=0
[codex:486307] positions=[]
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     if op==0x32:
[codex:486307]         positions.append(pc)
[codex:486307]         pc+=1
[codex:486307]     elif 0x60<=op<=0x7f:
[codex:486307]         pc+=1+(op-0x5f)
[codex:486307]     else:
[codex:486307]         pc+=1
[codex:486307] print('ORIGIN op positions',positions)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 24ms:
[codex:486307] ORIGIN op positions [6144, 6179, 6457, 6603]
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Examining ORIGIN opcodes near 0x1800**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping for disasm
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x17f0; end=0x1860
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 30ms:
[codex:486307] 17f0: POP
[codex:486307] 17f1: POP
[codex:486307] 17f2: POP
[codex:486307] 17f3: POP
[codex:486307] 17f4: JUMP
[codex:486307] 17f5: JUMPDEST
[codex:486307] 17f6: ADDRESS
[codex:486307] 17f7: BALANCE
[codex:486307] 17f8: LT
[codex:486307] 17f9: ISZERO
[codex:486307] 17fa: SWAP1
[codex:486307] 17fb: JUMP
[codex:486307] 17fc: INVALID
[codex:486307] 17fd: GASLIMIT
[codex:486307] 17fe: MSTORE
[codex:486307] 17ff: NUMBER
[codex:486307] 1800: ORIGIN
[codex:486307] 1801: ADDRESS
[codex:486307] 1802: GASPRICE
[codex:486307] 1803: SHA3
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing potential token transfer exploits**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x0cf0; end=0x0d30
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 29ms:
[codex:486307] 0cf1: JUMP
[codex:486307] 0cf2: JUMPDEST
[codex:486307] 0cf3: CALLER
[codex:486307] 0cf4: SWAP1
[codex:486307] 0cf5: JUMP
[codex:486307] 0cf6: JUMPDEST
[codex:486307] 0cf7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 0d0c: DUP4
[codex:486307] 0d0d: AND
[codex:486307] 0d0e: PUSH2 0x0d62
[codex:486307] 0d11: JUMPI
[codex:486307] 0d12: PUSH1 0x40
[codex:486307] 0d14: MLOAD
[codex:486307] 0d15: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing internal helper functions and selector computation**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] try:
[codex:486307]     import sha3
[codex:486307]     print('sha3 module available')
[codex:486307]     k=sha3.keccak_256(b'')
[codex:486307]     print(k.hexdigest())
[codex:486307] except Exception as e:
[codex:486307]     print('no sha3',e)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 16ms:
[codex:486307] no sha3 No module named 'sha3'
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Checking for keccak implementation**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] try:
[codex:486307]     from Crypto.Hash import keccak
[codex:486307]     k=keccak.new(digest_bits=256)
[codex:486307]     k.update(b'')
[codex:486307]     print('keccak',k.hexdigest())
[codex:486307] except Exception as e:
[codex:486307]     print('no crypto',e)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 44ms:
[codex:486307] keccak c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Preparing to compute function selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307] 
[codex:486307] def selector(sig):
[codex:486307]     k=keccak.new(digest_bits=256)
[codex:486307]     k.update(sig.encode())
[codex:486307]     return k.hexdigest()[:8]
[codex:486307] 
[codex:486307] cands=[
[codex:486307] 'burn(uint256)','burnFrom(address,uint256)','mint(address,uint256)','increaseAllowance(address,uint256)','decreaseAllowance(address,uint256)',
[codex:486307] 'sell(uint256)','sellAll()','sellAllTokens()','buyTokens()','buy()','redeem(uint256)','withdraw(uint256)','withdraw()','exchangeRate()','getExchangeRate()','setExchangeRate(uint256)','setExchangeRate(int256)','setRate(uint256)','setRate(int256)','rate()','expiry()','setExpiry(uint256)','setExpiration(uint256)','isExpired()','paused()','pause()','unpause()','owner()','admin()','deployer()','tokenExpiry()','setTokenExpiry(uint256)','getTokenExpiry()','buyTokens(uint256)', 'sellTokens(uint256)','redeemTokens(uint256)','claim(uint256)','purchase(uint256)','cashout(uint256)','withdrawEther(uint256)','withdrawEther()','sellForETH(uint256)','redeemForETH(uint256)','exchange(uint256)'
[codex:486307] ]
[codex:486307] # known selectors in contract
[codex:486307] selectors={'39509351','2f13b60c','679aefce','903d8e77','9975038c','a457c2d7','aa271e1a','f05fcdf2','42966c68'}
[codex:486307] for s in cands:
[codex:486307]     sel=selector(s)
[codex:486307]     if sel in selectors:
[codex:486307]         print(s,sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 41ms:
[codex:486307] burn(uint256) 42966c68
[codex:486307] increaseAllowance(address,uint256) 39509351
[codex:486307] decreaseAllowance(address,uint256) a457c2d7
[codex:486307] isExpired() 2f13b60c
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing function selectors and behaviors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307] 
[codex:486307] def selector(sig):
[codex:486307]     k=keccak.new(digest_bits=256)
[codex:486307]     k.update(sig.encode())
[codex:486307]     return k.hexdigest()[:8]
[codex:486307] 
[codex:486307] # brute for some guesses
[codex:486307] cands=[
[codex:486307] 'getExchangeInfo()','exchangeInfo()','getExchangeRate()','exchangeRate()','getRate()','rate()','getRateAndExpiry()','rateAndExpiry()','exchangeRateAndExpiry()','exchangeRateExpiry()','getExchange()','exchange()','exchangeRateAndExpiry()','getExpiryAndRate()','expiryAndRate()',
[codex:486307] 'getPackedData()','packedData()','getConfig()','config()','getSettings()','settings()','getRateAndExpiration()','rateAndExpiration()','getExpirationAndRate()','expirationAndRate()',
[codex:486307] 'getRateAndExpire()','rateAndExpire()','getRateAndDeadline()','rateAndDeadline()','deadlineAndRate()',
[codex:486307] ]
[codex:486307] sel_target='679aefce'
[codex:486307] for s in cands:
[codex:486307]     if selector(s)==sel_target:
[codex:486307]         print('match',s)
[codex:486307]         break
[codex:486307] else:
[codex:486307]     print('no match')
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 42ms:
[codex:486307] match getRate()
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing getRate() return values**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307] 
[codex:486307] def selector(sig):
[codex:486307]     k=keccak.new(digest_bits=256)
[codex:486307]     k.update(sig.encode())
[codex:486307]     return k.hexdigest()[:8]
[codex:486307] 
[codex:486307] selectors={'903d8e77','9975038c','aa271e1a','f05fcdf2'}
[codex:486307] # guess list for each
[codex:486307] cands=[
[codex:486307] 'setRate(uint256)','setRate(uint128,uint128)','setRate(uint256,uint256)','setRate(int256)','setRate(int128,int128)','setRate(uint128)','setRate(int128)','setRateAndExpiry(uint256,uint256)','setRateAndExpiry(uint128,uint128)','setRateAndExpiry(int128,int128)','setRateAndExpiry(int256,int256)',
[codex:486307] 'setExchangeRate(uint256)','setExchangeRate(uint256,uint256)','setExchangeRate(uint128,uint128)','setExchangeRate(int256)','setExchangeRate(int256,int256)','setExchangeRate(int128,int128)',
[codex:486307] 'setExpiry(uint256)','setExpiration(uint256)','setExpirationTime(uint256)','setExpiryTime(uint256)','setDeadline(uint256)','setMaturity(uint256)',
[codex:486307] 'expiry()','expiration()','expires()','getExpiry()','getExpiration()','getMaturity()','maturity()','deadline()',
[codex:486307] 'redeem(uint256)','redeemAll()','burnAll()','burnAndRedeem(uint256)','redeemForETH(uint256)','withdrawEther(uint256)','withdraw(uint256)','sell(uint256)','sellAll()','cashout(uint256)',
[codex:486307] 'buy(uint256)','buy()','buyTokens()','buyTokens(uint256)','purchase(uint256)','purchase()',
[codex:486307] 'getOwner()','owner()','deployer()', 'tokenOwner()',
[codex:486307] 'allowance(address,address)',
[codex:486307] 'exchangeRate()','rate()','rateNumerator()','rateDenominator()',
[codex:486307] 'getRateNumerator()','getRateDenominator()','getRateInfo()','getExchangeRateInfo()','getRateDetails()','getRateAndFee()','feeRate()','fee()',
[codex:486307] 'getSupplyCap()','cap()','totalSupplyCap()',
[codex:486307] ]
[codex:486307] 
[codex:486307] for s in cands:
[codex:486307]     sel=selector(s)
[codex:486307]     if sel in selectors:
[codex:486307]         print(s, sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307] burnAll() 9975038c
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Mapping remaining selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307] 
[codex:486307] def sel(sig):
[codex:486307]     k=keccak.new(digest_bits=256); k.update(sig.encode()); return k.hexdigest()[:8]
[codex:486307] 
[codex:486307] # candidate signatures for selector 0x903d8e77 and others
[codex:486307] selectors={'903d8e77','aa271e1a','f05fcdf2'}
[codex:486307] 
[codex:486307] cands=set()
[codex:486307] # setRate variations
[codex:486307] names=['setRate','setExchangeRate','setRateAndExpiry','setRateAndExpiration','setRateAndExpirationTime','setRateAndExpiryTime','setRateInfo','setRateDetails','setRateParams','setRateAndMaturity','setRateAndDeadline','setRateAndExpiryTime','setRateData','setSaleParams','setSaleInfo','setConfig','setSettings','setParams','setConfigParams','setExchange','setExchangeInfo','setRedeemRate','setRedeemInfo']
[codex:486307] params=['uint256','uint128','uint64','int256','int128']
[codex:486307] # 2 params combos
[codex:486307] for name in names:
[codex:486307]     for p1 in params:
[codex:486307]         for p2 in params:
[codex:486307]             cands.add(f\"{name}({p1},{p2})\")
[codex:486307]     for p1 in params:
[codex:486307]         cands.add(f\"{name}({p1})\")
[codex:486307] 
[codex:486307] # expiry getters/setters
[codex:486307] names2=['expiry','expiration','expires','getExpiry','getExpiration','getMaturity','maturity','deadline','getDeadline','getExpiryTime','expiryTime','expirationTime','maturityTime']
[codex:486307] for n in names2:
[codex:486307]     cands.add(f\"{n}()\")
[codex:486307] 
[codex:486307] # burn/sell/redeem etc
[codex:486307] names3=['redeem','sell','cashout','withdraw','withdrawEther','sellTokens','redeemTokens','redeemForETH','sellForETH','burnForETH','burnRedeem','burnAndRedeem','exchange','swap','liquidate']
[codex:486307] for n in names3:
[codex:486307]     cands.add(f\"{n}(uint256)\")
[codex:486307]     cands.add(f\"{n}()\")
[codex:486307] 
[codex:486307] # buy/purchase
[codex:486307] names4=['buy','buyTokens','purchase','mintForETH','deposit','swapIn','swapOut']
[codex:486307] for n in names4:
[codex:486307]     cands.add(f\"{n}(uint256)\")
[codex:486307]     cands.add(f\"{n}()\")
[codex:486307] 
[codex:486307] # rate getters
[codex:486307] names5=['getRate','rate','exchangeRate','getExchangeRate','rateInfo','getRateInfo','getRateDetails','getRateParams','rateParams','rateNumerator','rateDenominator','exchangeRateNumerator','exchangeRateDenominator']
[codex:486307] for n in names5:
[codex:486307]     cands.add(f\"{n}()\")
[codex:486307] 
[codex:486307] # burnAll etc
[codex:486307] for n in ['burnAll','redeemAll','sellAll','withdrawAll','cashoutAll','burnAllTokens','redeemAllTokens']:
[codex:486307]     cands.add(f\"{n}()\")
[codex:486307] 
[codex:486307] # allowances etc
[codex:486307] for n in ['increaseAllowance','decreaseAllowance']:
[codex:486307]     cands.add(f\"{n}(address,uint256)\")
[codex:486307] 
[codex:486307] # owner/admin/deployer
[codex:486307] for n in ['owner','admin','deployer','getOwner','getAdmin','getDeployer','issuer','issuerAddress','ownerAddress']:
[codex:486307]     cands.add(f\"{n}()\")
[codex:486307] 
[codex:486307] # setOwner
[codex:486307] for n in ['setOwner','transferOwnership','changeOwner','setAdmin','setDeployer','setIssuer']:
[codex:486307]     cands.add(f\"{n}(address)\")
[codex:486307] 
[codex:486307] # permit
[codex:486307] cands.add('permit(address,address,uint256,uint256,uint8,bytes32,bytes32)')
[codex:486307] 
[codex:486307] for sig in sorted(cands):
[codex:486307]     s=sel(sig)
[codex:486307]     if s in selectors:
[codex:486307]         print(sig, s)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 48ms:
[codex:486307] 
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing unknown function selectors**
[codex:486307] 
[codex:486307] I'm working through the code to deduce what the three unknown function selectors might be based on error strings, parameter types, and internal calls, especially focusing on deployer-only functions and their argument patterns. This involves tracing internal jumps and usage of caller checks to hypothesize possible function roles like `setRate`, ownership transfer, or minting.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307]     base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307]     base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307]     base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307]     base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x0c70; end=0x0d10
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 27ms:
[codex:486307] 0c70: JUMPDEST
[codex:486307] 0c71: PUSH1 0x00
[codex:486307] 0c73: PUSH2 0x0c7b
[codex:486307] 0c76: CALLER
[codex:486307] 0c77: PUSH2 0x1145
[codex:486307] 0c7a: JUMP
[codex:486307] 0c7b: JUMPDEST
[codex:486307] 0c7c: PUSH2 0x0cd0
[codex:486307] 0c7f: JUMPI
[codex:486307] 0c80: PUSH1 0x40
[codex:486307] 0c82: MLOAD
[codex:486307] 0c83: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 0ca4: DUP2
[codex:486307] 0ca5: MSTORE
[codex:486307] 0ca6: PUSH1 0x04
[codex:486307] 0ca8: ADD
[codex:486307] 0ca9: DUP1
[codex:486307] 0caa: DUP1
[codex:486307] 0cab: PUSH1 0x20
[codex:486307] 0cad: ADD
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing deployer-restricted burn logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping
[codex:486307] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:486307] for i in range(0x60,0x80): base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90): base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0): base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5): base[i]=f'LOG{i-0x9f}'
[codex:486307] 
[codex:486307] start=0x06e0; end=0x06f8
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307]     op=code[pc]
[codex:486307]     name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307]     if 0x60<=op<=0x7f:
[codex:486307]         n=op-0x5f
[codex:486307]         data=code[pc+1:pc+1+n]
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]         pc+=1+n
[codex:486307]     else:
[codex:486307]         if start<=pc<=end:
[codex:486307]             print(f\"{pc:04x}: {name}\")
[codex:486307]         pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] 06e2: PUSH2 0x06e9
[codex:486307] 06e5: PUSH2 0x0cf2
[codex:486307] 06e8: JUMP
[codex:486307] 06e9: JUMPDEST
[codex:486307] 06ea: DUP5
[codex:486307] 06eb: DUP5
[codex:486307] 06ec: PUSH2 0x0cf6
[codex:486307] 06ef: JUMP
[codex:486307] 06f0: JUMPDEST
[codex:486307] 06f1: POP
[codex:486307] 06f2: PUSH1 0x01
[codex:486307] 06f4: JUMPDEST
[codex:486307] 06f5: SWAP3
[codex:486307] 06f6: SWAP2
[codex:486307] 06f7: POP
[codex:486307] 06f8: POP
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing EVM jump and return logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307] 
[codex:486307] def sel(sig):
[codex:486307]     k=keccak.new(digest_bits=256); k.update(sig.encode()); return k.hexdigest()[:8]
[codex:486307] 
[codex:486307] print('burnFrom', sel('burnFrom(address,uint256)'))
[codex:486307] print('burnFrom', sel('burnFrom(address,uint256,uint256)'))
[codex:486307] print('burnFrom', sel('burnFrom(address)'))
[codex:486307] print('withdraw', sel('withdraw(address)'))
[codex:486307] print('redeem', sel('redeem(address)'))
[codex:486307] print('burnFrom', sel('burnFrom(address,uint256)'))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 36ms:
[codex:486307] burnFrom 79cc6790
[codex:486307] burnFrom 124d91e5
[codex:486307] burnFrom 3506ac74
[codex:486307] withdraw 51cff8d9
[codex:486307] redeem 95a2251f
[codex:486307] burnFrom 79cc6790
[codex:486307] 
[codex:486307] thinking
[codex:486307] **Analyzing potential burn function exploits**
[codex:486307] codex
[codex:486307] {"no_findings":true,"summary":"No concrete, exploitable profit paths identified from the provided runtime bytecode.","findings":[]}
[codex:486307] tokens used
[codex:486307] 196,447
[codex:486307] {"no_findings":true,"summary":"No concrete, exploitable profit paths identified from the provided runtime bytecode.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-03T21:59:36.492531+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable profit paths identified from the provided runtime bytecode.",
    "raw_final": {
        "summary": "No concrete, exploitable profit paths identified from the provided runtime bytecode.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
1
EXT*/BALANCE
1
Total opcodes
3176
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0148
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x679aefce
00000019: GT
0000001a: PUSH2 0x00c0
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xa457c2d7
00000024: GT
00000025: PUSH2 0x0074
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xaa271e1a
0000002f: GT
00000030: PUSH2 0x0059
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xaa271e1a
0000003a: EQ
0000003b: PUSH2 0x055a
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xdd62ed3e
00000045: EQ
00000046: PUSH2 0x059a
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf05fcdf2
00000050: EQ
00000051: PUSH2 0x05e2
00000054: JUMPI
00000055: PUSH2 0x0186
00000058: JUMP
00000059: JUMPDEST
0000005a: DUP1
0000005b: PUSH4 0xa457c2d7
00000060: EQ
00000061: PUSH2 0x04ce
00000064: JUMPI
00000065: DUP1
00000066: PUSH4 0xa9059cbb
0000006b: EQ
0000006c: PUSH2 0x0514
0000006f: JUMPI
00000070: PUSH2 0x0186
00000073: JUMP
00000074: JUMPDEST
00000075: DUP1
00000076: PUSH4 0x903d8e77
0000007b: GT
0000007c: PUSH2 0x00a5
0000007f: JUMPI
00000080: DUP1
00000081: PUSH4 0x903d8e77
00000086: EQ
00000087: PUSH2 0x0460
0000008a: JUMPI
0000008b: DUP1
0000008c: PUSH4 0x95d89b41
00000091: EQ
00000092: PUSH2 0x04a4
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0x9975038c
0000009c: EQ
0000009d: PUSH2 0x04b9
000000a0: JUMPI
000000a1: PUSH2 0x0186
000000a4: JUMP
000000a5: JUMPDEST
000000a6: DUP1
000000a7: PUSH4 0x679aefce
000000ac: EQ
000000ad: PUSH2 0x03dc
000000b0: JUMPI
000000b1: DUP1
000000b2: PUSH4 0x70a08231
000000b7: EQ
000000b8: PUSH2 0x0420
000000bb: JUMPI
000000bc: PUSH2 0x0186
000000bf: JUMP
000000c0: JUMPDEST
000000c1: DUP1
000000c2: PUSH4 0x2f13b60c
000000c7: GT
000000c8: PUSH2 0x0117
000000cb: JUMPI
000000cc: DUP1
000000cd: PUSH4 0x39509351
000000d2: GT
000000d3: PUSH2 0x00fc
000000d6: JUMPI
000000d7: DUP1
000000d8: PUSH4 0x39509351
000000dd: EQ
000000de: PUSH2 0x0326
000000e1: JUMPI
000000e2: DUP1
000000e3: PUSH4 0x40c10f19
000000e8: EQ
000000e9: PUSH2 0x036c
000000ec: JUMPI
000000ed: DUP1
000000ee: PUSH4 0x42966c68
000000f3: EQ
000000f4: PUSH2 0x03b2
000000f7: JUMPI
000000f8: PUSH2 0x0186
000000fb: JUMP
000000fc: JUMPDEST
000000fd: DUP1
000000fe: PUSH4 0x2f13b60c
00000103: EQ
00000104: PUSH2 0x02e6
00000107: JUMPI
00000108: DUP1
00000109: PUSH4 0x313ce567
0000010e: EQ
0000010f: PUSH2 0x02fb
00000112: JUMPI
00000113: PUSH2 0x0186
00000116: JUMP
00000117: JUMPDEST
00000118: DUP1
00000119: PUSH4 0x06fdde03
0000011e: EQ
0000011f: PUSH2 0x018b
00000122: JUMPI
00000123: DUP1
00000124: PUSH4 0x095ea7b3
00000129: EQ
0000012a: PUSH2 0x0215
0000012d: JUMPI
0000012e: DUP1
0000012f: PUSH4 0x18160ddd
00000134: EQ
00000135: PUSH2 0x026f
00000138: JUMPI
00000139: DUP1
0000013a: PUSH4 0x23b872dd
0000013f: EQ
00000140: PUSH2 0x0296
00000143: JUMPI
00000144: PUSH2 0x0186
00000147: JUMP
00000148: JUMPDEST
00000149: CALLDATASIZE
0000014a: PUSH2 0x0186
0000014d: JUMPI
0000014e: PUSH1 0x40
00000150: DUP1
00000151: MLOAD
00000152: CALLVALUE
00000153: DUP2
00000154: MSTORE
00000155: SWAP1
00000156: MLOAD
00000157: ADDRESS
00000158: SWAP2
00000159: CALLER
0000015a: SWAP2
0000015b: PUSH32 0xdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c
0000017c: SWAP2
0000017d: DUP2
0000017e: SWAP1
0000017f: SUB
00000180: PUSH1 0x20
00000182: ADD
00000183: SWAP1
00000184: LOG3
00000185: STOP
00000186: JUMPDEST
00000187: PUSH1 0x00
00000189: DUP1
0000018a: REVERT
0000018b: JUMPDEST
0000018c: CALLVALUE
0000018d: DUP1
0000018e: ISZERO
0000018f: PUSH2 0x0197
00000192: JUMPI
00000193: PUSH1 0x00
00000195: DUP1
00000196: REVERT
00000197: JUMPDEST
00000198: POP
00000199: PUSH2 0x01a0
0000019c: PUSH2 0x0628
0000019f: JUMP
000001a0: JUMPDEST
000001a1: PUSH1 0x40
000001a3: DUP1
000001a4: MLOAD
000001a5: PUSH1 0x20
000001a7: DUP1
000001a8: DUP3
000001a9: MSTORE
000001aa: DUP4
000001ab: MLOAD
000001ac: DUP2
000001ad: DUP4
000001ae: ADD
000001af: MSTORE
000001b0: DUP4
000001b1: MLOAD
000001b2: SWAP2
000001b3: SWAP3
000001b4: DUP4
000001b5: SWAP3
000001b6: SWAP1
000001b7: DUP4
000001b8: ADD
000001b9: SWAP2
000001ba: DUP6
000001bb: ADD
000001bc: SWAP1
000001bd: DUP1
000001be: DUP4
000001bf: DUP4
000001c0: PUSH1 0x00
000001c2: JUMPDEST
000001c3: DUP4
000001c4: DUP2
000001c5: LT
000001c6: ISZERO
000001c7: PUSH2 0x01da
000001ca: JUMPI
000001cb: DUP2
000001cc: DUP2
000001cd: ADD
000001ce: MLOAD
000001cf: DUP4
000001d0: DUP3
000001d1: ADD
000001d2: MSTORE
000001d3: PUSH1 0x20
000001d5: ADD
000001d6: PUSH2 0x01c2
000001d9: JUMP
000001da: JUMPDEST
000001db: POP
000001dc: POP
000001dd: POP
000001de: POP
000001df: SWAP1
000001e0: POP
000001e1: SWAP1
000001e2: DUP2
000001e3: ADD
000001e4: SWAP1
000001e5: PUSH1 0x1f
000001e7: AND
000001e8: DUP1
000001e9: ISZERO
000001ea: PUSH2 0x0207
000001ed: JUMPI
000001ee: DUP1
000001ef: DUP3
000001f0: SUB
000001f1: DUP1
000001f2: MLOAD
000001f3: PUSH1 0x01
000001f5: DUP4
000001f6: PUSH1 0x20
000001f8: SUB
000001f9: PUSH2 0x0100
000001fc: EXP
000001fd: SUB
000001fe: NOT
000001ff: AND
00000200: DUP2
00000201: MSTORE
00000202: PUSH1 0x20
00000204: ADD
00000205: SWAP2
00000206: POP
00000207: JUMPDEST
00000208: POP
00000209: SWAP3
0000020a: POP
0000020b: POP
0000020c: POP
0000020d: PUSH1 0x40
0000020f: MLOAD
00000210: DUP1
00000211: SWAP2
00000212: SUB
00000213: SWAP1
00000214: RETURN
00000215: JUMPDEST
00000216: CALLVALUE
00000217: DUP1
00000218: ISZERO
00000219: PUSH2 0x0221
0000021c: JUMPI
0000021d: PUSH1 0x00
0000021f: DUP1
00000220: REVERT
00000221: JUMPDEST
00000222: POP
00000223: PUSH2 0x025b
00000226: PUSH1 0x04
00000228: DUP1
00000229: CALLDATASIZE
0000022a: SUB
0000022b: PUSH1 0x40
0000022d: DUP2
0000022e: LT
0000022f: ISZERO
00000230: PUSH2 0x0238
00000233: JUMPI
00000234: PUSH1 0x00
00000236: DUP1
00000237: REVERT
00000238: JUMPDEST
00000239: POP
0000023a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000024f: DUP2
00000250: CALLDATALOAD
00000251: AND
00000252: SWAP1
00000253: PUSH1 0x20
00000255: ADD
00000256: CALLDATALOAD
00000257: PUSH2 0x06dc
0000025a: JUMP
0000025b: JUMPDEST
0000025c: PUSH1 0x40
0000025e: DUP1
0000025f: MLOAD
00000260: SWAP2
00000261: ISZERO
00000262: ISZERO
00000263: DUP3
00000264: MSTORE
00000265: MLOAD
00000266: SWAP1
00000267: DUP2
00000268: SWAP1
00000269: SUB
0000026a: PUSH1 0x20
0000026c: ADD
0000026d: SWAP1
0000026e: RETURN
0000026f: JUMPDEST
00000270: CALLVALUE
00000271: DUP1
00000272: ISZERO
00000273: PUSH2 0x027b
00000276: JUMPI
00000277: PUSH1 0x00
00000279: DUP1
0000027a: REVERT
0000027b: JUMPDEST
0000027c: POP
0000027d: PUSH2 0x0284
00000280: PUSH2 0x06fa
00000283: JUMP
00000284: JUMPDEST
00000285: PUSH1 0x40
00000287: DUP1
00000288: MLOAD
00000289: SWAP2
0000028a: DUP3
0000028b: MSTORE
0000028c: MLOAD
0000028d: SWAP1
0000028e: DUP2
0000028f: SWAP1
00000290: SUB
00000291: PUSH1 0x20
00000293: ADD
00000294: SWAP1
00000295: RETURN
00000296: JUMPDEST
00000297: CALLVALUE
00000298: DUP1
00000299: ISZERO
0000029a: PUSH2 0x02a2
0000029d: JUMPI
0000029e: PUSH1 0x00
000002a0: DUP1
000002a1: REVERT
000002a2: JUMPDEST
000002a3: POP
000002a4: PUSH2 0x025b
000002a7: PUSH1 0x04
000002a9: DUP1
000002aa: CALLDATASIZE
000002ab: SUB
000002ac: PUSH1 0x60
000002ae: DUP2
000002af: LT
000002b0: ISZERO
000002b1: PUSH2 0x02b9
000002b4: JUMPI
000002b5: PUSH1 0x00
000002b7: DUP1
000002b8: REVERT
000002b9: JUMPDEST
000002ba: POP
000002bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002d0: DUP2
000002d1: CALLDATALOAD
000002d2: DUP2
000002d3: AND
000002d4: SWAP2
000002d5: PUSH1 0x20
000002d7: DUP2
000002d8: ADD
000002d9: CALLDATALOAD
000002da: SWAP1
000002db: SWAP2
000002dc: AND
000002dd: SWAP1
000002de: PUSH1 0x40
000002e0: ADD
000002e1: CALLDATALOAD
000002e2: PUSH2 0x0700
000002e5: JUMP
000002e6: JUMPDEST
000002e7: CALLVALUE
000002e8: DUP1
000002e9: ISZERO
000002ea: PUSH2 0x02f2
000002ed: JUMPI
000002ee: PUSH1 0x00
000002f0: DUP1
000002f1: REVERT
000002f2: JUMPDEST
000002f3: POP
000002f4: PUSH2 0x025b
000002f7: PUSH2 0x0755
000002fa: JUMP
000002fb: JUMPDEST
000002fc: CALLVALUE
000002fd: DUP1
000002fe: ISZERO
000002ff: PUSH2 0x0307
00000302: JUMPI
00000303: PUSH1 0x00
00000305: DUP1
00000306: REVERT
00000307: JUMPDEST
00000308: POP
00000309: PUSH2 0x0310
0000030c: PUSH2 0x0783
0000030f: JUMP
00000310: JUMPDEST
00000311: PUSH1 0x40
00000313: DUP1
00000314: MLOAD
00000315: PUSH1 0xff
00000317: SWAP1
00000318: SWAP3
00000319: AND
0000031a: DUP3
0000031b: MSTORE
0000031c: MLOAD
0000031d: SWAP1
0000031e: DUP2
0000031f: SWAP1
00000320: SUB
00000321: PUSH1 0x20
00000323: ADD
00000324: SWAP1
00000325: RETURN
00000326: JUMPDEST
00000327: CALLVALUE
00000328: DUP1
00000329: ISZERO
0000032a: PUSH2 0x0332
0000032d: JUMPI
0000032e: PUSH1 0x00
00000330: DUP1
00000331: REVERT
00000332: JUMPDEST
00000333: POP
00000334: PUSH2 0x025b
00000337: PUSH1 0x04
00000339: DUP1
0000033a: CALLDATASIZE
0000033b: SUB
0000033c: PUSH1 0x40
0000033e: DUP2
0000033f: LT
00000340: ISZERO
00000341: PUSH2 0x0349
00000344: JUMPI
00000345: PUSH1 0x00
00000347: DUP1
00000348: REVERT
00000349: JUMPDEST
0000034a: POP
0000034b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000360: DUP2
00000361: CALLDATALOAD
00000362: AND
00000363: SWAP1
00000364: PUSH1 0x20
00000366: ADD
00000367: CALLDATALOAD
00000368: PUSH2 0x078c
0000036b: JUMP
0000036c: JUMPDEST
0000036d: CALLVALUE
0000036e: DUP1
0000036f: ISZERO
00000370: PUSH2 0x0378
00000373: JUMPI
00000374: PUSH1 0x00
00000376: DUP1
00000377: REVERT
00000378: JUMPDEST
00000379: POP
0000037a: PUSH2 0x025b
0000037d: PUSH1 0x04
0000037f: DUP1
00000380: CALLDATASIZE
00000381: SUB
00000382: PUSH1 0x40
00000384: DUP2
00000385: LT
00000386: ISZERO
00000387: PUSH2 0x038f
0000038a: JUMPI
0000038b: PUSH1 0x00
0000038d: DUP1
0000038e: REVERT
0000038f: JUMPDEST
00000390: POP
00000391: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000003a6: DUP2
000003a7: CALLDATALOAD
000003a8: AND
000003a9: SWAP1
000003aa: PUSH1 0x20
000003ac: ADD
000003ad: CALLDATALOAD
000003ae: PUSH2 0x07ed
000003b1: JUMP
000003b2: JUMPDEST
000003b3: CALLVALUE
000003b4: DUP1
000003b5: ISZERO
000003b6: PUSH2 0x03be
000003b9: JUMPI
000003ba: PUSH1 0x00
000003bc: DUP1
000003bd: REVERT
000003be: JUMPDEST
000003bf: POP
000003c0: PUSH2 0x025b
000003c3: PUSH1 0x04
000003c5: DUP1
000003c6: CALLDATASIZE
000003c7: SUB
000003c8: PUSH1 0x20
000003ca: DUP2
000003cb: LT
000003cc: ISZERO
000003cd: PUSH2 0x03d5
000003d0: JUMPI
000003d1: PUSH1 0x00
000003d3: DUP1
000003d4: REVERT
000003d5: JUMPDEST
000003d6: POP
000003d7: CALLDATALOAD
000003d8: PUSH2 0x08cb
000003db: JUMP
000003dc: JUMPDEST
000003dd: CALLVALUE
000003de: DUP1
000003df: ISZERO
000003e0: PUSH2 0x03e8
000003e3: JUMPI
000003e4: PUSH1 0x00
000003e6: DUP1
000003e7: REVERT
000003e8: JUMPDEST
000003e9: POP
000003ea: PUSH2 0x03f1
000003ed: PUSH2 0x0999
000003f0: JUMP
000003f1: JUMPDEST
000003f2: PUSH1 0x40
000003f4: DUP1
000003f5: MLOAD
000003f6: PUSH16 0xffffffffffffffffffffffffffffffff
00000407: SWAP4
00000408: DUP5
00000409: AND
0000040a: DUP2
0000040b: MSTORE
0000040c: SWAP2
0000040d: SWAP1
0000040e: SWAP3
0000040f: AND
00000410: PUSH1 0x20
00000412: DUP3
00000413: ADD
00000414: MSTORE
00000415: DUP2
00000416: MLOAD
00000417: SWAP1
00000418: DUP2
00000419: SWAP1
0000041a: SUB
0000041b: SWAP1
0000041c: SWAP2
0000041d: ADD
0000041e: SWAP1
0000041f: RETURN
00000420: JUMPDEST
00000421: CALLVALUE
00000422: DUP1
00000423: ISZERO
00000424: PUSH2 0x042c
00000427: JUMPI
00000428: PUSH1 0x00
0000042a: DUP1
0000042b: REVERT
0000042c: JUMPDEST
0000042d: POP
0000042e: PUSH2 0x0284
00000431: PUSH1 0x04
00000433: DUP1
00000434: CALLDATASIZE
00000435: SUB
00000436: PUSH1 0x20
00000438: DUP2
00000439: LT
0000043a: ISZERO
0000043b: PUSH2 0x0443
0000043e: JUMPI
0000043f: PUSH1 0x00
00000441: DUP1
00000442: REVERT
00000443: JUMPDEST
00000444: POP
00000445: CALLDATALOAD
00000446: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000045b: AND
0000045c: PUSH2 0x09ca
0000045f: JUMP
00000460: JUMPDEST
00000461: CALLVALUE
00000462: DUP1
00000463: ISZERO
00000464: PUSH2 0x046c
00000467: JUMPI
00000468: PUSH1 0x00
0000046a: DUP1
0000046b: REVERT
0000046c: JUMPDEST
0000046d: POP
0000046e: PUSH2 0x025b
00000471: PUSH1 0x04
00000473: DUP1
00000474: CALLDATASIZE
00000475: SUB
00000476: PUSH1 0x40
00000478: DUP2
00000479: LT
0000047a: ISZERO
0000047b: PUSH2 0x0483
0000047e: JUMPI
0000047f: PUSH1 0x00
00000481: DUP1
00000482: REVERT
00000483: JUMPDEST
00000484: POP
00000485: PUSH16 0xffffffffffffffffffffffffffffffff
00000496: DUP2
00000497: CALLDATALOAD
00000498: DUP2
00000499: AND
0000049a: SWAP2
0000049b: PUSH1 0x20
0000049d: ADD
0000049e: CALLDATALOAD
0000049f: AND
000004a0: PUSH2 0x09f2
000004a3: JUMP
000004a4: JUMPDEST
000004a5: CALLVALUE
000004a6: DUP1
000004a7: ISZERO
000004a8: PUSH2 0x04b0
000004ab: JUMPI
000004ac: PUSH1 0x00
000004ae: DUP1
000004af: REVERT
000004b0: JUMPDEST
000004b1: POP
000004b2: PUSH2 0x01a0
000004b5: PUSH2 0x0afe
000004b8: JUMP
000004b9: JUMPDEST
000004ba: CALLVALUE
000004bb: DUP1
000004bc: ISZERO
000004bd: PUSH2 0x04c5
000004c0: JUMPI
000004c1: PUSH1 0x00
000004c3: DUP1
000004c4: REVERT
000004c5: JUMPDEST
000004c6: POP
000004c7: PUSH2 0x0284
000004ca: PUSH2 0x0b7d
000004cd: JUMP
000004ce: JUMPDEST
000004cf: CALLVALUE
000004d0: DUP1
000004d1: ISZERO
000004d2: PUSH2 0x04da
000004d5: JUMPI
000004d6: PUSH1 0x00
000004d8: DUP1
000004d9: REVERT
000004da: JUMPDEST
000004db: POP
000004dc: PUSH2 0x025b
000004df: PUSH1 0x04
000004e1: DUP1
000004e2: CALLDATASIZE
000004e3: SUB
000004e4: PUSH1 0x40
000004e6: DUP2
000004e7: LT
000004e8: ISZERO
000004e9: PUSH2 0x04f1
000004ec: JUMPI
000004ed: PUSH1 0x00
000004ef: DUP1
000004f0: REVERT
000004f1: JUMPDEST
000004f2: POP
000004f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000508: DUP2
00000509: CALLDATALOAD
0000050a: AND
0000050b: SWAP1
0000050c: PUSH1 0x20
0000050e: ADD
0000050f: CALLDATALOAD
00000510: PUSH2 0x0ba5
00000513: JUMP
00000514: JUMPDEST
00000515: CALLVALUE
00000516: DUP1
00000517: ISZERO
00000518: PUSH2 0x0520
0000051b: JUMPI
0000051c: PUSH1 0x00
0000051e: DUP1
0000051f: REVERT
00000520: JUMPDEST
00000521: POP
00000522: PUSH2 0x025b
00000525: PUSH1 0x04
00000527: DUP1
00000528: CALLDATASIZE
00000529: SUB
0000052a: PUSH1 0x40
0000052c: DUP2
0000052d: LT
0000052e: ISZERO
0000052f: PUSH2 0x0537
00000532: JUMPI
00000533: PUSH1 0x00
00000535: DUP1
00000536: REVERT
00000537: JUMPDEST
00000538: POP
00000539: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000054e: DUP2
0000054f: CALLDATALOAD
00000550: AND
00000551: SWAP1
00000552: PUSH1 0x20
00000554: ADD
00000555: CALLDATALOAD
00000556: PUSH2 0x0c20
00000559: JUMP
0000055a: JUMPDEST
0000055b: CALLVALUE
0000055c: DUP1
0000055d: ISZERO
0000055e: PUSH2 0x0566
00000561: JUMPI
00000562: PUSH1 0x00
00000564: DUP1
00000565: REVERT
00000566: JUMPDEST
00000567: POP
00000568: PUSH2 0x025b
0000056b: PUSH1 0x04
0000056d: DUP1
0000056e: CALLDATASIZE
0000056f: SUB
00000570: PUSH1 0x20
00000572: DUP2
00000573: LT
00000574: ISZERO
00000575: PUSH2 0x057d
00000578: JUMPI
00000579: PUSH1 0x00
0000057b: DUP1
0000057c: REVERT
0000057d: JUMPDEST
0000057e: POP
0000057f: CALLDATALOAD
00000580: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000595: AND
00000596: PUSH2 0x0c2d
00000599: JUMP
0000059a: JUMPDEST
0000059b: CALLVALUE
0000059c: DUP1
0000059d: ISZERO
0000059e: PUSH2 0x05a6
000005a1: JUMPI
000005a2: PUSH1 0x00
000005a4: DUP1
000005a5: REVERT
000005a6: JUMPDEST
000005a7: POP
000005a8: PUSH2 0x0284
000005ab: PUSH1 0x04
000005ad: DUP1
000005ae: CALLDATASIZE
000005af: SUB
000005b0: PUSH1 0x40
000005b2: DUP2
000005b3: LT
000005b4: ISZERO
000005b5: PUSH2 0x05bd
000005b8: JUMPI
000005b9: PUSH1 0x00
000005bb: DUP1
000005bc: REVERT
000005bd: JUMPDEST
000005be: POP
000005bf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005d4: DUP2
000005d5: CALLDATALOAD
000005d6: DUP2
000005d7: AND
000005d8: SWAP2
000005d9: PUSH1 0x20
000005db: ADD
000005dc: CALLDATALOAD
000005dd: AND
000005de: PUSH2 0x0c38
000005e1: JUMP
000005e2: JUMPDEST
000005e3: CALLVALUE
000005e4: DUP1
000005e5: ISZERO
000005e6: PUSH2 0x05ee
000005e9: JUMPI
000005ea: PUSH1 0x00
000005ec: DUP1
000005ed: REVERT
000005ee: JUMPDEST
000005ef: POP
000005f0: PUSH2 0x025b
000005f3: PUSH1 0x04
000005f5: DUP1
000005f6: CALLDATASIZE
000005f7: SUB
000005f8: PUSH1 0x40
000005fa: DUP2
000005fb: LT
000005fc: ISZERO
000005fd: PUSH2 0x0605
00000600: JUMPI
00000601: PUSH1 0x00
00000603: DUP1
00000604: REVERT
00000605: JUMPDEST
00000606: POP
00000607: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000061c: DUP2
0000061d: CALLDATALOAD
0000061e: AND
0000061f: SWAP1
00000620: PUSH1 0x20
00000622: ADD
00000623: CALLDATALOAD
00000624: PUSH2 0x0c70
00000627: JUMP
00000628: JUMPDEST
00000629: PUSH1 0x03
0000062b: DUP1
0000062c: SLOAD
0000062d: PUSH1 0x40
0000062f: DUP1
00000630: MLOAD
00000631: PUSH1 0x20
00000633: PUSH1 0x1f
00000635: PUSH1 0x02
00000637: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000658: PUSH2 0x0100
0000065b: PUSH1 0x01
0000065d: DUP9
0000065e: AND
0000065f: ISZERO
00000660: MUL
00000661: ADD
00000662: SWAP1
00000663: SWAP6
00000664: AND
00000665: SWAP5
00000666: SWAP1
00000667: SWAP5
00000668: DIV
00000669: SWAP4
0000066a: DUP5
0000066b: ADD
0000066c: DUP2
0000066d: SWAP1
0000066e: DIV
0000066f: DUP2
00000670: MUL
00000671: DUP3
00000672: ADD
00000673: DUP2
00000674: ADD
00000675: SWAP1
00000676: SWAP3
00000677: MSTORE
00000678: DUP3
00000679: DUP2
0000067a: MSTORE
0000067b: PUSH1 0x60
0000067d: SWAP4
0000067e: SWAP1
0000067f: SWAP3
00000680: SWAP1
00000681: SWAP2
00000682: DUP4
00000683: ADD
00000684: DUP3
00000685: DUP3
00000686: DUP1
00000687: ISZERO
00000688: PUSH2 0x06d2
0000068b: JUMPI
0000068c: DUP1
0000068d: PUSH1 0x1f
0000068f: LT
00000690: PUSH2 0x06a7
00000693: JUMPI
00000694: PUSH2 0x0100
00000697: DUP1
00000698: DUP4
00000699: SLOAD
0000069a: DIV
0000069b: MUL
0000069c: DUP4
0000069d: MSTORE
0000069e: SWAP2
0000069f: PUSH1 0x20
000006a1: ADD
000006a2: SWAP2
000006a3: PUSH2 0x06d2
000006a6: JUMP
000006a7: JUMPDEST
000006a8: DUP3
000006a9: ADD
000006aa: SWAP2
000006ab: SWAP1
000006ac: PUSH1 0x00
000006ae: MSTORE
000006af: PUSH1 0x20
000006b1: PUSH1 0x00
000006b3: KECCAK256
000006b4: SWAP1
000006b5: JUMPDEST
000006b6: DUP2
000006b7: SLOAD
000006b8: DUP2
000006b9: MSTORE
000006ba: SWAP1
000006bb: PUSH1 0x01
000006bd: ADD
000006be: SWAP1
000006bf: PUSH1 0x20
000006c1: ADD
000006c2: DUP1
000006c3: DUP4
000006c4: GT
000006c5: PUSH2 0x06b5
000006c8: JUMPI
000006c9: DUP3
000006ca: SWAP1
000006cb: SUB
000006cc: PUSH1 0x1f
000006ce: AND
000006cf: DUP3
000006d0: ADD
000006d1: SWAP2
000006d2: JUMPDEST
000006d3: POP
000006d4: POP
000006d5: POP
000006d6: POP
000006d7: POP
000006d8: SWAP1
000006d9: POP
000006da: SWAP1
000006db: JUMP
000006dc: JUMPDEST
000006dd: PUSH1 0x00
000006df: PUSH2 0x06f0
000006e2: PUSH2 0x06e9
000006e5: PUSH2 0x0cf2
000006e8: JUMP
000006e9: JUMPDEST
000006ea: DUP5
000006eb: DUP5
000006ec: PUSH2 0x0cf6
000006ef: JUMP
000006f0: JUMPDEST
000006f1: POP
000006f2: PUSH1 0x01
000006f4: JUMPDEST
000006f5: SWAP3
000006f6: SWAP2
000006f7: POP
000006f8: POP
000006f9: JUMP
000006fa: JUMPDEST
000006fb: PUSH1 0x02
000006fd: SLOAD
000006fe: SWAP1
000006ff: JUMP
00000700: JUMPDEST
00000701: PUSH1 0x00
00000703: PUSH2 0x070d
00000706: DUP5
00000707: DUP5
00000708: DUP5
00000709: PUSH2 0x0e3d
0000070c: JUMP
0000070d: JUMPDEST
0000070e: PUSH2 0x074b
00000711: DUP5
00000712: CALLER
00000713: PUSH2 0x0746
00000716: DUP6
00000717: PUSH1 0x40
00000719: MLOAD
0000071a: DUP1
0000071b: PUSH1 0x60
0000071d: ADD
0000071e: PUSH1 0x40
00000720: MSTORE
00000721: DUP1
00000722: PUSH1 0x28
00000724: DUP2
00000725: MSTORE
00000726: PUSH1 0x20
00000728: ADD
00000729: PUSH2 0x1936
0000072c: PUSH1 0x28
0000072e: SWAP2
0000072f: CODECOPY
00000730: PUSH2 0x0739
00000733: DUP11
00000734: CALLER
00000735: PUSH2 0x0c38
00000738: JUMP
00000739: JUMPDEST
0000073a: SWAP2
0000073b: SWAP1
0000073c: PUSH4 0xffffffff
00000741: PUSH2 0x1019
00000744: AND
00000745: JUMP
00000746: JUMPDEST
00000747: PUSH2 0x0cf6
0000074a: JUMP
0000074b: JUMPDEST
0000074c: POP
0000074d: PUSH1 0x01
0000074f: SWAP4
00000750: SWAP3
00000751: POP
00000752: POP
00000753: POP
00000754: JUMP
00000755: JUMPDEST
00000756: PUSH1 0x06
00000758: SLOAD
00000759: PUSH17 0x0100000000000000000000000000000000
0000076b: SWAP1
0000076c: DIV
0000076d: PUSH16 0xffffffffffffffffffffffffffffffff
0000077e: AND
0000077f: ISZERO
00000780: ISZERO
00000781: SWAP1
00000782: JUMP
00000783: JUMPDEST
00000784: PUSH1 0x05
00000786: SLOAD
00000787: PUSH1 0xff
00000789: AND
0000078a: SWAP1
0000078b: JUMP
0000078c: JUMPDEST
0000078d: PUSH1 0x00
0000078f: PUSH2 0x06f0
00000792: PUSH2 0x0799
00000795: PUSH2 0x0cf2
00000798: JUMP
00000799: JUMPDEST
0000079a: DUP5
0000079b: PUSH2 0x0746
0000079e: DUP6
0000079f: PUSH1 0x01
000007a1: PUSH1 0x00
000007a3: PUSH2 0x07aa
000007a6: PUSH2 0x0cf2
000007a9: JUMP
000007aa: JUMPDEST
000007ab: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007c0: SWAP1
000007c1: DUP2
000007c2: AND
000007c3: DUP3
000007c4: MSTORE
000007c5: PUSH1 0x20
000007c7: DUP1
000007c8: DUP4
000007c9: ADD
000007ca: SWAP4
000007cb: SWAP1
000007cc: SWAP4
000007cd: MSTORE
000007ce: PUSH1 0x40
000007d0: SWAP2
000007d1: DUP3
000007d2: ADD
000007d3: PUSH1 0x00
000007d5: SWAP1
000007d6: DUP2
000007d7: KECCAK256
000007d8: SWAP2
000007d9: DUP13
000007da: AND
000007db: DUP2
000007dc: MSTORE
000007dd: SWAP3
000007de: MSTORE
000007df: SWAP1
000007e0: KECCAK256
000007e1: SLOAD
000007e2: SWAP1
000007e3: PUSH4 0xffffffff
000007e8: PUSH2 0x10ca
000007eb: AND
000007ec: JUMP
000007ed: JUMPDEST
000007ee: PUSH1 0x00
000007f0: PUSH2 0x07f8
000007f3: CALLER
000007f4: PUSH2 0x1145
000007f7: JUMP
000007f8: JUMPDEST
000007f9: PUSH2 0x084d
000007fc: JUMPI
000007fd: PUSH1 0x40
000007ff: MLOAD
00000800: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000821: DUP2
00000822: MSTORE
00000823: PUSH1 0x04
00000825: ADD
00000826: DUP1
00000827: DUP1
00000828: PUSH1 0x20
0000082a: ADD
0000082b: DUP3
0000082c: DUP2
0000082d: SUB
0000082e: DUP3
0000082f: MSTORE
00000830: PUSH1 0x2e
00000832: DUP2
00000833: MSTORE
00000834: PUSH1 0x20
00000836: ADD
00000837: DUP1
00000838: PUSH2 0x18ac
0000083b: PUSH1 0x2e
0000083d: SWAP2
0000083e: CODECOPY
0000083f: PUSH1 0x40
00000841: ADD
00000842: SWAP2
00000843: POP
00000844: POP
00000845: PUSH1 0x40
00000847: MLOAD
00000848: DUP1
00000849: SWAP2
0000084a: SUB
0000084b: SWAP1
0000084c: REVERT
0000084d: JUMPDEST
0000084e: PUSH2 0x0855
00000851: PUSH2 0x0755
00000854: JUMP
00000855: JUMPDEST
00000856: ISZERO
00000857: PUSH2 0x08c1
0000085a: JUMPI
0000085b: PUSH1 0x40
0000085d: DUP1
0000085e: MLOAD
0000085f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000880: DUP2
00000881: MSTORE
00000882: PUSH1 0x20
00000884: PUSH1 0x04
00000886: DUP3
00000887: ADD
00000888: MSTORE
00000889: PUSH1 0x1f
0000088b: PUSH1 0x24
0000088d: DUP3
0000088e: ADD
0000088f: MSTORE
00000890: PUSH32 0x7468697320746f6b656e20636f6e747261637420686173206578706972656400
000008b1: PUSH1 0x44
000008b3: DUP3
000008b4: ADD
000008b5: MSTORE
000008b6: SWAP1
000008b7: MLOAD
000008b8: SWAP1
000008b9: DUP2
000008ba: SWAP1
000008bb: SUB
000008bc: PUSH1 0x64
000008be: ADD
000008bf: SWAP1
000008c0: REVERT
000008c1: JUMPDEST
000008c2: PUSH2 0x06f0
000008c5: DUP4
000008c6: DUP4
000008c7: PUSH2 0x1184
000008ca: JUMP
000008cb: JUMPDEST
000008cc: PUSH1 0x00
000008ce: PUSH2 0x08d5
000008d1: PUSH2 0x0755
000008d4: JUMP
000008d5: JUMPDEST
000008d6: PUSH2 0x08e1
000008d9: JUMPI
000008da: POP
000008db: PUSH1 0x00
000008dd: PUSH2 0x0994
000008e0: JUMP
000008e1: JUMPDEST
000008e2: PUSH2 0x08eb
000008e5: CALLER
000008e6: DUP4
000008e7: PUSH2 0x12c1
000008ea: JUMP
000008eb: JUMPDEST
000008ec: PUSH1 0x06
000008ee: SLOAD
000008ef: PUSH16 0xffffffffffffffffffffffffffffffff
00000900: AND
00000901: ISZERO
00000902: PUSH2 0x0990
00000905: JUMPI
00000906: PUSH1 0x06
00000908: SLOAD
00000909: PUSH1 0x00
0000090b: SWAP1
0000090c: PUSH2 0x0969
0000090f: SWAP1
00000910: PUSH16 0xffffffffffffffffffffffffffffffff
00000921: PUSH17 0x0100000000000000000000000000000000
00000933: DUP3
00000934: DIV
00000935: DUP2
00000936: AND
00000937: SWAP2
00000938: PUSH2 0x095d
0000093b: SWAP2
0000093c: AND
0000093d: PUSH2 0x0951
00000940: DUP8
00000941: PUSH5 0x02540be400
00000947: PUSH4 0xffffffff
0000094c: PUSH2 0x1417
0000094f: AND
00000950: JUMP
00000951: JUMPDEST
00000952: SWAP1
00000953: PUSH4 0xffffffff
00000958: PUSH2 0x1417
0000095b: AND
0000095c: JUMP
0000095d: JUMPDEST
0000095e: SWAP1
0000095f: PUSH4 0xffffffff
00000964: PUSH2 0x148a
00000967: AND
00000968: JUMP
00000969: JUMPDEST
0000096a: SWAP1
0000096b: POP
0000096c: PUSH2 0x098e
0000096f: CALLER
00000970: DUP3
00000971: PUSH1 0x40
00000973: MLOAD
00000974: DUP1
00000975: PUSH1 0x60
00000977: ADD
00000978: PUSH1 0x40
0000097a: MSTORE
0000097b: DUP1
0000097c: PUSH1 0x22
0000097e: DUP2
0000097f: MSTORE
00000980: PUSH1 0x20
00000982: ADD
00000983: PUSH2 0x188a
00000986: PUSH1 0x22
00000988: SWAP2
00000989: CODECOPY
0000098a: PUSH2 0x14cc
0000098d: JUMP
0000098e: JUMPDEST
0000098f: POP
00000990: JUMPDEST
00000991: POP
00000992: PUSH1 0x01
00000994: JUMPDEST
00000995: SWAP2
00000996: SWAP1
00000997: POP
00000998: JUMP
00000999: JUMPDEST
0000099a: PUSH1 0x06
0000099c: SLOAD
0000099d: PUSH16 0xffffffffffffffffffffffffffffffff
000009ae: DUP1
000009af: DUP3
000009b0: AND
000009b1: SWAP3
000009b2: PUSH17 0x0100000000000000000000000000000000
000009c4: SWAP1
000009c5: SWAP3
000009c6: DIV
000009c7: AND
000009c8: SWAP1
000009c9: JUMP
000009ca: JUMPDEST
000009cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009e0: AND
000009e1: PUSH1 0x00
000009e3: SWAP1
000009e4: DUP2
000009e5: MSTORE
000009e6: PUSH1 0x20
000009e8: DUP2
000009e9: SWAP1
000009ea: MSTORE
000009eb: PUSH1 0x40
000009ed: SWAP1
000009ee: KECCAK256
000009ef: SLOAD
000009f0: SWAP1
000009f1: JUMP
000009f2: JUMPDEST
000009f3: PUSH1 0x00
000009f5: PUSH2 0x09fd
000009f8: CALLER
000009f9: PUSH2 0x1145
000009fc: JUMP
000009fd: JUMPDEST
000009fe: PUSH2 0x0a52
00000a01: JUMPI
00000a02: PUSH1 0x40
00000a04: MLOAD
00000a05: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000a26: DUP2
00000a27: MSTORE
00000a28: PUSH1 0x04
00000a2a: ADD
00000a2b: DUP1
00000a2c: DUP1
00000a2d: PUSH1 0x20
00000a2f: ADD
00000a30: DUP3
00000a31: DUP2
00000a32: SUB
00000a33: DUP3
00000a34: MSTORE
00000a35: PUSH1 0x2e
00000a37: DUP2
00000a38: MSTORE
00000a39: PUSH1 0x20
00000a3b: ADD
00000a3c: DUP1
00000a3d: PUSH2 0x18ac
00000a40: PUSH1 0x2e
00000a42: SWAP2
00000a43: CODECOPY
00000a44: PUSH1 0x40
00000a46: ADD
00000a47: SWAP2
00000a48: POP
00000a49: POP
00000a4a: PUSH1 0x40
00000a4c: MLOAD
00000a4d: DUP1
00000a4e: SWAP2
00000a4f: SUB
00000a50: SWAP1
00000a51: REVERT
00000a52: JUMPDEST
00000a53: PUSH2 0x0a5a
00000a56: PUSH2 0x0755
00000a59: JUMP
00000a5a: JUMPDEST
00000a5b: ISZERO
00000a5c: SWAP1
00000a5d: POP
00000a5e: DUP1
00000a5f: ISZERO
00000a60: PUSH2 0x0aa4
00000a63: JUMPI
00000a64: PUSH2 0x0aa4
00000a67: PUSH1 0x40
00000a69: MLOAD
00000a6a: DUP1
00000a6b: PUSH1 0x40
00000a6d: ADD
00000a6e: PUSH1 0x40
00000a70: MSTORE
00000a71: DUP1
00000a72: DUP6
00000a73: PUSH16 0xffffffffffffffffffffffffffffffff
00000a84: AND
00000a85: DUP2
00000a86: MSTORE
00000a87: PUSH1 0x20
00000a89: ADD
00000a8a: DUP5
00000a8b: PUSH16 0xffffffffffffffffffffffffffffffff
00000a9c: AND
00000a9d: DUP2
00000a9e: MSTORE
00000a9f: POP
00000aa0: PUSH2 0x165d
00000aa3: JUMP
00000aa4: JUMPDEST
00000aa5: PUSH1 0x40
00000aa7: DUP1
00000aa8: MLOAD
00000aa9: PUSH16 0xffffffffffffffffffffffffffffffff
00000aba: DUP1
00000abb: DUP7
00000abc: AND
00000abd: DUP3
00000abe: MSTORE
00000abf: DUP5
00000ac0: AND
00000ac1: PUSH1 0x20
00000ac3: DUP3
00000ac4: ADD
00000ac5: MSTORE
00000ac6: DUP3
00000ac7: ISZERO
00000ac8: ISZERO
00000ac9: DUP2
00000aca: DUP4
00000acb: ADD
00000acc: MSTORE
00000acd: SWAP1
00000ace: MLOAD
00000acf: PUSH32 0xcdcd2e977c58a9c82d799c0986ab5c6fe48d43a9b96bbf60a654b46728c6f667
00000af0: SWAP2
00000af1: DUP2
00000af2: SWAP1
00000af3: SUB
00000af4: PUSH1 0x60
00000af6: ADD
00000af7: SWAP1
00000af8: LOG1
00000af9: SWAP3
00000afa: SWAP2
00000afb: POP
00000afc: POP
00000afd: JUMP
00000afe: JUMPDEST
00000aff: PUSH1 0x04
00000b01: DUP1
00000b02: SLOAD
00000b03: PUSH1 0x40
00000b05: DUP1
00000b06: MLOAD
00000b07: PUSH1 0x20
00000b09: PUSH1 0x1f
00000b0b: PUSH1 0x02
00000b0d: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000b2e: PUSH2 0x0100
00000b31: PUSH1 0x01
00000b33: DUP9
00000b34: AND
00000b35: ISZERO
00000b36: MUL
00000b37: ADD
00000b38: SWAP1
00000b39: SWAP6
00000b3a: AND
00000b3b: SWAP5
00000b3c: SWAP1
00000b3d: SWAP5
00000b3e: DIV
00000b3f: SWAP4
00000b40: DUP5
00000b41: ADD
00000b42: DUP2
00000b43: SWAP1
00000b44: DIV
00000b45: DUP2
00000b46: MUL
00000b47: DUP3
00000b48: ADD
00000b49: DUP2
00000b4a: ADD
00000b4b: SWAP1
00000b4c: SWAP3
00000b4d: MSTORE
00000b4e: DUP3
00000b4f: DUP2
00000b50: MSTORE
00000b51: PUSH1 0x60
00000b53: SWAP4
00000b54: SWAP1
00000b55: SWAP3
00000b56: SWAP1
00000b57: SWAP2
00000b58: DUP4
00000b59: ADD
00000b5a: DUP3
00000b5b: DUP3
00000b5c: DUP1
00000b5d: ISZERO
00000b5e: PUSH2 0x06d2
00000b61: JUMPI
00000b62: DUP1
00000b63: PUSH1 0x1f
00000b65: LT
00000b66: PUSH2 0x06a7
00000b69: JUMPI
00000b6a: PUSH2 0x0100
00000b6d: DUP1
00000b6e: DUP4
00000b6f: SLOAD
00000b70: DIV
00000b71: MUL
00000b72: DUP4
00000b73: MSTORE
00000b74: SWAP2
00000b75: PUSH1 0x20
00000b77: ADD
00000b78: SWAP2
00000b79: PUSH2 0x06d2
00000b7c: JUMP
00000b7d: JUMPDEST
00000b7e: PUSH1 0x00
00000b80: PUSH2 0x0b88
00000b83: CALLER
00000b84: PUSH2 0x09ca
00000b87: JUMP
00000b88: JUMPDEST
00000b89: SWAP1
00000b8a: POP
00000b8b: PUSH1 0x00
00000b8d: PUSH2 0x0b95
00000b90: DUP3
00000b91: PUSH2 0x08cb
00000b94: JUMP
00000b95: JUMPDEST
00000b96: SWAP1
00000b97: POP
00000b98: DUP1
00000b99: PUSH2 0x0ba1
00000b9c: JUMPI
00000b9d: PUSH1 0x00
00000b9f: SWAP2
00000ba0: POP
00000ba1: JUMPDEST
00000ba2: POP
00000ba3: SWAP1
00000ba4: JUMP
00000ba5: JUMPDEST
00000ba6: PUSH1 0x00
00000ba8: PUSH2 0x06f0
00000bab: PUSH2 0x0bb2
00000bae: PUSH2 0x0cf2
00000bb1: JUMP
00000bb2: JUMPDEST
00000bb3: DUP5
00000bb4: PUSH2 0x0746
00000bb7: DUP6
00000bb8: PUSH1 0x40
00000bba: MLOAD
00000bbb: DUP1
00000bbc: PUSH1 0x60
00000bbe: ADD
00000bbf: PUSH1 0x40
00000bc1: MSTORE
00000bc2: DUP1
00000bc3: PUSH1 0x25
00000bc5: DUP2
00000bc6: MSTORE
00000bc7: PUSH1 0x20
00000bc9: ADD
00000bca: PUSH2 0x19c8
00000bcd: PUSH1 0x25
00000bcf: SWAP2
00000bd0: CODECOPY
00000bd1: PUSH1 0x01
00000bd3: PUSH1 0x00
00000bd5: PUSH2 0x0bdc
00000bd8: PUSH2 0x0cf2
00000bdb: JUMP
00000bdc: JUMPDEST
00000bdd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bf2: SWAP1
00000bf3: DUP2
00000bf4: AND
00000bf5: DUP3
00000bf6: MSTORE
00000bf7: PUSH1 0x20
00000bf9: DUP1
00000bfa: DUP4
00000bfb: ADD
00000bfc: SWAP4
00000bfd: SWAP1
00000bfe: SWAP4
00000bff: MSTORE
00000c00: PUSH1 0x40
00000c02: SWAP2
00000c03: DUP3
00000c04: ADD
00000c05: PUSH1 0x00
00000c07: SWAP1
00000c08: DUP2
00000c09: KECCAK256
00000c0a: SWAP2
00000c0b: DUP14
00000c0c: AND
00000c0d: DUP2
00000c0e: MSTORE
00000c0f: SWAP3
00000c10: MSTORE
00000c11: SWAP1
00000c12: KECCAK256
00000c13: SLOAD
00000c14: SWAP2
00000c15: SWAP1
00000c16: PUSH4 0xffffffff
00000c1b: PUSH2 0x1019
00000c1e: AND
00000c1f: JUMP
00000c20: JUMPDEST
00000c21: PUSH1 0x00
00000c23: PUSH2 0x06f0
00000c26: CALLER
00000c27: DUP5
00000c28: DUP5
00000c29: PUSH2 0x0e3d
00000c2c: JUMP
00000c2d: JUMPDEST
00000c2e: PUSH1 0x00
00000c30: PUSH2 0x06f4
00000c33: DUP3
00000c34: PUSH2 0x1145
00000c37: JUMP
00000c38: JUMPDEST
00000c39: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c4e: SWAP2
00000c4f: DUP3
00000c50: AND
00000c51: PUSH1 0x00
00000c53: SWAP1
00000c54: DUP2
00000c55: MSTORE
00000c56: PUSH1 0x01
00000c58: PUSH1 0x20
00000c5a: SWAP1
00000c5b: DUP2
00000c5c: MSTORE
00000c5d: PUSH1 0x40
00000c5f: DUP1
00000c60: DUP4
00000c61: KECCAK256
00000c62: SWAP4
00000c63: SWAP1
00000c64: SWAP5
00000c65: AND
00000c66: DUP3
00000c67: MSTORE
00000c68: SWAP2
00000c69: SWAP1
00000c6a: SWAP2
00000c6b: MSTORE
00000c6c: KECCAK256
00000c6d: SLOAD
00000c6e: SWAP1
00000c6f: JUMP
00000c70: JUMPDEST
00000c71: PUSH1 0x00
00000c73: PUSH2 0x0c7b
00000c76: CALLER
00000c77: PUSH2 0x1145
00000c7a: JUMP
00000c7b: JUMPDEST
00000c7c: PUSH2 0x0cd0
00000c7f: JUMPI
00000c80: PUSH1 0x40
00000c82: MLOAD
00000c83: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000ca4: DUP2
00000ca5: MSTORE
00000ca6: PUSH1 0x04
00000ca8: ADD
00000ca9: DUP1
00000caa: DUP1
00000cab: PUSH1 0x20
00000cad: ADD
00000cae: DUP3
00000caf: DUP2
00000cb0: SUB
00000cb1: DUP3
00000cb2: MSTORE
00000cb3: PUSH1 0x2e
00000cb5: DUP2
00000cb6: MSTORE
00000cb7: PUSH1 0x20
00000cb9: ADD
00000cba: DUP1
00000cbb: PUSH2 0x18ac
00000cbe: PUSH1 0x2e
00000cc0: SWAP2
00000cc1: CODECOPY
00000cc2: PUSH1 0x40
00000cc4: ADD
00000cc5: SWAP2
00000cc6: POP
00000cc7: POP
00000cc8: PUSH1 0x40
00000cca: MLOAD
00000ccb: DUP1
00000ccc: SWAP2
00000ccd: SUB
00000cce: SWAP1
00000ccf: REVERT
00000cd0: JUMPDEST
00000cd1: PUSH2 0x0cd9
00000cd4: DUP4
00000cd5: PUSH2 0x09ca
00000cd8: JUMP
00000cd9: JUMPDEST
00000cda: DUP3
00000cdb: GT
00000cdc: ISZERO
00000cdd: PUSH2 0x0ce8
00000ce0: JUMPI
00000ce1: POP
00000ce2: PUSH1 0x00
00000ce4: PUSH2 0x06f4
00000ce7: JUMP
00000ce8: JUMPDEST
00000ce9: PUSH2 0x06f0
00000cec: DUP4
00000ced: DUP4
00000cee: PUSH2 0x12c1
00000cf1: JUMP
00000cf2: JUMPDEST
00000cf3: CALLER
00000cf4: SWAP1
00000cf5: JUMP
00000cf6: JUMPDEST
00000cf7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d0c: DUP4
00000d0d: AND
00000d0e: PUSH2 0x0d62
00000d11: JUMPI
00000d12: PUSH1 0x40
00000d14: MLOAD
00000d15: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000d36: DUP2
00000d37: MSTORE
00000d38: PUSH1 0x04
00000d3a: ADD
00000d3b: DUP1
00000d3c: DUP1
00000d3d: PUSH1 0x20
00000d3f: ADD
00000d40: DUP3
00000d41: DUP2
00000d42: SUB
00000d43: DUP3
00000d44: MSTORE
00000d45: PUSH1 0x24
00000d47: DUP2
00000d48: MSTORE
00000d49: PUSH1 0x20
00000d4b: ADD
00000d4c: DUP1
00000d4d: PUSH2 0x19a4
00000d50: PUSH1 0x24
00000d52: SWAP2
00000d53: CODECOPY
00000d54: PUSH1 0x40
00000d56: ADD
00000d57: SWAP2
00000d58: POP
00000d59: POP
00000d5a: PUSH1 0x40
00000d5c: MLOAD
00000d5d: DUP1
00000d5e: SWAP2
00000d5f: SUB
00000d60: SWAP1
00000d61: REVERT
00000d62: JUMPDEST
00000d63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d78: DUP3
00000d79: AND
00000d7a: PUSH2 0x0dce
00000d7d: JUMPI
00000d7e: PUSH1 0x40
00000d80: MLOAD
00000d81: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000da2: DUP2
00000da3: MSTORE
00000da4: PUSH1 0x04
00000da6: ADD
00000da7: DUP1
00000da8: DUP1
00000da9: PUSH1 0x20
00000dab: ADD
00000dac: DUP3
00000dad: DUP2
00000dae: SUB
00000daf: DUP3
00000db0: MSTORE
00000db1: PUSH1 0x22
00000db3: DUP2
00000db4: MSTORE
00000db5: PUSH1 0x20
00000db7: ADD
00000db8: DUP1
00000db9: PUSH2 0x1842
00000dbc: PUSH1 0x22
00000dbe: SWAP2
00000dbf: CODECOPY
00000dc0: PUSH1 0x40
00000dc2: ADD
00000dc3: SWAP2
00000dc4: POP
00000dc5: POP
00000dc6: PUSH1 0x40
00000dc8: MLOAD
00000dc9: DUP1
00000dca: SWAP2
00000dcb: SUB
00000dcc: SWAP1
00000dcd: REVERT
00000dce: JUMPDEST
00000dcf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000de4: DUP1
00000de5: DUP5
00000de6: AND
00000de7: PUSH1 0x00
00000de9: DUP2
00000dea: DUP2
00000deb: MSTORE
00000dec: PUSH1 0x01
00000dee: PUSH1 0x20
00000df0: SWAP1
00000df1: DUP2
00000df2: MSTORE
00000df3: PUSH1 0x40
00000df5: DUP1
00000df6: DUP4
00000df7: KECCAK256
00000df8: SWAP5
00000df9: DUP8
00000dfa: AND
00000dfb: DUP1
00000dfc: DUP5
00000dfd: MSTORE
00000dfe: SWAP5
00000dff: DUP3
00000e00: MSTORE
00000e01: SWAP2
00000e02: DUP3
00000e03: SWAP1
00000e04: KECCAK256
00000e05: DUP6
00000e06: SWAP1
00000e07: SSTORE
00000e08: DUP2
00000e09: MLOAD
00000e0a: DUP6
00000e0b: DUP2
00000e0c: MSTORE
00000e0d: SWAP2
00000e0e: MLOAD
00000e0f: PUSH32 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
00000e30: SWAP3
00000e31: DUP2
00000e32: SWAP1
00000e33: SUB
00000e34: SWAP1
00000e35: SWAP2
00000e36: ADD
00000e37: SWAP1
00000e38: LOG3
00000e39: POP
00000e3a: POP
00000e3b: POP
00000e3c: JUMP
00000e3d: JUMPDEST
00000e3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e53: DUP4
00000e54: AND
00000e55: PUSH2 0x0ea9
00000e58: JUMPI
00000e59: PUSH1 0x40
00000e5b: MLOAD
00000e5c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000e7d: DUP2
00000e7e: MSTORE
00000e7f: PUSH1 0x04
00000e81: ADD
00000e82: DUP1
00000e83: DUP1
00000e84: PUSH1 0x20
00000e86: ADD
00000e87: DUP3
00000e88: DUP2
00000e89: SUB
00000e8a: DUP3
00000e8b: MSTORE
00000e8c: PUSH1 0x25
00000e8e: DUP2
00000e8f: MSTORE
00000e90: PUSH1 0x20
00000e92: ADD
00000e93: DUP1
00000e94: PUSH2 0x197f
00000e97: PUSH1 0x25
00000e99: SWAP2
00000e9a: CODECOPY
00000e9b: PUSH1 0x40
00000e9d: ADD
00000e9e: SWAP2
00000e9f: POP
00000ea0: POP
00000ea1: PUSH1 0x40
00000ea3: MLOAD
00000ea4: DUP1
00000ea5: SWAP2
00000ea6: SUB
00000ea7: SWAP1
00000ea8: REVERT
00000ea9: JUMPDEST
00000eaa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ebf: DUP3
00000ec0: AND
00000ec1: PUSH2 0x0f15
00000ec4: JUMPI
00000ec5: PUSH1 0x40
00000ec7: MLOAD
00000ec8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000ee9: DUP2
00000eea: MSTORE
00000eeb: PUSH1 0x04
00000eed: ADD
00000eee: DUP1
00000eef: DUP1
00000ef0: PUSH1 0x20
00000ef2: ADD
00000ef3: DUP3
00000ef4: DUP2
00000ef5: SUB
00000ef6: DUP3
00000ef7: MSTORE
00000ef8: PUSH1 0x23
00000efa: DUP2
00000efb: MSTORE
00000efc: PUSH1 0x20
00000efe: ADD
00000eff: DUP1
00000f00: PUSH2 0x17fd
00000f03: PUSH1 0x23
00000f05: SWAP2
00000f06: CODECOPY
00000f07: PUSH1 0x40
00000f09: ADD
00000f0a: SWAP2
00000f0b: POP
00000f0c: POP
00000f0d: PUSH1 0x40
00000f0f: MLOAD
00000f10: DUP1
00000f11: SWAP2
00000f12: SUB
00000f13: SWAP1
00000f14: REVERT
00000f15: JUMPDEST
00000f16: PUSH2 0x0f20
00000f19: DUP4
00000f1a: DUP4
00000f1b: DUP4
00000f1c: PUSH2 0x172f
00000f1f: JUMP
00000f20: JUMPDEST
00000f21: PUSH2 0x0f70
00000f24: DUP2
00000f25: PUSH1 0x40
00000f27: MLOAD
00000f28: DUP1
00000f29: PUSH1 0x60
00000f2b: ADD
00000f2c: PUSH1 0x40
00000f2e: MSTORE
00000f2f: DUP1
00000f30: PUSH1 0x26
00000f32: DUP2
00000f33: MSTORE
00000f34: PUSH1 0x20
00000f36: ADD
00000f37: PUSH2 0x1864
00000f3a: PUSH1 0x26
00000f3c: SWAP2
00000f3d: CODECOPY
00000f3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f53: DUP7
00000f54: AND
00000f55: PUSH1 0x00
00000f57: SWAP1
00000f58: DUP2
00000f59: MSTORE
00000f5a: PUSH1 0x20
00000f5c: DUP2
00000f5d: SWAP1
00000f5e: MSTORE
00000f5f: PUSH1 0x40
00000f61: SWAP1
00000f62: KECCAK256
00000f63: SLOAD
00000f64: SWAP2
00000f65: SWAP1
00000f66: PUSH4 0xffffffff
00000f6b: PUSH2 0x1019
00000f6e: AND
00000f6f: JUMP
00000f70: JUMPDEST
00000f71: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f86: DUP1
00000f87: DUP6
00000f88: AND
00000f89: PUSH1 0x00
00000f8b: SWAP1
00000f8c: DUP2
00000f8d: MSTORE
00000f8e: PUSH1 0x20
00000f90: DUP2
00000f91: SWAP1
00000f92: MSTORE
00000f93: PUSH1 0x40
00000f95: DUP1
00000f96: DUP3
00000f97: KECCAK256
00000f98: SWAP4
00000f99: SWAP1
00000f9a: SWAP4
00000f9b: SSTORE
00000f9c: SWAP1
00000f9d: DUP5
00000f9e: AND
00000f9f: DUP2
00000fa0: MSTORE
00000fa1: KECCAK256
00000fa2: SLOAD
00000fa3: PUSH2 0x0fb2
00000fa6: SWAP1
00000fa7: DUP3
00000fa8: PUSH4 0xffffffff
00000fad: PUSH2 0x10ca
00000fb0: AND
00000fb1: JUMP
00000fb2: JUMPDEST
00000fb3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fc8: DUP1
00000fc9: DUP5
00000fca: AND
00000fcb: PUSH1 0x00
00000fcd: DUP2
00000fce: DUP2
00000fcf: MSTORE
00000fd0: PUSH1 0x20
00000fd2: DUP2
00000fd3: DUP2
00000fd4: MSTORE
00000fd5: PUSH1 0x40
00000fd7: SWAP2
00000fd8: DUP3
00000fd9: SWAP1
00000fda: KECCAK256
00000fdb: SWAP5
00000fdc: SWAP1
00000fdd: SWAP5
00000fde: SSTORE
00000fdf: DUP1
00000fe0: MLOAD
00000fe1: DUP6
00000fe2: DUP2
00000fe3: MSTORE
00000fe4: SWAP1
00000fe5: MLOAD
00000fe6: SWAP2
00000fe7: SWAP4
00000fe8: SWAP3
00000fe9: DUP8
00000fea: AND
00000feb: SWAP3
00000fec: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0000100d: SWAP3
0000100e: SWAP2
0000100f: DUP3
00001010: SWAP1
00001011: SUB
00001012: ADD
00001013: SWAP1
00001014: LOG3
00001015: POP
00001016: POP
00001017: POP
00001018: JUMP
00001019: JUMPDEST
0000101a: PUSH1 0x00
0000101c: DUP2
0000101d: DUP5
0000101e: DUP5
0000101f: GT
00001020: ISZERO
00001021: PUSH2 0x10c2
00001024: JUMPI
00001025: PUSH1 0x40
00001027: MLOAD
00001028: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001049: DUP2
0000104a: MSTORE
0000104b: PUSH1 0x04
0000104d: ADD
0000104e: DUP1
0000104f: DUP1
00001050: PUSH1 0x20
00001052: ADD
00001053: DUP3
00001054: DUP2
00001055: SUB
00001056: DUP3
00001057: MSTORE
00001058: DUP4
00001059: DUP2
0000105a: DUP2
0000105b: MLOAD
0000105c: DUP2
0000105d: MSTORE
0000105e: PUSH1 0x20
00001060: ADD
00001061: SWAP2
00001062: POP
00001063: DUP1
00001064: MLOAD
00001065: SWAP1
00001066: PUSH1 0x20
00001068: ADD
00001069: SWAP1
0000106a: DUP1
0000106b: DUP4
0000106c: DUP4
0000106d: PUSH1 0x00
0000106f: JUMPDEST
00001070: DUP4
00001071: DUP2
00001072: LT
00001073: ISZERO
00001074: PUSH2 0x1087
00001077: JUMPI
00001078: DUP2
00001079: DUP2
0000107a: ADD
0000107b: MLOAD
0000107c: DUP4
0000107d: DUP3
0000107e: ADD
0000107f: MSTORE
00001080: PUSH1 0x20
00001082: ADD
00001083: PUSH2 0x106f
00001086: JUMP
00001087: JUMPDEST
00001088: POP
00001089: POP
0000108a: POP
0000108b: POP
0000108c: SWAP1
0000108d: POP
0000108e: SWAP1
0000108f: DUP2
00001090: ADD
00001091: SWAP1
00001092: PUSH1 0x1f
00001094: AND
00001095: DUP1
00001096: ISZERO
00001097: PUSH2 0x10b4
0000109a: JUMPI
0000109b: DUP1
0000109c: DUP3
0000109d: SUB
0000109e: DUP1
0000109f: MLOAD
000010a0: PUSH1 0x01
000010a2: DUP4
000010a3: PUSH1 0x20
000010a5: SUB
000010a6: PUSH2 0x0100
000010a9: EXP
000010aa: SUB
000010ab: NOT
000010ac: AND
000010ad: DUP2
000010ae: MSTORE
000010af: PUSH1 0x20
000010b1: ADD
000010b2: SWAP2
000010b3: POP
000010b4: JUMPDEST
000010b5: POP
000010b6: SWAP3
000010b7: POP
000010b8: POP
000010b9: POP
000010ba: PUSH1 0x40
000010bc: MLOAD
000010bd: DUP1
000010be: SWAP2
000010bf: SUB
000010c0: SWAP1
000010c1: REVERT
000010c2: JUMPDEST
000010c3: POP
000010c4: POP
000010c5: POP
000010c6: SWAP1
000010c7: SUB
000010c8: SWAP1
000010c9: JUMP
000010ca: JUMPDEST
000010cb: PUSH1 0x00
000010cd: DUP3
000010ce: DUP3
000010cf: ADD
000010d0: DUP4
000010d1: DUP2
000010d2: LT
000010d3: ISZERO
000010d4: PUSH2 0x113e
000010d7: JUMPI
000010d8: PUSH1 0x40
000010da: DUP1
000010db: MLOAD
000010dc: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000010fd: DUP2
000010fe: MSTORE
000010ff: PUSH1 0x20
00001101: PUSH1 0x04
00001103: DUP3
00001104: ADD
00001105: MSTORE
00001106: PUSH1 0x1b
00001108: PUSH1 0x24
0000110a: DUP3
0000110b: ADD
0000110c: MSTORE
0000110d: PUSH32 0x536166654d6174683a206164646974696f6e206f766572666c6f770000000000
0000112e: PUSH1 0x44
00001130: DUP3
00001131: ADD
00001132: MSTORE
00001133: SWAP1
00001134: MLOAD
00001135: SWAP1
00001136: DUP2
00001137: SWAP1
00001138: SUB
00001139: PUSH1 0x64
0000113b: ADD
0000113c: SWAP1
0000113d: REVERT
0000113e: JUMPDEST
0000113f: SWAP4
00001140: SWAP3
00001141: POP
00001142: POP
00001143: POP
00001144: JUMP
00001145: JUMPDEST
00001146: PUSH32 0x0000000000000000000000008b24f5c764ab741bc8a2426505bda458c30df010
00001167: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000117c: SWAP1
0000117d: DUP2
0000117e: AND
0000117f: SWAP2
00001180: AND
00001181: EQ
00001182: SWAP1
00001183: JUMP
00001184: JUMPDEST
00001185: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000119a: DUP3
0000119b: AND
0000119c: PUSH2 0x1206
0000119f: JUMPI
000011a0: PUSH1 0x40
000011a2: DUP1
000011a3: MLOAD
000011a4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000011c5: DUP2
000011c6: MSTORE
000011c7: PUSH1 0x20
000011c9: PUSH1 0x04
000011cb: DUP3
000011cc: ADD
000011cd: MSTORE
000011ce: PUSH1 0x1f
000011d0: PUSH1 0x24
000011d2: DUP3
000011d3: ADD
000011d4: MSTORE
000011d5: PUSH32 0x45524332303a206d696e7420746f20746865207a65726f206164647265737300
000011f6: PUSH1 0x44
000011f8: DUP3
000011f9: ADD
000011fa: MSTORE
000011fb: SWAP1
000011fc: MLOAD
000011fd: SWAP1
000011fe: DUP2
000011ff: SWAP1
00001200: SUB
00001201: PUSH1 0x64
00001203: ADD
00001204: SWAP1
00001205: REVERT
00001206: JUMPDEST
00001207: PUSH2 0x1212
0000120a: PUSH1 0x00
0000120c: DUP4
0000120d: DUP4
0000120e: PUSH2 0x172f
00001211: JUMP
00001212: JUMPDEST
00001213: PUSH1 0x02
00001215: SLOAD
00001216: PUSH2 0x1225
00001219: SWAP1
0000121a: DUP3
0000121b: PUSH4 0xffffffff
00001220: PUSH2 0x10ca
00001223: AND
00001224: JUMP
00001225: JUMPDEST
00001226: PUSH1 0x02
00001228: SSTORE
00001229: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000123e: DUP3
0000123f: AND
00001240: PUSH1 0x00
00001242: SWAP1
00001243: DUP2
00001244: MSTORE
00001245: PUSH1 0x20
00001247: DUP2
00001248: SWAP1
00001249: MSTORE
0000124a: PUSH1 0x40
0000124c: SWAP1
0000124d: KECCAK256
0000124e: SLOAD
0000124f: PUSH2 0x125e
00001252: SWAP1
00001253: DUP3
00001254: PUSH4 0xffffffff
00001259: PUSH2 0x10ca
0000125c: AND
0000125d: JUMP
0000125e: JUMPDEST
0000125f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001274: DUP4
00001275: AND
00001276: PUSH1 0x00
00001278: DUP2
00001279: DUP2
0000127a: MSTORE
0000127b: PUSH1 0x20
0000127d: DUP2
0000127e: DUP2
0000127f: MSTORE
00001280: PUSH1 0x40
00001282: DUP1
00001283: DUP4
00001284: KECCAK256
00001285: SWAP5
00001286: SWAP1
00001287: SWAP5
00001288: SSTORE
00001289: DUP4
0000128a: MLOAD
0000128b: DUP6
0000128c: DUP2
0000128d: MSTORE
0000128e: SWAP4
0000128f: MLOAD
00001290: SWAP3
00001291: SWAP4
00001292: SWAP2
00001293: SWAP3
00001294: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
000012b5: SWAP3
000012b6: DUP2
000012b7: SWAP1
000012b8: SUB
000012b9: SWAP1
000012ba: SWAP2
000012bb: ADD
000012bc: SWAP1
000012bd: LOG3
000012be: POP
000012bf: POP
000012c0: JUMP
000012c1: JUMPDEST
000012c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012d7: DUP3
000012d8: AND
000012d9: PUSH2 0x132d
000012dc: JUMPI
000012dd: PUSH1 0x40
000012df: MLOAD
000012e0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001301: DUP2
00001302: MSTORE
00001303: PUSH1 0x04
00001305: ADD
00001306: DUP1
00001307: DUP1
00001308: PUSH1 0x20
0000130a: ADD
0000130b: DUP3
0000130c: DUP2
0000130d: SUB
0000130e: DUP3
0000130f: MSTORE
00001310: PUSH1 0x21
00001312: DUP2
00001313: MSTORE
00001314: PUSH1 0x20
00001316: ADD
00001317: DUP1
00001318: PUSH2 0x195e
0000131b: PUSH1 0x21
0000131d: SWAP2
0000131e: CODECOPY
0000131f: PUSH1 0x40
00001321: ADD
00001322: SWAP2
00001323: POP
00001324: POP
00001325: PUSH1 0x40
00001327: MLOAD
00001328: DUP1
00001329: SWAP2
0000132a: SUB
0000132b: SWAP1
0000132c: REVERT
0000132d: JUMPDEST
0000132e: PUSH2 0x1339
00001331: DUP3
00001332: PUSH1 0x00
00001334: DUP4
00001335: PUSH2 0x172f
00001338: JUMP
00001339: JUMPDEST
0000133a: PUSH2 0x1389
0000133d: DUP2
0000133e: PUSH1 0x40
00001340: MLOAD
00001341: DUP1
00001342: PUSH1 0x60
00001344: ADD
00001345: PUSH1 0x40
00001347: MSTORE
00001348: DUP1
00001349: PUSH1 0x22
0000134b: DUP2
0000134c: MSTORE
0000134d: PUSH1 0x20
0000134f: ADD
00001350: PUSH2 0x1820
00001353: PUSH1 0x22
00001355: SWAP2
00001356: CODECOPY
00001357: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000136c: DUP6
0000136d: AND
0000136e: PUSH1 0x00
00001370: SWAP1
00001371: DUP2
00001372: MSTORE
00001373: PUSH1 0x20
00001375: DUP2
00001376: SWAP1
00001377: MSTORE
00001378: PUSH1 0x40
0000137a: SWAP1
0000137b: KECCAK256
0000137c: SLOAD
0000137d: SWAP2
0000137e: SWAP1
0000137f: PUSH4 0xffffffff
00001384: PUSH2 0x1019
00001387: AND
00001388: JUMP
00001389: JUMPDEST
0000138a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000139f: DUP4
000013a0: AND
000013a1: PUSH1 0x00
000013a3: SWAP1
000013a4: DUP2
000013a5: MSTORE
000013a6: PUSH1 0x20
000013a8: DUP2
000013a9: SWAP1
000013aa: MSTORE
000013ab: PUSH1 0x40
000013ad: SWAP1
000013ae: KECCAK256
000013af: SSTORE
000013b0: PUSH1 0x02
000013b2: SLOAD
000013b3: PUSH2 0x13c2
000013b6: SWAP1
000013b7: DUP3
000013b8: PUSH4 0xffffffff
000013bd: PUSH2 0x1734
000013c0: AND
000013c1: JUMP
000013c2: JUMPDEST
000013c3: PUSH1 0x02
000013c5: SSTORE
000013c6: PUSH1 0x40
000013c8: DUP1
000013c9: MLOAD
000013ca: DUP3
000013cb: DUP2
000013cc: MSTORE
000013cd: SWAP1
000013ce: MLOAD
000013cf: PUSH1 0x00
000013d1: SWAP2
000013d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013e7: DUP6
000013e8: AND
000013e9: SWAP2
000013ea: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0000140b: SWAP2
0000140c: DUP2
0000140d: SWAP1
0000140e: SUB
0000140f: PUSH1 0x20
00001411: ADD
00001412: SWAP1
00001413: LOG3
00001414: POP
00001415: POP
00001416: JUMP
00001417: JUMPDEST
00001418: PUSH1 0x00
0000141a: DUP3
0000141b: PUSH2 0x1426
0000141e: JUMPI
0000141f: POP
00001420: PUSH1 0x00
00001422: PUSH2 0x06f4
00001425: JUMP
00001426: JUMPDEST
00001427: DUP3
00001428: DUP3
00001429: MUL
0000142a: DUP3
0000142b: DUP5
0000142c: DUP3
0000142d: DUP2
0000142e: PUSH2 0x1433
00001431: JUMPI
00001432: INVALID
00001433: JUMPDEST
00001434: DIV
00001435: EQ
00001436: PUSH2 0x113e
00001439: JUMPI
0000143a: PUSH1 0x40
0000143c: MLOAD
0000143d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000145e: DUP2
0000145f: MSTORE
00001460: PUSH1 0x04
00001462: ADD
00001463: DUP1
00001464: DUP1
00001465: PUSH1 0x20
00001467: ADD
00001468: DUP3
00001469: DUP2
0000146a: SUB
0000146b: DUP3
0000146c: MSTORE
0000146d: PUSH1 0x21
0000146f: DUP2
00001470: MSTORE
00001471: PUSH1 0x20
00001473: ADD
00001474: DUP1
00001475: PUSH2 0x1915
00001478: PUSH1 0x21
0000147a: SWAP2
0000147b: CODECOPY
0000147c: PUSH1 0x40
0000147e: ADD
0000147f: SWAP2
00001480: POP
00001481: POP
00001482: PUSH1 0x40
00001484: MLOAD
00001485: DUP1
00001486: SWAP2
00001487: SUB
00001488: SWAP1
00001489: REVERT
0000148a: JUMPDEST
0000148b: PUSH1 0x00
0000148d: PUSH2 0x113e
00001490: DUP4
00001491: DUP4
00001492: PUSH1 0x40
00001494: MLOAD
00001495: DUP1
00001496: PUSH1 0x40
00001498: ADD
00001499: PUSH1 0x40
0000149b: MSTORE
0000149c: DUP1
0000149d: PUSH1 0x1a
0000149f: DUP2
000014a0: MSTORE
000014a1: PUSH1 0x20
000014a3: ADD
000014a4: PUSH32 0x536166654d6174683a206469766973696f6e206279207a65726f000000000000
000014c5: DUP2
000014c6: MSTORE
000014c7: POP
000014c8: PUSH2 0x1776
000014cb: JUMP
000014cc: JUMPDEST
000014cd: PUSH2 0x14d5
000014d0: DUP3
000014d1: PUSH2 0x17f5
000014d4: JUMP
000014d5: JUMPDEST
000014d6: DUP2
000014d7: SWAP1
000014d8: PUSH2 0x153c
000014db: JUMPI
000014dc: PUSH1 0x40
000014de: MLOAD
000014df: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001500: DUP2
00001501: MSTORE
00001502: PUSH1 0x20
00001504: PUSH1 0x04
00001506: DUP3
00001507: ADD
00001508: DUP2
00001509: DUP2
0000150a: MSTORE
0000150b: DUP4
0000150c: MLOAD
0000150d: PUSH1 0x24
0000150f: DUP5
00001510: ADD
00001511: MSTORE
00001512: DUP4
00001513: MLOAD
00001514: SWAP1
00001515: SWAP3
00001516: DUP4
00001517: SWAP3
00001518: PUSH1 0x44
0000151a: SWAP1
0000151b: SWAP2
0000151c: ADD
0000151d: SWAP2
0000151e: SWAP1
0000151f: DUP6
00001520: ADD
00001521: SWAP1
00001522: DUP1
00001523: DUP4
00001524: DUP4
00001525: PUSH1 0x00
00001527: DUP4
00001528: ISZERO
00001529: PUSH2 0x1087
0000152c: JUMPI
0000152d: DUP2
0000152e: DUP2
0000152f: ADD
00001530: MLOAD
00001531: DUP4
00001532: DUP3
00001533: ADD
00001534: MSTORE
00001535: PUSH1 0x20
00001537: ADD
00001538: PUSH2 0x106f
0000153b: JUMP
0000153c: JUMPDEST
0000153d: POP
0000153e: PUSH1 0x40
00001540: MLOAD
00001541: PUSH1 0x00
00001543: SWAP1
00001544: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001559: DUP6
0000155a: AND
0000155b: SWAP1
0000155c: DUP5
0000155d: SWAP1
0000155e: DUP4
0000155f: DUP2
00001560: DUP2
00001561: DUP2
00001562: DUP6
00001563: DUP8
00001564: GAS
00001565: CALL
00001566: SWAP3
00001567: POP
00001568: POP
00001569: POP
0000156a: RETURNDATASIZE
0000156b: DUP1
0000156c: PUSH1 0x00
0000156e: DUP2
0000156f: EQ
00001570: PUSH2 0x1595
00001573: JUMPI
00001574: PUSH1 0x40
00001576: MLOAD
00001577: SWAP2
00001578: POP
00001579: PUSH1 0x1f
0000157b: NOT
0000157c: PUSH1 0x3f
0000157e: RETURNDATASIZE
0000157f: ADD
00001580: AND
00001581: DUP3
00001582: ADD
00001583: PUSH1 0x40
00001585: MSTORE
00001586: RETURNDATASIZE
00001587: DUP3
00001588: MSTORE
00001589: RETURNDATASIZE
0000158a: PUSH1 0x00
0000158c: PUSH1 0x20
0000158e: DUP5
0000158f: ADD
00001590: RETURNDATACOPY
00001591: PUSH2 0x159a
00001594: JUMP
00001595: JUMPDEST
00001596: PUSH1 0x60
00001598: SWAP2
00001599: POP
0000159a: JUMPDEST
0000159b: POP
0000159c: POP
0000159d: SWAP1
0000159e: POP
0000159f: DUP1
000015a0: PUSH2 0x160a
000015a3: JUMPI
000015a4: PUSH1 0x40
000015a6: DUP1
000015a7: MLOAD
000015a8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000015c9: DUP2
000015ca: MSTORE
000015cb: PUSH1 0x20
000015cd: PUSH1 0x04
000015cf: DUP3
000015d0: ADD
000015d1: MSTORE
000015d2: PUSH1 0x19
000015d4: PUSH1 0x24
000015d6: DUP3
000015d7: ADD
000015d8: MSTORE
000015d9: PUSH32 0x7472616e7366657272696e67204574686572206661696c656400000000000000
000015fa: PUSH1 0x44
000015fc: DUP3
000015fd: ADD
000015fe: MSTORE
000015ff: SWAP1
00001600: MLOAD
00001601: SWAP1
00001602: DUP2
00001603: SWAP1
00001604: SUB
00001605: PUSH1 0x64
00001607: ADD
00001608: SWAP1
00001609: REVERT
0000160a: JUMPDEST
0000160b: PUSH1 0x40
0000160d: DUP1
0000160e: MLOAD
0000160f: DUP5
00001610: DUP2
00001611: MSTORE
00001612: SWAP1
00001613: MLOAD
00001614: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001629: DUP7
0000162a: AND
0000162b: SWAP2
0000162c: ADDRESS
0000162d: SWAP2
0000162e: PUSH32 0xdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c
0000164f: SWAP2
00001650: DUP2
00001651: SWAP1
00001652: SUB
00001653: PUSH1 0x20
00001655: ADD
00001656: SWAP1
00001657: LOG3
00001658: POP
00001659: POP
0000165a: POP
0000165b: POP
0000165c: JUMP
0000165d: JUMPDEST
0000165e: PUSH1 0x20
00001660: DUP2
00001661: ADD
00001662: MLOAD
00001663: PUSH16 0xffffffffffffffffffffffffffffffff
00001674: AND
00001675: PUSH2 0x16c9
00001678: JUMPI
00001679: PUSH1 0x40
0000167b: MLOAD
0000167c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000169d: DUP2
0000169e: MSTORE
0000169f: PUSH1 0x04
000016a1: ADD
000016a2: DUP1
000016a3: DUP1
000016a4: PUSH1 0x20
000016a6: ADD
000016a7: DUP3
000016a8: DUP2
000016a9: SUB
000016aa: DUP3
000016ab: MSTORE
000016ac: PUSH1 0x3b
000016ae: DUP2
000016af: MSTORE
000016b0: PUSH1 0x20
000016b2: ADD
000016b3: DUP1
000016b4: PUSH2 0x18da
000016b7: PUSH1 0x3b
000016b9: SWAP2
000016ba: CODECOPY
000016bb: PUSH1 0x40
000016bd: ADD
000016be: SWAP2
000016bf: POP
000016c0: POP
000016c1: PUSH1 0x40
000016c3: MLOAD
000016c4: DUP1
000016c5: SWAP2
000016c6: SUB
000016c7: SWAP1
000016c8: REVERT
000016c9: JUMPDEST
000016ca: DUP1
000016cb: MLOAD
000016cc: PUSH1 0x06
000016ce: DUP1
000016cf: SLOAD
000016d0: PUSH1 0x20
000016d2: SWAP1
000016d3: SWAP4
000016d4: ADD
000016d5: MLOAD
000016d6: PUSH16 0xffffffffffffffffffffffffffffffff
000016e7: SWAP1
000016e8: DUP2
000016e9: AND
000016ea: PUSH17 0x0100000000000000000000000000000000
000016fc: MUL
000016fd: SWAP3
000016fe: DUP2
000016ff: AND
00001700: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00001721: SWAP1
00001722: SWAP5
00001723: AND
00001724: SWAP4
00001725: SWAP1
00001726: SWAP4
00001727: OR
00001728: SWAP1
00001729: SWAP3
0000172a: AND
0000172b: OR
0000172c: SWAP1
0000172d: SSTORE
0000172e: JUMP
0000172f: JUMPDEST
00001730: POP
00001731: POP
00001732: POP
00001733: JUMP
00001734: JUMPDEST
00001735: PUSH1 0x00
00001737: PUSH2 0x113e
0000173a: DUP4
0000173b: DUP4
0000173c: PUSH1 0x40
0000173e: MLOAD
0000173f: DUP1
00001740: PUSH1 0x40
00001742: ADD
00001743: PUSH1 0x40
00001745: MSTORE
00001746: DUP1
00001747: PUSH1 0x1e
00001749: DUP2
0000174a: MSTORE
0000174b: PUSH1 0x20
0000174d: ADD
0000174e: PUSH32 0x536166654d6174683a207375627472616374696f6e206f766572666c6f770000
0000176f: DUP2
00001770: MSTORE
00001771: POP
00001772: PUSH2 0x1019
00001775: JUMP
00001776: JUMPDEST
00001777: PUSH1 0x00
00001779: DUP2
0000177a: DUP4
0000177b: PUSH2 0x17df
0000177e: JUMPI
0000177f: PUSH1 0x40
00001781: MLOAD
00001782: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000017a3: DUP2
000017a4: MSTORE
000017a5: PUSH1 0x20
000017a7: PUSH1 0x04
000017a9: DUP3
000017aa: ADD
000017ab: DUP2
000017ac: DUP2
000017ad: MSTORE
000017ae: DUP4
000017af: MLOAD
000017b0: PUSH1 0x24
000017b2: DUP5
000017b3: ADD
000017b4: MSTORE
000017b5: DUP4
000017b6: MLOAD
000017b7: SWAP1
000017b8: SWAP3
000017b9: DUP4
000017ba: SWAP3
000017bb: PUSH1 0x44
000017bd: SWAP1
000017be: SWAP2
000017bf: ADD
000017c0: SWAP2
000017c1: SWAP1
000017c2: DUP6
000017c3: ADD
000017c4: SWAP1
000017c5: DUP1
000017c6: DUP4
000017c7: DUP4
000017c8: PUSH1 0x00
000017ca: DUP4
000017cb: ISZERO
000017cc: PUSH2 0x1087
000017cf: JUMPI
000017d0: DUP2
000017d1: DUP2
000017d2: ADD
000017d3: MLOAD
000017d4: DUP4
000017d5: DUP3
000017d6: ADD
000017d7: MSTORE
000017d8: PUSH1 0x20
000017da: ADD
000017db: PUSH2 0x106f
000017de: JUMP
000017df: JUMPDEST
000017e0: POP
000017e1: PUSH1 0x00
000017e3: DUP4
000017e4: DUP6
000017e5: DUP2
000017e6: PUSH2 0x17eb
000017e9: JUMPI
000017ea: INVALID
000017eb: JUMPDEST
000017ec: DIV
000017ed: SWAP6
000017ee: SWAP5
000017ef: POP
000017f0: POP
000017f1: POP
000017f2: POP
000017f3: POP
000017f4: JUMP
000017f5: JUMPDEST
000017f6: ADDRESS
000017f7: BALANCE
000017f8: LT
000017f9: ISZERO
000017fa: SWAP1
000017fb: JUMP
000017fc: INVALID
000017fd: GASLIMIT
000017fe: MSTORE
000017ff: NUMBER
00001800: ORIGIN
00001801: ADDRESS
00001802: GASPRICE
00001803: KECCAK256
00001804: PUSH21 0x72616e7366657220746f20746865207a65726f2061
0000181a: PUSH5 0x6472657373
00001820: GASLIMIT
00001821: MSTORE
00001822: NUMBER
00001823: ORIGIN
00001824: ADDRESS
00001825: GASPRICE
00001826: KECCAK256
00001827: PUSH3 0x75726e
0000182b: KECCAK256
0000182c: PUSH2 0x6d6f
0000182f: PUSH22 0x6e7420657863656564732062616c616e636545524332
00001846: ADDRESS
00001847: GASPRICE
00001848: KECCAK256
00001849: PUSH2 0x7070
0000184c: PUSH19 0x6f766520746f20746865207a65726f20616464
00001860: PUSH19 0x65737345524332303a207472616e7366657220
00001874: PUSH2 0x6d6f
00001877: PUSH22 0x6e7420657863656564732062616c616e636573797374
0000188e: PUSH6 0x6d206572726f
00001895: PUSH19 0x3a20696e73756666696369656e742062616c61
000018a9: PUSH15 0x63656f6e6c79206465706c6f796572
000018b9: KECCAK256
000018ba: PUSH10 0x7320616c6c6f77656420
000018c5: PUSH21 0x6f2063616c6c20746869732066756e6374696f6e73
000018db: PUSH26 0x7374656d206572726f723a207468652065786368616e67652072
000018f6: PUSH2 0x7465
000018f9: KECCAK256
000018fa: PUSH14 0x757374206265206e6f6e2d6e6567
00001909: PUSH2 0x7469
0000190c: PUSH23 0x65206e756d626572536166654d6174683a206d756c7469
00001924: PUSH17 0x6c69636174696f6e206f766572666c6f77
00001936: GASLIMIT
00001937: MSTORE
00001938: NUMBER
00001939: ORIGIN
0000193a: ADDRESS
0000193b: GASPRICE
0000193c: KECCAK256
0000193d: PUSH21 0x72616e7366657220616d6f756e7420657863656564
00001953: PUSH20 0x20616c6c6f77616e636545524332303a20627572
00001968: PUSH15 0x2066726f6d20746865207a65726f20
00001978: PUSH2 0x6464
0000197b: PUSH19 0x65737345524332303a207472616e7366657220
0000198f: PUSH7 0x726f6d20746865
00001997: KECCAK256
00001998: PUSH27 0x65726f206164647265737345524332303a20617070726f76652066
000019b4: PUSH19 0x6f6d20746865207a65726f2061646472657373
000019c8: GASLIMIT
000019c9: MSTORE
000019ca: NUMBER
000019cb: ORIGIN
000019cc: ADDRESS
000019cd: GASPRICE
000019ce: KECCAK256
000019cf: PUSH5 0x6563726561
000019d5: PUSH20 0x656420616c6c6f77616e63652062656c6f77207a
000019ea: PUSH6 0x726fa2646970
000019f1: PUSH7 0x73582212204d7f
000019f9: PUSH13 0x98e7947c587cb2cacbbd60112f
00001a07: UNKNOWN(0xF6)
00001a08: PUSH18 0xfeabdd34e2fe6aaa8e4e36045e5964736f6c
00001a1b: PUSH4 0x43000606
00001a20: STOP
00001a21: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xaa271e1a",
            "selector": "0xaa271e1a",
            "calldata_variants": [
                "0xaa271e1a",
                "0xaa271e1a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd62ed3e",
            "selector": "0xdd62ed3e",
            "calldata_variants": [
                "0xdd62ed3e",
                "0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf05fcdf2",
            "selector": "0xf05fcdf2",
            "calldata_variants": [
                "0xf05fcdf2",
                "0xf05fcdf20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa457c2d7",
            "selector": "0xa457c2d7",
            "calldata_variants": [
                "0xa457c2d7",
                "0xa457c2d70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa9059cbb",
            "selector": "0xa9059cbb",
            "calldata_variants": [
                "0xa9059cbb",
                "0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x903d8e77",
            "selector": "0x903d8e77",
            "calldata_variants": [
                "0x903d8e77",
                "0x903d8e770000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95d89b41",
            "selector": "0x95d89b41",
            "calldata_variants": [
                "0x95d89b41",
                "0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9975038c",
            "selector": "0x9975038c",
            "calldata_variants": [
                "0x9975038c",
                "0x9975038c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 6144,
            "type": "tx_origin_used"
        },
        {
            "pc": 6179,
            "type": "tx_origin_used"
        },
        {
            "pc": 6457,
            "type": "tx_origin_used"
        },
        {
            "pc": 6603,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3
call_targets: 0x2f6ca23fef6dea7c887bea5684bc1773e708b058
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x2f6ca23fef6dea7c887bea5684bc1773e708b058"
    ],
    "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": "0xaa271e1a",
            "selector": "0xaa271e1a",
            "calldata_variants": [
                "0xaa271e1a",
                "0xaa271e1a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd62ed3e",
            "selector": "0xdd62ed3e",
            "calldata_variants": [
                "0xdd62ed3e",
                "0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf05fcdf2",
            "selector": "0xf05fcdf2",
            "calldata_variants": [
                "0xf05fcdf2",
                "0xf05fcdf20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa457c2d7",
            "selector": "0xa457c2d7",
            "calldata_variants": [
                "0xa457c2d7",
                "0xa457c2d70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa9059cbb",
            "selector": "0xa9059cbb",
            "calldata_variants": [
                "0xa9059cbb",
                "0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x903d8e77",
            "selector": "0x903d8e77",
            "calldata_variants": [
                "0x903d8e77",
                "0x903d8e770000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95d89b41",
            "selector": "0x95d89b41",
            "calldata_variants": [
                "0x95d89b41",
                "0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9975038c",
            "selector": "0x9975038c",
            "calldata_variants": [
                "0x9975038c",
                "0x9975038c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5477,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [
        {
            "pc": 6144,
            "type": "tx_origin_used"
        },
        {
            "pc": 6179,
            "type": "tx_origin_used"
        },
        {
            "pc": 6457,
            "type": "tx_origin_used"
        },
        {
            "pc": 6603,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 1
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3
call_targets: 0x2f6ca23fef6dea7c887bea5684bc1773e708b058
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x2f6ca23fef6dea7c887bea5684bc1773e708b058"
    ],
    "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": "0xaa271e1a",
            "selector": "0xaa271e1a",
            "calldata_variants": [
                "0xaa271e1a",
                "0xaa271e1a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd62ed3e",
            "selector": "0xdd62ed3e",
            "calldata_variants": [
                "0xdd62ed3e",
                "0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf05fcdf2",
            "selector": "0xf05fcdf2",
            "calldata_variants": [
                "0xf05fcdf2",
                "0xf05fcdf20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa457c2d7",
            "selector": "0xa457c2d7",
            "calldata_variants": [
                "0xa457c2d7",
                "0xa457c2d70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa9059cbb",
            "selector": "0xa9059cbb",
            "calldata_variants": [
                "0xa9059cbb",
                "0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x903d8e77",
            "selector": "0x903d8e77",
            "calldata_variants": [
                "0x903d8e77",
                "0x903d8e770000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95d89b41",
            "selector": "0x95d89b41",
            "calldata_variants": [
                "0x95d89b41",
                "0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9975038c",
            "selector": "0x9975038c",
            "calldata_variants": [
                "0x9975038c",
                "0x9975038c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5477,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": [
        {
            "pc": 6144,
            "type": "tx_origin_used"
        },
        {
            "pc": 6179,
            "type": "tx_origin_used"
        },
        {
            "pc": 6457,
            "type": "tx_origin_used"
        },
        {
            "pc": 6603,
            "type": "tx_origin_used"
        }
    ]
}